文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.2017.01.012
中文引用格式: 李龍飛,史陽春,王劍峰,等. 一種改進的高性能處理器網(wǎng)絡子系統(tǒng)架構設計[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 引言
高速增長的網(wǎng)絡帶寬需要處理器具有足夠的運算能力,同時也要求NIC(Network Interface Card)有高效的數(shù)據(jù)傳輸能力,這給處理器網(wǎng)絡子系統(tǒng)設計帶來了很多新的困難和挑戰(zhàn)。實驗數(shù)據(jù)表明,在萬兆以太網(wǎng)(10GbE)環(huán)境下,網(wǎng)絡數(shù)據(jù)的接收可以耗盡Intel至強四核處理器中2個核的處理能力[1]。這種網(wǎng)絡速率與處理速率不平衡的情況影響了系統(tǒng)正常工作的性能,同時也直接增大了NIC的設計復雜度。
為了解決上述問題,國內(nèi)外研究學者近年來已從體系結構、協(xié)議棧、系統(tǒng)軟件等方面進行了諸多研究。文獻[2-4]提出了TCP/IP Offload(TCP/IP卸載)技術;文獻[5]提出遠程直接數(shù)據(jù)存?。≧emote Direct Memory Access,RMDA)技術;文獻[6]從減小處理器與NIC交互次數(shù)切入,提出中斷聚合、幀聚合以及大段數(shù)據(jù)分割技術。但這些方案無一例外都只關注于網(wǎng)絡處理中的局部過程,并不能給系統(tǒng)處理效率帶來顯著的提升,且不具有通用性。
本文在分析了傳統(tǒng)處理器網(wǎng)絡子系統(tǒng)架構、工作原理和缺陷后,提出一種基于體系結構改進的網(wǎng)絡子系統(tǒng)設計方案。該方案通過將數(shù)據(jù)幀管理單元從NIC上移到處理器中,解決了傳統(tǒng)架構中NIC需要先獲取幀描述信息才能傳輸數(shù)據(jù)的問題,從而減小了處理器與NIC的交互壓力,提高了系統(tǒng)網(wǎng)絡處理效率和吞吐率。
1 傳統(tǒng)網(wǎng)絡子系統(tǒng)架構
1.1 網(wǎng)絡處理流程
網(wǎng)絡數(shù)據(jù)處理是一種I/O敏感的過程,而且還涉及到諸多硬件(例如NIC,PCI-E等)和軟件(例如TCP/IP協(xié)議,驅動程序)。一個數(shù)據(jù)幀的接收,開始于NIC和驅動程序的交互。緩存描述符(Buffer Descriptor,BD)作為NIC和驅動程序之間溝通的橋梁,其包含的信息會指明NIC中接收到的數(shù)據(jù)幀在內(nèi)存中的存儲地址,即BD中包含了一個有效的套接字緩沖區(qū)(Linux中稱為SKB Buffer)。根據(jù)以太網(wǎng)幀的最大傳輸單元,SKB Buffer的大小為1 518 B。BD在主機的內(nèi)核空間中形成一個BD環(huán),配合產(chǎn)生指針和消耗指針動態(tài)地維護著BD與SKB Buffer之間的更新與同步。
典型的網(wǎng)絡處理接收流程如圖1所示。在接收數(shù)據(jù)之前,NIC首先需要通過PCI-E總線獲取BD,并保存在NIC本地(步驟1)。當從網(wǎng)絡中接收到數(shù)據(jù)幀后(步驟2),NIC通過PCI-E中的DMA將數(shù)據(jù)幀傳輸?shù)紹D指定的SKB Buffer中(步驟3)。一旦數(shù)據(jù)幀放入緩存,NIC會更新該BD信息,增加例如幀長、VLAN等信息,并將更新后的BD傳輸?shù)椒祷谺D環(huán)中(步驟4)。接著,NIC會通過PCI-E向CPU產(chǎn)生MSI中斷(步驟5)。CPU收到中斷請求后會去返回BD環(huán)中讀取BD,從而獲取到數(shù)據(jù)幀的地址和長度,并將數(shù)據(jù)幀映射到SKB數(shù)據(jù)結構中(步驟6)。當驅動程序將SKB Buffer傳遞到協(xié)議棧后,驅動程序會初始化BD信息并將釋放SKB Buffer,以便后續(xù)收到的數(shù)據(jù)幀使用(步驟7)。協(xié)議棧處理完成后,數(shù)據(jù)幀會被傳輸?shù)阶罱K的應用程序,即到達用戶空間。至此,一次數(shù)據(jù)幀的接收過程結束。
1.2 處理開銷分析
在高速網(wǎng)絡環(huán)境下,NIC面臨諸多挑戰(zhàn)。首先,在有效的數(shù)據(jù)傳輸之前,NIC需要通過PCI-E訪問內(nèi)核空間來獲取BD,從本質(zhì)上講其不屬于網(wǎng)絡數(shù)據(jù)傳輸,顯然會增加不必要的開銷。研究表明,一次PCI-E的往返傳輸大約需要2 200 ns,這主要是由于復雜的PCI-E傳輸協(xié)議以及DMA請求競爭造成的[7]。
除此之外,在典型的網(wǎng)絡處理流程中,數(shù)據(jù)復制以及SKB Buffer釋放也是目前主要的網(wǎng)絡處理開銷。數(shù)據(jù)復制主要是指網(wǎng)絡數(shù)據(jù)在傳輸過程中的三次復制,分別為從網(wǎng)絡中復制到NIC緩存,從NIC緩存復制到系統(tǒng)內(nèi)核空間,從系統(tǒng)內(nèi)核空間復制到用戶空間。這種頻繁的復制會給CPU造成額外的負擔,從而影響了其工作效率,增加了應用計算的平均等待時間。當數(shù)據(jù)被復制到應用程序緩沖區(qū)后,SKB Buffer需要進行釋放,而cache未命中是造成Buffer釋放開銷大的首要原因。雖然增大cache可以減小cache未命中情況的發(fā)生,但卻不能解決NIC與驅動交互以及數(shù)據(jù)復制等問題,因此在實際應用中意義不大。
2 網(wǎng)絡子系統(tǒng)設計
2.1 總體架構
本質(zhì)上講,本文所提出的網(wǎng)絡子系統(tǒng)架構是將傳統(tǒng)方案中的整套BD管理單元從NIC上移到處理器中,也就是說,在處理器端口與cache之間集成一個具有BD管理功能的單元,稱之為BD引擎(BD Engine,BDE),如圖2所示。將BDE集成于處理器內(nèi)部使其具有更強的靈活性,同時也可以擴展BD中對數(shù)據(jù)幀的描述信息。除此之外,由于BDE可以直接訪問cache,因此不僅可以更快地讀寫B(tài)D以及數(shù)據(jù),而且進一步減小了訪問開銷,減輕了PCI-E壓力。與存儲控制器類似,BDE采用I/O Hub來實現(xiàn)PCI-E與處理器的連接。
當BDE接收到一個數(shù)據(jù)幀時,其從cache中讀取BD,接著將數(shù)據(jù)移動到對應的cache地址中,并且預加載可能引起存儲器停頓的數(shù)據(jù)。本文提出的網(wǎng)絡子系統(tǒng)架構采用cache來緩存數(shù)據(jù),而不再使用NIC中的發(fā)送接收隊列。當前高速NIC廣泛采用接收端調(diào)控(Receive Side Scaling,RSS)技術來平衡多核處理器的網(wǎng)絡負載,因此CPU中的每個核都會分配指定的一對接收和發(fā)送隊列。然而這樣的架構會增加NIC的開銷,同時也影響了可測量性。改進的架構保持了對RSS技術的兼容性,BDE同時還實現(xiàn)了cache內(nèi)的有效負載移動,并且提前清理cache中已經(jīng)被復制的數(shù)據(jù)。
2.2 BDE設計
在傳統(tǒng)的架構中,在發(fā)送和接收數(shù)據(jù)之前,NIC都需要通過PCI-E總線讀寫B(tài)D,這會產(chǎn)生很多的延遲,同時也會增大DMA壓力。相對來講,由于BDE可以直接訪問cache,交互速度較快,因此有效解決了上述問題。更重要的是,這使得BDE可以擴展BD信息。本文對接收BD信息進行擴展,增加了導致存儲器停頓數(shù)據(jù)的信息,即SKB和頁數(shù)據(jù)地址。在傳統(tǒng)的架構中,BD信息一般為16字節(jié),包括數(shù)據(jù)幀存儲的地址、長度、VLAN等信息。本文在此基礎上增加了4字節(jié)的SKB地址和4字節(jié)的頁地址,同時根據(jù)緩存行(cache line)的數(shù)目,在BDE中采用兩個專用寄存器來存儲SKB和頁長度。在GbE環(huán)境下,接收環(huán)中通常保存1 024個BD,因此在增加了BD信息后,新架構下的接收環(huán)只增加了8 KB。
為了與傳統(tǒng)架構對比,下面以數(shù)據(jù)接收過程為例對BDE各功能模塊進行介紹,其結構如圖3所示。當NIC收到數(shù)據(jù)幀后,其不需要獲取BD,而是直接將數(shù)據(jù)幀及相關信息送入BDE中的接收緩存。與NIC一樣,BDE也采用專用的寄存器來存儲BD環(huán)的基地址和環(huán)指針信息。BD獲取單元根據(jù)寄存器中的環(huán)基地址、指針地址,鎖定對應的BD地址,然后發(fā)起讀cache請求獲取BD。在得到了數(shù)據(jù)的存儲地址后,數(shù)據(jù)寫入單元將會把數(shù)據(jù)寫入cache中對應的地址。為了加速數(shù)據(jù)寫入操作,查找加載單元會對數(shù)據(jù)幀進行查找和預加載。通過查找操作可以返回數(shù)據(jù)是否在cache中,當查找的數(shù)據(jù)不在cache中時,查找加載單元會給硬件邏輯發(fā)起預獲取指令。當數(shù)據(jù)幀放入cache后,BDE中的BD更新模塊和指針更新模塊會對BD狀態(tài)和指針信息進行更新。
因為cache中的數(shù)據(jù)幀在被應用程序復制后實質(zhì)就無效了,因此為了更有效地實現(xiàn)數(shù)據(jù)幀在cache中的移動,本文擴展了cache架構,提出了新的cache操作:讀后無效。在BDE中,數(shù)據(jù)移動模塊會在原數(shù)據(jù)復制后使cache行無效來清除數(shù)據(jù)。在數(shù)據(jù)的復制過程中,TCP/IP協(xié)議會通過源地址、目的地址和長度三個寄存器對BDE進行控制。在這種情況下,BDE將連續(xù)的物理地址以cache行間隔分割為一系列塊。當執(zhí)行讀后無效操作時,讀源cache行數(shù)據(jù),將讀到的數(shù)據(jù)寫入目的cache行,并使源cache行無效。該操作不僅避免了不必要的臟數(shù)據(jù)寫回,而且不需要虛擬地址到物理地址的轉換。
改進后的架構使NIC的設計復雜度顯著降低,NIC不再需要對BD進行管理和更新,可以直接將MAC接收到的數(shù)據(jù)幀通過PCI-E傳輸至上層,因此也不必再使用隊列對數(shù)據(jù)幀進行緩存。這不僅減小了硬件邏輯復雜度,也降低了存儲開銷。
3 實驗評估
采用全系統(tǒng)模擬器Simics對本文提出的網(wǎng)絡子系統(tǒng)架構進行模擬仿真。Simics是一款高性能的系統(tǒng)模擬器,它提供了一個受控制的、確定性的完全虛擬環(huán)境模擬平臺,可模擬多種CPU、硬盤、網(wǎng)卡等[8]。使用器件建模語言對本文提出的網(wǎng)絡子系統(tǒng)進行描述,設計了一個帶有中斷聚合功能的萬兆以太網(wǎng)NIC和一個集成了BDE的處理器,其具體配置參數(shù)如表1所示。為了進行橫向對比,分別對傳統(tǒng)網(wǎng)絡子系統(tǒng)架構以及DCA(Direct Cache Access)架構進行了模擬。
實驗中三種架構均連接一個帶寬、雙工模式可配置的以太網(wǎng)鏈路,且指定鏈路中傳輸延時為1 μs。采用Iperf作為測試向量[9],分別在10 M、100 M、1 G以及10 G帶寬下對三種架構進行實驗,重點關注三種架構所能達到的實際帶寬和對應的處理器利用率。規(guī)定實際帶寬與理論帶寬的比值為帶寬利用率,其值越接近1則表明實際網(wǎng)絡吞吐率越大。實驗得到的帶寬利用率對比圖如圖4所示。從圖中可以看出,在10 M和100 M網(wǎng)絡環(huán)境下,三種架構均達到了理論最大帶寬。然而當帶寬擴大到1 G和10 G后,傳統(tǒng)架構下的實際網(wǎng)絡帶寬明顯低于了理論值,帶寬利用率分別為91.3%和80.5%。對于DCA架構和改進后的架構,在1G網(wǎng)絡環(huán)境下兩者基本都達到理論帶寬值,而在10 G網(wǎng)絡環(huán)境下,DCA架構的帶寬利用率略高于改進后架構。
圖5示出了不同網(wǎng)絡環(huán)境下三種架構的處理器利用率。在1 G和10 G帶寬下,傳統(tǒng)架構的CPU利用率大幅度上升,分別達到了45.2%和54.1%。對比圖4和圖5,對實驗數(shù)據(jù)進行發(fā)掘,可以得到盡管在1 G帶寬下DCA架構與改進架構的帶寬利用率基本相同,但其CPU利用率卻明顯高于改進架構;在10 G帶寬下,DCA架構的帶寬利用率和CPU利用率較改進架構均有略微的提高。綜上,較傳統(tǒng)架構和DCA架構,改進的架構在帶寬利用率和CPU利用率上取得了更好的平衡性。
4 結論
本文立足于高速網(wǎng)絡環(huán)境下的處理器網(wǎng)絡子系統(tǒng)架構優(yōu)化,通過分析傳統(tǒng)網(wǎng)絡子系統(tǒng)架構以及網(wǎng)絡處理流程,提出一種改進的高性能處理器子系統(tǒng)架構。該架構通過將BD管理單元從NIC上移至處理器,解決了傳統(tǒng)架構中繁瑣的BD管理與更新問題,減小了處理器與NIC的交互壓力,提高了系統(tǒng)網(wǎng)絡處理效率和吞吐率。未來的研究工作可以從以下幾方面展開:結合具體處理器架構對改進的網(wǎng)絡子系統(tǒng)架構進行實現(xiàn),并開發(fā)配套驅動程序以便在真實的網(wǎng)絡環(huán)境中對該架構進行驗證和性能評估。
參考文獻
[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網(wǎng)卡設計與實現(xiàn)[J].Computer Engineering,2011,37(3).
[5] 王紹剛,徐煒遐,吳丹,等.一種面向不可靠網(wǎng)絡的快速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)