本站小编为你精心准备了SCI体系对数据通信的作用参考范文,愿这些范文能点燃您思维的火花,激发您的写作灵感。欢迎深入阅读并收藏。
作者:姜震熊华钢邵定蓉单位:北京航空航天大学电子工程系
1、引言
IEEEStd1596-1992ScalableCoherentInterface(sci)可扩展一致性接口[1]是一种专门针对并行计算机系统设计的,可以提供千兆位互连带宽和微秒级通信延迟的高性能系统互连技术。它提供了一种硬件实现的分布式共享存储(DSM)的并行计算机结构,支持硬件的缓存一致性,主要应用于高性能并行计算机系统互连,高性能I/O等领域。
SCI技术来源于传统总线技术的固有限制,传统总线是一种共享介质的互连技术,随着系统中连接节点的增加,系统性能下降,而SCI提供节点之间单向、点到点的互连,支持灵活的拓扑:寄存器插入环、2DMesh、交换式互连等。任何一种互连方式都支持消息的并发传输,从而在一定规模内,系统的性能随网络中的节点数增多而增加,具有可扩展性。本文主要研究WindowsNT环境下实现SCI数据通信的方法,给出了SCI数据通信软件的设计。
2SCI协议概述
SCI协议包括三个层次:物理层、逻辑层和缓存一致层(可选)。物理层对SCI的链路规范、拓扑方式及网络接口等做出了规定;逻辑层主要定义了SCI的数据包格式、逻辑事务协议;缓存一致层针对并行计算的分布式共享存储模型提供硬件缓存一致性的支持,是SCI协议的可选部分。
SCI可以采用各种灵活的拓扑构成互连系统,支持多种链路形式,其中18-DE-500并行链路宽18位,采用差分信号传输,每条信号线提供500Mbps的带宽,其中16位用于数据传输,因此理论上可提供8Gbps的互连带宽。基本的拓扑是寄存器插入环,支持消息的并发传输,如图1所示。SCI节点在发送数据的同时仍然可以接收数据并进行处理,考虑SCI环中每个节点都向其下游节点发送消息,则图1中的4节点SCI环中可以存在四个独立的数据流,使系统吞吐量达到单条链路吞吐量的四倍。SCI网络传输的基本单位是符号(Symbol),每个符号长2个字节(Byte),SCI使用复杂的技术克服了总线技术/共享介质0的固有限制,但是对互连系统应用提供了类似总线的服务:读事务(ReadXX)、写事务(WriteXX)、移动事务(MoveXX)和锁定事务(Lock)等。为使通信较少受到传输距离的影响,SCI采用了分离事务协议,使CPU在发出/请求0后不必等待/响应0,可以立即进行其它操作。
SCI中每一个事务都由子操作(Subaction)组成,每个子操作包含两种消息的传输,如图1中虚线所示,以节点1向节点3发起的Read64事务为例:(1)节点1应用层发送请求发送(RequestSend)消息,向节点3请求读64字节的数据;(2)节点3的SCI接口自动返回请求回应(RequestEcho),说明请求发送消息收到;(3)节点3应用层发送响应发送(ResponseSend)消息,附带有节点1请求的64字节数据;(4)节点1的SCI接口自动发送响应回应(ResponseEcho)消息,表明收到节点3的消息,从而完成节点1向节点3发起的Read64事务。
3WindowsNT4.0环境下SCI设备驱动模型
SCI支持WindowsNT4.0,Windows2000,Solaris,Linux,VxWorks,HP-UX等主流操作系统,其中在WindowsNT4.0环境下的测试性能最好,WindowsNT4.0对硬件的访问做了严格的限制,系统设计者必须严格遵循驱动程序开发规范进行硬件驱动程序的开发和使用。目前商用SCI接口适配卡由挪威的Dolphin公司[2]提供,主要基于计算机I/O总线。采用Intel平台上PCI总线的SCI接口适配卡D330[2]构成的SCI通信系统的设备驱动模型如图2所示。D330SCI适配卡支持64位和32位的PCI总线,完成SCI构成的DSM系统与SCI节点机的接口功能,同时实现SCI协议规范。SCI采用64位地址,提供整个DSM系统的全局地址空间,其中前16位表示节点地址,各节点机PCI总线的64位或32位地址则映射至SCI全局地址的后48位,各节点机只要对该全局地址空间的某一地址操作,节点机之间的数据传递即可由SCI硬件自动实现。Pcisci.sys提供了SCI网络的底层驱动,完成PCI总线设备的访问功能,并且将PCI总线事务映射成为SCI网络事务,提供透明的SCI设备访问机制。Pcisci.sys中的IRM驱动函数提供SCI协议相关的功能驱动。D330适配卡的参数可以通过调用IRM驱动函数进行更改。一般情况下,系统设计者不应随意调用IRM驱动函数对D330内部参数进行更改。Sisci.sys提供了SCI网络的高层驱动,它屏蔽了SCI协议细节,为系统设计者提供了基于共享内存、DMA、远程中断等的数据通信接口,Sisci.sys在WindowsNT平台上以同步通信方式工作,异步通信可以结合多线程技术实现。
Sisciapi.lib为Win32应用程序提供了用户模式下的接口函数(SISCIAPI)[3,4],SISCIAPI既支持共享内存的编程模式也支持消息传递的编程模式。在建立了内存映射之后,应用程序利用指针就可以实现数据在各节点机之间的传递,体现了SCI支持共享内存的特点;利用DMA实现数据通信,应用程序必须负责数据传输的全部过程,这体现了SCI对传统的消息传递模式的支持。
SCI提供了基于共享内存和DMA的两种同步数据通信方式,通信采用面向连接的方式,利用中断实现通信双方节点的事件通知,下面的讨论中我们称发送数据的节点为Client,接收数据的节点为Server。
3.1共享内存方式
共享内存是一种针对小规模数据传输的Programm-bleI/O(PIO)通信方式,SCI使用段(Segment)的概念将本地内存映射成本地段localsegmentt,将远端内存映射成远程段remotesegmentt,Server建立localsegmentt类型的变量使得本地内存可以为其它节点访问;Client建立remotesegmentt类型的变量使得访问其它节点上的内存资源成为可能。通信双方将各自的本地内存映射到SCI全局地址空间之后,依靠设定的内存标志完成数据通信。在图3中,Client节点和Server节点分别声明localsegmentt的变量localsegC和localsegS,利用这两个变量建立本地内存在SCI全局地址空间的内存映像,然后Client节点声明remotesegmentt的变量remotesegS用于连接Server节点在SCI全局地址空间的内存段,从而建立了各个节点在SCI全局地址空间中的内存映射关系。Server节点使用SCICreateSegment()申请本地内存,创建localsegS,指定该段标志8,然后调用SCIMapLo-calSegment()返回本地指针供Server节点中的进程访问,调用SCIPrepareSegment()将申请到本地内存的localsegS映射到SCI全局地址空间;SCISetSegmentAvailable()则使该localsegS为SCI网络中的所有节点机可见。
Client节点设定本地段localsegC的过程同上,欲完成向Server节点发送数据,Client节点必须调用SCI-ConnectSegment()与Server节点建立连接,将Server本地内存在全局地址空间中的映像映射到remotesegS,然后利用SCIMapRemoteSegment()返回属于Client进程的本地指针供访问Server节点时使用,连接建立之后就可以使用返回的内存指针或SCIMemCopy(本地指针,remotesegS)函数进行数据传输了。
3.2DMA方式
当进行大量的数据传输时,DMA数据传输方式可以充分利用带宽资源提高吞吐量。由于采用DMA方式时,存在DMA队列的建立、管理等通信开销,所以与共享内存方式相比,DMA方式的通信延迟略有增加。使用DMA方式,应用程序要创建DMA队列,将数据放入DMA队列,启动DMA队列,查询DMA队列的状态等,应用程序必须负责数据传送的整个过程。DMA方式的通信仍然建立在段(Segment)概念的基础之上,在编程方面与共享内存方式的区别主要体现在Client节点,具体过程如下:
(1)创建本地段,SCICreateSegment(&localsegC);(2)映射本地段,返回本地数据指针(void*)SCIMapLocalSegment(&localmapC);
(3)将本地段映射至SCI全局地址空间,SCIPrepare-Segment(localsegC);
(4)创建DMA队列,SCICreateDMAQueue(&dmaqueue);(5)连接Server节点本地段,SCIConnectSegment(&remotesegS);
(6)利用本地数据指针完成本地数据载入;
(7)将数据发送到DMA队列,SCIEnqueueDMATransfer(dmaqueue,localsegC,remotesegS);
(8)启动DMA传输,SCIPostDMAQueue(dmaqueue);
(9)等待DMA传输完毕,SCIWaitForDMAQueue(dmaqueue);
(10)确认DMA传输正常完成,SCIDMAQueueState(dmaqueue);
(11)删除DMA队列,SCIRemoveDMAQueue(dmaqueue)。从上述过程可见,DMA方式适合较大量数据的传输,而不适合少量数据的传输,否则不能充分利用DMA方式具有的一次传送大量数据的优点。
3.3中断方式
要完成通信双方的数据传递,通信过程中必须进行协调,SCI提供了中断方式专门用于实现SCI节点间的事件通知。与上述两种数据方式相同,中断分为本地中断(localinterruptt)和远程中断(remoteinterruptt)。远程中断是Server节点;本地中断在Client节点的映像。中断也是面向连接的,使用前必须建立连接;不同的是,中断方式并不传送任何数据,它只是作为事先定义好的某种事件(利用中断标志)的通知手段,使用中断完成通信协调的过程如图4所示。
4SCI数据通信软件的设计
上面我们详细讨论了SCI数据通信的几种方法,最后结合我们开发的SCI通信延迟测试系统的负载注入软件,说明SCI数据通信软件的设计过程。SCI负载注入软件是根据各个节点的通信表文件,向SCI网络中注入数据流,设定网络负载,同时配合网络端端延迟测试仪测定特点消息的传输延迟,从而实现对SCI网络通信性能细节的把握。通信表指定了数据流源节点、目的节点、长度以及更新速率等参数。
测试系统要求在四个SCI节点之间根据通信表的设定发送和接收数据流,我们的软件设计采用共享内存的发送方式,利用多线程技术,配合SCI的中断完成数据的接收。为了降低通信开销,在程序的开始,首先建立四个节点之间的单向网状虚拟数据通道(即两两节点之间建立内存段与中断的映射关系),然后利用虚拟数据通道完成消息流的发送和接收,实际测试表明软件运行正常。软件发送消息和接收消息的处理流程如图5所示。
综上所述,由于SCI目前只提供了同步通信方式的支持,实际应用中,可以利用WindowsNT的多线程技术结合SCI的中断方式实现异步通信:针对各个节点建立监听线程,线程中等待相应节点的中断事件的发生,如果Client节点触发中断,则说明对应的消息已经发送到Server节点的本地内存。对于具有多个节点的数据通信软件,应该事先建立各个节点的虚拟数据通道:在软件初始化阶段,建立本地内存段和远程内存段、本地中断和远程中断之间的连接关系。