直接内存通信技术论文

直接内存通信技术论文

1直接内存通信技术DMC

1.1DMC技术思想

现有的网卡通信是把网卡作为计算机的一个设备来进行操作的,用户先要把数据从内存送到网卡设备里,网卡才能把数据发送出去,接收数据时则需要把数据先接收到网卡设备的存储空间中,然后再把数据拷贝至内存中。这种实现方式避免不了网卡设备和内存之间的数据拷贝,并且网卡作为一种设备通信活动也受到相应总线接口如PCI总线接口的限制。DMC技术是把网卡作为一块特殊的内存,插在物理地址最高内存区的内存插槽中,使得网卡和主机之间的数据交换如同主机访问内存一样,主机的网络通信活动与读写内存一样,这就避免了原有的通信过程中网卡设备和内存之间的数据传输,因此把这种通信机制称为直接内存通信(DirectMemoryConnection,DMC),并且把基于DMC技术实现的网络适配器称为DMC网卡。DMC通信机制可以应用于多种网络环境中,下面以高速光纤通道交换网作为应用环境,对DMC通信机制技术细节进行介绍。DMC技术的详细过程描述如下:首先,把网卡作为一块特殊的内存插入最高内存区的内存插槽中,修改操作系统对内存的最高物理地址区部分空间,即DMC网卡上的部分存储空间进行注册预留,将其作为CPU和网卡共享的通信专用区,只允许与网络通信活动相关的用户读写,其他系统进程无权访问。我们把通信专用区按照以下4种用途进行分配:接收缓冲区、发送缓冲区、网卡命令区以及网卡状态区。然后,根据相应的通信协议如FC协议进行网络通信活动,通过访问通信专用区,控制具有通信控制逻辑、并串转换/串并转换器和光收发器等部件的DMC网卡,进行计算机之间的点对点直接内存通信。

1.2DMC通信活动描述

DMC通信机制中主要通信活动描述如下:(1)发送数据:通信源节点发送数据时,只需用户使用写普通内存的方法将数据写入通信专用区的发送缓冲区中,同时把发送命令写入通信专用区的网卡命令区。DMC网卡上的通信控制逻辑根据网卡命令区的命令解析结果,从通信专用区的发送缓冲区中取出数据发送至网络;(2)接收数据:在DMC通信机制的应用环境下,通信目的节点配置有相同的DMC网卡,网络上的数据经网卡的通信逻辑接收后放入通信专用区的接收缓冲区,同时网卡控制逻辑修改通信专用区中的网卡状态信息。当用户需要获得网络数据时,只需使用访问普通内存的方法读通信专用区的接收缓冲区数据即可。因此,DMC通信机制实现了两台计算机内存之间的直接通信。用户感觉不到DMC网卡的存在,使用访问普通内存的方法就可以实现计算机间的点对点直接通信。

1.3DMC通信机制的体系结构

在直接内存通信体系结构中,DMC网卡和内存处于对等的位置,对CPU是透明的,CPU使用操作普通内存的方法操作DMC网卡的通信专用区,用户通过对DMC网卡的通信专用区进行读写来完成网络通信活动。因此,DMC通信机制避免了数据在网卡设备和内存之间的拷贝,并且通信速率也不再受传统I/O总线的限制。

2DMC网卡原型机———FIFO-DMC网卡研究

2.1FIFO-DMC网卡的体系结构

基于直接内存通信技术DMC以及FPGA片上的存储区域FIFO(FirstInputFirstOutput,FIFO)和寄存器,作者设计了DMC技术,并将其应用于高速光纤通道交换网的原理样机FIFO-DMC网卡。该网卡是在DIMMDDR内存总线规范上扩展实现的。(1)光纤用于连接FIFO-DMC网卡和高速光纤交换网络的对应端口。(2)光收发器负责进行光信号与差分电信号之间的转换。(1)电收发器用于数据的串/并转换。(4)FPGA可编程器件从功能上可以分为两大部分:DDR-DIMM内存总线接口逻辑和通信逻辑,其中DDR-DIMM内存总线接口逻辑包括5个模块,分别为SPD模块、命令解析逻辑、时钟管理逻辑、地址控制逻辑、读写控制逻辑,用以完成网卡的通信逻辑以及网络用户和通信专用区之间的信息交互。通信逻辑包括发送逻辑、CRC校验逻辑、接收逻辑、控制逻辑、8B/10B编码逻辑与8B/10B解码逻辑5个模块,用以实现真正的网络传输活动。

2.2FIFO-DMC网卡的主要功能模块

下面对FIFO-DMC网卡中的主要功能模块进行简要介绍。

(1)FIFO-DMC网卡的通信专用区

按照DMC通信机制的要求,FIFO-DMC网卡的通信专用区按用途分为4块:接收缓冲区、发送缓冲区、网卡命令区以及网卡状态区。接收缓冲区和发送缓冲区采用FPGA片上FIFO实现,数据接收FIFO命名为RxFIFO,用来存放网卡接受逻辑从网上接收的数据,用户使用读普通内存的方法就可获取。数据发送FIFO命名为TxFIFO,用来存放用户待发送的数据,用户使用写普通内存的方法把数据放入发送FIFO中,而后网卡的发送逻辑读取FIFO的内容进行传输。数据接收FIFO和数据发送FIFO的容量都为一帧数据的大小。网卡命令区和网卡状态区采用FPGA片上64位寄存器实现,网卡命令区即网卡命令寄存器COMMAND_REG存放用户发出的网卡命令。网卡状态区即网卡状态寄存器STATE_REG存放网卡的各种状态信息。DMC软件或网卡通信逻辑在对网卡进行操作前,读取COMMAND_REG和STATE_REG的内容,判断相应位,再根据结果执行相应动作来防止冲突。寄存器中各位置“1”表示有效,在系统初始化时全部清零。

(2)SPD模块

SPD模块使设计出的FIFO-DMC网卡设备保持与普通内存相同的稳定性,能够正确地被北桥芯片或者CPU芯片中的存储管理器识别。在FIFO-DMC网卡中使用VHDL语言编程模拟SPD芯片的工作。通过分析,FIFO-DMC网卡的SPD模块只需使用SPD芯片的5个引脚:SA0、SA1、SA2、SDA和SCL,并且BIOS对SPD模块只执行读操作(RandomAddressRead),所以SPD模块的结构比较简单,主要包括START状态控制以及Ran-domAddressRead命令响应两个功能模块。其中,START状态的控制逻辑比较简单,主要依靠作为从设备的SPD模块监听串行数据线(SDA)和串行时钟线(SCL)来产生,此处不再赘述。RandomAddressRead命令的响应由一个状态机来实现,在不同的状态完成相应的工作。

(3)命令解析逻辑

命令解析逻辑主要接收来自DDR-DIMM内存总线接口的各种内存访问命令,并对命令进行解析。FIFO-DMC网卡的命令解析逻辑由一个状态机控制,状态转移时设置特定的信号,由该信号触发相应的读、写逻辑。

(4)地址解析逻辑

此模块在内存访问命令到来时,控制地址总线上的行地址和列地址等信息进行地址译码工作,寻址被访问的存储单元,使得各种数据信息能够在网络用户、网卡的通信逻辑和内存之间正确地完成读写工作,协助FPGA中控制逻辑实现网卡的通信活动。由于FIFO-DMC网卡中使用了FPGA芯片上的FIFO和寄存器来模拟通信专用区,因此用户操作通信专用区时只有4个地址信息:TxFIFO写端口对应的虚拟地址,RxFIFO读端口对应的虚拟地址,命令寄存器COMMAND_REG对应的虚拟地址以及网卡状态寄存器STATE_REG对应的虚拟地址。地址解析逻辑根据用户访问的虚拟地址信息定位到通信专用区的某个部分即可。

(5)读写控制逻辑

根据地址解析逻辑寻址出的通信专用区空间以及命令解析逻辑解析的结果,对FPGA的寄存器或者FIFO进行读写操作。外部与通信专用区之间传输的数据信息主要有3类,分别是通信活动中的数据、用户写入网卡命令区的网卡命令以及网卡的状态信息。

2.3FIFO-DMC网卡的软件实现

直接内存通信技术DMC得以实现的重要根基是预留部分内存空间供DMC通信机制进程专用,这依赖于Linux操作系统提供的灵活机制。因此,DMC网卡的软件功能包括:

(1)实现通信专用区的物理内存预留

依据Linux操作系统对内存的管理办法,将FIFO-DMC网卡插入内存插槽的高端,使其存储空间即通信专用区处于内存区的物理地址最高端。然后,我们借助于Linux内核启动时能接收某些命令行选项或启动时参数的特性,修改系统引导程序中的启动配置参数mem,限定内核使用的内存数量。实际物理内存中大于mem值的部分就是预留的内存空间,系统不会使用这片物理内存。

(2)实现通信专用区内存的映射

由于Linux操作系统是一个虚拟内存系统,访问内存是基于虚拟地址空间的,因此为了能够使用被预留的通信专用区空间,需要把这部分物理内存正确映射到虚拟内存空间中。Linux操作系统提供了至少3种实现内存映射的方法,可以在系统不同时刻将通信专用区映射为I/O内存、内核空间内存或普通用户空间,考虑到DMC技术中通信专用区需要在用户态下进行访问,作者最终选择使用mmap设备操作方法来实现通信专用区的内存映射。并且,由于在FIFO-DMC网卡的设计中使用FPGA片上FIFO和寄存器模拟实现通信专用区,因此DMC软件实现对通信专用区映射之后,只需要网卡命令寄存器、网卡状态寄存器、数据发送FIFO的写端口和数据接收FIFO的读端口4个虚拟地址。

(3)实现用户对通信专用区的访问接口

由于FIFO-DMC网卡硬件逻辑中提供了将通信专用区作为普通内存管理和访问的功能,因此用户可以使用访问普通内存的方法访问通信专用区。

2.4FIFO-DMC网卡的功能验证测试

2.4.1FIFO-DMC网卡的运行测试平台

FIFO-DMC网卡的测试平台采用PC机,CPU为Intel(R)Pentium(R)4,北桥芯片为Intel的RG82865PESL722。FPGA采用ALTERA公司Cyclone的EP1C4芯片,串/并转换使用德州仪器的tlk2501,光电转换则选用美国Finisar公司的产品FTRJ8519。示波器为Tektronix的TDS3052。为了降低调试的难度,通过BIOS设置,将内存时钟频率200MHz改为100MHz。

2.4.2FIFO-DMC网卡的运行测试结果。

经测试,FIFO-DMC网卡能在开机的BIOS自检中被识别为内存设备,正确响应CPU的读写命令,并能在操作系统引导时预留共享存储区,证明了直接内存通信DMC通信机制是正确的和可行的。

3结束语

本文提出的直接内存通信技术DMC把通信网卡作为一块特殊的内存插在内存插槽中,用户通过内存访问操作实现计算机之间的直接通信,使得计算机的网络通信活动不受PCI等传统I/O总线接口的限制。相比基于传统I/O总线的网络通信方式,基于DMC技术的通信机制中数据无需在网卡设备和内存之间进行拷贝,并且网络通信性能不再受传统总线接口的限制,通信速度更高,传输延迟更小,通信手段更简单。在后续工作中,笔者将继续研究内存管理方法和Linux操作系统细节,在保证DMC网卡的工作稳定性和通信性能不受影响的前提下,增加DMC技术的实用性、操作简便性以及可推广性。

作者:陈颖图 王爱林 张炎 刘君瑞 单位:中航一集团第六三一研究所 西北工业大学计算机学院