高速网卡与主机通信技术研究
2015-05-30吕民强等
吕民强等
[摘 要]本文分析了高速网卡与主机的通信方式——基于描述符的DMA通信机制,研究了提高网卡与主机通信性能的技术——提高总线带宽和减少中断开销。
[关键词]中断;描述符;DMA
[DOI]10.13939/j.cnki.zgsc.2015.20.059
随着网络技术,尤其是光纤技术的快速发展,互联网通信带宽不断提升。网络应用的性能需求表现为高吞吐率、低延迟、低主机开销和低存储开销等特点[1]。这些特点对网络接口卡与主机的通信性能提出了更高的要求。
1 高速网卡整体结构
高速网卡的硬件结构如图1所示,包括:IO接口部分、DMA引擎部分、接收和发送FIFO、以太网MAC协议处理部分和物理层(PHY)模拟信号处理部分,此外,还有一些辅助模块,如EEPROM接口模块,扩展BootROM接口模块,LED控制和整个芯片的命令状态寄存器(CSR)部分。IO接口主要负责和主机进行通信;DMA引擎模块主要负责数据包的具体控制,包括配合IO接口的控制动作、DMA访问起始地址的控制;MAC模块则负责处理以太网CSMA/CD(Carrier Sense Multiple Access with Collision Detection)协议;物理层(PHY)负责处理网卡与网卡之间的信号连接以及对信号进行恢复,配置寄存器CSR负责对网卡的特性进行设置。
高速网卡硬件结构
网卡有两路数据通道:一是数据发送过程:从主机网络协议栈传来的数据包,通过IO接口,由TxDMA控制到达TxFIFO先暂存起来,当TxFIFO暂存的数据包到达一定阈值时,TxMAC将TxFIFO中的数据包按CSMA/CD协议发送到具有自适应选择功能的PHY层,再由双绞线或者光纤发送到外部网络上。一是数据接收过程:网络上的数据信号被物理层捕获,转换为并行数据后传送到接收MAC,接收MAC判断数据包是否接被接收,将接收的数据包送进接收FIFO先暂存起来,当接收FIFO数据达到一定阈值后,RxDMA会通过IO模块,将数据传送到主机内存,完成数据包的接收[2,3]。
2 网卡与主机通信方式
传统网卡与主机交换数据的方式有中断方式和DMA方式[4]。
中断方式又称可编程I/O(Programmed I/O),是指当网卡硬件的报文缓冲区准备好数据时,便向主机CPU发送中断,CPU响应中断,在中断处理程序中先将数据从网卡的报文缓冲区读到CPU的寄存器,然后由寄存器再写到主存。在低速网络条件下,可编程I/O方式对主机系统性能影响不大。但是,在高速网络条件下,可编程I/O机制由于传输数据需要CPU的参与而大大增加CPU的工作负载,影响主机系统性能[5]。
DMA(Direct Memory Access)方式又称直接内存访问方式,DMA技术是一种代替微处理器完成存储器与外部设备或存储器之间大量数据传送的方法。利用DMA技术可不用CPU介入就能实现网卡与内存之间数据的直接传送,大大降低主机CPU的工作负载。运行在高速网络上的服务器要求其CPU资源更多用于应用程序的运行,所以,现在几乎所有的高速网卡设计都采用DMA方式作为与主机交换数据的主要手段[5]。
3 基于描述符的DMA通信技术
高速网卡采用基于描述符的DMA方式与主机进行通信。高速网络接口卡通过DMA引擎进行基本的数据传输。DMA引擎是实现DMA机制的主要部件,其主要工作是描述符的管理、接收和发送数据的传输以及中断的产生。
描述符机制和中断机制是DMA引擎的核心机制。描述符机制主要用于接收和发送描述符的组织和管理,而中断机制主要涉及接收中断和发送中断的产生。
3.1 描述符机制
在DMA机制中,网络接口卡在进行数据报文的读写前必须知道其读写的主机内存目的地址。DMA引擎中接收和发送描述符的主要任务之一是为网络接口卡提供主机内存的地址信息。接收和发送描述符的数据结构中包含读写的主机内存地址以及读写数据的长度。DMA引擎采用了环形的发送和接收描述符队列,发送和接收描述符指向的缓冲区大小通常是固定的。
DMA引擎包含两个描述符队列即接收描述符队列和发送描述符队列。网络接口卡和驱动程序进行正确数据传送的基本必要条件是接收和发送描述符的正确传送。
可用接收描述符到达DMA引擎可通过两种方法。一种方法是基于驱动程序的,由驱动程序告知DMA引擎此次可用接收描述符个数,然后DMA引擎通过DMA机制获得新的可用接收描述符;另一种是基于DMA引擎的,由DMA引擎主动请求接收描述符。
3.2 中断机制
在高速网络条件下,网络处理开销大小直接影响系统性能。网络处理开销大小取决于網络中断次数、网络数据传输方式以及用户层和操作系统内核间的数据拷贝方式。DMA引擎中断机制决定网络中断次数。为减少报文接收(发送)中断的次数,DMA引擎接收(发送)了一定数量的报文后才置接收(发送)中断。这个固定的报文数量被称为接收(发送)中断阈值。
为避免因网络流量过低导致较长的网络延迟,DMA引擎还提供超时机制,当定时器超时,DMA引擎立即产生中断。中断阈值与超时相结合的中断机制能够极大地减少网络接口卡产生的中断次数,同时将报文延时控制在较小的范围内。
3.3 数据收发过程
基于DMA机制的网络接口卡的数据接收和发送过程并不是对称的,因此我们将数据的发送和接收过程分开介绍并讨论。数据报文的接收过程是一个软硬件交互过程,具体过程如下:
(1)驱动程序初始化所有可用的接收描述符。然后,驱动程序通告网络接口卡接收描述符在内存的起始地址以及可用接收描述符的个数;
(2)DMA引擎根据接收描述符的起始地址信息和其他相关信息通过DMA方式将所有可用的接收描述符下载到DMA引擎;
(3)当有数据报文到达网络接口卡时,DMA引擎就根据接收描述符指示的地址发动一次DMA操作,将到达的数据报文写入主机内存;
(4)DMA操作完成后,DMA引擎立即发动另一次DMA操作,回写刚才已使用的接收描述符的若干域(报文长度域,回写标志域);
(5)当接收报文的数量达到接收中断阈值时,DMA引擎通告主机接收中断,主机处理接收数据并进行接收描述符的回收;
(6)主机在完成接收描述符的回收后,将此次回收接收描述符的个数通告给DMA引擎,DMA引擎根据相关信息读取可用接收描述符。
数据报文的发送过程也是一个软硬件交互过程,具体过程如下:
(1)驱动程序初始化所有可用的发送描述符,同时通告网络接口卡发送描述符的在内存中的起始地址;
(2)当有数据报文需要发送时,驱动程序将数据报文在内存中的起始地址和报文长度填写到发送描述符的相应域中;
(3)发送描述符填写完成后,网络接口卡驱动程序就通告网络接口卡此次需要处理的发送描述符个数;
(4)DMA引擎发动一次DMA操作将需要处理的发送描述符下载到网络接口卡上;
(5)发送描述符的下载完成后,DMA引擎就根据发送描述符的内容发动DMA操作,将发送描述符指向的数据报文发送到网络上;
(6)当发送报文的数量达到发送中断阈值时,DMA引擎通告主机发送中断,驱动程序开始进行发送中断的处理,并进行发送描述符的回收。
4 提高网卡与主机通信性能的技术
4.1 提高总线的带宽
网卡通过系统总线和主机系统相连,因此总线带宽的大小直接影响网卡和主机数据交换的性能。目前总线技术已发展到第三代:第一代ISA总线,第二代PCI总线和第三代PCIE总线,随之,也出现了三种不同类型的网卡:ISA网卡、PCI网卡和PCIE网卡。随着总线技术的发展,总线的带宽得到极大的提高,网卡与主机的通信性能也随之提升。
4.2 减少中断开销
为减少网卡硬件的中断频率,在网卡驱动中采取关中断技术和中断联合技术[6]。所谓关中断技术就是当CPU接收到网卡的第一个中断,执行中断处理时,在中断处理程序中将网卡的中断关闭,当处理完所有到达的数据包后,再将网卡的中断打开。所谓“中断合并”就是网络设备DMA完数据后并不立即向系统发中断,而是当设备接收(或者发送)的数据到达一定的阈值后才向系统发中断。
参考文献:
[1]吴建军.一种基于PCI总线的10/100Mbps以太网卡接口芯片的设计[D].武汉:华中科技大学,2003.
[2]孙德文.微型計算机技术[M].北京:高等教育出版社,1999.