李世星,楊 惠,龍永新,劉三毛
(1.湖南工業(yè)大學(xué) 計(jì)算機(jī)與通信學(xué)院,湖南 株洲 412000;2.國防科學(xué)技術(shù)大學(xué) 計(jì)算機(jī)學(xué)院,湖南 長沙 410073)
?
基于端系統(tǒng)應(yīng)用的分組I/O加速技術(shù)*
李世星1,楊 惠2,龍永新1,劉三毛1
(1.湖南工業(yè)大學(xué) 計(jì)算機(jī)與通信學(xué)院,湖南 株洲 412000;2.國防科學(xué)技術(shù)大學(xué) 計(jì)算機(jī)學(xué)院,湖南 長沙 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ù),對分組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ù)?;谕ㄓ枚嗪颂幚砥骱虵PGA搭建端系統(tǒng)實(shí)驗(yàn)環(huán)境,并對分組I/O加速后的端系統(tǒng)進(jìn)行性能測試,實(shí)驗(yàn)結(jié)果表明,采用分組I/O加速技術(shù)的端系統(tǒng),能夠使報(bào)文收發(fā)性能提升2.14倍。
端系統(tǒng);多核;數(shù)據(jù)路徑;FPGA
包含多核處理器的端系統(tǒng),隨著多核處理器處理性能的不斷提升,運(yùn)行的應(yīng)用越來越復(fù)雜[1]。然而擁有多核、高速處理能力的端系統(tǒng),并沒有對數(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ǎng)絡(luò)處理性能的同時(shí),也伴隨著分組I/O帶來的處理時(shí)間長和網(wǎng)卡設(shè)計(jì)復(fù)雜的問題。為了降低網(wǎng)絡(luò)應(yīng)用帶來的I/O開銷,本文提出了基于端系統(tǒng)的分組I/O加速技術(shù)。其主要思想是接收數(shù)據(jù)路徑實(shí)現(xiàn)流親和技術(shù),發(fā)送數(shù)據(jù)路徑實(shí)現(xiàn)鏈?zhǔn)桨l(fā)送技術(shù)。
針對多核網(wǎng)絡(luò)分組處理系統(tǒng)的分組I/O開銷大的問題,Intel為通用多核處理平臺提出了數(shù)據(jù)平面開發(fā)工具套件DPDK[2],為高速網(wǎng)絡(luò)設(shè)計(jì)了一套數(shù)據(jù)平面庫,提供了統(tǒng)一的處理器軟件編程模式,從而幫助應(yīng)用程序有效地接收和發(fā)送數(shù)據(jù),提高分組I/O性能。Packetshader則采用大報(bào)文緩沖區(qū)的方式[3],靜態(tài)地預(yù)分配兩個(gè)大的緩沖區(qū)(SKB控制信息緩沖區(qū)和分組數(shù)據(jù)緩沖區(qū)),通過連續(xù)存儲每個(gè)接收分組的SKB控制信息和分組數(shù)據(jù),避免緩沖區(qū)申請、釋放以及描述符的轉(zhuǎn)換操作,有效降低分組I/O開銷和訪存開銷。Netmap[4]通過預(yù)分配固定大小緩沖區(qū),采用批處理和并行數(shù)據(jù)路徑的方法,實(shí)現(xiàn)了內(nèi)存映射,存儲信息結(jié)構(gòu)簡單高效,能夠?qū)崿F(xiàn)報(bào)文的高速轉(zhuǎn)發(fā)。DCA通過處理器硬件支持,將接收網(wǎng)絡(luò)分組直接寫入LLC cache,減小CPU訪問分組描述符的延時(shí)[5]。而PFQ[6]接收的報(bào)文不需要通過標(biāo)準(zhǔn)協(xié)議棧處理,直接送入批處理隊(duì)列進(jìn)行批處理?,F(xiàn)有研究采用內(nèi)存映射的零拷貝技術(shù),只能解決拷貝的開銷,不能解決報(bào)文緩沖區(qū)分配和釋放開銷。
流親和技術(shù)通過構(gòu)造和維護(hù)多個(gè)動(dòng)態(tài)鏈表,對端系統(tǒng)應(yīng)用中報(bào)文數(shù)據(jù)進(jìn)行處理、傳輸,并以DMA方式寫入內(nèi)存。
2.1 分組I/O接收端流親和加速模型
本文采取接收報(bào)文緩沖區(qū)流親和加速模型。將緩沖區(qū)描述符分配、回收交由硬件處理,以實(shí)現(xiàn)報(bào)文零中斷處理。為每一個(gè)線程分配一個(gè)存儲區(qū)鏈表,減少上下文切換開銷,減少線程亂序存儲造成的TLB表頻繁缺失。報(bào)文緩沖區(qū)描述符管理機(jī)制、DMA接收機(jī)制將對本文提出的流親和技術(shù)具體實(shí)現(xiàn)做出詳細(xì)說明。
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)通過塊描述符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í),取塊索引號,讀緩沖區(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.2 DMA接收機(jī)制
接收到下行部件報(bào)文時(shí),如圖2所示,根據(jù)報(bào)文頭部線程號信息獲取地址,如線程號為1,則從1號當(dāng)前描述符SRAM中取出當(dāng)前地址,并從1號待分配報(bào)文描述符FIFO中取出下一跳地址。將接收的報(bào)文與描述符(包括當(dāng)前地址、下一跳地址)合并,傳送至共享緩沖區(qū)。傳輸完成時(shí)會保留該線程尾的下一跳地址。下一個(gè)報(bào)文到達(dá)時(shí),將下一跳地址更新為當(dāng)前地址,通過下一跳地址輪詢處理下一個(gè)報(bào)文。
圖2 DMA接收機(jī)制結(jié)構(gòu)示意圖
2.2 分組I/O接收端流親和技術(shù)數(shù)據(jù)通路流程偽代碼
(1)初始化
begin
系統(tǒng)驅(qū)動(dòng)將描述符信息寫入m個(gè)塊描述符隊(duì)列中,將塊地址索引號寫到描述符RAM中,回收地址計(jì)數(shù)器都置0;
end
(2)從端接收報(bào)文到主機(jī)流程
begin
if (收到下行部件報(bào)文&&待分配報(bào)文描述符FIFO不為空)
begin
取出當(dāng)前地址RAM中的地址作為當(dāng)前地址,取出待分配描述符FIFO中的地址作為下一跳地址,封裝后上傳;
end
else return;
end
(3)描述符回收流程
begin
if (有空閑描述符下發(fā))
begin
回收塊地址的計(jì)數(shù)器置0;
清除對應(yīng)描述符RAM中的地址;
end
else begin
回收塊地址計(jì)數(shù)器累加;
end
end
在實(shí)現(xiàn)操作系統(tǒng)指定的任意存儲區(qū)域報(bào)文鏈?zhǔn)桨l(fā)送中,鏈?zhǔn)桨l(fā)送指的是一次DMA讀,讀出一塊描述符,不再是每次DMA讀,讀出一個(gè)描述符。這樣可以減少多次DMA讀的開銷,提高發(fā)送效率。
圖3 分組I/O發(fā)送端數(shù)據(jù)通路加速結(jié)構(gòu)圖
3.1 分組I/O鏈?zhǔn)桨l(fā)送技術(shù)數(shù)據(jù)通路加速模型
本文提出的每次DMA讀,讀出一塊描述符,讀出的描述符可能大于四拍。這種情況下無法和TCP/IP數(shù)據(jù)報(bào)文區(qū)分。本文采取的方法是每次發(fā)送DMA讀請求時(shí),寫一個(gè)標(biāo)識存入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寫寄存器的方式寫入FPGA內(nèi)部邏輯。其中,攜帶21位地址的描述符用于流親和機(jī)制中回收基地址,攜帶28位地址的描述符用于構(gòu)造DMA讀請求,每次DMA讀請求,讀出多個(gè)攜帶64位地址的描述符。(2)構(gòu)造21位、28位、64位DMA地址TLP報(bào)文讀請求,每構(gòu)造一次DMA讀請求往FIFO中寫一次標(biāo)識。(3)解析、定序PCIE核下發(fā)的TLP報(bào)文。(4)讀取標(biāo)識FIFO,區(qū)分描述符和數(shù)據(jù)報(bào)文。數(shù)據(jù)報(bào)文直接下發(fā)至網(wǎng)絡(luò)接口,描述符則將其緩存,再構(gòu)造TLP報(bào)文內(nèi)存讀請求。分組I/O鏈?zhǔn)桨l(fā)送技術(shù)數(shù)據(jù)通路加速模型如圖3所示。以下將介紹鏈?zhǔn)桨l(fā)送的四個(gè)機(jī)制。3.1.1 PCIE接收機(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)文讀請求。
3.1.2 PCIE發(fā)送機(jī)制
PCIE發(fā)送機(jī)制為PCIE 應(yīng)用層I/O部分,將從內(nèi)存讀出的數(shù)據(jù)解析并轉(zhuǎn)換成規(guī)定格式的報(bào)文。
3.1.3 DMA轉(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.4 DMA描述符管理機(jī)制
按照信仰觀念和儀式這兩個(gè)層面來研究各地的廟會或者叫地方保護(hù)神的祭祀民俗,先將它們分開來進(jìn)行描述,然后再合并為一個(gè)事象給予議論,這種做法在以往的博碩士學(xué)位論文里經(jīng)常出現(xiàn)。比如我們研究泰山廟會信仰時(shí),我們可能會先寫關(guān)于泰山奶奶是怎么回事兒,與古老的西王母有沒有什么關(guān)系,與碧霞元君等其他女神有什么關(guān)系,等等。這種考證性研究可能存在著問題,因?yàn)閷τ谝话憷习傩諄碚f,他們可能并不關(guān)心這些神祇之間有沒有關(guān)系,他們關(guān)心的是我今天來求神,神祇對我來說到底靈驗(yàn)不靈驗(yàn)。
描述符管理機(jī)制為鏈表回收部分,系統(tǒng)驅(qū)動(dòng)以寫寄存器的方式,寫描述符至DMA描述符管理機(jī)制。回收21位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位地址、長度以及控制信息(共128位),以寫寄存器的方式寫入發(fā)送引擎中,不回收該描述符;
end
if(根據(jù)控制信息判斷發(fā)送描述符對應(yīng)報(bào)文為普通報(bào)文)
begin
end
else begin
計(jì)數(shù)器累加并判斷;
構(gòu)造21位或者28位DMA讀請求;
end
if(Completion報(bào)文返回)
begin
判別為普通數(shù)據(jù),則轉(zhuǎn)發(fā)至網(wǎng)絡(luò)接口;
end
else
begin
構(gòu)造成64位DMA讀請求;
end
else return;
end
為有效驗(yàn)證基于端系統(tǒng)應(yīng)用的分組I/O加速技術(shù)的性能,實(shí)驗(yàn)原型基于國產(chǎn)的高性能通用64位CPU與可編程FPGA實(shí)現(xiàn),分組I/O加速的核心部件在FPGA器件上實(shí)現(xiàn),F(xiàn)PGA型號采用Stratix IV EP4SGX230KF40C2。Ixia網(wǎng)絡(luò)測試儀連續(xù)發(fā)送大小為64 B的報(bào)文。由一個(gè)萬兆端口接收和發(fā)送報(bào)文,端系統(tǒng)配置為單線程、雙線程、四線程、八線程四種模式。測試結(jié)果如圖4所示,可以看出支持流親和和鏈?zhǔn)桨l(fā)送后,64 B報(bào)文吞吐率有明顯的提升,性能最高提升2.14倍。
圖4 性能加速比對圖
為了優(yōu)化端系統(tǒng)數(shù)據(jù)路徑,使得數(shù)據(jù)在網(wǎng)絡(luò)接口和應(yīng)用程序之間快速移動(dòng),降低分組I/O開銷,本文基于多核處理器和FPGA平臺實(shí)現(xiàn)端系統(tǒng),提出了分組I/O接收端流親和與發(fā)送端鏈?zhǔn)桨l(fā)送兩種技術(shù)。實(shí)驗(yàn)結(jié)果顯示,經(jīng)由
分組I/O加速后,端系統(tǒng)對于報(bào)文吞吐率有明顯的提升,性能最高提升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.
[2] 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.
[4] RIZZO L. Netmap: a novel framework for fast packet I/O[C]. In 2012 USENIX Annual Technical Conference, 2012: 2-12.
[5] 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.
Packet I/O acceleration technology based on terminal system application
Li Shixing1,Yang Hui2,Long Yongxing1,Liu Sanmao1
(1.School of Computer and Communication, Hunan University of Technology, Zhuzhou 412000, China;2.School of Computer, National University of Defense Technology, Changsha,410073, China)
In network system, studying on acceleration technology based on packet I/O for terminal system application, optimizing the transfer data paths of packet I/O, will improve the data transfer rate between network interface and program space of user application, reduce the CPU stall and realize high efficient parallel processing. In this paper, we use streaming affinity technology for the packet I/O receiver, and use the chain transmission technology in the packet I/O sender. We develop a common platform with multicore processor and FPGA for terminal system, and make some experiments on sending and receiving packet performance with packet I/O acceleration technology. The experimental results show that the proposed scheme can achieve to 2.14x packet throughput.
terminal system; multicore; data path; FPGA
國家自然科學(xué)基金(61170102)
TP393.0
A
1674-7720(2016)07- 0063- 04
李世星,楊惠,龍永新,等. 基于端系統(tǒng)應(yīng)用的分組I/O加速技術(shù)[J].微型機(jī)與應(yīng)用,2016,35(7):63-66.
2016-01-06)
李世星(1990-),男,碩士研究生,主要研究方向:高性能網(wǎng)絡(luò)體系和高性能網(wǎng)絡(luò)設(shè)備研制。
楊惠(1987-),女,博士,助理研究員,主要研究方向:高性能網(wǎng)絡(luò)體系和高性能網(wǎng)絡(luò)設(shè)備研制。
龍永新(1966-),男,副研究員,主要研究方向:信號處理。