文獻標識碼: 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)