CN1633130A - 基于硬件支持的虚拟接口结构用户层网络通信系统 - Google Patents

基于硬件支持的虚拟接口结构用户层网络通信系统 Download PDF

Info

Publication number
CN1633130A
CN1633130A CN 200510002117 CN200510002117A CN1633130A CN 1633130 A CN1633130 A CN 1633130A CN 200510002117 CN200510002117 CN 200510002117 CN 200510002117 A CN200510002117 A CN 200510002117A CN 1633130 A CN1633130 A CN 1633130A
Authority
CN
China
Prior art keywords
module
data
network
nic
communication
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN 200510002117
Other languages
English (en)
Other versions
CN100438524C (zh
Inventor
唐瑞春
都志辉
马群生
朱子玉
杨丰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tsinghua University
Original Assignee
Tsinghua University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tsinghua University filed Critical Tsinghua University
Priority to CNB2005100021174A priority Critical patent/CN100438524C/zh
Publication of CN1633130A publication Critical patent/CN1633130A/zh
Application granted granted Critical
Publication of CN100438524C publication Critical patent/CN100438524C/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Data Exchanges In Wide-Area Networks (AREA)
  • Computer And Data Communications (AREA)

Abstract

本发明涉及基于硬件支持的虚拟接口结构用户层网络通信系统,属于用户层网络与虚拟接口结构协议的应用技术领域,本系统包括安装在多台计算机主机中的网络接口卡,该网络接口卡通过PCI总线与主机进行交互,以及连接各网络接口卡的交叉开关,该网络接口卡与交叉开关相互通过物理链路连接成一个通信网络拓扑结构;还包括设置在各台主机中由用户代理模块和核心代理模块构成的实现VIA协议规定的功能的通信接口单元和驱动各网络接口卡完成具体通讯功能的驱动模块。本发明可以解决VIA硬件和软件系统的优化组合与匹配,以及为VIA完善和广泛应用提供基础的问题。实现可移植、低延迟、高带宽、高可靠的通信平台。

Description

基于硬件支持的虚拟接口结构用户层网络通信系统
技术领域
本发明属于用户层网络与虚拟接口结构协议的应用技术领域,特别涉及基于虚拟接口结构的千兆网络通信系统的实现技术。
背景技术
用户层网络(User Level Network-ULN)是相对于传统的通信关键路径必须经过操作系统的核心层网络(Kernel Level Network-KLN)而提出的。随着通信网络硬件性能的迅速提高(通信带宽从十兆、百兆乃至现在的千兆、万兆网;网络通信的可靠性也大幅度提高),传统的核心层网络虽然可以对长消息型应用问题在一定程度上利用不断增长的硬件网络通信带宽,但是对于大量的短消息型应用问题,其性能提高并不明显。由于这类问题主要对通信延迟十分敏感,而核心层网络无法降低在通信开销中相对比例越来越大的软件部分的开销,软件开销甚至成为通信延迟的主要组成部分,致使网络硬件的通信性能不能得到充分发挥,直接影响了高速通信系统与网络的性能。而用户层网络在通信的关键路径上避免了操作系统的介入,使上层的应用程序可以直接访问高效的通信硬件资源,充分利用迅速增长的通信硬件的性能,精简通信协议,大幅度降低通信的软件开销,为上层应用直接提供低延迟、高带宽、高可靠的通信支持。
已有的用户层网络研究成果表明,利用用户层网络可以以很低的成本快速研制出超级计算机与超级服务器,提供高效的通信支持,用户层网络技术有助于打破通信与输入输出(Input/Output-I/O)瓶颈,提高服务器系统对大容量事务处理问题的解决能力,对相关领域的研究也有重要的促进作用和参考价值。由于用户层网络对于提高SAN(System/Storage/Server Area Network)计算和应用具有不可替代的作用,因此用户层网络的研究不仅对学术界有重要的影响,而且吸引了工业界的加盟。在Intel,Compaq,Microsoft的积极推动下,在数百家来自学术界和工业界研究团体与个人的共同努力下,于1997年12月推出了用户层网络协议的工业标准虚拟接口结构协议(Virtual Interface Architecture-VIA)。
VIA协议以虚拟接口(Virtual Interface,VI)为基本单元,为用户提供面向连接的、受保护的通信,而且具有流控、差错检测与纠正以及避免死锁等机制,保证消息的有序发送与可靠传递。VIA协议是一个开放的、可扩展的、独立于具体平台与实现、具有良好移植性的用户层网络协议标准,它的提出,可以深化用户层网络的研究并扩大其应用范围,是目前用户层网络研究的核心内容。
自从VIA协议提出以后,许多学者和研究单位对它的不同侧面进行了研究,例如关于扩展性问题、关于演化问题,以及如何充分利用其性能等等,这些研究推动了以VIA协议为代表的用户层网络技术的发展。另一方面,基于VIA协议的应用已广泛展开,比如基于VIA协议实现对消息传递通信标准(Message Passing Interface-MPI)的支持、对通信套接字(Socket)应用的支持,对数据库应用的支持,对因特网服务器的支持等等。借助于VIA协议,在不同程度上都提高了这些应用或者系统的性能。
目前已经有了不少实现VIA协议的具体应用,概括起来一共有三种:第一种是以软件模拟的方法来支持VIA协议通信,具有代表性的是美国国家能源科学计算中心(National Energy Research Scientific Computing-NERSC)的M-VIA(Modular VIA)项目,它通过软件模拟的方法,提供对VIA协议通信接口的支持,测试结果表明,即使没有特殊硬件的支持,软件模拟VIA协议通信机制也比核心层网络通信机制的效率有较大提高。M-VIA虽然还不是真正支持VIA协议的系统,但是它对于加深对VIA协议的研究,推广VIA协议通信模式有重要的意义。
第二种是通过固件模拟的方法来支持VIA协议通信,和第一种相比,固件实现在性能上较软件实现有了很大的提高,而且更接近于真正的VIA协议通信。具有代表性的是伯克利(Berkeley)大学的B-VIA项目,它通过对Myrinet网卡上的LANai芯片进行编程,实现对VIA协议的支持。但是由于网卡芯片性能有限,因此一般在功能划分上尽量不让网卡承担过多的任务,以避免网卡负担过重导致对通信性能的影响,这就不得不在一定程度上加重主机的负担,增加软件通信部分的开销。目前国外在虚拟接口结构方面的研究大多使用这种方法。
第三种是网卡硬件直接支持的VIA协议通信。通过硬件门铃机制以加快消息的响应时间,硬件实现虚拟到物理地址的转换和通过网卡对主机内存的直接内存读写(Direct Memory Access-DMA)操作以加快消息的传输速率,硬件自动实现避免通信死锁,流控与错误重传机制,计算与通信的重叠等等,这是实现VIA协议最终期待的方法。目前只有很少的研究机构有能力实现。
总之,用户层网络与VIA协议的研究处于快速发展的阶段,但还存在下列问题:
(1)研究用户层网络协议的应用技术大多只是着重于特定的一个或者几个方面,没有将软件、硬件以及协议实现进行整体的优化组合与匹配,即没有以系统论的观点来进行统一考虑,因此难免顾此失彼。
(2)VIA协议的实现模型还主要停留在软件和固件模拟的层次上。VIA协议是一个基于硬件支持的标准与规范,基于模拟的方法无法开发通信硬件的全部性能,硬件支持是虚拟接口结构的基本核心技术,但是由于其研究和实现技术难度大,目前开展这方面研究的机构和组织却非常少。
(3)大量非标准化的用户层网络协议研究与标准化的VIA协议研究同时存在,不利于高效的用户层通信模式的推广与普及,其原因在于VIA协议还有一些基础性的关键技术没有得到圆满解决(比如软硬件功能的划分模型与算法,大规模扩展性问题,完善功能与性能下降的矛盾,对高层通信的有效支持模型等等),致使出现了一些针对特定领域的非标准的实现用户层网络协议的应用。
(4)由于VIA协议是一个相对底层的通信协议,不利于也不方便高层用户的直接使用,因此如何用VIA协议支持已有的已被广泛接受的高层通信协议与系统,是VIA协议面临的另外一个重要问题,而该问题的解决是以VIA协议自身的完善和提高为基础的。
发明内容
本发明的目的是为克服已有技术的不足之处,提出一种能够直接以硬件支持VIA通讯协议的千兆网络通信系统,以解决VIA硬件和软件系统的优化组合与匹配,以及为VIA完善和广泛应用提供基础的问题。实现可移植、低延迟、高带宽、高可靠的通信平台。
本发明提出的基于硬件支持的虚拟接口结构用户层网络通信系统,包括多台具有Linux操作系统的计算机主机(HOST),安装在该主机中的网络接口卡(NetworkCard-NC,下简称网卡),该网络接口卡通过PCI总线与主机进行交互,以及连接各网络接口卡的交叉开关(Switch-SW),该网络接口卡与交叉开关相互通过物理链路连接成一个通信网络拓扑结构;还包括设置在各台主机中由用户代理模块(User Agent-UA,在VIA协议中称为VI Programming Library-VIPL)和核心代理模块(KernelAgent-KA,在VIA协议中称为VI Protocol Kernel-VIPK)构成的实现VIA协议规定的功能的通信接口单元和驱动各网络接口卡完成具体通讯功能的驱动模块(Driver)。
上述的每台交叉开关可以同时连接多块网络接口卡,而且交叉开关之间也可以进行连接,从而形成更加复杂的网络拓扑结构。
上述交叉开关主要可由一块主卡和多块子卡构成。主卡实现交叉开关的数据通路和路由与仲裁功能。子卡主要由发送器、接收器(同时也是物理链路的组成部分)以及数据先入先出(FIFO)缓冲器件组成。每块子卡提供一个对外的连接端口,这些端口通过子卡和主卡以全连通的方式连接在一起。这些端口既可以连接安装在主机中网络接口卡,也可以做为级连端口连接另外的交叉开关。
上述网卡可为支持VIA功能的虚拟接口网络接口卡(Virtual Interface NetworkInterface Card,VI-NIC),在Linux系统中既作为网络设备又作为字符设备,分别由驱动模块和核心代理模块管理;它由控制芯片及其外围I/O电路构成;该控制芯片包括以PCI总线主控方式的PCI总线主控器,用于一次总线地址周期之后连续多个总线数据周期与主机的主存储器交换数据;与交叉开关构成数据链路的网络控制逻辑模块,用于进行数据传输和链路管理操作;硬件校验逻辑模块,提供命令控制字的奇偶校验,同时提供数据的循环冗余码校验(CRC);采用计数器方式的VI门铃寄存器模块,用于查出当前队列中等待处理的队列项;可编程软件接口模块,用于写入网卡初始化控制字和系统分配的网络接收缓冲区指针,在中断发生的时候,读出中断状态;该PCI总线控制器模块和硬件校验逻辑模块处于外围,并连接内部的网络控制逻辑模块以及可编程软件接口模块,操作VI门铃寄存器模块。
所述的网卡的外围I/O电路包括以下功能模块:
(1)LVDS发送器和接收器模块:本模块同时也是物理链路的组成部分,提供LVDS链路信号的发送和接收功能。
(2)数据FIFO缓存器模块:FIFO缓存位于LVDS接收器后端,用于缓存数据和时钟匹配。采用FIFO作为数据缓存,总线可以随时提取数据,不必等待缓冲区填满。FIFO的队列入口和出口采用不同的时钟,可以匹配发送方和接收方的时钟差异。
(3)可编程EEPROM存储模块:采用可重复写入的EEPROM技术,存储本网卡的控制程序,控制本网卡的控制芯片和外围I/O电路进行数据通讯。如果需要修改相关的功能,只需将本模块重新写入就可以了。
所述的用户代理模块,核心代理模块及驱动模块三部分是依据VIA协议标准的通信流程由一系列的文件形式实现的模块,其中该用户代理模块为上层应用程序提供应用程序接口,并以静态库文件的形式在应用程序编译时进行链接;该核心代理模块为主机Linux操作系统的一种内核模块,并注册为网卡的字符设备访问入口,截获用户程序对该字符设备的访问,分别实现IOCTL功能的不同命令以提供给该用户代理模块进行调用;该驱动模块为主机中的Linux操作系统中的一种驱动模块,它将网卡注册于主机的操作系统的全局网络设备表,并由操作系统的网络子系统分配设备名,作为网络设备的访问入口;该驱动模块对TCP/IP协议提供支持,实现Linux系统核心定义的以太网卡操作接口。
本发明的特点及技术效果
本发明的这种能够直接以硬件支持VIA通讯协议的千兆网络通信系统,可以解决VIA硬件和软件系统的优化组合与匹配,以及为VIA完善和广泛应用提供基础的问题。实现可移植、低延迟、高带宽、高可靠的通信平台。
本通信系统目前已经做到了对2.2和2.4版本的Linux内核的支持。
附图说明
图1为本发明的系统总体结构框图。
图2为本发明中的数据单位TCU的结构框图
图3为本发明的软件模块结构框图。
图4为本发明的数据传输通路结构框图
图5为本发明实现数据通信的工作流程框图。
图6为本发明的小数据量延迟测试结果图
图7为本发明的大数据量带宽测试结果图
图8为本发明的网卡使用的FPGA主芯片的内部功能结构框图
图9为本发明的交叉开关功能结构框图
具体实施方式
本发明提出的基于硬件支持的虚拟接口结构用户层网络通信系统结合附图及实施例进一步说明如下:
本发明提出的基于硬件支持的虚拟接口结构用户层网络通信系统,包括多台具有Linux操作系统的计算机主机(HOST),安装在该主机计算机主机(HOST)中的网络接口卡(Network Card-NC),该网络接口卡通过PCI总线与主机进行交互,以及连接各网络接口卡的交叉开关(Switch-SW),该网络接口卡与交叉开关相互通过物理链路连接成一个通信网络拓扑结构;还包括设置在各台主机中由用户代理模块(User Agent-UA,在VIA协议中称为VI Programming Library-VIPL)和核心代理模块(Kernel Agent-KA,在VIA协议中称为VI Protocol Kernel-VIPK)构成的实现VIA协议规定的功能的通信接口单元和驱动各网络接口卡完成具体通讯功能的驱动模块(Driver)。
上述的每台交叉开关可以同时连接多块网络接口卡,而且交叉开关之间也可以进行连接,从而形成更加复杂的网络拓扑结构。这样由交叉开关通过物理链路连接安装在主机中的网络接口卡,组成各种不同的网络拓扑结构,形成网络硬件平台,如图1所示。
上述硬件平台各部件的组成及功能分别说明如下:
交叉开关
本发明的交叉开关主要由一块主卡和十块子卡构成。主卡的主控芯片采用ALTERA公司第三代现场可编程门阵列(FPGA)中的APEX20K系列的EP20K300EBC652-1芯片,具有30万等效门,实现交叉开关的数据通路和路由与仲裁功能。子卡主要由发送器、接收器(同时也是物理链路的组成部分),以及数据先入先出(FIFO)缓冲器件组成。每块子卡提供一个对外的连接端口,这些端口通过子卡和主卡以全连通的方式连接在一起。这样本交叉开关共具有10个全互连的对外端口,这些端口既可以连接安装在主机中网络接口卡,也可以做为级连端口连接另外的交叉开关。多个交叉开关组合可以构成多种方式的拓扑结构,如环形、二维网格、立方体、超立方体等。本交叉开关的工作频率是66MHz,每个端口的带宽为32bit,10个端口的双向带宽达到42.24Gbps。
物理链路
本发明的物理链路采用低电压差分信号传输(Low Voltage Differential Signaling,LVDS)技术进行驱动与传输。LVDS技术具有传输速率高(一对物理连线可高达800Mbps),抗共模干扰能力强等特点。LVDS收发器采用国家半导体(NationalSemiconductor,NS)公司的Channel Link系列产品,型号为DS90CR483/DS90CR484。接插件方面,采用50芯的LVDS专用插件以及50芯LVDS专用插头与电缆,能够提供18对LVDS引线,双向并行54位传输,长度最长可达到10米。
主机网络接口卡
本发明的主机网络接口卡(简称本网卡)根据VIA协议的相关定义,属于支持VIA功能的虚拟接口网络接口卡(Virtual Interface Network Interface Card,VI-NIC),在Linux系统中既作为网络设备又作为字符设备,分别由驱动模块和核心代理模块管理;它由控制芯片及其外围I/O电路构成,该两部分的具体组成及功能分别说明如下:
外围I/O电路包括以下功能模块:
(1)LVDS发送器和接收器模块:本模块采用国家半导体(National Semiconductor,NS)公司的Channel Link系列产品,型号分别为DS90CR483和DS90CR484。本模块同时也是物理链路的组成部分,提供LVDS链路信号的发送和接收功能。
(2)数据FIFO缓存器模块:FIFO缓存位于LVDS接收器后端,用于缓存数据和时钟匹配。采用FIFO作为数据缓存,总线可以随时提取数据,不必等待缓冲区填满。FIFO的队列入口和出口采用不同的时钟,可以匹配发送方和接收方的时钟差异。
(3)可编程EEPROM存储模块:采用可重复写入的EEPROM技术,存储本网卡的控制程序,控制本网卡的控制芯片和外围I/O电路进行数据通讯。如果需要修改相关的功能,只需将本模块重新写入就可以了。
本网络接口卡的控制芯片,采用ALTERA公司的EPF10K30AQC240-1芯片,具有3万等效门。它包含了几下功能模块:
(1)PCI总线主控器:以PCI总线主控方式(Bus Master)工作,频率66MHz,带宽32bit,兼容33MHz/32bit工作方式。支持总线突发(Burst)访问方式,即一次总线地址周期之后连续多个总线数据周期与主机存储器交换数据。
(2)网络控制逻辑模块:与交叉开关构成数据链路,进行数据传输和链路管理等操作。链路管理使用自定义的“命令式控制字”链路协议。命令控制字可以形成多种协议命令,进行链路的建立、拆除,数据的传输、重置等操作。命令控制字的传输有奇偶校验、接收回应和超时控制机制的配合,能够完全避免链路的死锁。链路协议只有交叉开关和网卡的硬件逻辑是可见的。
(3)硬件校验逻辑模块:提供命令控制字的奇偶校验,同时提供数据的CRC校验,采用标准的CRC-32多项式发生器逻辑。CRC的编码生成和解码校验是网卡在数据发送和接收过程中实时进行的。
(4)VI门铃寄存器模块:这里实现的门铃修改并简化了VIA规范中的门铃示例,采用计数器方式。门铃写0则计数增1,表示投递了新的描述符(VIA协议中规定的数据单位),门铃写1表示重置,门铃读操作可以查出当前队列中等待处理的队列项。
由于受到装填的限制,本网卡提供256个门铃(依次编号为第0号到第255号),对应256个传输控制单元(Transfer Control Unit,TCU)队列,每个队列最多容纳256个描述符。这些门铃都是发送门铃。在实际工作过程中,这些门铃构成了一种发送结构,是位于主存中的一段连续区域。该结构由256个发送队列组成,每个队列对应一个发送门铃,队列的元素是网卡发送的描述符。描述符和队列的大小都是固定的。网卡根据队列号和队列的下标计算出描述符偏移量,再由发送结构指针做基地址就可以寻找到当前的描述符地址。
(5)可编程软件接口模块:可编程接口模块包括可读写的控制(状态)寄存器和VI门铃寄存器。其中的控制(状态)寄存器在写入网卡初始化控制字和操作系统分析的网络接收缓冲区指针时,称为控制寄存器。具体来说,接收缓冲区位于主机的内存中,网卡将接收到的数据完全写入缓冲区并且在校验正确以后才能触发中断。中断以后指针值失效,驱动模块需要再次写入,才能使网卡的接收逻辑处于就位状态。而在在中断发生的时候,通过该寄存器又可以读出中断状态,此时称为状态寄存器。
上述这些寄存器,包括VI门铃寄存器,以及控制(状态)寄存器,在网卡启动的时候由相关的驱动模块接管并初始化之,之后把映射的内存地址传递给核心代理模块,核心代理模块再把门铃寄存器映射到用户层以供使用。关于上述寄存器的具体信息以及在发送接收过程中的实际应用,在后面对网卡详细说明部分有详细的描述。
本发明门铃的工作过程进一步说明如下:本发明的网络接口卡工作的驱动源是门铃和VI描述符。门铃实际上是网卡上的计数器,初始值可以通过给门铃地址写1,使得计数器变零;应用程序按门铃的操作是对门铃的一个写0动作。门铃接收到写0命令就会增1,网卡对非零的计数值就执行其相应队列上的发送。如果多个队列上都有发送请求,网卡将按照轮循优先级执行每个队列上的发送操作。
VI描述符是连接的双方进行数据传输的控制字。VI的发送队列和接收队列都由描述符组成,VIA规范1.0也给出了推荐的描述符格式,本发明的软件模块提供的库函数也完全按照该格式提供VI的发送和接收描述符。但是对于链路传输来说,需要的信息并不多,于是本发明把发送描述符分开处理,其一作为网卡专用的发送描述符填写在发送结构队列中,由网卡解读并执行相应操作;另一部分称为协议头,装载了主要的描述符信息。协议头长度是固定的,对网卡来说它就是立即数。网卡目前只处理最多一个数据段,这一段数据必须是物理地址连续的,其最大长度为16K字节。发送描述符的分解由本发明的驱动模块完成,接收描述符的数据填写也由驱动模块完成。本发明自定义的描述符结构如图2所示,也称为传输控制单元(TCU,TransferControl Unit),图2中,每一行的数据宽度是32位,则TCU的长度为32字节,一共8行,包括网卡控制字(1行)、协议头(3行)和数据段(4行)三部分内容,其中,网卡控制字包括目标节点、V、T、保留、网卡立即数长度;协议头包括目的VI和源VI两部分;目的VI分为分包计数、目的端口及数据长度;源VI分为源端口及立即数长度、包类型及分包顺序号。虽然本发明并没有按照VIA规范1.0的建议实现VI描述符,但它的库所提供的API是完全符合VIA规范的。
最后,在总体上,PCI总线控制器模块和硬件校验逻辑模块处于外围,然后再连接着内部的网络控制逻辑模块以及可编程软件接口模块,操作VI门铃寄存器模块。
本发明的用户代理模块VIPL,核心代理模块VIPK及驱动模块三部分是依据VIA协议标准的通信流程实现的软件模块,在软件层次上,其均由一系列的文件组成。其中组成用户代理模块的每一个文件对应了VIA协议中规定的一类功能,每个文件中包含了在这一功能下的若干个应用程序接口(Application Program Interface-API),供上层应用程序调用。而具体的实现则主要由核心代理模块实现,组成核心代理的每一个文件对应了VIA协议中规定的一类功能的具体实现。最后通过驱动模块操作网络接口卡来完成,组成驱动模块的每一个文件中则包含着相关硬件操作的具体实现。按照VIA协议的相关定义,上层应用程序为虚拟接口VI的消费方,而VIPL/VIPK及驱动模块以及网络接口卡为虚拟接口VI的提供方,如图3所示。
核心代理模块VIPK以设置在主机中的Linux中的一个可加载内核模块来运行,驱动模块以设置在主机中的Linux中的一个驱动程序来运行,而用户代理模块VIPL以静态库文件的形式在应用程序编译的时候进行链接。本网卡在Linux系统中既作为网络设备又作为字符设备,分别由驱动模块和核心代理模块管理。驱动模块将网卡注册于主机的操作系统的全局网络设备表,并由该操作系统的网络子系统分配设备名,如eth1,作为网络设备的访问入口。所有对网卡的TCP/IP协议访问都归结为对该网络设备的访问。核心代理模块将自己注册为网卡的字符设备访问入口,用户程序对该字符设备的访问都被核心代理模块所截获。核心代理模块实现该字符设备的OPEN,CLOSE,IOCTL和MMAP方法,不实现READ和WRITE方法。MMAP将允许用户访问的资源映射到用户进程空间,由VIPL的库函数直接操作,如PostSend,PostRecv,SendDone,RecvDone等。而诸如VI管理,连接管理等需要核心代理模块干预的操作,核心代理分别实现IOCTL方法的不同命令以提供给VIPL进行调用。所有应用VIA协议的用户程序,都是通过该字符设备对网卡进行访问的。
本发明的核心代理模块实现内存区域注册与内存保护,以及虚拟地址到物理地址的转换等内存管理功能。当用户程序通过库函数注册内存区域或者建立VI的时候,由核心代理模块提供内存保护属性或者VI属性并返回。地址转换也在核心代理模块实现,即页表完全由核心代理模块维护。
尽管以上这些工作都由核心代理模块在系统核心完成,但是注册的内存区域和创建的VI在整个生存期内(所谓VI的生存期是指创建一个VI到销毁这个VI的整个过程就不会再改变其属性,同样,内存区域的生存期是指从注册该区域开始直到注销的整个过程)虚拟内存地址到物理地址的对应也不会改变,因而以后对相关内存地址的操作就不需要经过核心代理模块而完全是用户层的。VI的通信首先需要向远程建立连接,通信结束之后要释放连接,但是不必销毁VI,这意味着可以利用该VI再次创建连接进行通信,从而实现“一次创建、多次使用”,减小VI资源管理的软件开销。注册的内存区域是用来作为用户程序的数据区的,每次通信任务完成之后这些数据就过期了,而该区域依然可以再次使用,同样做到“一次注册、多次使用”。因此,这种实现方式所增加的平均软件开销并不大。
另外,TCP/IP是传统的通用的网络协议,本发明的驱动模块对其提供了支持。驱动模块使用VI资源中的0号VI,该VI的门铃和TCU队列不会被映射到用户空间,而是系统专用。驱动模块使用0号VI进行VIA用户数据之外的其它所有数据的通信通道,包括VIPK的控制包,路由信息包,IP类型包等。驱动模块实现了若干Linux系统核心定义的以太网卡操作接口。由于Linux的网络子系统使用了Socket Buffer(套接字缓冲区)结构,传递给驱动模块的缓冲区内容就是直接可以发送的帧结构,驱动模块只要把该帧结构像普通用户数据一样对待,对它进行封装——即生成协议头和填写网卡发送描述符,并在接收的时候解封装,就实现了TCP/IP的支持。对于地址解析(Address Resolution Protocol,ARP)协议使用的MAC地址,本发明中用每个网卡在本系统中唯一的交叉开关端口号来表示。
本发明的用户层发送实现了真正的零拷贝。网卡会根据发送描述符直接寻址到用户进程存储空间的数据,然后以PCI突发(Burst)方式取数据并执行发送。发送过程是流水执行的,即一次Burst启动以后,每个总线周期都可以读出32位(总线宽度)的数据。其间没有任何内存数据拷贝。但是,网卡的接收过程仍然通过中断触发,即本发明所实现的用户层通信从严格意义上说是半用户层通信。中断接收的时候,由于数据在接收缓冲区中之后网卡才触发中断,因此需要做一次数据拷贝,由驱动模块把提取接收数据并写到相应的用户数据区。这一次拷贝是必需的,因为网卡不解析接收描述符或者协议头,这一任务交给驱动模块完成,它必须有可操作的内存区域。图4显示了这一数据传输通路结构,即网卡从网络中获得数据经FIFO缓存送给接收逻辑模块,再传输给主机,经主机的接收缓冲区送入用户数据区;用户数据区中的要发送的数据经网卡的发送逻辑模块传输到网络中。其中,数据经过FIFO占用的时间是忽略不计的,这是FIFO的特性决定的。
本通信系统目前已经做到了对2.2和2.4版本的Linux内核的支持。
本通信系统实现数据通信的工作流程如图5所示,包括以下步骤:
①根据用户页表,将发送缓冲区的虚拟地址转换为DMA物理地址。这一步是由驱动模块完成的。这之前的相关工作则由用户代理和核心代理依次完成。
②将发送控制信息,推入VI对应通信队列中,访问门铃寄存器。这一步驱动模块操作NC完成。
③根据门铃查询对应VI的发送队列,获取相应的发送信息。这一步由NC完成。
④启动DMA,将消息数据字节从发送方缓冲区发送到由多个网络接口卡、交叉开关和物理链路组成的的网络。这一步由NC完成。
⑤发送完毕,在发送信息的相应位置设置完成标志。这一步由NC完成。
⑥根据VI号查询相应的接收队列,分析数据包头,检查传输的正确性。这一步由NC完成。
⑦获取接收方的目的缓冲区信息。然后直接将数据从网络传输到接收方的缓冲区中,设完成标志。这一步由NC完成。
⑧查询VI的接收队列标志,判断数据是否到达,否则继续等待、查询,是则将数据交由核心代理和用户代理模块依次进行解析,去除通信附加的内容,恢复成原始数据,交由上层应用使用。这一步由驱动模块完成。然后交由核心代理和用户代理模块依次处理。
其中步骤①到⑤是发送过程,而步骤⑥到⑧是接收过程。其中①②和⑧这三步是在上层应用完成的,此时主机的CPU要处理相应的通信操作,不能从事其它工作。而③到⑦这几步则由网络接口卡来完成,此时CPU就可以进行如计算之类的其它工作,从而达到计算与通信并行的效果。从①到⑧一个完整过程所消耗的时间就是传递一个消息的延迟。
测试表明,本发明系统的运行是稳定的。图6和图7分别显示了在测试得到的小数据量的通信延迟和大数据量的通信带宽。小数据量的延迟测试,数据大小从4字节到1024字节,当数据长度小于64字节时,通信延迟都在10ns之内,此后延迟随数据长度的增加而相应增大。大数据量的带宽测试,数据大小从1K字节到64K字节(64K字节是目前允许的最大数据传出长度),当数据长度达到8K字节以后,带宽的增加值趋于平缓,此时的通信带宽已经达到90MB以上。数据长度为32K时,带宽超过100MB,这个数值已经接近32位/33M的PCI总线132MB的理论带宽的80%。
本系统支持TCP/IP协议,可以运行基于操作系统IP网络协议栈的任何应用程序。IP协议的测试选择了ping、telnet、rsh、ftp等程序进行,对TCP协议没有进行特别的参数设定,使用操作系统的默认值。PING程序和FTP程序显示的延迟和带宽都明显优于1000M以太网卡,但是比VIA协议的测试数值还是有明显的差距的。这也说明通信的瓶颈已经转移到通信软件,因此用户层通信优势明显。
下面对各组成部分的实施例进一步详细说明。
网络接口卡的组成及特点:
本实施例采用3万门FPGA,提供PCI接口及通讯节点控制器功能;
全双工48位66MHz LVDS节点之间信号通讯方式;
National Semiconductor 48位LVDS发送和接收器,66MHz工作时钟;
AMP专用LVDS传输线及接插件,可靠抗干扰,最长可达10米;
抗扭曲(DESKEW)技术,数据位之间长线传输相位延迟自动修正;
Cypress 4K×36位先进先出(FIFO)缓存芯片,66MHz工作频率;
FIFO保证发送和接收时钟完全独立,数据不丢失;
带奇偶校验检测的命令同步机制,保证通讯链路的畅通与非死锁;
循环校码(CRC)数据帧检测,传输出错时硬件自动重发修正,数据通讯高速可靠;
多至256个发送队列,可进行多进程发送,提供硬件VIA支持;
存储器编址寄存器访问机制,允许用户层直接编程,减少系统开销;
接收完成中断方式,可以使接收和数据处理完全并行;
联合测试行动小组(Joint Test Action Group-JTAG)或电可擦除可编程只读存储器(E2 PROM)的FPGA动态加载逻辑,方便软硬件升级;
66MHz(兼容33MHz)PCI总线时钟控制,自适应5V或3.3V信号电平,3.3V工作电压;
PCI主控操作(Master)突发(Burst)32位传输,最高266MB/S传输率;
3.3V或5V PCI通用插卡,66MHz(兼容33MHz)32位PCI2.2版接口;
发光二极管链路和通讯状态指示;
采用4层印刷电路板(PCB)的PCI卡优化设计,降低成本。
图8是该FPGA芯片的内部功能结构框图,该FPGA芯片可以划分为PCI总线主控器、硬件校验逻辑模块、网络控制逻辑模块、可编程软件接口模块和VI门铃寄存器模块这几个部分。其中PCI总线主控器由PCI配置寄存器堆,总线译码器,MASTER状态机,TARGET状态机和发送仲裁这几个部分组成,对PCI总线进行控制和驱动;硬件校验逻辑模块则由奇偶校验部分组成;网络控制逻辑模块包括命令译码器,命令编码器和通讯状态机几部分组成;可编程软件接口模块主要由编程寄存器构成;而VI门铃寄存器模块由通用寄存器构成。在总体上,PCI总线控制器模块和硬件校验逻辑模块处于外围,然后再连接着内部的网络控制逻辑模块以及可编程软件接口模块,操作VI门铃寄存器模块。
本网卡相关参数:PCI配置参数用于网卡识别及状态描述,如表1所述。
                                           表1
PCI配置空间域名  PCI配置空间位置 参数值 解释
Vendor ID  00H 5448H “TH”-Tsinghua
Subsystem VendoID  2CH 5343H “SC”-Computer Science
Device ID  02H 4E43H “NC”-Network Card
Revision ID  08H 20H Version 2.0
Subsystem ID  2EH 0000H
Class Code  0DH 002800H 网卡设备标识
Status 06H 02a0H 66MHz CapableFast      Back-to-BacCapableMedium timing
BAR0  10H ?????000H 申请存储4K地址空间
Interrupt Pin  3DH 01H 使用PCI的INTA#引线
本网卡在实际使用中占用的资源如下:
设备访问端口
网卡设备访问端口申请占用PCI(CPU)存储空间(4K字节),作为网卡的编程地址。系统启动时,分配的设备端口存储空间基地址被写到PCI配置空间的基地址寄存器(Base Address Registers)0(PCI配置空间位置:10H),读取该配置空间的内容可得到网卡设备访问端口的基地址。
设备中断端口
网卡需要申请占用PCI(CPU)一个中断线,用于数据接受及异常处理。系统启动时中断号被分配到PCI配置空间的中断线(Interrupt Line)(PCI配置空间位置:3CH),读取该配置空间的内容可得到网卡的中断号。
设备访问端口参数
网卡申请的用于设备访问端口的PCI(CPU)存储空间,从基地址开始使用了4K字节的编址,用于对网卡的编程,如表2所示(为了扩展和兼容,编程端口所有未指定或保留的位,都要求写入为0。另外,表2中的访问单位必须是整体操作,例如双字访问不能通过两次短字操作来实现)。
                                                   表2
基地址偏移(16制) 访问单位 访问方式 名称 功能描述
00 双字 RCVP 写入接收缓冲区指针,缓冲区起址要双字对齐。缓冲区写操作后,接收缓冲区有效,网卡可以接收数据。当数据接收完成产生中断时,接收缓冲区无效,直到下一次缓冲区写操作为止。
04 双字 SNDP 写入发送结构缓冲区指针,缓冲区起址要与缓冲区大小一致。写操作后,网卡一并进行软件初始化,其中:位31-15:发送结构缓冲区指针高位,其中指针的低位(14-0)为0,即32K字节对齐。位14-2:保留。位1:发送完成响应方式:=0:发送完成清除发送队列项目中的标志位T,=1:发送完成后发出中断。位0:网卡功能设置(此位功能仅用于网卡对网卡的连接时使用)=0:网卡作为交叉开关(SWITCH)的节点,或作为网卡之间点对点连接的“从”卡;=1:网卡作为网卡之间点对点连接的“主”卡
基地址偏移(16制) 访问单位 访问方式 名称 功能描述
04 STATUS 网卡状态报告,其中:位31-24:发出中断的队列中的项目号。位23-16:发出中断的队列号。位10-9:中断请求类型。00:“数据接受”中断请求。01:“数据发送”中断请求。10:“目标未连通”中断请求。11:“目标是自己”中断请求。位8:链路中断请求,中断类型见10-9位。位7:PCI出现过Disconnect without data(无错)。位6:PCI出现过奇/偶校验错。位5:PCI出现过Disconnect without data。位4:接收数据出现过CRC错误。位3:PCI出现过Target abort。位2:PCI出现过Disconnect without data(有错)。位1:PCI出现过Disconnect with data。位0:PCI出现过Master abort。读操作后,所有位均被清除。
08 双字 RCVPH 如果接收缓冲区是64位的地址,接收缓冲区指针的高32位就写入到这里。必须先于接收缓冲区指针的低32位赋值。
0C 双字 SNDPH 如果发送结构缓冲区指针是64位的地址,发送结构缓冲区的高32位就写入到这里。必须先于发送结构缓冲区指针的低32位赋值。
800-FFF 字节 SQPxxx 发送队列操作。位0:=1:指定发送队列初始化(包括:发送队列长度清0和发送队列指针复位。在设备初始化时,要求对所有的发送队列清0)位7-0=0:指定发送队列长度+1,即在该队列最后插入一个发送项目。
发送结构缓冲区
发送结构缓冲区用于存放发送数据的结构描述,它是系统中一块物理地址连续的内存,由软件启动时申请得到后,通过端口(SNDP)写入网卡。
缓冲区大小
缓冲区大小可由以下公式得出:
发送队列个数×每个队列的项数×每项目的字数×4(每字的字节数)
目前网卡的相关参数为:
发送队列个数:256,每个队列的项数:256,每项目的字数:32
最后缓冲区的大小:2MB
缓冲区位置
缓冲区必须是物理地址连续的一块内存(2M),网卡对缓冲区寻址时要求它的低位地址全为0,即要求缓冲区必须以它的大小(2M)对齐。
缓冲区结构
2M的发送缓冲区依队列号顺序连续存放,每个队列中各项也按项目次序连续存放,如表3所示。
                                        表3
项目255
偏移1FFFFCH
每一个发送请求由发送缓冲区的一个项目来描述,每个项目的描述内容由连续的8个双字(32个字节)组成,如表4所示。表中从右到左代表一个双字的从低到高32位。
                                                                          表4
目标节点(TN) V  T 立即数长度(IML) 0  0
立即数0
立即数1
立即数2
……
[附加发送缓冲区长度(ABL)]
[附加发送缓冲区指针(ABP)]
……
地址0004H08H0cH10H14H18H1cH
(a).第一个双字是项目的控制字,其中:
TN位31-24):8位发送终点的目标节点编号。这个编号将直接对应SWITCH的物理端口号,最多256个。
T(位22):发送任务未完成标志,当T=0时表示发送任务已完成。
IML(位12-2):缓冲区项目内部需要发送的立即数个数,1≤个数≤7。存放在IML中的值应该是立即数个数-1,即0≤IML≤6,它与控制字的低两位合并代表立即数个数的字节数-4。
(位21-14):附加发送缓冲区指针的高位(39-32)。如果发送缓冲区是64位的地址,就要设置这个高位指针。
V(位23):附加缓冲区发送请求标志。当V=1时除了立即数发送以外,还要求一个附加的缓冲区紧随立即数后发送。
(b).第二个双字开始是要发送的立即数内容(立即数0、立即数2、立即数3、……),长度由控制字中的IML给出。
(c).如果控制字中的V=1,紧跟立即数后是两个双字的附加缓冲区描述,此时可发送的立即数最大个数应减少2个。
(d).附加缓冲区描述第一个双字是发送缓冲区长度,格式如下:
    缓冲区长度(ABL)
ABL(位12-2):附加缓冲区中需要发送的数据(双字)个数。ABL的值应该是发送数据个数-1,它与控制字的低两位合并代表立即数个数的字节数-4。
附加缓冲区描述第一个双字是发送缓冲区指针,格式如下:
    缓冲区指针(ABP)
ABP(位31-0):附加缓冲区的指针。附加缓冲区要求是双字对齐,即ABP的最低两位为0
(e).项目中未定义的数据位清0。
如何对网卡资源进行调用
初始化过程
通过BIOS(或操作系统调用)检测网卡是否存在,用商家标识(Vendor ID)(5448H)和设备标识(Device ID)(4E43H)搜索网卡。
读取已分配的网卡设备端口基地址(BAR0)和中断号(Interrupt Line-PCI配置空间3CH位置)。
对所有的发送队列(0-255)进行初始化,即对SQPi端口写1。
申请2MB发送结构缓冲区,要求缓冲区是物理地址连续且2MB对齐。
发送结构缓冲区指针写入到网卡的SNDP端口(基地址+4),同时网卡初始化。
根据中断号设置中断向量,指向中断处理程序,修改8259中断屏蔽位(或由操作系统完成)。
数据发送过程
确定发送队列号i(i=0,..,255),
读取该队列的队列长度,直到队列不满(<255)。
根据发送队列i队列参数,得到队尾缓冲区项目的指针。
填写缓冲区项目内容(缓冲区内容不能发生错误,严重时会使整个机器瘫痪),如需要附加缓冲区,则添入附加缓冲区的长度及附加缓冲区指针。
对SQPi端口(基地址+800H+i)进行一次写0,使该发送队列长度+1,通知网卡有新的队列发送要求。
修改发送队列i的队列参数。
数据接收过程
申请1-N个接收缓冲区,要求接收缓冲区是物理地址连续且双字对齐(接收缓冲区的大小不得小于最大发送数据+2(双字),否则会破坏系统的内存)。
为使网卡能够接收数据,首先把(任意一个)接收缓冲区指针写入到RCVP端口(基地址+0)
数据接收这一过程由网卡硬件中断启动,中断处理程序(由初始化进程设定)包含以下内容:
读取网卡状态(STATUS)(基地址+4)(网卡状态读取后即被复位,因此只能读取一次,多次使用时要用软件保存。),确定中断来源是数据接受中断。
把另一个空的接收缓冲区指针写入到RCVP端口,以便网卡能立即接收下一个数据包(多个接收缓冲区的管理可以使CPU对缓冲区的处理与接收数据过程完全并行,但这种管理需要妥善处理缓冲区之间的关系,以免出现冲突甚至死锁)。
启动数据包接收处理进程,或设置标志在中断处理程序结束后启动这个进程。
向8259发中断结束(EOI)后(或由操作系统完成),退出中断。
数据包接收处理进程由中断处理程序启动,处理本次接收缓冲区的内容。
交叉开关组成及特点:
自主设计采用30万门FPGA,10通道全互联交叉开关;
全双工48位66MHz LVDS节点之间信号通讯方式;
National Semiconductor 48位LVDS发送和接收器,66MHz工作时钟;
AMP专用LVDS传输线及接插件,可靠抗干扰,最长可达10米;
抗扭曲(DESKEW)技术,数据位之间长线传输相位延迟自动修正;
Cypress 4K×36位FIFO,66MHz工作频率
FIFO保证发送和接收时钟完全独立,数据不丢失
带奇偶校验检测的命令同步机制,保证通讯链路的畅通与非死锁
CRC数据帧检测,传输出错时硬件自动重发修正,数据通讯高速可靠
JTAG或E2 PROM的FPGA动态加载逻辑,方便软硬件升级
2Mb的EPC2系统更新和重配置
USB接口方式的主控通道扩展,便于系统重配置构造
发光二极管链路和通讯状态指示
子母板分离式设计,减小连线长度和设备体积,速度更高更可靠。
采用6层PCB短PCI卡优化设计,以降低成本
图9就是该交叉开关与网卡连接在一起时的内部功能结构框图。该交叉开关要实现数据的通路和路由与仲裁功能。因此对交叉开关使用的FPGA,主要构成是一个全连通的开关通路,然后该芯片同时连接多个端口,从每个端口的角度来说,都包括了通端与端控制两部分,这里的“通端”即指LVDS收发器和FIFO缓冲这些器件,是安装在交叉开关内部的子卡上的,而端控制指包括在FPGA内部的相关逻辑模块。然后每个端口通过物理链路与安装在主机上的网卡(网络适配器)的通端(同样由网卡上的LVDS收发器和FIFO缓冲构成)连接。然后网卡通过其FPGA内部的PCI总控模块利用PCI总线进行通信。
以下对本发明的用户代理模块,核心代理模块及驱动模块三部分的具体实现从VIA协议的角度进行详细的说明:
用户代理模块VIPL
VIPL全称是Virtual Interface Programming Layer,是VIA标准里的用户代理UA(User Agent),主要的功能是实现VIA标准里规定的API函数。在使用VIA编程的时候调用这些API函数,其组成是:
    文件名     主要包含API 说明
    Vipopennic.cVipclosenic.c     VipOpenNicVipCloseNic 对网卡(NIC)的开关操作
文件名  主要包含API 说明
Vipnsinit  VipNSInit 实现name service功能,要是对网络地址,主机名称等进行处理和转换。
Vipnsshutdown  VipNSShutdown
Vipnsgethostbyname  VipNSGetHostByName
Vipnsgethostbyaddr  VipNSGetHostByAddr
Vipcreatevi.cVipdestroyvi.c  VipCreateViVipDestroyVi 相关资源的创建与销毁,些功能的实现方法都类似但VipDestroyCQ(在vipl.h和vipk有相关的原型定义)并没有具体实现的c文件。
Vipcreateptag.cVipdestroyptag.c  VipCreatePtagVipDestroyPtag
Vipcreatecq.cVipdestroycq.cVipresizecq.c  VipCreateVipDestroyCQVipResizeCQ
Vipregistermem.cVipDeregistermem.c  VipRegisterMemVipDeRegisterMem
Vipconnect.c  VipConnectWait 与连接相关的实现,不过只是起传递参数的作用,真正的功能都在VIPK层里。
 VipConnectAccept
 VipConnectReject
 VipConnectRequest
 VipDisconnect
 VipConnectPeerRequest
 VipConnectPeerWait
 VipConnectPeerDone
vippostsend.c  VipPostSend 发送与接收处理,对内存中数据的操作。其中Wait处理由VIPK层处理。
vipsenddone.c  VipSendDone
Vipsendwait.c  VipSendWait
Vippostrecv.c  VipPostRecv
Viprecvdone.c  VipRecvDone
Viprecvwait.c  VipRecvWait
Vipcqdone.c  VipCQDone 对完成队列的操作,不过只有原型,THVIA目前还不支持完成队列。
Vipcqwait.c  VipCQWait
Vipsendnotify.c  VipSendNotify “通知”机制的实现函数,是一种扩展实现,实现在vianotify.c里。
Viprecvnotify.c  VipRecvNotify
Vipcqnotify.c  VipCQNotify
Vipquerynic.c  VipQueryNIC “查询”机制的实现函数,
Vipqueryvi.c  VipQueryVi
文件名  主要包含API 说明
Vipquerymem.c  VipQueryMem 过ioctl机制传递到VIPK层操作。
Vipquerysystem-managementinfo.c  VipQuerySystem-ManagementInfo
Vipsetmemattributes.c  VipSetMemAttributes “设置”机制的实现函数,上
Vipsetviattributes.c  VipSetViAttributes
Viperrorcallback.c  VipErrorCallBack “错误”机制的实现函数,上
此外还有以下一些头文件,以及一些辅助的内容:
  文件名     内容
  Vipl.h     定义了VIP的基本数据类型,包括:VIP_PVOID(64),VIP_char等定义了VIP的基本数据单元,包括:VIP_RETURN VIP_CONTROL_SEGMENT等定义全部VIAAPI的原型,如VipOpenNic,VipCreateVi等
  Vipl_thnic.h     主要定义了一些针对NC硬件的参数,如收/发的队列大小,铃数等等,还有TCU的结构a.THNIC_CTRL_WORD     TCU的网卡控制字b.VIP_PROTOCOL_HEAD   TCU的协议头c.VIP_DATA_BUFFER     TCU的数据段由这三个结构组合而成VIP_SEND(RECV)_KDESC就是实际的TCU单元d.VIPL_RMM_PAGE注册内存管理页面
  vipl_private.h     定义了介于VIPL层API和VIPK层之间的接口,包括:VIP_NET_MAX_ADDRESS,VIP_DOORBELL等一些数据结构的预定义VIP_NIC,VIP_VI,VIP_CQ这些关键数据结构的更底层的定义VIA所有的API的ARG原型(arguments for ioctl.)这些定义用在各个API实现时ioctl的调用VipAddrDiscrimEq等函数的实现,这些函数的作用是在各个API实现时被调用,实现一些简单的功能(如比较)
总之,VIPL的功能是利用linux系统提供的ioctl机制,将相关参数传递到VIPK。以VipRegisterMem函数为例,它是VIPL的一个API,应用程序基于VIA编程时就会调用它,会向它提供若干个输入参数以表明要注册的内存的性质。它把这些内容填入ARG结构中(这是所有的ioctl函数都有的两个参数之一,一个是操作类型CMD,另一个就是操作参数ARG),同时声明使用的命令是VIP_REGISTER_MEM,这样就把这些参数传递给了VIPK的相关函数进行处理。处理的结果在ARG结构中,正确的话就能得到内存句柄,错误的话会返回错误状态。在这一层的绝大多数API都是这样实现的。这些API的相关定义在VIA标准1.0中有详细描述。
核心代理模块VIPK
VIPK全称是Virtual Interface Protocol Kernel Agent,该模块主要功能是实现上层API的功能,并与驱动模块建立联系。下面是它的组成:
  文件名   功能
  vipk_trace.c(h)   类似Debug输出的功能,实现了一种类似ioctl的命令模型,一种操作都有对应的命令字,可以根据输出的内容判断模块的位置。
  Vipk_ptg.c(h)   关于内存保护标志管理
  vipk_rmm.c(h)   关于注册内存管理
  vipk_mm/mmap.c(h)   更底层的内存管理
  vipk_malloc.c   定义了本发明自己的内存分配/释放函数:kmalloc/kfree和vmalloc和vfree。其中的v系列是直接调用系统函数vmalloc/vfree,而k系列在调用同名系统函数作为核心之外,另外建立了一个链表结构free_block,存储相关的调试信息。
  vipk_lo.c(h)   实现NC的本地设备lo功能的
  vipk_eq.c(h)   管理出错队列
  vipk_cqm.c(h)   管理完成队列
  vipk_cm.c(h)   管理连接
  vipk.c   定义了一些基本的函数,如加载/卸载设备,还有就是针对VIPL层的ioctl的VIPK实现
  vipk_ops.c vipk.h   定义了VIPK层的相应的API的原型和实现
  文件名   功能
  Vipk_types.h   VIA核心的一些数据结构定义,其中增加了关于THVIA的内容
  Vipk_thnic.h   定义了NC的一个属性结构(对比:VIPL层的thnic头文件主要定义了TCU结构)
  Vipk_limit.h   定义各种资源的范围
在具体的功能实现上,以EQ(错误队列),CQM(完成队列管理),RMM(注册内存管理)这些基本的功能为基础,OPS(相关操作)和其它往往是调用这些函数提供的功能进行组合。
同时,基于ioctl机制,每个VIPL的API函数在VIPK都有对应,这些对应的VIPK的API的实现方法依照:接收参数→相关检验→调用基本资源函数或系统调用→返回句柄这样的结构进行。即根据需要对相关的资源进行组合。
除此之外,由于这一模块已经要面对硬件完成一些最基本的功能,例如完成发送/接收一个数据包。和这一层直接关联的有VIPK的CM(连接管理)模块。
驱动模块VIPK_DEVS
该模块的主要功能是硬件驱动,使得本发明的网卡硬件可以被操作系统正常的识别和加载,生成相关的设备文件,同时获得相应的资源例如中断,MAC端口等。并且负责实际数据包的发送与接收。
下面是它的功能分布:
    文件名 功能
    vipk_lo.c(h) 生成设备”via_lo”,也就是本地设备,它的具体做法和thnc2中生成标准的via_thnc设备类似,但由于它是一种逻辑设备,因此不需要申请实际的硬件资源,只需要在软件上将相关的VIA结构进行初始化就可以了。
    thnc2.c 生成真正的网卡设备”via_thnc”,与一般的以太网卡驱动类似,包括硬件初始化,模块初始化,提供供操作系统使用的设备加载/卸载函数,同时实现对IP包的封装与解读,使得THVIA系统可以兼容TCP/IP,以及VIA数据包的发送与接收。
    thnc_rx.c VIA数据包的接收过程,在这里单独实现,然后由thnc2调用。
    nc2_header.h 定义了在驱动层所需要的一些数据结构,包括:接收数据包格式rx_struct底层VI结构vi_struct设备文件结构thnc_private以及针对实际硬件的一些资源限制,例如:最大数据包长:VIPK_THNC_MAX_TRANSFER_SIZE连接队列大小VIPK_THNC_CONN_QUEUE_SIZE
这模块的API组成是:
thnc2.c中:
  名称   作用
  Thnc_init   NC网卡的硬件初始化,主要是基于PCI的相关硬件资源的,如地址,控制字等。
  thnc_found1   初始化完成以后开始寻找NC硬件,主要是创建NC的设备文件,赋与NC网卡MAC地址,并为该设备在系统核心中的分配内存空间。在设备文件中将相关功能模块进行注册。
  thnc_open(close)   进一步初始化THVIA特有的硬件资源,如发送队列等。将这些资源进行内存映射,然后反映到上层,由VIPK层的RegisterDevice/DeRegisterDevice函数向系统提出加载/卸载
  init(close)_module   这是封装函数,它调用底层的init的功能,同时对外提供接口,而close功能直接调用系统提供的相关资源释放来实现。
  init_attrib   对THVIA设备结构的相关控制域进行装填,它由thnc_open来调用,实际是也是一个封装函数
  thnc_prove   封装函数,同样是调用init函数,但它不针对module,而是针对设备devs的。
  thnc_interrupt   负责处理中断,由于THVIA是半用户层的,在接收过程时还是要依靠中断来进行的。
  thnc_ip_send(recv)   实现THVIA对IP的支持,它将要发出去的IP包或者接收到的IP包进行再封装/解封,使它可以被THVIA处理。
  thnc_rm_send   实现THVIA初始化时寻找设备的功能,它同样实现一个发送功能,只是不带任何数据,而是可以指定目的端口,这样就可以获得设备。
  thnc_rx(self_rx)   实现数据包的接收,根据数据包的类型不同分别由不同的模块进行处理,IP包就交给IP_recv处理,VIA包就交给thnc_rx处理,这个功能在thnc_rx文件中。而self_rx只是把相关的数据在内存中用指针的方式重定向一次。
  VipkThncSendControl   实现NC网卡发送的函数,它可以将指定位置,指定长度的数据以4K为单位发送出去。
  VipkThncIoctl   处理命令管理传来的相关的参数,和上层的IOCTL功能类似,它也为设备文件的一部分被thnc_found1注册
  thnc_get_stats   将设备文件中相关域的内容反映出来,同样是个封装函数,
  名称   作用
  它作为设备文件中的一部分被thnc_found1注册。
thnc_rx.c中:
名称 作用
thnc_rx_init 将接收队列部分进行初始化
thnc_rx_later 将接收缓冲区中的内容读出,进行格式化后进行一系列的判断,完全无误后填写完成标志,置相关的控制位,然后上层就可以来读了。

Claims (7)

1、一种基于硬件支持的虚拟接口结构用户层网络通信系统,包括多台具有Linux操作系统的计算机主机,安装在该各主机中的网络接口卡,该网络接口卡通过PCI总线与主机进行交互,以及连接各网络接口卡的交叉开关,该网络接口卡与交叉开关相互通过物理链路连接成一个通信网络拓扑结构;还包括设置在各台主机中由用户代理模块和核心代理模块构成的实现VIA协议规定的功能的通信接口单元和驱动各网络接口卡完成具体通讯功能的驱动模块。
2、如权利要求1所述的系统,其特征在于,所述的每台交叉开关由一块主卡和多块子卡构成,与多块网络接口卡同时连接,且该各交叉开关之间也进行连接,以形成复杂的网络拓扑结构。
3、如权利要求2所述的系统,其特征在于,所述交叉开关的主卡用于实现交叉开关的数据通路和路由与仲裁功能;所述交叉开关的子卡主要由发送器、接收器以及数据先入先出缓冲器件组成。
4、如权利要求2所述的系统,其特征在于,所述的网络接口卡为支持VIA功能的虚拟接口网络接口卡,在该主机的Linux系统中既作为网络设备又作为字符设备,分别由所述驱动模块和核心代理模块管理;该网络接口卡由控制芯片及其外围I/O电路构成;该控制芯片包括以PCI总线主控方式的PCI总线主控器,用于一次总线地址周期之后连续多个总线数据周期与主机的主存储器交换数据;与交叉开关构成数据链路的网络控制逻辑模块,用于进行数据传输和链路管理操作;硬件校验逻辑模块,提供命令控制字的奇偶校验,同时提供数据的循环冗余码校验;采用计数器方式的VI门铃寄存器模块,用于查出当前队列中等待处理的队列项;可编程软件接口模块,用于写入网络接口卡初始化控制字和系统分配的网络接收缓冲区指针,在中断发生的时候,读出中断状态;该PCI总线控制器模块和硬件校验逻辑模块处于外围,并连接内部的网络控制逻辑模块以及可编程软件接口模块,操作VI门铃寄存器模块。
5、如权利要求2所述的系统,其特征在于,所述的外围I/O电路包括物理链路的LVDS发送器和接收器模块,用于提供LVDS链路信号的发送和接收功能,位于LVDS接收器后端的数据先入先出缓存器模块,用于缓存数据和时钟匹配;可编程EEPROM存储模块,用于存储网络接口卡的控制模块,控制网络接口卡的控制芯片和外围I/O电路进行数据通讯。
6、如权利要求2所述的系统,其特征在于,所述的用户代理模块,核心代理模块及驱动模块三部分是依据VIA协议标准的通信流程由一系列的文件形式实现的模块,其中该用户代理模块为上层应用程序提供应用程序接口,并以静态库文件的形式在应用程序编译时进行链接,并利用该linux系统提供的ioctl机制,将相关参数传递到核心代理模块;该核心代理模块为主机的Linux操作系统的一种内核模块,并注册为网卡的字符设备访问入口,截获用户程序对该字符设备的访问,分别实现IOCTL功能的不同命令以提供给该用户代理模块进行调用,并与驱动模块建立联系;该驱动模块为主机中的Linux操作系统中的一种驱动模块,使该网络接口卡被操作系统正常的识别和加载,它将网络接口卡注册于主机的操作系统的全局网络设备表,并由该操作系统的网络子系统分配设备名,作为网络设备的访问入口;该驱动模块对TCP/IP协议提供支持,实现Linux系统核心定义的以太网卡操作接口。
7、一种采用如权利要求1所述通信系统实现数据通信的方法,其特征在于,由发送过程和接收过程组成,其中,该发送过程包括以下步骤:
①驱动模块根据用户页表,将发送方的发送缓冲区的虚拟地址转换为DMA物理地址;
②该驱动模块将发送控制信息,推入VI对应通信队列中,访问网络接口卡的门铃寄存器;
③网络接口卡根据门铃查询对应VI的发送队列,获取相应的发送信息;
④网络接口卡启动DMA,将消息数据字节从发送方缓冲区发送到由多个网络接口卡、交叉开关和物理链路组成的网络中;
⑤发送完毕,网络接口卡在发送信息的相应位置设置完成标志;
该接收过程包括以下步骤:
⑥网络接口卡根据VI号查询相应的接收队列,分析数据包头,检查传输的正确性;
⑦网络接口卡获取接收方的目的缓冲区信息。然后直接将数据从网络传输到接收方的接收缓冲区中,设完成标志;
⑧驱动模块查询VI的接收队列标志,判断数据是否到达,否则继续等待、查询,是则将数据交由核心代理和用户代理模块依次进行解析,去除通信附加的内容,恢复成原始数据,交由上层应用使用。
CNB2005100021174A 2005-01-14 2005-01-14 基于硬件支持的虚拟接口结构用户层网络通信系统 Expired - Fee Related CN100438524C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNB2005100021174A CN100438524C (zh) 2005-01-14 2005-01-14 基于硬件支持的虚拟接口结构用户层网络通信系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB2005100021174A CN100438524C (zh) 2005-01-14 2005-01-14 基于硬件支持的虚拟接口结构用户层网络通信系统

Publications (2)

Publication Number Publication Date
CN1633130A true CN1633130A (zh) 2005-06-29
CN100438524C CN100438524C (zh) 2008-11-26

Family

ID=34852927

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2005100021174A Expired - Fee Related CN100438524C (zh) 2005-01-14 2005-01-14 基于硬件支持的虚拟接口结构用户层网络通信系统

Country Status (1)

Country Link
CN (1) CN100438524C (zh)

Cited By (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101866326A (zh) * 2010-05-24 2010-10-20 北京航空航天大学 一种消息传递接口支持总线通信框架
CN101217573B (zh) * 2007-12-29 2010-11-24 厦门大学 一种加速网卡报文捕获的方法
CN102790717A (zh) * 2012-06-01 2012-11-21 上海斐讯数据通信技术有限公司 以太网数据包中控制信息的获取方法及系统
CN103237296A (zh) * 2013-04-19 2013-08-07 中国建设银行股份有限公司 短信发送方法和用于发送短信的系统
CN103631593A (zh) * 2013-12-03 2014-03-12 上海新浩艺软件有限公司 一种用于苹果计算机系统的无盘引导控制方法以及系统
CN103729215A (zh) * 2013-12-20 2014-04-16 江苏锐天信息科技有限公司 一种以太网板卡数据输入输出方法
CN103902313A (zh) * 2012-12-27 2014-07-02 中国航空工业集团公司第六三一研究所 一种航电系统的软件加载方法
CN105607911A (zh) * 2015-12-25 2016-05-25 浪潮电子信息产业股份有限公司 一种实现根据不同配置信息自动调整硬盘启动设备的方法
CN107122164A (zh) * 2017-03-31 2017-09-01 腾讯科技(深圳)有限公司 函数地址获取及应用其的方法、装置、设备及存储介质
CN110190993A (zh) * 2019-05-22 2019-08-30 青岛海信宽带多媒体技术有限公司 一种网络设备异常诊断方法、装置及计算机设备
CN111726201A (zh) * 2020-06-15 2020-09-29 哈工大机器人(合肥)国际创新研究院 一种airt-ros虚拟网卡丢包解决方法
CN111752194A (zh) * 2020-06-17 2020-10-09 江西洪都航空工业集团有限责任公司 一种基于usb接口的便携式gjb289a总线通讯设备
CN112425124A (zh) * 2018-07-25 2021-02-26 大陆汽车有限公司 汽车以太网网络中的拓扑发现
CN112581583A (zh) * 2020-12-24 2021-03-30 西安翔腾微电子科技有限公司 一种基于SysML视图的GPU三维剪裁模块的TLM装置及操作方法
CN112968890A (zh) * 2021-02-08 2021-06-15 浪潮软件科技有限公司 一种将axi总线数据转为虚拟网卡接收数据的实现方法
CN116527690A (zh) * 2023-05-04 2023-08-01 奇安信科技集团股份有限公司 一种流量镜像方法及装置

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6163834A (en) * 1998-01-07 2000-12-19 Tandem Computers Incorporated Two level address translation and memory registration system and method
US6647423B2 (en) * 1998-06-16 2003-11-11 Intel Corporation Direct message transfer between distributed processes
US6081848A (en) * 1998-08-14 2000-06-27 Intel Corporation Striping packets of data across multiple virtual channels
CN2525601Y (zh) * 2002-02-23 2002-12-11 海信集团有限公司 基于linux操作系统的家庭网络服务器
CN100464511C (zh) * 2004-01-05 2009-02-25 联想(北京)有限公司 一种以太网通信系统及方法

Cited By (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101217573B (zh) * 2007-12-29 2010-11-24 厦门大学 一种加速网卡报文捕获的方法
CN101866326B (zh) * 2010-05-24 2012-10-24 北京航空航天大学 一种消息传递接口支持总线通信框架
CN101866326A (zh) * 2010-05-24 2010-10-20 北京航空航天大学 一种消息传递接口支持总线通信框架
CN102790717A (zh) * 2012-06-01 2012-11-21 上海斐讯数据通信技术有限公司 以太网数据包中控制信息的获取方法及系统
CN102790717B (zh) * 2012-06-01 2016-03-02 上海斐讯数据通信技术有限公司 以太网数据包中控制信息的获取方法及系统
CN103902313A (zh) * 2012-12-27 2014-07-02 中国航空工业集团公司第六三一研究所 一种航电系统的软件加载方法
CN103237296A (zh) * 2013-04-19 2013-08-07 中国建设银行股份有限公司 短信发送方法和用于发送短信的系统
CN103631593A (zh) * 2013-12-03 2014-03-12 上海新浩艺软件有限公司 一种用于苹果计算机系统的无盘引导控制方法以及系统
CN103729215B (zh) * 2013-12-20 2017-02-01 江苏锐天信息科技有限公司 一种以太网板卡数据输入输出方法
CN103729215A (zh) * 2013-12-20 2014-04-16 江苏锐天信息科技有限公司 一种以太网板卡数据输入输出方法
CN105607911B (zh) * 2015-12-25 2018-06-19 浪潮电子信息产业股份有限公司 一种实现根据不同配置信息自动调整硬盘启动设备的方法
CN105607911A (zh) * 2015-12-25 2016-05-25 浪潮电子信息产业股份有限公司 一种实现根据不同配置信息自动调整硬盘启动设备的方法
CN107122164A (zh) * 2017-03-31 2017-09-01 腾讯科技(深圳)有限公司 函数地址获取及应用其的方法、装置、设备及存储介质
CN107122164B (zh) * 2017-03-31 2023-04-07 腾讯科技(深圳)有限公司 函数地址获取及应用其的方法、装置、设备及存储介质
CN112425124B (zh) * 2018-07-25 2022-07-15 大陆汽车有限公司 汽车以太网网络中的拓扑发现
CN112425124A (zh) * 2018-07-25 2021-02-26 大陆汽车有限公司 汽车以太网网络中的拓扑发现
CN110190993A (zh) * 2019-05-22 2019-08-30 青岛海信宽带多媒体技术有限公司 一种网络设备异常诊断方法、装置及计算机设备
CN111726201A (zh) * 2020-06-15 2020-09-29 哈工大机器人(合肥)国际创新研究院 一种airt-ros虚拟网卡丢包解决方法
CN111726201B (zh) * 2020-06-15 2023-09-12 合肥哈工轩辕智能科技有限公司 一种airt-ros虚拟网卡丢包解决方法
CN111752194A (zh) * 2020-06-17 2020-10-09 江西洪都航空工业集团有限责任公司 一种基于usb接口的便携式gjb289a总线通讯设备
CN112581583A (zh) * 2020-12-24 2021-03-30 西安翔腾微电子科技有限公司 一种基于SysML视图的GPU三维剪裁模块的TLM装置及操作方法
CN112968890A (zh) * 2021-02-08 2021-06-15 浪潮软件科技有限公司 一种将axi总线数据转为虚拟网卡接收数据的实现方法
CN116527690A (zh) * 2023-05-04 2023-08-01 奇安信科技集团股份有限公司 一种流量镜像方法及装置
CN116527690B (zh) * 2023-05-04 2024-02-13 奇安信科技集团股份有限公司 一种流量镜像方法及装置

Also Published As

Publication number Publication date
CN100438524C (zh) 2008-11-26

Similar Documents

Publication Publication Date Title
CN1633130A (zh) 基于硬件支持的虚拟接口结构用户层网络通信系统
US11657015B2 (en) Multiple uplink port devices
CN108337910B (zh) 用于软件定义的互连交换机的架构
JP6311164B2 (ja) 統合コンポーネント相互接続
TWI410808B (zh) 電腦平台上之統一的連接器架構之實施系統、裝置及方法
CN1256681C (zh) 从外围设备向主计算机系统传输中断的方法和装置
US12032933B2 (en) Compiling system and compiling method for programmable network element
CN1308835C (zh) 远端直接存储器存取启用网络适配器的存储器管理卸载
CN108604209B (zh) 扁平化端口桥
CN110036380A (zh) 用于高速互连中低延迟的双模phy
CN103150279B (zh) 一种主机与基板管理控制器共享设备的方法
US20220222196A1 (en) Pci express chain descriptors
CN1604057A (zh) 硬件实施通道适配器资源的逻辑分区的方法和系统
CN108292267B (zh) 用于配置装置的方法、系统和设备
CN1488104A (zh) 控制数据处理系统间经由存储器的数据流的方法和装置
CN1695127A (zh) 网络接口和协议
RU2653306C1 (ru) Способ, устройство и система для управления потреблением энергии неиспользуемым аппаратным средством канального интерфейса
CN110442534A (zh) 用于相干消息的高带宽链路层
WO2021169474A1 (zh) 一种Avalon总线转Axi4总线的方法
US20160188513A1 (en) Intelligent Network Fabric to Connect Multiple Computer Nodes with One or More SR-IOV Devices
CN107003838B (zh) 解码信息库
KR20240124186A (ko) 다이-투-다이 인터커넥트 프로토콜 계층
US20240104045A1 (en) System and method for ghost bridging
Santhanaraman et al. Designing zero-copy message passing interface derived datatype communication over infiniband: Alternative approaches and performance evaluation
US20180024939A1 (en) Method for executing a request to exchange data between first and second disjoint physical addressing spaces of chip or card circuit

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
C17 Cessation of patent right
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20081126

Termination date: 20120114