文献标识码: A
DOI:10.16157/j.issn.0258-7998.2017.01.012
中文引用格式: 李龙飞,史阳春,王剑峰,等. 一种改进的高性能处理器网络子系统架构设计[J].电子技术应用,2017,43(1):46-49.
英文引用格式: Li Longfei,Shi Yangchun,Wang Jianfeng,et al. An improved high performance architecture of processor network subsystem[J].Application of Electronic Technique,2017,43(1):46-49.
0 引言
高速增长的网络带宽需要处理器具有足够的运算能力,同时也要求NIC(Network Interface Card)有高效的数据传输能力,这给处理器网络子系统设计带来了很多新的困难和挑战。实验数据表明,在万兆以太网(10GbE)环境下,网络数据的接收可以耗尽Intel至强四核处理器中2个核的处理能力[1]。这种网络速率与处理速率不平衡的情况影响了系统正常工作的性能,同时也直接增大了NIC的设计复杂度。
为了解决上述问题,国内外研究学者近年来已从体系结构、协议栈、系统软件等方面进行了诸多研究。文献[2-4]提出了TCP/IP Offload(TCP/IP卸载)技术;文献[5]提出远程直接数据存取(Remote Direct Memory Access,RMDA)技术;文献[6]从减小处理器与NIC交互次数切入,提出中断聚合、帧聚合以及大段数据分割技术。但这些方案无一例外都只关注于网络处理中的局部过程,并不能给系统处理效率带来显著的提升,且不具有通用性。
本文在分析了传统处理器网络子系统架构、工作原理和缺陷后,提出一种基于体系结构改进的网络子系统设计方案。该方案通过将数据帧管理单元从NIC上移到处理器中,解决了传统架构中NIC需要先获取帧描述信息才能传输数据的问题,从而减小了处理器与NIC的交互压力,提高了系统网络处理效率和吞吐率。
1 传统网络子系统架构
1.1 网络处理流程
网络数据处理是一种I/O敏感的过程,而且还涉及到诸多硬件(例如NIC,PCI-E等)和软件(例如TCP/IP协议,驱动程序)。一个数据帧的接收,开始于NIC和驱动程序的交互。缓存描述符(Buffer Descriptor,BD)作为NIC和驱动程序之间沟通的桥梁,其包含的信息会指明NIC中接收到的数据帧在内存中的存储地址,即BD中包含了一个有效的套接字缓冲区(Linux中称为SKB Buffer)。根据以太网帧的最大传输单元,SKB Buffer的大小为1 518 B。BD在主机的内核空间中形成一个BD环,配合产生指针和消耗指针动态地维护着BD与SKB Buffer之间的更新与同步。
典型的网络处理接收流程如图1所示。在接收数据之前,NIC首先需要通过PCI-E总线获取BD,并保存在NIC本地(步骤1)。当从网络中接收到数据帧后(步骤2),NIC通过PCI-E中的DMA将数据帧传输到BD指定的SKB Buffer中(步骤3)。一旦数据帧放入缓存,NIC会更新该BD信息,增加例如帧长、VLAN等信息,并将更新后的BD传输到返回BD环中(步骤4)。接着,NIC会通过PCI-E向CPU产生MSI中断(步骤5)。CPU收到中断请求后会去返回BD环中读取BD,从而获取到数据帧的地址和长度,并将数据帧映射到SKB数据结构中(步骤6)。当驱动程序将SKB Buffer传递到协议栈后,驱动程序会初始化BD信息并将释放SKB Buffer,以便后续收到的数据帧使用(步骤7)。协议栈处理完成后,数据帧会被传输到最终的应用程序,即到达用户空间。至此,一次数据帧的接收过程结束。
1.2 处理开销分析
在高速网络环境下,NIC面临诸多挑战。首先,在有效的数据传输之前,NIC需要通过PCI-E访问内核空间来获取BD,从本质上讲其不属于网络数据传输,显然会增加不必要的开销。研究表明,一次PCI-E的往返传输大约需要2 200 ns,这主要是由于复杂的PCI-E传输协议以及DMA请求竞争造成的[7]。
除此之外,在典型的网络处理流程中,数据复制以及SKB Buffer释放也是目前主要的网络处理开销。数据复制主要是指网络数据在传输过程中的三次复制,分别为从网络中复制到NIC缓存,从NIC缓存复制到系统内核空间,从系统内核空间复制到用户空间。这种频繁的复制会给CPU造成额外的负担,从而影响了其工作效率,增加了应用计算的平均等待时间。当数据被复制到应用程序缓冲区后,SKB Buffer需要进行释放,而cache未命中是造成Buffer释放开销大的首要原因。虽然增大cache可以减小cache未命中情况的发生,但却不能解决NIC与驱动交互以及数据复制等问题,因此在实际应用中意义不大。
2 网络子系统设计
2.1 总体架构
本质上讲,本文所提出的网络子系统架构是将传统方案中的整套BD管理单元从NIC上移到处理器中,也就是说,在处理器端口与cache之间集成一个具有BD管理功能的单元,称之为BD引擎(BD Engine,BDE),如图2所示。将BDE集成于处理器内部使其具有更强的灵活性,同时也可以扩展BD中对数据帧的描述信息。除此之外,由于BDE可以直接访问cache,因此不仅可以更快地读写BD以及数据,而且进一步减小了访问开销,减轻了PCI-E压力。与存储控制器类似,BDE采用I/O Hub来实现PCI-E与处理器的连接。
当BDE接收到一个数据帧时,其从cache中读取BD,接着将数据移动到对应的cache地址中,并且预加载可能引起存储器停顿的数据。本文提出的网络子系统架构采用cache来缓存数据,而不再使用NIC中的发送接收队列。当前高速NIC广泛采用接收端调控(Receive Side Scaling,RSS)技术来平衡多核处理器的网络负载,因此CPU中的每个核都会分配指定的一对接收和发送队列。然而这样的架构会增加NIC的开销,同时也影响了可测量性。改进的架构保持了对RSS技术的兼容性,BDE同时还实现了cache内的有效负载移动,并且提前清理cache中已经被复制的数据。
2.2 BDE设计
在传统的架构中,在发送和接收数据之前,NIC都需要通过PCI-E总线读写BD,这会产生很多的延迟,同时也会增大DMA压力。相对来讲,由于BDE可以直接访问cache,交互速度较快,因此有效解决了上述问题。更重要的是,这使得BDE可以扩展BD信息。本文对接收BD信息进行扩展,增加了导致存储器停顿数据的信息,即SKB和页数据地址。在传统的架构中,BD信息一般为16字节,包括数据帧存储的地址、长度、VLAN等信息。本文在此基础上增加了4字节的SKB地址和4字节的页地址,同时根据缓存行(cache line)的数目,在BDE中采用两个专用寄存器来存储SKB和页长度。在GbE环境下,接收环中通常保存1 024个BD,因此在增加了BD信息后,新架构下的接收环只增加了8 KB。
为了与传统架构对比,下面以数据接收过程为例对BDE各功能模块进行介绍,其结构如图3所示。当NIC收到数据帧后,其不需要获取BD,而是直接将数据帧及相关信息送入BDE中的接收缓存。与NIC一样,BDE也采用专用的寄存器来存储BD环的基地址和环指针信息。BD获取单元根据寄存器中的环基地址、指针地址,锁定对应的BD地址,然后发起读cache请求获取BD。在得到了数据的存储地址后,数据写入单元将会把数据写入cache中对应的地址。为了加速数据写入操作,查找加载单元会对数据帧进行查找和预加载。通过查找操作可以返回数据是否在cache中,当查找的数据不在cache中时,查找加载单元会给硬件逻辑发起预获取指令。当数据帧放入cache后,BDE中的BD更新模块和指针更新模块会对BD状态和指针信息进行更新。
因为cache中的数据帧在被应用程序复制后实质就无效了,因此为了更有效地实现数据帧在cache中的移动,本文扩展了cache架构,提出了新的cache操作:读后无效。在BDE中,数据移动模块会在原数据复制后使cache行无效来清除数据。在数据的复制过程中,TCP/IP协议会通过源地址、目的地址和长度三个寄存器对BDE进行控制。在这种情况下,BDE将连续的物理地址以cache行间隔分割为一系列块。当执行读后无效操作时,读源cache行数据,将读到的数据写入目的cache行,并使源cache行无效。该操作不仅避免了不必要的脏数据写回,而且不需要虚拟地址到物理地址的转换。
改进后的架构使NIC的设计复杂度显著降低,NIC不再需要对BD进行管理和更新,可以直接将MAC接收到的数据帧通过PCI-E传输至上层,因此也不必再使用队列对数据帧进行缓存。这不仅减小了硬件逻辑复杂度,也降低了存储开销。
3 实验评估
采用全系统模拟器Simics对本文提出的网络子系统架构进行模拟仿真。Simics是一款高性能的系统模拟器,它提供了一个受控制的、确定性的完全虚拟环境模拟平台,可模拟多种CPU、硬盘、网卡等[8]。使用器件建模语言对本文提出的网络子系统进行描述,设计了一个带有中断聚合功能的万兆以太网NIC和一个集成了BDE的处理器,其具体配置参数如表1所示。为了进行横向对比,分别对传统网络子系统架构以及DCA(Direct Cache Access)架构进行了模拟。
实验中三种架构均连接一个带宽、双工模式可配置的以太网链路,且指定链路中传输延时为1 μs。采用Iperf作为测试向量[9],分别在10 M、100 M、1 G以及10 G带宽下对三种架构进行实验,重点关注三种架构所能达到的实际带宽和对应的处理器利用率。规定实际带宽与理论带宽的比值为带宽利用率,其值越接近1则表明实际网络吞吐率越大。实验得到的带宽利用率对比图如图4所示。从图中可以看出,在10 M和100 M网络环境下,三种架构均达到了理论最大带宽。然而当带宽扩大到1 G和10 G后,传统架构下的实际网络带宽明显低于了理论值,带宽利用率分别为91.3%和80.5%。对于DCA架构和改进后的架构,在1G网络环境下两者基本都达到理论带宽值,而在10 G网络环境下,DCA架构的带宽利用率略高于改进后架构。
图5示出了不同网络环境下三种架构的处理器利用率。在1 G和10 G带宽下,传统架构的CPU利用率大幅度上升,分别达到了45.2%和54.1%。对比图4和图5,对实验数据进行发掘,可以得到尽管在1 G带宽下DCA架构与改进架构的带宽利用率基本相同,但其CPU利用率却明显高于改进架构;在10 G带宽下,DCA架构的带宽利用率和CPU利用率较改进架构均有略微的提高。综上,较传统架构和DCA架构,改进的架构在带宽利用率和CPU利用率上取得了更好的平衡性。
4 结论
本文立足于高速网络环境下的处理器网络子系统架构优化,通过分析传统网络子系统架构以及网络处理流程,提出一种改进的高性能处理器子系统架构。该架构通过将BD管理单元从NIC上移至处理器,解决了传统架构中繁琐的BD管理与更新问题,减小了处理器与NIC的交互压力,提高了系统网络处理效率和吞吐率。未来的研究工作可以从以下几方面展开:结合具体处理器架构对改进的网络子系统架构进行实现,并开发配套驱动程序以便在真实的网络环境中对该架构进行验证和性能评估。
参考文献
[1] KUMAR A,HUGGAHALLI R,MAKINENI S.Characterization of direct cache access on multi-core systems and 10gbe[C]//2009 IEEE 15th International Symposium on High Performance Computer Architecture.IEEE,2009:341-352.
[2] UCHIDA T.Hardware-based TCP processor for gigabit ethernet[J].IEEE Transactions on Nuclear Science,2008,55(3):1631-1637.
[3] WU Z Z,CHEN H C.Design and implementation of TCP/IP offload engine system over gigabit Ethernet[C]//Proceedings of 15th International Conference on Computer Communications and Networks.IEEE,2006:245-250.
[4] 赵喜全,刘兴奎,邵宗有,等.基于FPGA的TOE网卡设计与实现[J].Computer Engineering,2011,37(3).
[5] 王绍刚,徐炜遐,吴丹,等.一种面向不可靠网络的快速RDMA通信方法[J].湖南大学学报:自然科学版,2015,42(8):100-107.
[6] HUGGAHALLI R,IYER R,TETRICK S.Direct cache access for high bandwidth network I/O[C]//ACM SIGARCH Computer Architecture News.IEEE Computer Society,2005,33(2):50-59.
[7] MILLER D J,WATTS P M,MOORE A W.Motivating future interconnects:a differential measurement analysis of pci latency[C]//Proceedings of the 5th ACM/IEEE Symposium on Architectures for Networking and Communications Systems.ACM,2009:94-103.
[8] MAGNUSSON P S,CHRISTENSSON M,ESKILSON J,et al.Simics:A full system simulation platform[J].Computer,2002,35(2):50-58.
[9] TIRUMALA A,QIN F,DUGAN J,et al.Iperf:The TCP/UDP bandwidth measurement tool[J].http://dast.nlanr.net/Projects,2005.
作者信息:
李龙飞,史阳春,王剑峰,贺占庄
(西安微电子技术研究所,陕西 西安710065)