劉 松,盧澤新,張曉哲,馬世聰
國(guó)防科學(xué)技術(shù)大學(xué) 計(jì)算機(jī)學(xué)院,長(zhǎng)沙 410073
面向用戶(hù)態(tài)Click的I/O優(yōu)化框架的設(shè)計(jì)與實(shí)現(xiàn)*
劉 松+,盧澤新,張曉哲,馬世聰
國(guó)防科學(xué)技術(shù)大學(xué) 計(jì)算機(jī)學(xué)院,長(zhǎng)沙 410073
LIU Song,LU Zexin,ZHANG Xiaozhe,et al.Design and implementation of optimization I/O framework for Click modular router in user level.Journal of Frontiers of Computer Science and Technology,2016,10(12):1693-1700.
軟件路由器在現(xiàn)代網(wǎng)絡(luò)的發(fā)展中發(fā)揮著越來(lái)越重要的作用,而Click是具有良好模塊化設(shè)計(jì)的軟件路由器,為開(kāi)發(fā)和驗(yàn)證新的路由協(xié)議等應(yīng)用提供了很好的軟件平臺(tái)。由于實(shí)現(xiàn)機(jī)制問(wèn)題,用戶(hù)態(tài)Click的I/O性能?chē)?yán)重限制報(bào)文處理能力,影響以Click軟件路由器為平臺(tái)的系統(tǒng)的整體性能。針對(duì)現(xiàn)有Click用戶(hù)態(tài)I/O機(jī)制的不足,提出了一種面向用戶(hù)態(tài)Click的I/O優(yōu)化框架,通過(guò)采用輪詢(xún)技術(shù)、零拷貝技術(shù)和報(bào)文預(yù)取技術(shù)提升了I/O性能。實(shí)驗(yàn)結(jié)果表明:優(yōu)化后的用戶(hù)態(tài)Click的I/O性能提升了121倍。
軟件路由器;Click;I/O;輪詢(xún);零拷貝;報(bào)文預(yù)取
隨著新的網(wǎng)絡(luò)協(xié)議以及新的網(wǎng)絡(luò)業(yè)務(wù)的誕生,需要對(duì)現(xiàn)有的路由器進(jìn)行升級(jí)或更換。作為網(wǎng)絡(luò)服務(wù)提供商而言,更換路由器無(wú)疑代表成本的增加,因此希望通過(guò)升級(jí)原有的設(shè)備來(lái)滿(mǎn)足日益增長(zhǎng)的需求。這就要求路由器能提供靈活定制、可編程的能力。傳統(tǒng)的硬件路由器的功能是由設(shè)備廠(chǎng)商定制,不允許第三方進(jìn)行任何修改;而軟件路由器可以提供快速開(kāi)發(fā)出新的功能和需求的包處理,降低了開(kāi)發(fā)周期和運(yùn)營(yíng)成本。
在典型的軟件路由器中,Click[1]Click modular router)以其良好的可擴(kuò)展性得到了廣泛的應(yīng)用,為新協(xié)議的開(kāi)發(fā)和驗(yàn)證以及軟件路由器的快速搭建提供了一個(gè)優(yōu)秀的軟件平臺(tái)。Click是一個(gè)模塊化的軟件路由器,采用了面向?qū)ο蟮脑O(shè)計(jì)方式,把IP分組轉(zhuǎn)發(fā)過(guò)程抽象為一系列組件。Click提供了一種靈活的可擴(kuò)展的數(shù)據(jù)平面軟件開(kāi)發(fā)架構(gòu),只需要添加組件即可對(duì)軟件路由器的功能進(jìn)行擴(kuò)展,即通過(guò)將路由器功能劃分為不同的功能組件,然后通過(guò)實(shí)現(xiàn)新的組件或組合已有的組件就可以快速地實(shí)現(xiàn)新的網(wǎng)絡(luò)功能,為軟件路由器的開(kāi)發(fā)提供了非常好的可擴(kuò)展的數(shù)據(jù)平面的軟件開(kāi)發(fā)架構(gòu)。Click的高度可擴(kuò)展性等優(yōu)良特性也使得它受到越來(lái)越廣泛關(guān)注,并實(shí)現(xiàn)了許多優(yōu)秀的應(yīng)用原型,比如未來(lái)互聯(lián)網(wǎng)架構(gòu)[2]、冗余流量消除系統(tǒng)[3]、可擴(kuò)展的中間盒平臺(tái)[4]和集群式高性能軟件路由器[5]等。
盡管Click的靈活設(shè)計(jì)能滿(mǎn)足不同網(wǎng)絡(luò)業(yè)務(wù)的設(shè)計(jì)需求,但是它的較低轉(zhuǎn)發(fā)性能無(wú)法滿(mǎn)足大多數(shù)業(yè)務(wù)的性能指標(biāo)。相關(guān)研究工作指出,用戶(hù)態(tài)的Click的I/O(Input/Output)框架是限制其性能的關(guān)鍵因素。如何結(jié)合Click的I/O框架與現(xiàn)有的硬件平臺(tái)來(lái)進(jìn)一步提升它的報(bào)文處理能力是當(dāng)前研究的熱點(diǎn)和難點(diǎn)。通過(guò)分析Click的實(shí)現(xiàn)機(jī)制,制約I/O性能的因素主要有3個(gè):(1)采用系統(tǒng)中斷方式接收/發(fā)送報(bào)文;(2)報(bào)文在內(nèi)核態(tài)與用戶(hù)態(tài)間的多次拷貝開(kāi)銷(xiāo);(3)緩存競(jìng)爭(zhēng)和緩存缺失。
本文提出了一種面向用戶(hù)態(tài)Click的I/O優(yōu)化框架,用于解決Click轉(zhuǎn)發(fā)性能較低的問(wèn)題。本文I/O優(yōu)化框架采用了輪詢(xún)技術(shù)、零拷貝技術(shù)和預(yù)取技術(shù)3類(lèi)技術(shù):輪詢(xún)技術(shù)避免了原生態(tài)Click以中斷方式接收/發(fā)送報(bào)文,極大地提升了它的報(bào)文處理能力;零拷貝技術(shù)和預(yù)取技術(shù)優(yōu)化了報(bào)文處理路徑的I/O開(kāi)銷(xiāo),降低了報(bào)文的拷貝次數(shù)以及訪(fǎng)存的次數(shù)。通過(guò)實(shí)驗(yàn)結(jié)果證明:優(yōu)化I/O框架后的Click的轉(zhuǎn)發(fā)性能為11 400 Kp/s,為原生用戶(hù)態(tài)Click的121倍。
目前,針對(duì)Click的I/O框架限制其報(bào)文處理能力的問(wèn)題已普遍引起研究人員的重視,并提出了一系列的解決方案。比如,文獻(xiàn)[6]利用批處理方式優(yōu)化I/O框架,需要對(duì)報(bào)文處理業(yè)務(wù)進(jìn)行重設(shè)計(jì),并且報(bào)文的處理路徑不同也影響到批處理方式帶來(lái)的性能提升。RouteBriceks[5]主要采用輪詢(xún)方式代替?zhèn)鹘y(tǒng)硬件的中斷方式,以及采用批處理方式提升數(shù)據(jù)處理的并行性,但其主要解決內(nèi)核態(tài)Click的I/O框架問(wèn)題。PacketShader[7]通過(guò)修改內(nèi)核使Linux系統(tǒng)更好地支持批處理方式,采用GPU(graphic processing unit)加速報(bào)文的處理能力,因此它在移植性方面存在不足。此外,一些方案[8-11]采用硬件加速的方式來(lái)解決Click的I/O問(wèn)題。
近年來(lái)針對(duì)用戶(hù)態(tài)的高性能報(bào)文I/O的優(yōu)化框架也存在較多研究,比如Packet_mmap[12]、Netmap[13]、PF_RING[14]、DPDK(date plane development kit)[15]等,文獻(xiàn)[16-17]對(duì)于多種框架進(jìn)行了性能的測(cè)試和分析,其中PF_RING與DPDK的用戶(hù)態(tài)I/O性能表現(xiàn)較好,但PF_RING中報(bào)文存儲(chǔ)在內(nèi)核態(tài)中,與本文的設(shè)計(jì)理念有所不同,因此最終采用DPDK實(shí)現(xiàn)并驗(yàn)證本文的設(shè)計(jì)思想。
雖然已有Click的I/O優(yōu)化方案能有效地提升報(bào)文處理能力,但采用批處理方式和內(nèi)核態(tài)的Click優(yōu)化方式降低了系統(tǒng)的可移植性。本文主要研究如何在X86服務(wù)器上優(yōu)化用戶(hù)態(tài)Click的I/O框架。
現(xiàn)有工作表明,造成Click用戶(hù)態(tài)I/O性能降低的原因主要包括三方面:
(1)采用系統(tǒng)中斷方式收發(fā)報(bào)文。在標(biāo)準(zhǔn)的Linux內(nèi)核協(xié)議棧中,協(xié)議棧使用中斷的方式發(fā)送或者接收?qǐng)?bào)文,原生用戶(hù)態(tài)Click使用libpcap從協(xié)議棧中獲取報(bào)文,當(dāng)報(bào)文到達(dá)速率較高時(shí),系統(tǒng)中斷的處理頻率會(huì)遠(yuǎn)低于報(bào)文到達(dá)速率,引發(fā)丟包,影響包處理性能。
(2)內(nèi)核態(tài)與用戶(hù)態(tài)之間的內(nèi)存拷貝開(kāi)銷(xiāo)。由于內(nèi)核和用戶(hù)內(nèi)存空間的隔離,原生態(tài)的Click至少需要兩次報(bào)文拷貝才能完成一次的報(bào)文處理流程,由此而產(chǎn)生的開(kāi)銷(xiāo)會(huì)大幅降低用戶(hù)態(tài)Click的性能。
(3)緩存競(jìng)爭(zhēng)和緩存缺失已經(jīng)成為影響通用服務(wù)器上運(yùn)行軟件路由器性能的重要因素[18-19]。原生態(tài)的用戶(hù)態(tài)Click并不支持緩存的預(yù)取操作,給其I/O性能的提升造成了一定的瓶頸。
針對(duì)上述問(wèn)題,本文給出了用戶(hù)態(tài)Click的I/O優(yōu)化框架,如圖1所示,主要從以下三方面改進(jìn)用戶(hù)態(tài)Click的I/O性能:

Fig.1 Comparison of userlevel Click I/O two framework and optimzed framwork圖1 用戶(hù)態(tài)Click I/O框架與優(yōu)化框架對(duì)比
(1)使用輪詢(xún)模式的驅(qū)動(dòng)取代中斷模式的網(wǎng)卡驅(qū)動(dòng),網(wǎng)卡可以在不通知進(jìn)程的情況下直接通過(guò)DMA(direct memory access)將報(bào)文送到內(nèi)存中,Click則使用輪詢(xún)CPU隊(duì)列的方式輪詢(xún)收發(fā)隊(duì)列中的報(bào)文,從而避免了頻繁的系統(tǒng)中斷。
(2)使用零拷貝技術(shù),通過(guò)創(chuàng)建內(nèi)核態(tài)與用戶(hù)態(tài)之間的共享報(bào)文緩沖區(qū),將報(bào)文直接送入共享緩沖區(qū),避免了報(bào)文收發(fā)過(guò)程中的多次內(nèi)存拷貝,實(shí)現(xiàn)了報(bào)文零拷貝的收發(fā)。
(3)通過(guò)報(bào)文預(yù)取技術(shù),將需要發(fā)送的報(bào)文提前讀取到Cache中,減少了內(nèi)存訪(fǎng)問(wèn)造成的I/O損失。
3.1 設(shè)備輪詢(xún)技術(shù)

Fig.2 Comparison of interruption and poll mode圖2 中斷方式和輪詢(xún)方式的對(duì)比
用戶(hù)態(tài)的Click采用了系統(tǒng)中斷的方式收發(fā)報(bào)文,嚴(yán)重影響了系統(tǒng)整體的轉(zhuǎn)發(fā)性能。如圖2(a)所示,用戶(hù)態(tài)的Click收取報(bào)文的工作流程為:首先,網(wǎng)絡(luò)協(xié)議棧從網(wǎng)卡中以中斷的方式獲取報(bào)文;然后,Click組件再?gòu)木W(wǎng)絡(luò)協(xié)議棧中使用Pcap等方式獲取原始報(bào)文。在高速報(bào)文處理過(guò)程中,頻繁地收發(fā)報(bào)文特別是小報(bào)文引起的大量中斷會(huì)嚴(yán)重影響I/O的速度,從而給整個(gè)系統(tǒng)帶來(lái)性能瓶頸。調(diào)研發(fā)現(xiàn),輪詢(xún)驅(qū)動(dòng)收取報(bào)文可以解決大量中斷造成的轉(zhuǎn)發(fā)性能低下的缺陷。工作在內(nèi)核態(tài)的Click通過(guò)修改系統(tǒng)內(nèi)核驅(qū)動(dòng)可以支持輪詢(xún)模式收發(fā)報(bào)文,但內(nèi)核態(tài)工作的輪詢(xún)驅(qū)動(dòng)收發(fā)報(bào)文需要頻繁的上下文切換且修改內(nèi)核驅(qū)動(dòng),會(huì)給系統(tǒng)的部屬帶來(lái)不必要的時(shí)間成本開(kāi)銷(xiāo)。因此,將輪詢(xún)驅(qū)動(dòng)技術(shù)引入到用戶(hù)層,既消除了頻繁中斷帶來(lái)的不必要開(kāi)銷(xiāo),也減少了內(nèi)核態(tài)和用戶(hù)態(tài)上下文切換造成的性能損失。
根據(jù)Click軟件路由器本身的特點(diǎn),設(shè)備輪詢(xún)分為兩層輪詢(xún)結(jié)構(gòu):第一層,在底層采用Intel DPDK做驅(qū)動(dòng)支持,輪詢(xún)各個(gè)網(wǎng)卡的多隊(duì)列將報(bào)文直接獲取到用戶(hù)態(tài)形成DPDK隊(duì)列。第二層,采用輪詢(xún)CPU隊(duì)列的方式,從DPDK隊(duì)列中輪詢(xún)收發(fā)報(bào)文。如圖2(b)所示,在用戶(hù)態(tài)使用DPDK庫(kù),借助UIO驅(qū)動(dòng)將網(wǎng)卡驅(qū)動(dòng)放到用戶(hù)態(tài)工作,通過(guò)DPDK按照一定的時(shí)間周期按次序輪詢(xún)?cè)L問(wèn)每個(gè)網(wǎng)卡接口的隊(duì)列,將報(bào)文放入DPDK隊(duì)列中;在Click組件中采用輪詢(xún)CPU隊(duì)列技術(shù)訪(fǎng)問(wèn)每個(gè)DPDK接收隊(duì)列,將報(bào)文獲取到用戶(hù)態(tài)內(nèi)存中;經(jīng)過(guò)Click組件的要求處理后,再通過(guò)相反的過(guò)程將報(bào)文送到網(wǎng)卡隊(duì)列中完成發(fā)送過(guò)程,從而消除了高速收發(fā)報(bào)文中因?yàn)橹袛嗨鸬男阅芷款i。本節(jié)所提出的設(shè)備輪詢(xún)技術(shù)是基于CPU隊(duì)列的輪詢(xún),查詢(xún)的對(duì)象是DPDK的收發(fā)隊(duì)列。DPDK庫(kù)在本設(shè)計(jì)中充當(dāng)了底層的驅(qū)動(dòng)庫(kù),完成從網(wǎng)卡到用戶(hù)態(tài)報(bào)文的收發(fā)工作。
3.2 零拷貝技術(shù)
由于內(nèi)核和用戶(hù)內(nèi)存空間的隔離,原生態(tài)的Click至少需要兩次報(bào)文拷貝才能完成一次的報(bào)文處理流程,由此而產(chǎn)生的開(kāi)銷(xiāo)會(huì)大幅降低用戶(hù)態(tài)Click的性能。如圖1(a)所示,在原生態(tài)的Click接收?qǐng)?bào)文的過(guò)程中,報(bào)文從網(wǎng)卡到內(nèi)存的傳輸需要經(jīng)歷兩次拷貝工作,即報(bào)文從網(wǎng)卡隊(duì)列到網(wǎng)絡(luò)協(xié)議棧的拷貝和從網(wǎng)絡(luò)協(xié)議棧再到內(nèi)存的拷貝。報(bào)文傳輸過(guò)程中的兩次報(bào)文拷貝工作從網(wǎng)卡收發(fā)報(bào)文操作是不可避免的,但可以通過(guò)減少?gòu)木W(wǎng)卡隊(duì)列中已經(jīng)收取報(bào)文的情況下操作系統(tǒng)內(nèi)部進(jìn)行多余的內(nèi)存拷貝工作,即從網(wǎng)卡直接獲取報(bào)文內(nèi)容到用戶(hù)態(tài)內(nèi)存,交給Click組件進(jìn)行零拷貝的報(bào)文處理,減少Click用戶(hù)態(tài)原生方案中二次拷貝所帶來(lái)的I/O損失。由此,采用了如圖1(b)所示的設(shè)計(jì)方案,通過(guò)DMA技術(shù)直接從網(wǎng)卡中獲取報(bào)文到用戶(hù)態(tài)的內(nèi)存,然后在Click組件中使用零拷貝技術(shù)進(jìn)行報(bào)文的操作處理。在實(shí)現(xiàn)過(guò)程中,借助于Intel DPDK進(jìn)行實(shí)現(xiàn),在此開(kāi)發(fā)套件中使用的報(bào)文存儲(chǔ)結(jié)構(gòu)與Click中原生的報(bào)文結(jié)構(gòu)有一定的差異,因此對(duì)必要的報(bào)文頭部信息進(jìn)行提取,轉(zhuǎn)化為Click組件需要處理的報(bào)文結(jié)構(gòu),在保持必要信息量的情況下,避免了大量報(bào)文數(shù)據(jù)的拷貝,進(jìn)而提高收發(fā)報(bào)文的I/O性能。
3.3 報(bào)文預(yù)取技術(shù)
緩存競(jìng)爭(zhēng)和緩存缺失已經(jīng)成為影響通用服務(wù)器上運(yùn)行軟件路由器性能的主要因素,原生態(tài)的Click用戶(hù)態(tài)并沒(méi)有相應(yīng)的解決方案。如果能夠在處理報(bào)文之前將其預(yù)取到Cache中,那么可以大大減少緩存競(jìng)爭(zhēng)和緩存缺失所帶來(lái)的I/O性能的損失。為此,本文使用報(bào)文預(yù)取技術(shù)解決緩存競(jìng)爭(zhēng)和緩存缺失的問(wèn)題。在報(bào)文加入接收隊(duì)列時(shí),做報(bào)文預(yù)取操作,提前將報(bào)文讀取到Cache中,在后續(xù)的報(bào)文處理過(guò)程中可以直接從緩存中獲取到報(bào)文的內(nèi)容,從而大幅度提高Cache的命中率,進(jìn)而提高Click收發(fā)報(bào)文的I/O性能。為了提高報(bào)文預(yù)取的效率,對(duì)于報(bào)文的存儲(chǔ)方式也做了相應(yīng)的改進(jìn),使用大頁(yè)內(nèi)存技術(shù)進(jìn)行內(nèi)存的存儲(chǔ)管理:首先大頁(yè)內(nèi)存不受虛擬內(nèi)存的管理影響,不會(huì)被替換出內(nèi)存,而普通的4 KB內(nèi)存頁(yè),如果內(nèi)存不足可能會(huì)被虛擬內(nèi)存管理模塊替換;其次,對(duì)于同樣的內(nèi)存大小,大頁(yè)內(nèi)存產(chǎn)生的表項(xiàng)數(shù)目遠(yuǎn)遠(yuǎn)小于普通內(nèi)存頁(yè)。較少的表項(xiàng)一方面可以大大減少表項(xiàng)開(kāi)銷(xiāo),并且可以明顯減少?zèng)_突率,極大減少表項(xiàng)缺失導(dǎo)致的開(kāi)銷(xiāo),而表項(xiàng)缺失會(huì)嚴(yán)重影響訪(fǎng)存性能。對(duì)于共享內(nèi)存的管理一般會(huì)使用鎖來(lái)實(shí)現(xiàn),但是使用鎖不可避免地因?yàn)轫樞蚧臄?shù)據(jù)訪(fǎng)問(wèn)和報(bào)文頭開(kāi)銷(xiāo)增加而降低系統(tǒng)的性能。因此本設(shè)計(jì)采用無(wú)鎖環(huán)進(jìn)行內(nèi)存的管理。
本文所提出的用戶(hù)態(tài)Click軟件優(yōu)化框架如圖3所示。該框架不依賴(lài)于諸如SR-IOV(single-root I/O virtualization)的硬件優(yōu)化方案,完全采用軟件方式實(shí)現(xiàn),既避免了原有的系統(tǒng)開(kāi)銷(xiāo),提高了系統(tǒng)性能,又可以充分利用用戶(hù)態(tài)Click的穩(wěn)定性高、易于擴(kuò)展的優(yōu)勢(shì),在可編程性和高性能方面取得了良好的平衡。

Fig.3 Click I/O optimized framework in user level圖3 用戶(hù)態(tài)Click I/O優(yōu)化實(shí)現(xiàn)框架
輪詢(xún)方式收發(fā)報(bào)文技術(shù)的實(shí)現(xiàn):在用戶(hù)態(tài)使用Intel DPDK數(shù)據(jù)層面開(kāi)發(fā)套件中的輪詢(xún)驅(qū)動(dòng),從網(wǎng)卡中直接獲取報(bào)文到用戶(hù)層并形成報(bào)文的接收隊(duì)列,通過(guò)創(chuàng)建新的Click組件,在Click中使用輪詢(xún)CPU隊(duì)列的方式訪(fǎng)問(wèn)DPDK中的報(bào)文接收隊(duì)列收取報(bào)文,并將報(bào)文存儲(chǔ)在用戶(hù)態(tài)的使用無(wú)鎖環(huán)管理的大頁(yè)內(nèi)存中。待Click處理完報(bào)文之后,Click組件再以輪詢(xún)CPU隊(duì)列的方式將報(bào)文按照必要的信息提交給指定的發(fā)送隊(duì)列,輪詢(xún)模式的驅(qū)動(dòng)庫(kù)則會(huì)通過(guò)定時(shí)輪詢(xún)發(fā)送隊(duì)列的方式將報(bào)文發(fā)送到指定的網(wǎng)卡并釋放內(nèi)存空間,完成整個(gè)報(bào)文的收發(fā)操作。
零拷貝技術(shù)的實(shí)現(xiàn):報(bào)文從網(wǎng)卡收取到用戶(hù)層之后,提取一定量的必要信息,比如數(shù)據(jù)長(zhǎng)度、報(bào)文頭指針等,通過(guò)緩沖區(qū)管理庫(kù)的操作,生成Click內(nèi)部處理報(bào)文格式,以文件描述符的形式交給Click組件進(jìn)行后續(xù)處理。完成指定的報(bào)文操作后,再通過(guò)緩沖區(qū)管理庫(kù),根據(jù)報(bào)文的文件描述符及必要的附加信息將Click報(bào)文還原成DPDK中的內(nèi)部報(bào)文結(jié)構(gòu),并提交給發(fā)送隊(duì)列進(jìn)行發(fā)送。整個(gè)報(bào)文的操作過(guò)程只進(jìn)行了文件描述符的傳遞,實(shí)際報(bào)文數(shù)據(jù)沒(méi)有進(jìn)行多余的拷貝工作。
報(bào)文預(yù)取技術(shù)的實(shí)現(xiàn):Click組件進(jìn)行報(bào)文處理主要通過(guò)任務(wù)隊(duì)列對(duì)報(bào)文進(jìn)行操作,在處理一個(gè)報(bào)文的時(shí)候提前將下一個(gè)需要處理的報(bào)文的文件描述符以及對(duì)應(yīng)的數(shù)據(jù)從內(nèi)存中預(yù)取到Cache中,且在內(nèi)存管理中采用大頁(yè)內(nèi)存和無(wú)鎖環(huán),可以有效提高訪(fǎng)存能力,提高從內(nèi)存到Cache中的讀取速度。
5.1 實(shí)驗(yàn)環(huán)境
本文的測(cè)試平臺(tái)采用了IBM的通用服務(wù)器進(jìn)行測(cè)試,服務(wù)器配置:CPU為Intel?Xeon?CPU E5-2680V2@2.80 GHz;內(nèi)存為1 333 MHz,64 GB DDR3;網(wǎng)卡信息為Intel82599 10GbE網(wǎng)卡。服務(wù)器安裝并運(yùn)行的操作系統(tǒng)為Centos6.3,系統(tǒng)內(nèi)核版本為L(zhǎng)inuxkernel 2.6.32-358.el6.x86_64,采用的基礎(chǔ)代碼版本為Click 2.0.1和dpdk 1.6。測(cè)試儀器中采用了IXIAXM2網(wǎng)絡(luò)數(shù)據(jù)通信分析儀進(jìn)行測(cè)試。
5.2 實(shí)驗(yàn)結(jié)果和分析
實(shí)驗(yàn)中,主要對(duì)單核、單線(xiàn)程、單接口的吞吐率、包轉(zhuǎn)發(fā)速率等報(bào)文轉(zhuǎn)發(fā)處理的I/O性能指標(biāo)進(jìn)行了測(cè)試。分別使用從64 Byte到1 514 Byte等不同長(zhǎng)度的報(bào)文,通過(guò)網(wǎng)絡(luò)數(shù)據(jù)通信分析儀測(cè)試系統(tǒng)對(duì)本文所設(shè)計(jì)并實(shí)現(xiàn)的用戶(hù)態(tài)Click軟件路由器的I/O優(yōu)化框架進(jìn)行了驗(yàn)證。數(shù)據(jù)分析如下:
(1)轉(zhuǎn)發(fā)能力結(jié)果與分析
經(jīng)過(guò)實(shí)驗(yàn)測(cè)試發(fā)現(xiàn),如圖4(a)所示,其中Native Click表示原生用戶(hù)態(tài)的Click,Click PollMode表示使用輪詢(xún)技術(shù)優(yōu)化后的用戶(hù)態(tài)Click,Click Optimization表示使用輪詢(xún)、零拷貝和緩存預(yù)取3種技術(shù)優(yōu)化后的用戶(hù)態(tài)Click,即本文所提出的優(yōu)化框架。結(jié)合表1中給出的不同報(bào)文下的包轉(zhuǎn)發(fā)速率可以看出,在用戶(hù)態(tài)運(yùn)行Click的轉(zhuǎn)發(fā)能力非常低,對(duì)64 Byte轉(zhuǎn)發(fā)報(bào)文速度為94 Kp/s,在用戶(hù)態(tài)采用輪詢(xún)技術(shù)直接從網(wǎng)卡中收?qǐng)?bào)文性能達(dá)到5 880 Kp/s,性能提升大約62倍;使用本文提出的面向用戶(hù)態(tài)Click的I/O優(yōu)化框架,同時(shí)采用報(bào)文零拷貝、輪詢(xún)、緩存預(yù)取等技術(shù)的情況下,對(duì)64 Byte報(bào)文的轉(zhuǎn)發(fā)性能為11 400 Kp/s,性能提升大約121倍。通過(guò)簡(jiǎn)單計(jì)算可知,使用報(bào)文零拷貝和緩存預(yù)取技術(shù)可以將包轉(zhuǎn)發(fā)能力提高將近60倍。此外,在實(shí)驗(yàn)測(cè)試過(guò)程中,對(duì)于超過(guò)128 Byte長(zhǎng)度大小的報(bào)文轉(zhuǎn)發(fā)速度與設(shè)備發(fā)包速度相當(dāng),即可以實(shí)現(xiàn)完全轉(zhuǎn)發(fā)。
(2)吞吐率結(jié)果與分析
與包轉(zhuǎn)發(fā)速率相對(duì)應(yīng),圖4(b)和表2展示了不同技術(shù)下的吞吐率,從吞吐率的表現(xiàn)可以得知,原生態(tài)用戶(hù)態(tài)Click的吞吐率表現(xiàn)最差,其最大吞吐率只有981 Mb/s,相同報(bào)文長(zhǎng)度下,使用3種優(yōu)化技術(shù)最大吞吐率達(dá)到9 860 Mb/s。測(cè)試結(jié)果顯示,從128 Byte長(zhǎng)度大小的報(bào)文開(kāi)始,同時(shí)使用輪詢(xún)、零拷貝、報(bào)文預(yù)取等技術(shù)優(yōu)化的Click用戶(hù)態(tài)的吞吐率與測(cè)試儀報(bào)文發(fā)送的吞吐率相等。此外,對(duì)于優(yōu)化后的Click I/O在多核、多線(xiàn)程時(shí)的表現(xiàn)也進(jìn)行了簡(jiǎn)單測(cè)試,由于經(jīng)過(guò)優(yōu)化的Click的I/O能力單核、單線(xiàn)程已經(jīng)超過(guò)了5 Gb/s吞吐率,使用多核、多進(jìn)程吞吐率一直保持單接口滿(mǎn)負(fù)荷狀態(tài)(≈10 Gb/s)。

Fig.4 Throughput and forwarding rate in different mechanisms圖4 不同技術(shù)下的吞吐率和轉(zhuǎn)發(fā)性能表現(xiàn)

Table 1 Forwarding rate in different mechanisms表1 不同技術(shù)下的轉(zhuǎn)發(fā)速率

Table 2 Throughput in different mechanisms表2 不同技術(shù)下的吞吐率
本文通過(guò)使用設(shè)備輪詢(xún)、零拷貝、報(bào)文預(yù)取等關(guān)鍵技術(shù)對(duì)工作在用戶(hù)態(tài)的Click軟件路由器的收發(fā)報(bào)文的I/O框架進(jìn)行了優(yōu)化,改進(jìn)設(shè)計(jì)了一種新的面向用戶(hù)態(tài)Click的I/O優(yōu)化框架,并利用Intel DPDK進(jìn)行了實(shí)現(xiàn)和驗(yàn)證。實(shí)驗(yàn)證明,通過(guò)DMA將網(wǎng)卡中報(bào)文直接讀取到用戶(hù)態(tài),然后使用CPU隊(duì)列的輪詢(xún)技術(shù)進(jìn)行收發(fā),能夠?qū)⑥D(zhuǎn)發(fā)性能提高超過(guò)一個(gè)數(shù)量級(jí)。通過(guò)組合使用設(shè)備輪詢(xún)、零拷貝技術(shù)和緩存預(yù)取技術(shù),可以將用戶(hù)態(tài)Click的收發(fā)報(bào)文的I/O性能提高超過(guò)兩個(gè)數(shù)量級(jí),達(dá)到121倍。
在測(cè)試過(guò)程中發(fā)現(xiàn),相對(duì)于原生的DPDK的報(bào)文轉(zhuǎn)發(fā)能力,使用DPDK優(yōu)化的Click性能還有一定的性能損失,后期工作可以通過(guò)改進(jìn)Click的調(diào)度機(jī)制,優(yōu)化隊(duì)列等方式進(jìn)行進(jìn)一步的改進(jìn)。此外,現(xiàn)階段對(duì)于Click用戶(hù)態(tài)I/O性能提升的設(shè)計(jì)與實(shí)現(xiàn)中主要是通用服務(wù)器上單核單進(jìn)程的優(yōu)化,集中在收發(fā)報(bào)文的I/O處理中,對(duì)于如何充分利用多核、多線(xiàn)程的并發(fā)處理能力沒(méi)有進(jìn)行深入研究。此外,如何發(fā)揮批量處理能力,高效利用NUMA架構(gòu)和網(wǎng)卡多隊(duì)列的特性?xún)?yōu)勢(shì)均沒(méi)有進(jìn)行深度優(yōu)化,這些都將是后續(xù)工作的方向。
[1]Morris R,Kohler E,Jannotti J,et al.The Click modular router[J].ACM Symposium on Operating Systems Principles,1999,33(5):263-297.
[2]Han Dongsu,Anand A,Dogar F,et al.XIA:efficient support for evolvable internetworking[C]//Proceedings of the 9th USENIX Symposium on Networked Systems Design and Implementation,San Jose,USA,Apr 25-27,2012.Berkeley,USA:USENIXAssociation,2012:23.
[3]Aggarwal B,Akella A,Anand A,et al.EndRE:an end-system redundancy elimination service for enterprises[C]//Proceedings of the 7th USENIX Symposium on Networked Systems Design and Implementation,San Jose,USA,Apr 28-30,2010.Berkeley,USA:USENIXAssociation,2010:28.
[4]Sekar V,Egi N,Ratnasamy S,et al.Design and implementation of a consolidated middlebox architecture[C]//Proceedings of the 9th USENIX Symposium on Networked Systems Design and Implementation,San Jose,USA,Apr 25-27,2012.Berkeley,USA:USENIXAssociation,2012:24.
[5]Dobrescu M,Egi N,Argyraki K,et al.RouteBricks:exploiting parallelism to scale software routers[C]//Proceedings of the 22nd ACM SIGOPS Symposium on Operating Systems Principles,Big Sky,USA,Oct 11-14,2009.New York:ACM, 2009:15-28.
[6]Kim J,Huh S,Jang K,et al.The power of batching in the Click modular router[C]//Proceedings of the 3rd ACM SIGOPS Asia-Pacific Conference on Systems,Seoul,Jul 23-24,2012.New York:ACM,2012:14.
[7]Han S,Jang K,Park K S,et al.PacketShader:a GPU-accelerated software router[J].ACM SIGCOMM Computer Communication Review,2010,40(4):195-206.
[8]Chen Benjie,Morris R.Flexible control of parallelism in a multiprocessor PC router[C]//Proceedings of the General Track:2002 USENIX Annual Technical Conference,Monterey,USA,Jun 10-15,2002.Berkeley,USA:USENIX Association,2002:333-346.
[9]Nikander P,Nyman B,Rinta-aho T,et al.Towards softwaredefined silicon:experiences in compiling Click to NetFPGA [C]//European NetFPGADevelopers Workshop,Sep 2010.
[10]Lockwood J W,Mckeown N,Watson G,et al.NetFPGA—an open platform for Gigabit-rate network switching and routing[C]//Proceedings of the 2007 IEEE International Conference on Microelectronic Systems Education,San Diego, Jun 3-4,2007.Piscataway,USA:IEEE,2007:160-161.
[11]Schelle G,Grunwald D.CUSP:a modular framework for high speed network applications on FPGAs[C]//Proceedings of the 13th ACM/SIGDA International Symposium on Field Programmable Gate Arrays,Monterey,USA,Feb 20-22,2005.New York:ACM,2005:246-257.
[12]Linux Kernel Contributors.Packet_mmap[EB/OL].[2015-07-22].https://www.kernel.org/doc/Documentation/networking/ p-acket_mmap.txt.
[13]Rizzo L.Netmap:a novel framework for fast packet I/O [C]//Proceedings of the 2012 USENIX Annual Technical Conference,2012.
[14]PF_RINGTM[EB/OL].[2015-07-22].http://www.ntop.org/ products/pf_ring/.
[15]Intel.Data plane development kit[EB/OL].[2015-07-22].http://www.dpdk.org.
[16]Barbette T,Soldani C,Mathy L.Fast userspace packet processing[C]//Proceedings of the 2015 ACM/IEEE Symposium on Architectures for Networking and Communications Systems,Oakland,USA,May 7-8,2015.Washington: IEEE Computer Society,2015:5-16.
[17]Gallenmuller S,Emmerich P,Wohlfart F,et al.Comparison of frameworks for high-performance packet IO[C]//Proceedings of the 2015 ACM/IEEE Symposium on Architectures for Networking and Communications Systems,Oakland,USA,May 7-8,2015.Washington:IEEE Computer Society,2015:29-38.
[18]Huggahalli R,Iyer R,Tetrick S.Direct cache access for high bandwidth network I/O[C]//Proceedings of the 32nd International Symposium on Computer Architecture,Madison,USA,Jun 7-8,2005.Washington:IEEE Computer Society,2005:50-59.
[19]Bolla R,Bruschi R.PC-based software routers:high performance and application service support[C]//Proceedings of the 2008 ACM SIGCOMM Workshop on Programmable Routers for Extensible Services of Tomorrow,Seattle, USA,Aug 17-22,2008.New York:ACM,2008:27-32.

LIU Song was born 1992.He is an M.S.candidate at National University of Defense Technology.His research interests include network virtualization and computer network,etc.
劉松(1992—),男,河南長(zhǎng)垣人,國(guó)防科技大學(xué)碩士研究生,主要研究領(lǐng)域?yàn)榫W(wǎng)絡(luò)虛擬化,計(jì)算機(jī)網(wǎng)絡(luò)等。參與國(guó)家重點(diǎn)基礎(chǔ)研究發(fā)展計(jì)劃(973計(jì)劃)和信息保障重點(diǎn)實(shí)驗(yàn)室開(kāi)放基金項(xiàng)目等。

LU Zexin was born in 1963.He is a researcher and M.S.supervisor at National University of Defense Technology. His research interests include high-performance computer and high-performance router,etc.
盧澤新(1963—),男,重慶人,國(guó)防科技大學(xué)研究員、碩士生導(dǎo)師,主要研究領(lǐng)域?yàn)楦咝阅苡?jì)算機(jī),高性能路由器等。

ZHANG Xiaozhe was born in 1976.He is an associate researcher and M.S.supervisor at National University of Defense Technology.His research interests include high-performance router,route protocol and protocol distributed parallel processing,etc.
張曉哲(1976—),男,遼寧鐵嶺人,國(guó)防科技大學(xué)副研究員、碩士生導(dǎo)師,主要研究領(lǐng)域?yàn)楦咝阅苈酚善鳎酚蓞f(xié)議,協(xié)議分布并行處理等。

MA Shicong was born in 1986.He is a Ph.D.candidate at National University of Defense Technology.His research interests include network virtualization and computer network,etc.
馬世聰(1986—),男,遼寧營(yíng)口人,國(guó)防科技大學(xué)博士研究生,主要研究領(lǐng)域?yàn)榫W(wǎng)絡(luò)虛擬化,計(jì)算機(jī)網(wǎng)絡(luò)等。
Design and Implementation of Optimization I/O Framework for Click Modular Router in User Level*
LIU Song+,LU Zexin,ZHANG Xiaozhe,MAShicong
School of Computer,National University of Defense Technology,Changsha 410073,China
+Corresponding author:E-mail:liusong_ee@163.com
Software router has played a more and more important role in the development of modern networks,and the Click modular router has been one of the most popular software routers as it provides a good platform for new protocol development and rapid prototyping.Due to external overhead introduced by practical mechanism,I/O performance,which has become a bottleneck,strictly prevents the packet processing capability of Click in the user level. Aiming at the shortcomings of the I/O mechanism in the existing Click modular router,this paper proposes an optimized I/O framework for the Click modular router in the user level,through using the poll mode,zero copy and packet prefetching.The experimental results show that the optimized I/O framework can provide better performance (121 times)than the native.
software router;Click;I/O;poll mode;zero copy;packets prefetching
10.3778/j.issn.1673-9418.1509095
A
TP393.0
*The National Basic Research Program of China under Grant No.2012LB315900(國(guó)家重點(diǎn)基礎(chǔ)研究發(fā)展計(jì)劃(973計(jì)劃)).
Received 2015-08,Accepted 2015-10.
CNKI網(wǎng)絡(luò)優(yōu)先出版:2015-11-11,http://www.cnki.net/kcms/detail/11.5602.TP.20151111.1648.004.html