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