李世星1,,楊惠2,龍永新1,,劉三毛1
?。?.湖南工業(yè)大學(xué) 計(jì)算機(jī)與通信學(xué)院,湖南 株洲 412000,;2.國(guó)防科學(xué)技術(shù)大學(xué) 計(jì)算機(jī)學(xué)院,,湖南 長(zhǎng)沙 410073)
摘要:在網(wǎng)絡(luò)系統(tǒng)中,,優(yōu)化端系統(tǒng)的數(shù)據(jù)路徑能夠使數(shù)據(jù)在網(wǎng)絡(luò)接口和應(yīng)用程序之間快速移動(dòng)。因此,,研究基于端系統(tǒng)應(yīng)用的分組I/O加速技術(shù),,對(duì)分組I/O的發(fā)送和接收路徑分別優(yōu)化,有助于提高數(shù)據(jù)移動(dòng)效率,,減少CPU停滯,實(shí)現(xiàn)內(nèi)存并行處理,。本文提出分組I/O接收端流親和技術(shù), 分組I/O發(fā)送端鏈?zhǔn)桨l(fā)送技術(shù),。基于通用多核處理器和FPGA搭建端系統(tǒng)實(shí)驗(yàn)環(huán)境,,并對(duì)分組I/O加速后的端系統(tǒng)進(jìn)行性能測(cè)試,,實(shí)驗(yàn)結(jié)果表明,采用分組I/O加速技術(shù)的端系統(tǒng),,能夠使報(bào)文收發(fā)性能提升2.14倍,。
關(guān)鍵詞:端系統(tǒng);多核,;數(shù)據(jù)路徑,;FPGA
0引言
包含多核處理器的端系統(tǒng),隨著多核處理器處理性能的不斷提升,,運(yùn)行的應(yīng)用越來(lái)越復(fù)雜[1],。然而擁有多核、高速處理能力的端系統(tǒng),,并沒(méi)有對(duì)數(shù)據(jù)的接收與發(fā)送路徑進(jìn)行優(yōu)化,,端系統(tǒng)接收數(shù)據(jù)包、發(fā)送數(shù)據(jù)包占據(jù)大量的處理時(shí)間,,數(shù)據(jù)吞吐率成為制約端系統(tǒng)性能的瓶頸,。Intel[2]指出當(dāng)前多核處理器設(shè)計(jì)時(shí)并未考慮到網(wǎng)絡(luò)處理中分組I/O的問(wèn)題,在獲得了高效網(wǎng)絡(luò)處理性能的同時(shí),,也伴隨著分組I/O帶來(lái)的處理時(shí)間長(zhǎng)和網(wǎng)卡設(shè)計(jì)復(fù)雜的問(wèn)題,。為了降低網(wǎng)絡(luò)應(yīng)用帶來(lái)的I/O開(kāi)銷(xiāo),本文提出了基于端系統(tǒng)的分組I/O加速技術(shù),。其主要思想是接收數(shù)據(jù)路徑實(shí)現(xiàn)流親和技術(shù),,發(fā)送數(shù)據(jù)路徑實(shí)現(xiàn)鏈?zhǔn)桨l(fā)送技術(shù)。
1相關(guān)研究
針對(duì)多核網(wǎng)絡(luò)分組處理系統(tǒng)的分組I/O開(kāi)銷(xiāo)大的問(wèn)題,,Intel為通用多核處理平臺(tái)提出了數(shù)據(jù)平面開(kāi)發(fā)工具套件DPDK[2],,為高速網(wǎng)絡(luò)設(shè)計(jì)了一套數(shù)據(jù)平面庫(kù),提供了統(tǒng)一的處理器軟件編程模式,,從而幫助應(yīng)用程序有效地接收和發(fā)送數(shù)據(jù),,提高分組I/O性能,。Packetshader則采用大報(bào)文緩沖區(qū)的方式[3],靜態(tài)地預(yù)分配兩個(gè)大的緩沖區(qū)(SKB控制信息緩沖區(qū)和分組數(shù)據(jù)緩沖區(qū)),,通過(guò)連續(xù)存儲(chǔ)每個(gè)接收分組的SKB控制信息和分組數(shù)據(jù),,避免緩沖區(qū)申請(qǐng)、釋放以及描述符的轉(zhuǎn)換操作,,有效降低分組I/O開(kāi)銷(xiāo)和訪存開(kāi)銷(xiāo),。Netmap[4]通過(guò)預(yù)分配固定大小緩沖區(qū),采用批處理和并行數(shù)據(jù)路徑的方法,,實(shí)現(xiàn)了內(nèi)存映射,,存儲(chǔ)信息結(jié)構(gòu)簡(jiǎn)單高效,能夠?qū)崿F(xiàn)報(bào)文的高速轉(zhuǎn)發(fā),。DCA通過(guò)處理器硬件支持,,將接收網(wǎng)絡(luò)分組直接寫(xiě)入LLC cache,減小CPU訪問(wèn)分組描述符的延時(shí)[5],。而PFQ[6]接收的報(bào)文不需要通過(guò)標(biāo)準(zhǔn)協(xié)議棧處理,,直接送入批處理隊(duì)列進(jìn)行批處理。現(xiàn)有研究采用內(nèi)存映射的零拷貝技術(shù),,只能解決拷貝的開(kāi)銷(xiāo),,不能解決報(bào)文緩沖區(qū)分配和釋放開(kāi)銷(xiāo)。
2分組I/O接收端流親和技術(shù)
流親和技術(shù)通過(guò)構(gòu)造和維護(hù)多個(gè)動(dòng)態(tài)鏈表,,對(duì)端系統(tǒng)應(yīng)用中報(bào)文數(shù)據(jù)進(jìn)行處理,、傳輸,并以DMA方式寫(xiě)入內(nèi)存,。
2.1分組I/O接收端流親和加速模型
本文采取接收?qǐng)?bào)文緩沖區(qū)流親和加速模型,。將緩沖區(qū)描述符分配、回收交由硬件處理,,以實(shí)現(xiàn)報(bào)文零中斷處理,。為每一個(gè)線程分配一個(gè)存儲(chǔ)區(qū)鏈表,減少上下文切換開(kāi)銷(xiāo),,減少線程亂序存儲(chǔ)造成的TLB表頻繁缺失,。報(bào)文緩沖區(qū)描述符管理機(jī)制、DMA接收機(jī)制將對(duì)本文提出的流親和技術(shù)具體實(shí)現(xiàn)做出詳細(xì)說(shuō)明,。
2.1.1流親和報(bào)文緩沖區(qū)描述符管理機(jī)制
以多核處理器提供線程數(shù)是m為例,。如圖1所示,先由軟件初始化數(shù)據(jù)至m個(gè)緩沖區(qū)塊描述符FIFO,,每個(gè)內(nèi)核緩沖區(qū)內(nèi)地址連續(xù),,地址大小相等,地址塊大小相等,。每個(gè)塊地址包含k個(gè)地址,。在每一個(gè)內(nèi)核緩沖區(qū)內(nèi)通過(guò)塊描述符FIFO和偏移計(jì)數(shù)器分配地址,。
圖1報(bào)文緩沖區(qū)描述符管理機(jī)制結(jié)構(gòu)示意圖描述符初始化流程:系統(tǒng)驅(qū)動(dòng)給每個(gè)內(nèi)核緩沖區(qū)塊描述符FIFO分配描述符塊地址。每個(gè)內(nèi)核緩沖區(qū)分配n個(gè)塊地址,,內(nèi)核緩沖區(qū)的個(gè)數(shù)等于CPU提供的線程數(shù)m,。并給釋放計(jì)數(shù)器RAM和緩沖區(qū)塊描述符RAM中的值都賦0。
描述符回收流程:當(dāng)空閑描述符下發(fā)時(shí),,取塊索引號(hào),,讀緩沖區(qū)塊地址RAM和回收地址計(jì)數(shù)RAM,當(dāng)回收地址計(jì)數(shù)RAM的值為塊地址可存放地址數(shù)量的最大值時(shí),,回收該塊地址并將計(jì)數(shù)表的值賦0,,否則將計(jì)數(shù)表的值加1。
描述符分配流程:為m個(gè)內(nèi)核緩沖區(qū)實(shí)例化m個(gè)塊描述符分配模塊,。在每個(gè)塊描述符分配模塊中,當(dāng)分配地址偏移計(jì)數(shù)器的值為k時(shí),,從緩沖區(qū)塊描述符FIFO中重新取一個(gè)塊地址送至塊描述符分配模塊,。否則將當(dāng)前地址寄存器中的地址加1后發(fā)送至分配地址緩沖區(qū)。m個(gè)塊描述符分配模塊可以同時(shí)分配地址,。
2.1.2DMA接收機(jī)制
接收到下行部件報(bào)文時(shí),,如圖2所示,根據(jù)報(bào)文頭部線程號(hào)信息獲取地址,,如線程號(hào)為1,,則從1號(hào)當(dāng)前描述符SRAM中取出當(dāng)前地址,并從1號(hào)待分配報(bào)文描述符FIFO中取出下一跳地址,。將接收的報(bào)文與描述符(包括當(dāng)前地址,、下一跳地址)合并,傳送至共享緩沖區(qū),。傳輸完成時(shí)會(huì)保留該線程尾的下一跳地址,。下一個(gè)報(bào)文到達(dá)時(shí),將下一跳地址更新為當(dāng)前地址,,通過(guò)下一跳地址輪詢(xún)處理下一個(gè)報(bào)文,。
2.2分組I/O接收端流親和技術(shù)數(shù)據(jù)通路流程偽代碼
(1)初始化
begin
系統(tǒng)驅(qū)動(dòng)將描述符信息寫(xiě)入m個(gè)塊描述符隊(duì)列中,,將塊地址索引號(hào)寫(xiě)到描述符RAM中,,回收地址計(jì)數(shù)器都置0;
end
?。?)從端接收?qǐng)?bào)文到主機(jī)流程
begin
if (收到下行部件報(bào)文&&待分配報(bào)文描述符FIFO不為空)
begin
取出當(dāng)前地址RAM中的地址作為當(dāng)前地址,,取出待分配描述符FIFO中的地址作為下一跳地址,封裝后上傳,;
end
else return;
end
?。?)描述符回收流程
begin
if (有空閑描述符下發(fā))
begin
回收塊地址的計(jì)數(shù)器置0,;
清除對(duì)應(yīng)描述符RAM中的地址;
end
else begin
回收塊地址計(jì)數(shù)器累加,;
end
end
3分組I/O發(fā)送端鏈?zhǔn)桨l(fā)送技術(shù)
在實(shí)現(xiàn)操作系統(tǒng)指定的任意存儲(chǔ)區(qū)域報(bào)文鏈?zhǔn)桨l(fā)送中,,鏈?zhǔn)桨l(fā)送指的是一次DMA讀,讀出一塊描述符,,不再是每次DMA讀,,讀出一個(gè)描述符。這樣可以減少多次DMA讀的開(kāi)銷(xiāo),,提高發(fā)送效率,。
3.1分組I/O鏈?zhǔn)桨l(fā)送技術(shù)數(shù)據(jù)通路加速模型
本文提出的每次DMA讀,讀出一塊描述符,,讀出的描述符可能大于四拍,。這種情況下無(wú)法和TCP/IP數(shù)據(jù)報(bào)文區(qū)分。本文采取的方法是每次發(fā)送DMA讀請(qǐng)求時(shí),,寫(xiě)一個(gè)標(biāo)識(shí)存入FIFO,,在讀出數(shù)據(jù)時(shí),同時(shí)讀出該FIFO的值,,區(qū)分是描述塊還是TCP/IP報(bào)文,,實(shí)現(xiàn)鏈?zhǔn)桨l(fā)送。
鏈?zhǔn)桨l(fā)送的實(shí)現(xiàn)步驟如下:(1)系統(tǒng)驅(qū)動(dòng)將攜帶21位或者28位DMA地址的描述符,,以PCIE寫(xiě)寄存器的方式寫(xiě)入FPGA內(nèi)部邏輯,。其中,攜帶21位地址的描述符用于流親和機(jī)制中回收基地址,,攜帶28位地址的描述符用于構(gòu)造DMA讀請(qǐng)求,,每次DMA讀請(qǐng)求,讀出多個(gè)攜帶64位地址的描述符,。(2)構(gòu)造21位,、28位、64位DMA地址TLP報(bào)文讀請(qǐng)求,,每構(gòu)造一次DMA讀請(qǐng)求往FIFO中寫(xiě)一次標(biāo)識(shí),。(3)解析、定序PCIE核下發(fā)的TLP報(bào)文,。(4)讀取標(biāo)識(shí)FIFO,,區(qū)分描述符和數(shù)據(jù)報(bào)文。數(shù)據(jù)報(bào)文直接下發(fā)至網(wǎng)絡(luò)接口,,描述符則將其緩存,,再構(gòu)造TLP報(bào)文內(nèi)存讀請(qǐng)求。分組I/O鏈?zhǔn)桨l(fā)送技術(shù)數(shù)據(jù)通路加速模型如圖3所示。以下將介紹鏈?zhǔn)桨l(fā)送的四個(gè)機(jī)制,。
3.1.1PCIE接收機(jī)制
PCIE接收機(jī)制為PCIE 應(yīng)用層I/O部分,,將送往系統(tǒng)驅(qū)動(dòng)的數(shù)據(jù)解析并轉(zhuǎn)換成相應(yīng)格式的TLP報(bào)文,構(gòu)造TLP報(bào)文讀請(qǐng)求。
3.1.2PCIE發(fā)送機(jī)制
PCIE發(fā)送機(jī)制為PCIE 應(yīng)用層I/O部分,,將從內(nèi)存讀出的數(shù)據(jù)解析并轉(zhuǎn)換成規(guī)定格式的報(bào)文,。
3.1.3DMA轉(zhuǎn)發(fā)機(jī)制
接收PCIE發(fā)送機(jī)制報(bào)文,根據(jù)控制位(Ctrl)判斷是描述符還是普通報(bào)文,。普通報(bào)文直接轉(zhuǎn)發(fā)給下行模塊,,描述符則轉(zhuǎn)發(fā)給描述符管理機(jī)制進(jìn)行處理。
3.1.4DMA描述符管理機(jī)制
描述符管理機(jī)制為鏈表回收部分,,系統(tǒng)驅(qū)動(dòng)以寫(xiě)寄存器的方式,,寫(xiě)描述符至DMA描述符管理機(jī)制?;厥?1位DMA地址,,其他描述符形成特定格式,轉(zhuǎn)發(fā)至PCIE接收機(jī)制進(jìn)行處理,。
3.2分組I/O鏈?zhǔn)桨l(fā)送數(shù)據(jù)通路流程偽代碼
begin
if(報(bào)文發(fā)送描述符緩沖不為空)
begin
將描述符控制塊的28位地址,、長(zhǎng)度以及控制信息(共128位),以寫(xiě)寄存器的方式寫(xiě)入發(fā)送引擎中,,不回收該描述符;
end
if(根據(jù)控制信息判斷發(fā)送描述符對(duì)應(yīng)報(bào)文為普通報(bào)文)
begin
計(jì)數(shù)器累加并判斷,;
end
else begin
計(jì)數(shù)器累加并判斷,;
構(gòu)造21位或者28位DMA讀請(qǐng)求;
end
if(Completion報(bào)文返回)
begin
判別為普通數(shù)據(jù),則轉(zhuǎn)發(fā)至網(wǎng)絡(luò)接口,;
end
else
begin
構(gòu)造成64位DMA讀請(qǐng)求,;
end
else return;
end
4性能評(píng)估
為有效驗(yàn)證基于端系統(tǒng)應(yīng)用的分組I/O加速技術(shù)的性能,實(shí)驗(yàn)原型基于國(guó)產(chǎn)的高性能通用64位CPU與可編程FPGA實(shí)現(xiàn),,分組I/O加速的核心部件在FPGA器件上實(shí)現(xiàn),,F(xiàn)PGA型號(hào)采用Stratix IV EP4SGX230KF40C2。Ixia網(wǎng)絡(luò)測(cè)試儀連續(xù)發(fā)送大小為64 B的報(bào)文,。由一個(gè)萬(wàn)兆端口接收和發(fā)送報(bào)文,,端系統(tǒng)配置為單線程、雙線程,、四線程,、八線程四種模式。測(cè)試結(jié)果如圖4所示,,可以看出支持流親和和鏈?zhǔn)桨l(fā)送后,,64 B報(bào)文吞吐率有明顯的提升,性能最高提升2.14倍?!?/p>
5結(jié)束語(yǔ)
為了優(yōu)化端系統(tǒng)數(shù)據(jù)路徑,,使得數(shù)據(jù)在網(wǎng)絡(luò)接口和應(yīng)用程序之間快速移動(dòng),降低分組I/O開(kāi)銷(xiāo),,本文基于多核處理器和FPGA平臺(tái)實(shí)現(xiàn)端系統(tǒng),,提出了分組I/O接收端流親和與發(fā)送端鏈?zhǔn)桨l(fā)送兩種技術(shù)。實(shí)驗(yàn)結(jié)果顯示,,經(jīng)由分組I/O加速后,,端系統(tǒng)對(duì)于報(bào)文吞吐率有明顯的提升,性能最高提升2.14倍,。
參考文獻(xiàn)
?。?] HAN S, JANG K, PARK K S, et al. PacketShader: a GPUaccelerated software router[C]. ACM SIGCOMM Computer Communication Review,2010:195206.
?。?] Intel. Highperformance multicore networking software design options[R/OL]. [20160106]www.intel.com.
?。?] GARC′LADORADO J L, MATA F, RAMOS J, et al. Highperformance network traffic processing systems using commodity hardware[C]. Data Traffic Monitoring and Analysis, LNCS 7754, 2013: 327.
[4] RIZZO L. Netmap: a novel framework for fast packet I/O[C]. In 2012 USENIX Annual Technical Conference, 2012: 212.
?。?] RIZZO L, Deri L, CARDIGLIANO A. 10 Gbit/s line rate packet processing using commodity hardware: survey and new proposals[EB/OL].[20160106] http://luca.ntop.org/10g.pdf.
?。?] BONELLI N, PIETRO A D, GIORDANOS S, et al. On multigigabit packet capturing with multicore commodity hardware[C]. N. Taft and F. Ricciato (Eds.), PAM 2012, LNCS 7192, 2012: 6473.