楊 惠,陳一驕,李 韜,李世星,戴幻堯
(1.國(guó)防科技大學(xué) 計(jì)算機(jī)學(xué)院, 湖南 長(zhǎng)沙 410073; 2.中國(guó)洛陽(yáng)電子裝備試驗(yàn)中心, 河南 洛陽(yáng) 471003)
?
面向多核網(wǎng)絡(luò)分組處理系統(tǒng)的線程親和緩沖區(qū)管理機(jī)制*
楊 惠1,陳一驕1,李 韜1,李世星1,戴幻堯2
(1.國(guó)防科技大學(xué) 計(jì)算機(jī)學(xué)院, 湖南 長(zhǎng)沙 410073; 2.中國(guó)洛陽(yáng)電子裝備試驗(yàn)中心, 河南 洛陽(yáng) 471003)
基于通用多核架構(gòu)的網(wǎng)絡(luò)分組處理系統(tǒng)性能受到諸如分組IO開(kāi)銷高、多核共享內(nèi)存及進(jìn)程調(diào)度競(jìng)爭(zhēng)大、頁(yè)表緩沖表項(xiàng)失效率高等問(wèn)題的困擾。為此提出一種基于通用多核網(wǎng)絡(luò)分組處理系統(tǒng)、面向高速分組轉(zhuǎn)發(fā)應(yīng)用的線程親和緩沖區(qū)硬件管理機(jī)制,并在網(wǎng)絡(luò)專用協(xié)處理引擎上實(shí)現(xiàn)。該機(jī)制采用無(wú)中斷的線程親和調(diào)度策略,將包含控制信息與緩沖區(qū)地址信息的描述符和分組數(shù)據(jù)按照分組處理的線程號(hào)鏈?zhǔn)降貙?duì)應(yīng)加載在多個(gè)地址連續(xù)的共享緩沖區(qū)中?;谕ㄓ枚嗪撕同F(xiàn)場(chǎng)可編程門陣列平臺(tái)進(jìn)行報(bào)文轉(zhuǎn)發(fā)測(cè)試,實(shí)驗(yàn)結(jié)果表明,采用線程親和緩沖區(qū)管理機(jī)制能使平均報(bào)文轉(zhuǎn)發(fā)處理性能提升12.4%,有效地降低IO開(kāi)銷和TLB表項(xiàng)失效率。
分組IO;線程親和;緩沖區(qū)管理;分組轉(zhuǎn)發(fā);多核
隨著新型網(wǎng)絡(luò)業(yè)務(wù)、協(xié)議以及多核技術(shù)的發(fā)展,具有高可編程性的基于多核處理器的網(wǎng)絡(luò)分組處理系統(tǒng)成為學(xué)術(shù)界和工業(yè)界研究的熱點(diǎn)。隨著通用多核處理器處理性能的不斷提升,通用多核處理器與專用網(wǎng)絡(luò)處理器芯片的差距逐步減小,具備高可編程性的通用多核處理器成為網(wǎng)絡(luò)設(shè)備中廣泛采用的數(shù)據(jù)平面處理核心器件[1-2]?;谕ㄓ枚嗪薈PU+網(wǎng)絡(luò)專用協(xié)處理引擎(Network dedicated co-Processing Engine, NPE),能夠?qū)崿F(xiàn)其對(duì)網(wǎng)絡(luò)處理器芯片的有效替代[3-5]。然而,在基于通用多核進(jìn)行網(wǎng)絡(luò)分組處理的過(guò)程中存在一系列不屬于網(wǎng)絡(luò)分組處理的開(kāi)銷,諸如中斷處理、上下文切換、系統(tǒng)調(diào)用、數(shù)據(jù)拷貝、進(jìn)程調(diào)度等,這些開(kāi)銷被稱作分組IO開(kāi)銷[6-8]。將多核應(yīng)用于IPv4轉(zhuǎn)發(fā),分組IO開(kāi)銷占整個(gè)分組處理開(kāi)銷的70%[1]。當(dāng)前的多核處理器設(shè)計(jì)并未考慮到網(wǎng)絡(luò)處理中分組IO的問(wèn)題,在獲得了高效網(wǎng)絡(luò)處理性能的同時(shí),也伴隨著分組IO帶來(lái)的長(zhǎng)處理延遲和復(fù)雜的網(wǎng)卡設(shè)計(jì)問(wèn)題[2]。分組處理伴隨著密集的IO操作,分組處理過(guò)程中涉及的頻繁的訪存和頁(yè)表緩沖(Translation Lookaside Buffer, TLB)查表操作等會(huì)導(dǎo)致嚴(yán)重的訪存開(kāi)銷。
為降低通用多核處理網(wǎng)絡(luò)分組帶來(lái)的IO開(kāi)銷,降低TLB表缺失率,提出一種面向高速分組轉(zhuǎn)發(fā)的線程親和緩沖區(qū)管理機(jī)制(Thread Affinity for Buffer Management mechanism, TABM)。其主要思想是系統(tǒng)初始化時(shí),將預(yù)先分配的多核共享緩沖區(qū)分成大小相等、屬性相同的連續(xù)的緩沖區(qū)塊,每一個(gè)CPU線程對(duì)應(yīng)處理緩沖區(qū)塊中存儲(chǔ)的分組數(shù)據(jù);接收端采用線程親和的無(wú)中斷鏈?zhǔn)浇邮漳J剑瑢刂菩畔⑴c緩沖區(qū)地址信息的描述符和分組數(shù)據(jù),由實(shí)現(xiàn)TABM的NPE,通過(guò)直接內(nèi)存存取(Direct Memory Access, DMA)控制搬移,根據(jù)分組在多線程上處理的線程號(hào),對(duì)應(yīng)地加載在多個(gè)地址連續(xù)的共享緩沖區(qū)塊中,每一個(gè)線程中處理的分組及描述符信息以鏈表的形式組織并地址連續(xù)地存放,無(wú)須中斷多核;發(fā)送端將緩沖區(qū)地址管理的任務(wù)由多核軟件管理卸載下來(lái),各個(gè)線程通過(guò)各自的計(jì)數(shù)器到達(dá)閾值,以此來(lái)釋放共享緩沖區(qū)地址空間。線程親和的緩沖區(qū)管理方法在NPE上硬件實(shí)現(xiàn),用于解決降低系統(tǒng)緩沖區(qū)的管理開(kāi)銷、IO開(kāi)銷和線程亂序存儲(chǔ)分組造成的TLB表缺失的問(wèn)題,為多核實(shí)現(xiàn)高速分組轉(zhuǎn)發(fā)提供了有效的解決方案,更好地支持了多核多線程報(bào)文處理。
針對(duì)多核網(wǎng)絡(luò)分組處理系統(tǒng)的分組IO開(kāi)銷大的問(wèn)題,Intel基于通用多核處理平臺(tái)進(jìn)行高效網(wǎng)絡(luò)軟件處理,提出了數(shù)據(jù)平面開(kāi)發(fā)工具套件(Data Plane Development Kit, DPDK)[2],為高速網(wǎng)絡(luò)設(shè)計(jì)了一套數(shù)據(jù)平面庫(kù),提供了統(tǒng)一的處理器軟件編程模式,從而幫助應(yīng)用程序有效地接收和發(fā)送數(shù)據(jù),提高分組IO性能。PacketShader[1]則采用大報(bào)文緩沖區(qū)的方式,靜態(tài)地預(yù)分配兩個(gè)大的緩沖區(qū)——套接字緩存(SocKet Buffer, SKB)控制信息緩沖區(qū)和分組數(shù)據(jù)緩沖區(qū),通過(guò)連續(xù)存儲(chǔ)每個(gè)接收分組的SKB控制信息和分組數(shù)據(jù),避免緩沖區(qū)申請(qǐng)/釋放以及描述符的轉(zhuǎn)換操作,有效降低分組IO開(kāi)銷和訪存開(kāi)銷。Netmap[9]通過(guò)預(yù)分配固定大小緩沖區(qū)、批處理和并行直接路徑的方法,實(shí)現(xiàn)了內(nèi)存映射,存儲(chǔ)信息結(jié)構(gòu)簡(jiǎn)單高效,能夠?qū)崿F(xiàn)報(bào)文的高速轉(zhuǎn)發(fā)。直接高速緩存訪問(wèn)(Direct Cache Access, DCA)通過(guò)處理器硬件支持,將接收網(wǎng)絡(luò)分組直接寫入LLC cache,減小CPU訪問(wèn)分組描述符的延時(shí)[10]。而基于多核架構(gòu)的Linux內(nèi)核數(shù)據(jù)包獲取引擎[6]接收的報(bào)文不需要通過(guò)標(biāo)準(zhǔn)協(xié)議棧處理,而是送入批處理隊(duì)列進(jìn)行批處理?,F(xiàn)有研究還采用內(nèi)存映射的零拷貝技術(shù),采用將內(nèi)核的內(nèi)存區(qū)域直接映射到應(yīng)用空間的方法,減少內(nèi)存訪問(wèn),這類方法需要對(duì)驅(qū)動(dòng)和內(nèi)核做出修改,只能解決拷貝的開(kāi)銷,不能解決報(bào)文緩沖區(qū)分配和釋放開(kāi)銷。面向高速分組轉(zhuǎn)發(fā)提出的自描述緩沖區(qū)(Self-Described Buffer, SDB)管理機(jī)制[11]將描述符、SKB控制信息以及分組數(shù)據(jù)連續(xù)存儲(chǔ)在一個(gè)緩沖區(qū)中,大大降低系統(tǒng)的緩沖區(qū)管理開(kāi)銷,但存在TLB頁(yè)表頻繁失效切換的問(wèn)題,帶來(lái)了很大的訪存開(kāi)銷。
2.1 多核共享緩沖區(qū)硬件管理基礎(chǔ)機(jī)制及分組轉(zhuǎn)發(fā)模型
以接收端為例,首先簡(jiǎn)要介紹在通用多核分組處理系統(tǒng)中報(bào)文接收的基本流程:網(wǎng)絡(luò)端口接收到分組后,通過(guò)DMA將分組傳送到預(yù)先分配的內(nèi)核緩沖區(qū)內(nèi),軟件更新描述符環(huán)、標(biāo)記已經(jīng)使用的緩沖區(qū)描述符,并發(fā)出中斷請(qǐng)求、通知多核分組數(shù)據(jù)到達(dá),操作系統(tǒng)處理中斷并將分組數(shù)據(jù)送往協(xié)議棧。這其中存在大量的CPU中斷處理開(kāi)銷軟件維護(hù)描述符的系統(tǒng)開(kāi)銷以及內(nèi)核緩沖區(qū)與用戶數(shù)據(jù)之間的大量數(shù)據(jù)拷貝等開(kāi)銷。為了有效地解決緩沖區(qū)管理開(kāi)銷問(wèn)題,本文提出的TABM基于已有研究——SDB方法[11],將包含控制信息的描述符和分組數(shù)據(jù)連續(xù)存儲(chǔ)在多核共享緩沖區(qū)中,也就是每個(gè)緩沖區(qū)有固定大小的單元對(duì)應(yīng)存儲(chǔ)一個(gè)報(bào)文的數(shù)據(jù)和控制信息,每個(gè)單元的報(bào)文數(shù)據(jù)對(duì)齊到2 K字節(jié)。為了支持多核多線程,該緩沖區(qū)為多核共享地址連續(xù)的存儲(chǔ)區(qū)域。實(shí)現(xiàn)了SDB方法的NPE在初始化時(shí),將共享緩沖區(qū)的描述符填入空閑描述符塊隊(duì)列中。當(dāng)數(shù)據(jù)報(bào)文到達(dá),SDB根據(jù)空閑描述符隊(duì)列存儲(chǔ)的地址分配一個(gè)空閑描述符,與數(shù)據(jù)報(bào)文組裝好通過(guò)PCIE送往共享緩沖區(qū)對(duì)應(yīng)的地址空間。該共享緩沖區(qū)以塊為單位,由硬件進(jìn)行組織、申請(qǐng)和釋放。描述符和報(bào)文塊以單向鏈表的形式在共享緩沖區(qū)內(nèi)組織,如圖1所示。系統(tǒng)在處理分組時(shí),只要空閑描述符隊(duì)列具有空閑描述符,數(shù)據(jù)報(bào)文即可上傳至共享緩沖區(qū),等待CPU核處理,無(wú)須通過(guò)中斷響應(yīng),也無(wú)須多次訪存緩沖區(qū)。
圖1 無(wú)中斷緩沖區(qū)硬件管理機(jī)制示意圖Fig.1 Hardware buffer management mechanism without interruption
2.2 線程親和緩沖區(qū)管理機(jī)制描述
基于SDB管理機(jī)制的分組轉(zhuǎn)發(fā)模型能支持多核多線程的調(diào)度,然而不同線程處理的數(shù)據(jù)報(bào)文將亂序排列在內(nèi)存共享緩沖區(qū)中。如圖1所示,當(dāng)前描述符靜態(tài)隨機(jī)存取存儲(chǔ)器(Static Random Access Memory, SRAM)中,與每個(gè)CPU線程號(hào)一一對(duì)應(yīng)地存儲(chǔ)著當(dāng)前即將接收?qǐng)?bào)文的空閑描述符,而當(dāng)前描述符SRAM中對(duì)應(yīng)的報(bào)文空閑描述符被分配給報(bào)文后,從空閑描述符隊(duì)列中產(chǎn)生下一個(gè)當(dāng)前描述符,存入SRAM對(duì)應(yīng)的線程號(hào)中。例如,首先將要送往線程2號(hào)處理的報(bào)文,從網(wǎng)絡(luò)端口經(jīng)由NPE分配描述符后,送往多核共享緩沖區(qū);接著,送往線程號(hào)為N-2等的報(bào)文陸續(xù)到達(dá),由于空閑描述符隊(duì)列依次給各個(gè)線程提供當(dāng)前空閑描述符,下一個(gè)線程號(hào)同樣為2的報(bào)文對(duì)應(yīng)的緩沖區(qū)地址就不能與上一個(gè)線程號(hào)為2的報(bào)文連續(xù),即同一線程上處理的報(bào)文被亂序地加載到共享緩沖區(qū)內(nèi)存儲(chǔ),這將導(dǎo)致多核處理報(bào)文時(shí)TLB查表的高失效率,致使TLB表項(xiàng)反復(fù)沖刷,嚴(yán)重影響系統(tǒng)性能。
如果將送往相同內(nèi)核線程進(jìn)行處理的報(bào)文對(duì)應(yīng)的順序存放到連續(xù)的共享緩沖區(qū)空間,將緩沖區(qū)管理進(jìn)行線程親和,會(huì)大大降低TLB查表的失效率。于是,將共享緩沖區(qū)按線程數(shù)進(jìn)行劃分,以8線程為例,如圖2所示,多核共享緩沖區(qū)按地址順序劃分成8塊。實(shí)現(xiàn)TABM的NPE進(jìn)行共享緩沖區(qū)描述符初始化、維護(hù)與分配、釋放與回收的機(jī)制如下:
1)共享緩沖區(qū)描述符在NPE中的初始化:系統(tǒng)首先在內(nèi)存空間中初始化連續(xù)的共享緩沖區(qū)塊,再將要初始化的緩沖區(qū)描述符塊通過(guò)寫寄存器的方式通知NPE,于是緩沖區(qū)描述符按線程填充到對(duì)應(yīng)的空閑描述符隊(duì)列中;
2)共享緩沖區(qū)描述符的維護(hù)與分配:從線程對(duì)應(yīng)的空閑描述符隊(duì)列中取出當(dāng)前塊基地址,并順序以固定長(zhǎng)度2 K為偏移量,形成當(dāng)前描述符存放入SRAM中,當(dāng)報(bào)文到達(dá),將對(duì)應(yīng)線程的報(bào)文數(shù)據(jù)與對(duì)應(yīng)線程的當(dāng)前描述符,通過(guò)PCIE發(fā)送到共享緩沖區(qū)中;
3)共享緩沖區(qū)釋放和描述符回收:按塊釋放緩沖區(qū),每個(gè)緩沖區(qū)塊均包含M個(gè)2 K大小的緩沖區(qū),那么當(dāng)該塊對(duì)應(yīng)的計(jì)數(shù)器為M時(shí),表明該緩沖區(qū)塊全部釋放,該塊對(duì)應(yīng)的描述符可以回收到對(duì)應(yīng)線程的空閑描述符隊(duì)列中。
圖2 線程親和緩沖區(qū)管理機(jī)制示意圖Fig.2 Thread affinity for buffer management mechanism
2.3 線程親和緩沖區(qū)管理機(jī)制硬件實(shí)現(xiàn)
如圖3所示,線程親和緩沖區(qū)硬件管理機(jī)制結(jié)構(gòu)實(shí)現(xiàn)主要包括緩沖區(qū)地址分配模塊、緩沖區(qū)描述符回收模塊。
圖3 線程親和緩沖區(qū)管理機(jī)制硬件結(jié)構(gòu)圖Fig.3 TABM architecture
緩沖區(qū)地址分配模塊:接收?qǐng)?bào)文,并根據(jù)該報(bào)文對(duì)應(yīng)的CPU線程號(hào),從當(dāng)前描述符SRAM中獲取當(dāng)前報(bào)文存放到共享緩沖區(qū)內(nèi)的描述符信息Cu_Addri,同時(shí)從各自待分配報(bào)文描述符先入先出隊(duì)列(First Input First Output, FIFO)中獲取下一報(bào)文存放到共享緩沖區(qū)內(nèi)的描述符信息next_Addri(i=0,1…,7),同報(bào)文一起構(gòu)造報(bào)文鏈表,并通過(guò)PCIE發(fā)送到多核的共享緩沖區(qū)內(nèi)存儲(chǔ)。
緩沖區(qū)描述符回收模塊:主要負(fù)責(zé)初始化和回收共享緩沖區(qū)描述符隊(duì)列,并為報(bào)文鏈形成可用的描述符。多核下發(fā)需要釋放的共享緩沖區(qū)對(duì)應(yīng)的描述符信息到下發(fā)描述符緩沖。根據(jù)描述符信息,將該描述符對(duì)應(yīng)的塊地址存放入緩沖區(qū)塊描述符SRAM中,每個(gè)塊地址都對(duì)應(yīng)一個(gè)釋放計(jì)數(shù)器。仍舊以每個(gè)緩沖區(qū)塊包含M個(gè)2 K大小的緩沖區(qū)為例,當(dāng)釋放計(jì)數(shù)器計(jì)數(shù)到M時(shí),釋放這一個(gè)塊地址,并將對(duì)應(yīng)的塊描述符寫入緩沖區(qū)塊描述符FIFO中。由于每一個(gè)CPU線程對(duì)應(yīng)一個(gè)緩沖區(qū)塊描述符FIFO,因而圖2中的A1至A16緩沖區(qū)塊描述符經(jīng)由塊描述符回收分派器對(duì)應(yīng)加載到緩沖區(qū)塊描述符FIFO 0中,H1至H16緩沖區(qū)塊描述符對(duì)應(yīng)加載到緩沖區(qū)塊描述符FIFO 7中。
塊描述符到報(bào)文描述符轉(zhuǎn)換模塊:實(shí)現(xiàn)將8個(gè)塊的地址信息分配到對(duì)應(yīng)的8個(gè)待分配報(bào)文描述符FIFO中。一個(gè)緩沖區(qū)塊基地址包含M個(gè)待分配報(bào)文描述符,每形成一個(gè)待分配報(bào)文描述符,計(jì)數(shù)器加1,地址偏移2 K。當(dāng)計(jì)數(shù)器等于M時(shí),則這個(gè)緩沖區(qū)塊的地址分配完了。
2.4 基于TABM的報(bào)文處理流程
為實(shí)現(xiàn)無(wú)中斷地接收由網(wǎng)絡(luò)接口傳送來(lái)的數(shù)據(jù)報(bào)文,接收端接收的報(bào)文將被存儲(chǔ)到共享報(bào)文緩沖區(qū)中。接收?qǐng)?bào)文需要給報(bào)文分配存放在內(nèi)存的地址,那么首先需要對(duì)報(bào)文存放的內(nèi)存地址進(jìn)行初始化,這部分初始化工作由軟硬件配合完成。在描述符初始化流程中,系統(tǒng)首先將要初始化的共享報(bào)文緩沖區(qū)描述符經(jīng)過(guò)圖3中所示的下發(fā)描述符緩沖,再下發(fā)到塊描述符SRAM中,同時(shí)將對(duì)應(yīng)的緩沖區(qū)塊計(jì)數(shù)器進(jìn)行累加,當(dāng)計(jì)數(shù)器數(shù)值到達(dá)塊大小時(shí),緩沖區(qū)塊地址經(jīng)由塊描述符回收分派器按照線程對(duì)應(yīng)地加載到緩沖區(qū)塊描述符FIFO中,同時(shí)將塊描述符SRAM中的計(jì)數(shù)器清零。初始化流程的描述在表1中給出。
表1 硬件初始化偽碼描述
當(dāng)緩沖區(qū)塊地址在緩沖區(qū)塊描述符FIFO中準(zhǔn)備好以后,數(shù)據(jù)報(bào)文便可以從網(wǎng)絡(luò)接口接收進(jìn)來(lái)。根據(jù)接收進(jìn)來(lái)的數(shù)據(jù)報(bào)文的線程號(hào)CPUid,從線程對(duì)應(yīng)的當(dāng)前描述符SRAM中獲取描述符信息,將描述符和數(shù)據(jù)報(bào)文組成報(bào)文鏈表,構(gòu)造成PCIE的寫請(qǐng)求TLP報(bào)文,送往共享報(bào)文緩沖區(qū)內(nèi)與線程對(duì)應(yīng)的存放空間中,與此同時(shí)將該線程的下一描述符信息從空閑描述符隊(duì)列FIFO中填充到當(dāng)前描述符SRAM中已被分配出去的位置。只要共享報(bào)文緩沖區(qū)中存在空閑的地址,分組處理系統(tǒng)就可以持續(xù)地接收網(wǎng)絡(luò)接口接收上來(lái)的報(bào)文。分組處理系統(tǒng)之上運(yùn)行的應(yīng)用程序通過(guò)輪詢的方式檢測(cè)到新數(shù)據(jù)的到達(dá),然后對(duì)數(shù)據(jù)進(jìn)行處理,無(wú)須中斷端系統(tǒng)進(jìn)行數(shù)據(jù)接收。RX接收流程的硬件描述在表2中給出。
表2 RX端接收?qǐng)?bào)文偽碼描述
當(dāng)共享緩沖區(qū)中的報(bào)文被處理完之后,需要將數(shù)據(jù)通過(guò)發(fā)送端下發(fā)出去,TX發(fā)送分組到端系統(tǒng)及描述符的回收如表3所示。TABM為了降低描述符回收代價(jià),將描述符回收下放到硬件實(shí)現(xiàn),因此發(fā)送端實(shí)現(xiàn)了數(shù)據(jù)報(bào)文的發(fā)送以及描述符的回收兩種功能。首先系統(tǒng)將需要下發(fā)的數(shù)據(jù)的描述符信息,包括線程號(hào)、下發(fā)端口信息、數(shù)據(jù)存放地址、長(zhǎng)度信息等寄存器寫的方式,存入下發(fā)描述符緩沖中。一方面,描述符緩沖中提取的描述符信息寫入塊描述符SRAM中,將對(duì)應(yīng)的緩沖區(qū)塊計(jì)數(shù)器進(jìn)行累加,當(dāng)計(jì)數(shù)器數(shù)值到達(dá)塊大小時(shí),緩沖區(qū)塊地址經(jīng)由塊描述符回收分派器按照線程對(duì)應(yīng)地加載到緩沖區(qū)塊描述符FIFO中,并將塊描述符SRAM中的計(jì)數(shù)器清零。另一方面,根據(jù)描述符下發(fā)緩沖中提取的描述符信息,包括需回收?qǐng)?bào)文緩沖區(qū)地址和長(zhǎng)度信息,構(gòu)造PCIE的內(nèi)存讀請(qǐng)求TLP報(bào)文。發(fā)生端接收到多核分組處理系統(tǒng)返回的報(bào)文緩沖區(qū)內(nèi)需下發(fā)數(shù)據(jù)報(bào)文的Completion報(bào)文后解析并進(jìn)行報(bào)文重定序和拼接,然后將組裝完成的需下發(fā)的數(shù)據(jù)報(bào)文下發(fā)至網(wǎng)絡(luò)接口。
表3 TX主機(jī)下發(fā)分組到端及描述符回收
為有效驗(yàn)證TABM技術(shù)的功能和性能,本文設(shè)計(jì)并實(shí)現(xiàn)了TABM原型系統(tǒng)。原型系統(tǒng)基于國(guó)防科學(xué)技術(shù)大學(xué)計(jì)算機(jī)學(xué)院自主研發(fā)的高性能通用64位CPU FT-1500A[12]與自主研制的NPE[11]構(gòu)建。其中NPE的核心部件在現(xiàn)場(chǎng)可編程門陣列(Field-Programmable Gate Array, FPGA)上實(shí)現(xiàn),F(xiàn)PGA器件采用Stratix IV EP4SGX230KF40C2。
本實(shí)驗(yàn)的軟件測(cè)試環(huán)境包括:Ubuntu 14.04操作系統(tǒng)、NPDK 2.0版本軟件開(kāi)發(fā)環(huán)境提供的NPE網(wǎng)口驅(qū)動(dòng)[13]及用戶配置程序。
NPDK環(huán)境將所有軟硬件的初始化函數(shù)封裝在環(huán)境庫(kù)內(nèi),調(diào)用初始化函數(shù)create_net_device(dma_cnt, disp_mode),其中dma_cnt表示硬件啟動(dòng)多少個(gè)DMA通道,與軟件處理線程數(shù)對(duì)應(yīng),每個(gè)DMA通道對(duì)應(yīng)一個(gè)處理線程,綁定在一個(gè)指定的CPU核上運(yùn)行;disp_mode指定報(bào)文分派模式——循環(huán)分派或端口綁定分派。在不超過(guò)硬件最大支持DMA通道數(shù)情況下,通過(guò)重復(fù)調(diào)用pthread_create(&p_t,&attr,start_npe_thread,tp)函數(shù),選擇自由創(chuàng)建多個(gè)處理線程,創(chuàng)建線程數(shù)與dma_cnt數(shù)相同,start_npe_thread即為業(yè)務(wù)處理線程。線程創(chuàng)建后,顯示指定線程綁定到哪個(gè)CPU核上運(yùn)行,線程的創(chuàng)建與CPU親和設(shè)置都使用標(biāo)準(zhǔn)的libpthread庫(kù)函數(shù)。線程輪詢到報(bào)文后,立即調(diào)用報(bào)文發(fā)送函數(shù)進(jìn)行發(fā)送,完成一個(gè)報(bào)文的轉(zhuǎn)發(fā)操作。發(fā)送函數(shù)為send_pkt(*pkt, outport, pkt_len),其中pkt表示報(bào)文指針,outport表示輸出端口號(hào),pkt_len表示發(fā)送長(zhǎng)度。
在該原型系統(tǒng)的軟硬件基礎(chǔ)上,通過(guò)Ixia網(wǎng)絡(luò)測(cè)試儀連續(xù)發(fā)送大小為64 B至1500 B大小不等的報(bào)文。由一個(gè)萬(wàn)兆端口接收的報(bào)文,采用公平輪詢的方式分配到1,2,4,8個(gè)CPU線程處理,每個(gè)CPU線程被設(shè)置訪問(wèn)對(duì)應(yīng)的共享緩沖區(qū)塊;通過(guò)軟件設(shè)置DMA通道數(shù),每個(gè)線程對(duì)應(yīng)一個(gè)DMA通道,創(chuàng)建不同的軟件線程。測(cè)試結(jié)果如圖4所示,可以看出采用TABM的原型系統(tǒng),當(dāng)發(fā)包速率為10 Gbps、轉(zhuǎn)發(fā)分組大小為1500 B時(shí),速率最高達(dá)7.93 Gbps。當(dāng)分組較小時(shí),支持線程數(shù)越大,轉(zhuǎn)發(fā)性能越好。
圖4 TABM分組轉(zhuǎn)發(fā)性能Fig.4 Packet forwarding performance of TABM
圖5 TABM與SDB機(jī)制的性能比對(duì)Fig.5 Performance comparison of TABM and SDB mechanism
另外,在該原型系統(tǒng)的基礎(chǔ)上,通過(guò)Ixia網(wǎng)絡(luò)測(cè)試儀連續(xù)發(fā)送大小為64 B的報(bào)文,分別在FT-1500A加NPE萬(wàn)兆加速引擎子卡的測(cè)試平臺(tái)上對(duì)SDB機(jī)制和TABM進(jìn)行了裸轉(zhuǎn)發(fā)性能測(cè)試和比對(duì)。測(cè)試結(jié)果如圖5所示,可以看出,TABM相較于SDB機(jī)制,分組轉(zhuǎn)發(fā)性能有明顯的提升,在內(nèi)核沒(méi)有支持更大TLB頁(yè)表的保守情況下,平均性能提升12.4%。TABM更加適應(yīng)于通用多核多線程的報(bào)文處理平臺(tái)。
為了解決通用多核分組處理的分組IO開(kāi)銷問(wèn)題,提升轉(zhuǎn)發(fā)性能,基于通用多核加網(wǎng)絡(luò)專用協(xié)處理引擎的平臺(tái),提出了一種基于多核網(wǎng)絡(luò)分組處理系統(tǒng)的線程親和緩沖區(qū)硬件管理機(jī)制TABM,并實(shí)現(xiàn)了支持TABM的原型系統(tǒng)。實(shí)驗(yàn)結(jié)果顯示,當(dāng)發(fā)包速率為10 Gbps時(shí),相較于無(wú)中斷SDB管理機(jī)制,TABM能使系統(tǒng)整體轉(zhuǎn)發(fā)速率提高約12.4%。TABM能夠有效降低系統(tǒng)緩沖區(qū)的管理開(kāi)銷、IO開(kāi)銷和線程亂序存儲(chǔ)分組造成的TLB表缺失,更好地支持基于通用多核多線程的高速分組轉(zhuǎn)發(fā)。
References)
[1] Han S J, Jang K, Park K S, et al.PacketShader: a GPU-accelerated software router[J]. ACM SIGCOMM Computer Communication, 2010, 40(4): 195-206.
[2] Wind River Systems. High-performance multi-core networking software design options[R]. White Paper Intel, 2011.
[3] Huggahalli R, Iyer R, Tetrick S.Direct cache access for high bandwidth network I/O [J]. ACM SIGARCH Computer Architecture News, 2005, 33(2): 50-59.
[4] Dashtbozorgi M, Abdollahiazgomi M. A high-performance and scalable multi-core aware software solution for network monitoring [J]. Journal of Supercomputing, 2012, 59(2):720-743.
[5] Kekely L, Pus V, Benacek P. Trade-offs and progressive adoption of FPGA acceleration in network traffic monitoring[C]// Proceedings of the 24th International Conference on Field Programmable Logic and Applications (FPL), Munich, 2014: 1-4.
[6] Bonelli N, Pietro A D, Giordano S, et al. On multi-gigabit packet capturing with multi-core commodity hardware [C]//Proceedings of the 13th International Conference on Passive and Active Measurement, Berlin/Heidelberg: Springer, 2012: 64-73.
[7] Biersack E, Callegari C, Matijasevic M.Data traffic monitoring and analysis—from measurement, classification, and anomaly detection to quality of experience [J]. Lecture Notes in Computer Science, 2013, 7745: 45-56.
[8] García-Dorado J L, Mata F, Ramos J, et al.High-performance network traffic processing systems using commodity hardware [J]. Lecture Notes in Computer Science, 2013, 7754: 3-27.
[9] Rizzo L. Netmap: a novel framework for fast packet I/O[C]//Proceedings of the USENIX Annual Technical Conference, 2012:1-12.
[10] Rizzo L, Deri L, Cardigliano A. 10 Gbit/t line rate packet processing using commodity hardware:survey and new proposals[EB/OL].[2015-05-08]. http://luca.ntop.org/log.pdf.
[11] 唐路. 通用多核網(wǎng)絡(luò)處理器高速報(bào)文I/O技術(shù)研究[D]. 長(zhǎng)沙:國(guó)防科學(xué)技術(shù)大學(xué), 2012.TANG Lu. Research on packet I/O technology for general-purpose multi-core network processor[D]. Changsha: National University of Defense Technology, 2012.(in Chinese)[12] 中國(guó)電子報(bào). 中國(guó)電子重量級(jí)芯片“飛騰”亮相[EB/OL]. (2015-04-13)[2016-03-07].www.news.ifeng.com/a/20150413/43539854_0.shtml.
Journal of China Electronic. The heavyweight chip of Chinese electronic FT appear [EB/OL]. (2015-04-13)[2016-03-07].www.news.ifeng.com/a/20150413/43539854_0.shtml. (in Chinese)
[13] 徐東來(lái). 面向通用多核CPU的高性能網(wǎng)絡(luò)I/O加速研究與實(shí)現(xiàn)[D].長(zhǎng)沙:國(guó)防科學(xué)技術(shù)大學(xué), 2015.
XU Donglai. Research and realization of high-performance I/O acceleration on general multi-core CPU[D]. Changsha: National University of Defense Technology, 2015.(in Chinese)
Thread affinity for buffer management mechanism based on multi-core network packet processing system
YANG Hui1, CHEN Yijiao1, LI Tao1, LI Shixing1, DAI Huanyao2
(1. College of Computer, National University of Defense Technology, Changsha 410073, China;2. Luoyang Electronic Equipment Test Center, Luoyang 471003, China)
The packet processing performance of the general multi-core architecture is plagued by many factors, including high packet IO cost, multi-core share memory and process scheduling competition, TLB entries failure rate, etc. Therefore, a TABM (thread affinity for buffer management mechanism) based on multi-core network packet processing system, which is oriented to high-speed packet forwarding application was proposed and completed on network dedicated co-processing engine. The TABM adopts thread affinity scheduling strategy with no interrupt, sends each packet data and descriptor which contains control and buffer address information to several successive shared buffers according to the corresponding thread ID, and organizes the packets and descriptors which processed in the same thread in the form of a chain. The packet forwarding performance was tested on the basis of general multi-core and field-programmable gate array platform. The experimental data show that the average packet forwarding performance is promoted by about 12.4% and the IO cost and the TLB entries failure rate are reduced by adopting the TABM.
packet IO; thread affinity; buffer management; packet forwarding; multi-core
10.11887/j.cn.201605005
http://journal.nudt.edu.cn
2015-05-27
國(guó)家自然科學(xué)基金資助項(xiàng)目(612024823,61301236)
楊惠(1987—),女,安徽蕭縣人,助理研究員,博士,E-mail:huihui19870124@126.com
TP393
A
1001-2486(2016)05-026-06