《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計應(yīng)用 > 基于端系統(tǒng)應(yīng)用的分組I/O加速技術(shù)
基于端系統(tǒng)應(yīng)用的分組I/O加速技術(shù)
2016年微型機與應(yīng)用第07期
李世星1,,楊惠2,龍永新1,劉三毛1
(1.湖南工業(yè)大學(xué) 計算機與通信學(xué)院,湖南 株洲 412000;2.國防科學(xué)技術(shù)大學(xué) 計算機學(xué)院,,湖南 長沙 410073)
摘要: 在網(wǎng)絡(luò)系統(tǒng)中,優(yōu)化端系統(tǒng)的數(shù)據(jù)路徑能夠使數(shù)據(jù)在網(wǎng)絡(luò)接口和應(yīng)用程序之間快速移動。因此,,研究基于端系統(tǒng)應(yīng)用的分組I/O加速技術(shù),對分組I/O的發(fā)送和接收路徑分別優(yōu)化,,有助于提高數(shù)據(jù)移動效率,,減少CPU停滯,實現(xiàn)內(nèi)存并行處理,。本文提出分組I/O接收端流親和技術(shù), 分組I/O發(fā)送端鏈式發(fā)送技術(shù),。基于通用多核處理器和FPGA搭建端系統(tǒng)實驗環(huán)境,,并對分組I/O加速后的端系統(tǒng)進行性能測試,,實驗結(jié)果表明,采用分組I/O加速技術(shù)的端系統(tǒng),,能夠使報文收發(fā)性能提升2.14倍,。
Abstract:
Key words :

  李世星1,楊惠2,,龍永新1,,劉三毛1

  (1.湖南工業(yè)大學(xué) 計算機與通信學(xué)院,,湖南 株洲 412000,;2.國防科學(xué)技術(shù)大學(xué) 計算機學(xué)院,湖南 長沙 410073)

       摘要:在網(wǎng)絡(luò)系統(tǒng)中,,優(yōu)化端系統(tǒng)數(shù)據(jù)路徑能夠使數(shù)據(jù)在網(wǎng)絡(luò)接口和應(yīng)用程序之間快速移動,。因此,研究基于端系統(tǒng)應(yīng)用的分組I/O加速技術(shù),,對分組I/O的發(fā)送和接收路徑分別優(yōu)化,,有助于提高數(shù)據(jù)移動效率,減少CPU停滯,,實現(xiàn)內(nèi)存并行處理,。本文提出分組I/O接收端流親和技術(shù), 分組I/O發(fā)送端鏈式發(fā)送技術(shù)?;谕ㄓ?a class="innerlink" href="http://forexkbc.com/tags/多核" title="多核" target="_blank">多核處理器和FPGA搭建端系統(tǒng)實驗環(huán)境,,并對分組I/O加速后的端系統(tǒng)進行性能測試,,實驗結(jié)果表明,采用分組I/O加速技術(shù)的端系統(tǒng),,能夠使報文收發(fā)性能提升2.14倍,。

  關(guān)鍵詞:端系統(tǒng);多核,;數(shù)據(jù)路徑,;FPGA

0引言

  包含多核處理器的端系統(tǒng),隨著多核處理器處理性能的不斷提升,,運行的應(yīng)用越來越復(fù)雜[1],。然而擁有多核、高速處理能力的端系統(tǒng),,并沒有對數(shù)據(jù)的接收與發(fā)送路徑進行優(yōu)化,,端系統(tǒng)接收數(shù)據(jù)包、發(fā)送數(shù)據(jù)包占據(jù)大量的處理時間,,數(shù)據(jù)吞吐率成為制約端系統(tǒng)性能的瓶頸,。Intel[2]指出當前多核處理器設(shè)計時并未考慮到網(wǎng)絡(luò)處理中分組I/O的問題,在獲得了高效網(wǎng)絡(luò)處理性能的同時,,也伴隨著分組I/O帶來的處理時間長和網(wǎng)卡設(shè)計復(fù)雜的問題,。為了降低網(wǎng)絡(luò)應(yīng)用帶來的I/O開銷,,本文提出了基于端系統(tǒng)的分組I/O加速技術(shù),。其主要思想是接收數(shù)據(jù)路徑實現(xiàn)流親和技術(shù),發(fā)送數(shù)據(jù)路徑實現(xiàn)鏈式發(fā)送技術(shù),。

1相關(guān)研究

  針對多核網(wǎng)絡(luò)分組處理系統(tǒng)的分組I/O開銷大的問題,,Intel為通用多核處理平臺提出了數(shù)據(jù)平面開發(fā)工具套件DPDK[2],為高速網(wǎng)絡(luò)設(shè)計了一套數(shù)據(jù)平面庫,,提供了統(tǒng)一的處理器軟件編程模式,,從而幫助應(yīng)用程序有效地接收和發(fā)送數(shù)據(jù),提高分組I/O性能,。Packetshader則采用大報文緩沖區(qū)的方式[3],,靜態(tài)地預(yù)分配兩個大的緩沖區(qū)(SKB控制信息緩沖區(qū)和分組數(shù)據(jù)緩沖區(qū)),通過連續(xù)存儲每個接收分組的SKB控制信息和分組數(shù)據(jù),,避免緩沖區(qū)申請,、釋放以及描述符的轉(zhuǎn)換操作,有效降低分組I/O開銷和訪存開銷,。Netmap[4]通過預(yù)分配固定大小緩沖區(qū),,采用批處理和并行數(shù)據(jù)路徑的方法,實現(xiàn)了內(nèi)存映射,,存儲信息結(jié)構(gòu)簡單高效,,能夠?qū)崿F(xiàn)報文的高速轉(zhuǎn)發(fā),。DCA通過處理器硬件支持,將接收網(wǎng)絡(luò)分組直接寫入LLC cache,,減小CPU訪問分組描述符的延時[5],。而PFQ[6]接收的報文不需要通過標準協(xié)議棧處理,直接送入批處理隊列進行批處理?,F(xiàn)有研究采用內(nèi)存映射的零拷貝技術(shù),,只能解決拷貝的開銷,不能解決報文緩沖區(qū)分配和釋放開銷,。

2分組I/O接收端流親和技術(shù)

  流親和技術(shù)通過構(gòu)造和維護多個動態(tài)鏈表,,對端系統(tǒng)應(yīng)用中報文數(shù)據(jù)進行處理、傳輸,,并以DMA方式寫入內(nèi)存,。

  2.1分組I/O接收端流親和加速模型

  本文采取接收報文緩沖區(qū)流親和加速模型。將緩沖區(qū)描述符分配,、回收交由硬件處理,,以實現(xiàn)報文零中斷處理。為每一個線程分配一個存儲區(qū)鏈表,,減少上下文切換開銷,,減少線程亂序存儲造成的TLB表頻繁缺失。報文緩沖區(qū)描述符管理機制,、DMA接收機制將對本文提出的流親和技術(shù)具體實現(xiàn)做出詳細說明,。

  2.1.1流親和報文緩沖區(qū)描述符管理機制

001.jpg

  以多核處理器提供線程數(shù)是m為例。如圖1所示,,先由軟件初始化數(shù)據(jù)至m個緩沖區(qū)塊描述符FIFO,,每個內(nèi)核緩沖區(qū)內(nèi)地址連續(xù),地址大小相等,,地址塊大小相等,。每個塊地址包含k個地址。在每一個內(nèi)核緩沖區(qū)內(nèi)通過塊描述符FIFO和偏移計數(shù)器分配地址,。

  圖1報文緩沖區(qū)描述符管理機制結(jié)構(gòu)示意圖描述符初始化流程:系統(tǒng)驅(qū)動給每個內(nèi)核緩沖區(qū)塊描述符FIFO分配描述符塊地址,。每個內(nèi)核緩沖區(qū)分配n個塊地址,內(nèi)核緩沖區(qū)的個數(shù)等于CPU提供的線程數(shù)m,。并給釋放計數(shù)器RAM和緩沖區(qū)塊描述符RAM中的值都賦0,。

  描述符回收流程:當空閑描述符下發(fā)時,取塊索引號,,讀緩沖區(qū)塊地址RAM和回收地址計數(shù)RAM,,當回收地址計數(shù)RAM的值為塊地址可存放地址數(shù)量的最大值時,回收該塊地址并將計數(shù)表的值賦0,否則將計數(shù)表的值加1,。

  描述符分配流程:為m個內(nèi)核緩沖區(qū)實例化m個塊描述符分配模塊,。在每個塊描述符分配模塊中,當分配地址偏移計數(shù)器的值為k時,,從緩沖區(qū)塊描述符FIFO中重新取一個塊地址送至塊描述符分配模塊,。否則將當前地址寄存器中的地址加1后發(fā)送至分配地址緩沖區(qū)。m個塊描述符分配模塊可以同時分配地址,。

  2.1.2DMA接收機制

002.jpg

  接收到下行部件報文時,,如圖2所示,根據(jù)報文頭部線程號信息獲取地址,,如線程號為1,,則從1號當前描述符SRAM中取出當前地址,并從1號待分配報文描述符FIFO中取出下一跳地址,。將接收的報文與描述符(包括當前地址,、下一跳地址)合并,傳送至共享緩沖區(qū),。傳輸完成時會保留該線程尾的下一跳地址,。下一個報文到達時,將下一跳地址更新為當前地址,,通過下一跳地址輪詢處理下一個報文,。

  2.2分組I/O接收端流親和技術(shù)數(shù)據(jù)通路流程偽代碼

  (1)初始化

  begin

  系統(tǒng)驅(qū)動將描述符信息寫入m個塊描述符隊列中,,將塊地址索引號寫到描述符RAM中,,回收地址計數(shù)器都置0;

  end

 ?。?)從端接收報文到主機流程

  begin

  if (收到下行部件報文&&待分配報文描述符FIFO不為空)

  begin

  取出當前地址RAM中的地址作為當前地址,,取出待分配描述符FIFO中的地址作為下一跳地址,,封裝后上傳,;

  end

  else return;

  end

  (3)描述符回收流程

  begin

  if (有空閑描述符下發(fā))

  begin

  回收塊地址的計數(shù)器置0,;

  清除對應(yīng)描述符RAM中的地址,;

  end

  else begin

  回收塊地址計數(shù)器累加;

  end

  end

3分組I/O發(fā)送端鏈式發(fā)送技術(shù)

  在實現(xiàn)操作系統(tǒng)指定的任意存儲區(qū)域報文鏈式發(fā)送中,,鏈式發(fā)送指的是一次DMA讀,,讀出一塊描述符,不再是每次DMA讀,,讀出一個描述符,。這樣可以減少多次DMA讀的開銷,提高發(fā)送效率,。

003.jpg

  3.1分組I/O鏈式發(fā)送技術(shù)數(shù)據(jù)通路加速模型

  本文提出的每次DMA讀,,讀出一塊描述符,,讀出的描述符可能大于四拍。這種情況下無法和TCP/IP數(shù)據(jù)報文區(qū)分,。本文采取的方法是每次發(fā)送DMA讀請求時,,寫一個標識存入FIFO,在讀出數(shù)據(jù)時,,同時讀出該FIFO的值,,區(qū)分是描述塊還是TCP/IP報文,實現(xiàn)鏈式發(fā)送,。

  鏈式發(fā)送的實現(xiàn)步驟如下:(1)系統(tǒng)驅(qū)動將攜帶21位或者28位DMA地址的描述符,,以PCIE寫寄存器的方式寫入FPGA內(nèi)部邏輯。其中,,攜帶21位地址的描述符用于流親和機制中回收基地址,,攜帶28位地址的描述符用于構(gòu)造DMA讀請求,每次DMA讀請求,,讀出多個攜帶64位地址的描述符,。(2)構(gòu)造21位、28位,、64位DMA地址TLP報文讀請求,,每構(gòu)造一次DMA讀請求往FIFO中寫一次標識。(3)解析,、定序PCIE核下發(fā)的TLP報文,。(4)讀取標識FIFO,區(qū)分描述符和數(shù)據(jù)報文,。數(shù)據(jù)報文直接下發(fā)至網(wǎng)絡(luò)接口,,描述符則將其緩存,再構(gòu)造TLP報文內(nèi)存讀請求,。分組I/O鏈式發(fā)送技術(shù)數(shù)據(jù)通路加速模型如圖3所示,。以下將介紹鏈式發(fā)送的四個機制。

  3.1.1PCIE接收機制

  PCIE接收機制為PCIE 應(yīng)用層I/O部分,,將送往系統(tǒng)驅(qū)動的數(shù)據(jù)解析并轉(zhuǎn)換成相應(yīng)格式的TLP報文,構(gòu)造TLP報文讀請求,。

  3.1.2PCIE發(fā)送機制

  PCIE發(fā)送機制為PCIE 應(yīng)用層I/O部分,將從內(nèi)存讀出的數(shù)據(jù)解析并轉(zhuǎn)換成規(guī)定格式的報文,。

  3.1.3DMA轉(zhuǎn)發(fā)機制

  接收PCIE發(fā)送機制報文,,根據(jù)控制位(Ctrl)判斷是描述符還是普通報文。普通報文直接轉(zhuǎn)發(fā)給下行模塊,,描述符則轉(zhuǎn)發(fā)給描述符管理機制進行處理,。

  3.1.4DMA描述符管理機制

  描述符管理機制為鏈表回收部分,系統(tǒng)驅(qū)動以寫寄存器的方式,寫描述符至DMA描述符管理機制,?;厥?1位DMA地址,其他描述符形成特定格式,,轉(zhuǎn)發(fā)至PCIE接收機制進行處理,。

  3.2分組I/O鏈式發(fā)送數(shù)據(jù)通路流程偽代碼

  begin

  if(報文發(fā)送描述符緩沖不為空)

  begin

  將描述符控制塊的28位地址、長度以及控制信息(共128位),,以寫寄存器的方式寫入發(fā)送引擎中,,不回收該描述符;

  end

  if(根據(jù)控制信息判斷發(fā)送描述符對應(yīng)報文為普通報文)

  begin

  計數(shù)器累加并判斷,;

  end

  else begin

  計數(shù)器累加并判斷,;

  構(gòu)造21位或者28位DMA讀請求;

  end

  if(Completion報文返回)

  begin

  判別為普通數(shù)據(jù),則轉(zhuǎn)發(fā)至網(wǎng)絡(luò)接口,;

  end

  else

  begin

  構(gòu)造成64位DMA讀請求,;

  end

  else return;

  end

  4性能評估

  為有效驗證基于端系統(tǒng)應(yīng)用的分組I/O加速技術(shù)的性能,實驗原型基于國產(chǎn)的高性能通用64位CPU與可編程FPGA實現(xiàn),,分組I/O加速的核心部件在FPGA器件上實現(xiàn),,F(xiàn)PGA型號采用Stratix IV EP4SGX230KF40C2。Ixia網(wǎng)絡(luò)測試儀連續(xù)發(fā)送大小為64 B的報文,。由一個萬兆端口接收和發(fā)送報文,,端系統(tǒng)配置為單線程、雙線程,、四線程,、八線程四種模式。測試結(jié)果如圖4所示,,可以看出支持流親和和鏈式發(fā)送后,,64 B報文吞吐率有明顯的提升,性能最高提升2.14倍,?!?/p>

004.jpg

5結(jié)束語

  為了優(yōu)化端系統(tǒng)數(shù)據(jù)路徑,使得數(shù)據(jù)在網(wǎng)絡(luò)接口和應(yīng)用程序之間快速移動,,降低分組I/O開銷,,本文基于多核處理器和FPGA平臺實現(xiàn)端系統(tǒng),提出了分組I/O接收端流親和與發(fā)送端鏈式發(fā)送兩種技術(shù),。實驗結(jié)果顯示,經(jīng)由分組I/O加速后,,端系統(tǒng)對于報文吞吐率有明顯的提升,,性能最高提升2.14倍。

參考文獻

  [1] HAN S, JANG K, PARK K S,, et al. PacketShader: a GPUaccelerated software router[C]. ACM SIGCOMM Computer Communication Review,2010:195206.

 ?。?] Intel. Highperformance multicore networking software design options[R/OL]. [20160106]www.intel.com.

  [3] GARC′LADORADO J L, MATA F, RAMOS J, et al. Highperformance network traffic processing systems using commodity hardware[C]. Data Traffic Monitoring and Analysis, LNCS 7754, 2013: 327.

 ?。?] RIZZO L. Netmap: a novel framework for fast packet I/O[C]. In 2012 USENIX Annual Technical Conference, 2012: 212.

 ?。?] RIZZO L, Deri L, CARDIGLIANO A. 10 Gbit/s line rate packet processing using commodity hardware: survey and new proposals[EB/OL].[20160106] http://luca.ntop.org/10g.pdf.

  [6] BONELLI N, PIETRO A D, GIORDANOS S, et al. On multigigabit packet capturing with multicore commodity hardware[C]. N. Taft and F. Ricciato (Eds.), PAM 2012, LNCS 7192, 2012: 6473.


此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載,。