国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于DPDK的高速數(shù)據(jù)包捕獲方法①

2018-06-14 08:49:26任昊哲
關(guān)鍵詞:網(wǎng)卡內(nèi)核報(bào)文

任昊哲,年 梅

(新疆師范大學(xué) 計(jì)算機(jī)科學(xué)技術(shù)學(xué)院,烏魯木齊 830054)

引言

傳統(tǒng)軟件數(shù)據(jù)包捕獲通常采用基于操作系統(tǒng)內(nèi)核的旁路機(jī)制,僅在系統(tǒng)內(nèi)核協(xié)議棧處理數(shù)據(jù)包時(shí)捕獲數(shù)據(jù)包,整個(gè)數(shù)據(jù)包捕獲都或多或少的依賴操作系統(tǒng)內(nèi)核協(xié)議棧,而操作系統(tǒng)內(nèi)核收發(fā)包需要首先由網(wǎng)卡觸發(fā)中斷,CPU將數(shù)據(jù)包從網(wǎng)卡緩存拷貝到內(nèi)核內(nèi)存空間,經(jīng)過內(nèi)核協(xié)議棧處理后,再將數(shù)據(jù)包拷貝到用戶態(tài)內(nèi)存空間.此過程中需要消耗大量CPU資源用于處理中斷、多次內(nèi)存拷貝以及系統(tǒng)調(diào)用[2];此外系統(tǒng)普通內(nèi)存頁只有4 KB,內(nèi)存訪問速度慢,協(xié)議棧處理也將造成大量的性能消耗[3].以上原因?qū)е萝浖?shù)據(jù)包俘獲中消耗了大量資源,使得網(wǎng)絡(luò)高負(fù)載時(shí)系統(tǒng)資源被耗盡造成了數(shù)據(jù)包捕獲時(shí)大量丟包.

為了提高軟件數(shù)據(jù)包捕獲的效率解決軟件數(shù)據(jù)俘獲系統(tǒng)中的丟包問題,研究人員針對(duì)性的進(jìn)行了優(yōu)化并設(shè)計(jì)出了不少高速數(shù)據(jù)包俘獲框架,McCanne與Jacobson提出了一種基于Unix內(nèi)核的伯克利封包過濾器BPF的數(shù)據(jù)包過濾機(jī)制,BPF可按照規(guī)則過濾無用數(shù)據(jù)包以提升數(shù)據(jù)包捕獲性能[4].tcpdump、Libpcap都使用到了這種機(jī)制,但這種機(jī)制沒有改進(jìn)捕獲流程中系統(tǒng)資源消耗過大的問題.

為了解決系統(tǒng)資源大量被中斷處理消耗的問題,Linux在2.5內(nèi)核之后開始使用NAPI(NEW API)來處理接收到的數(shù)據(jù)包,其主要進(jìn)行了以下改進(jìn)[5]:

(1)第一個(gè)報(bào)文到達(dá)時(shí)觸發(fā)網(wǎng)絡(luò)適配器硬件中斷,將該適配器放入輪詢表并關(guān)閉中斷請(qǐng)求.

(2)系統(tǒng)激活一個(gè)軟中斷,在處理函數(shù)中對(duì)輪詢表上的設(shè)備進(jìn)行輪詢,處理數(shù)據(jù)包.

(3)直到本次處理時(shí)間片用完或者報(bào)文接收處理完畢,重新開啟該網(wǎng)絡(luò)適配器中斷請(qǐng)求.NAPI可以明顯減少硬中斷,提高高速流量負(fù)載網(wǎng)絡(luò)下的報(bào)文捕獲性能.Luca Deri開發(fā)了數(shù)據(jù)包捕獲函數(shù)庫pf_ring.它將網(wǎng)卡接收的數(shù)據(jù)包儲(chǔ)存在內(nèi)核層的一個(gè)環(huán)狀緩存中,網(wǎng)卡通過驅(qū)動(dòng)程序支持的NAPI像緩存中寫入數(shù)據(jù).應(yīng)用程序通過MMAP直接讀取緩存數(shù)據(jù),消除了數(shù)據(jù)包從內(nèi)核態(tài)到用戶態(tài)的內(nèi)存拷貝,極大的提高了數(shù)據(jù)包捕獲的效率.

但是,以上方法主要是針對(duì)軟件數(shù)據(jù)俘獲中某一個(gè)方面的缺陷進(jìn)行了改進(jìn),隨著校園網(wǎng)出口帶寬的不斷增長,對(duì)出口數(shù)據(jù)俘獲的速度增長要求越來越強(qiáng)烈,以上措施依然無法完全解決丟包的問題,還需要針對(duì)軟件解包中的各種問題進(jìn)行解決,從而最大限度體提升數(shù)據(jù)俘獲的性能,滿足高速網(wǎng)絡(luò)出口數(shù)據(jù)的獲取需要.

1 Intel DPDK的基本原理

為了更全面地解決軟件方式的數(shù)據(jù)包轉(zhuǎn)發(fā)和捕獲效率低下的問題,6WIND,Intel等多家公司,針對(duì)Intel的CPU和網(wǎng)卡開發(fā)了數(shù)據(jù)包轉(zhuǎn)發(fā)處理套件DPDK.DPDK是一套強(qiáng)大、高度優(yōu)化的用于數(shù)據(jù)包處理的函數(shù)庫和驅(qū)動(dòng)集合,可以幫助用戶將控制面和數(shù)據(jù)面平臺(tái)進(jìn)行整合,從而能有效地執(zhí)行數(shù)據(jù)包處理[6],可以極大地提高數(shù)據(jù)處理性能和吞吐量并提高效率.和傳統(tǒng)的網(wǎng)絡(luò)數(shù)據(jù)包俘獲方式相比DPDK主要進(jìn)行了以下改進(jìn):

近十年來,一是由于老齡化社會(huì)發(fā)展迅速,老年人并發(fā)癥、夾雜癥多,往往需要往返多個(gè)專科就診;二是由于疾病譜的改變,惡性腫瘤、非傳染性慢性疾病發(fā)病率逐年增高,而醫(yī)學(xué)分科越來越細(xì),單一的科室或?qū)I(yè)無法準(zhǔn)確地診斷和制定最佳治療方案。這是MDT產(chǎn)生并發(fā)展的中國社會(huì)背景。

(1) DPDK使用輪詢模式驅(qū)動(dòng)(Poll Mode Drivers,PMD)代替了傳統(tǒng)模式通過中斷的網(wǎng)卡接收和發(fā)送數(shù)據(jù)包的工作方式,將收到的數(shù)據(jù)包通過直接內(nèi)存存取模式(Direct Memory Access,DMA)傳輸?shù)絻?nèi)存中并直接交由應(yīng)用程序處理從而實(shí)現(xiàn)了零拷貝,極大地提升了收發(fā)包的性能.

(2)運(yùn)行在用戶空間的I/O技術(shù)(UIO):使用UIO機(jī)制使網(wǎng)卡驅(qū)動(dòng)程序運(yùn)行在用戶態(tài),將原本在內(nèi)核態(tài)的處理的工作直接交由用戶態(tài)應(yīng)用程序處理,避免了不必要的內(nèi)核態(tài)和用戶態(tài)之間的系統(tǒng)調(diào)度,提高了執(zhí)行效率.

(3)大內(nèi)存頁面技術(shù):DPDK通過綁定2 MB或者是1 GB的huge內(nèi)存頁來代替?zhèn)鹘y(tǒng)的4 KB普通頁,提高內(nèi)存使用效率讓程序盡量獨(dú)占內(nèi)存防止內(nèi)存換出,擴(kuò)大頁表提高h(yuǎn)ash命中率,提升數(shù)據(jù)俘獲中頁面查找的速率.

(4) CPU親和性:利用CPU親和性主要是將控制面線程以及各個(gè)數(shù)據(jù)面線程綁定到不同的CPU內(nèi)核,省卻了反復(fù)調(diào)度的性能消耗,同時(shí)支持NUMA架構(gòu)盡量訪問本端內(nèi)存.

(5) DPDK使用了rte_mbuf結(jié)構(gòu)來存儲(chǔ)數(shù)據(jù)包,將數(shù)據(jù)結(jié)構(gòu)體部分和數(shù)據(jù)部分合在一起,因此只需要分配一次內(nèi)存即可,進(jìn)一步節(jié)省了分配內(nèi)存開銷,提高了數(shù)據(jù)接收和存儲(chǔ)的速度.

綜上所述,DPDK針對(duì)傳統(tǒng)軟件俘獲數(shù)據(jù)包存在的問題,全面地提出了相應(yīng)的解決方案.此外,從而能夠通過DPDK開發(fā)高效的數(shù)據(jù)包捕獲軟件系統(tǒng),解決傳統(tǒng)網(wǎng)絡(luò)數(shù)據(jù)包俘獲中丟包問題,實(shí)現(xiàn)準(zhǔn)確高速網(wǎng)絡(luò)信息的獲取.

2 基于DPDK數(shù)據(jù)包俘獲軟件系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

DPDK提供了x86平臺(tái)下的報(bào)文數(shù)據(jù)包處理庫和驅(qū)動(dòng)集合,包括數(shù)據(jù)包的接收和發(fā)送等模塊,為開發(fā)高速數(shù)據(jù)包俘獲系統(tǒng)提供了必須的接口,其包含的模塊集合如圖1所示主要的數(shù)據(jù)包接收模塊.

圖1 DPDK模塊集合

利用DPDK提供的模塊實(shí)現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)捕獲首先需要進(jìn)行CPU和網(wǎng)卡的綁定,接著申請(qǐng)大內(nèi)存頁,然后使用接收數(shù)據(jù)包讀取網(wǎng)卡上接收的數(shù)據(jù),最后將數(shù)據(jù)進(jìn)行保存.具體實(shí)現(xiàn)流程圖如圖2所示,主要包括了以下幾個(gè)步驟:

(1) 初始化環(huán)境抽象層(Environment Abstraction Layer,EAL):使用 rte_eal_init(argc,argv)模塊,獲取系統(tǒng)可用CPU的數(shù)量、建立日志文件、查詢可用PCI網(wǎng)卡設(shè)備、掛載巨頁內(nèi)存并申請(qǐng)可用內(nèi)存、創(chuàng)建lcore主線程綁定CPU并最終完成EAL的初始化;

(2)創(chuàng)建網(wǎng)絡(luò)數(shù)據(jù)包的緩存池隊(duì)列以及存儲(chǔ)結(jié)構(gòu):使用init_mbuf相關(guān)API初始化pools以及mbuf;

(3) 初始化抓包端口進(jìn)行并配置:使用init_port(ports->id[i])查看和配置對(duì)應(yīng)端口的狀態(tài);

(4)讀取接收到的數(shù)據(jù)包:使用rte_eth_rx_burst接收數(shù)據(jù);

(5)使用自定義函數(shù)保存PCAP文件:調(diào)用自定義函數(shù)賦值PCAP結(jié)構(gòu)體構(gòu)造PCAP文件,完成后調(diào)用寫盤接口將文件寫入磁盤,完成數(shù)據(jù)包捕獲.

至此,該系統(tǒng)將所有發(fā)送到該網(wǎng)卡的網(wǎng)絡(luò)數(shù)據(jù)包抓取并保存在一個(gè)標(biāo)準(zhǔn)PCAP文件中,實(shí)現(xiàn)了數(shù)據(jù)包的捕獲和保存工作.

3 實(shí)驗(yàn)分析

為了測(cè)試系統(tǒng)性能,本文分別對(duì)使用DPDK和LIBPCAP搭建的網(wǎng)絡(luò)數(shù)據(jù)俘獲系統(tǒng)進(jìn)行了平行實(shí)驗(yàn)測(cè)試.首先選擇了兩臺(tái)聯(lián)想PC機(jī),均配備了萬兆網(wǎng)卡,一臺(tái)作為數(shù)據(jù)包發(fā)送機(jī),一臺(tái)為數(shù)據(jù)包抓取機(jī),在實(shí)驗(yàn)中分別發(fā)送64 B、512 B和1500 B的數(shù)據(jù)包進(jìn)行測(cè)試.實(shí)現(xiàn)對(duì)不同捕包平臺(tái)和不同大小的數(shù)據(jù)包、丟包率進(jìn)行比較.其中收包率是指實(shí)驗(yàn)中實(shí)際收到的數(shù)據(jù)包所占發(fā)出的數(shù)據(jù)包的比例.測(cè)試的結(jié)果分別如圖3和圖4所示.

圖2 數(shù)據(jù)包捕獲流程圖

圖3 千兆帶寬下的數(shù)據(jù)包捕獲率

圖4 萬兆帶寬下的數(shù)據(jù)包捕獲率

由以上實(shí)驗(yàn)結(jié)果可以看出傳統(tǒng)模式下基于Libpcap的數(shù)據(jù)包捕獲系統(tǒng)在千兆網(wǎng)絡(luò)下已經(jīng)有了大量的丟包,而基于DPDK的數(shù)據(jù)包捕獲系統(tǒng)則能在千兆網(wǎng)絡(luò)下達(dá)到線性速度,在萬兆網(wǎng)絡(luò)下除了64 B數(shù)據(jù)包捕獲率為75.6%,512 B和1500 B的數(shù)據(jù)包捕獲率都接近90%,分析其原因主要在于Libpcap工具存在大量的系統(tǒng)調(diào)用和進(jìn)程上下文切換開銷,大部分系統(tǒng)資源都浪費(fèi)在兩次內(nèi)存拷貝和系統(tǒng)調(diào)用中.經(jīng)過測(cè)試基于DPDK的數(shù)據(jù)包捕獲系統(tǒng),極大地提升了數(shù)據(jù)包捕獲的性能,并且能夠按照應(yīng)用的要求進(jìn)行網(wǎng)絡(luò)應(yīng)用數(shù)據(jù)采集的擴(kuò)展和配置.

4 結(jié)束語

本文針對(duì)高速大容量網(wǎng)絡(luò)出口數(shù)據(jù)俘獲的需要,并在對(duì)DPDK的相關(guān)技術(shù)特點(diǎn)以及軟件數(shù)據(jù)包捕獲機(jī)制進(jìn)行分析的基礎(chǔ)上,設(shè)計(jì)實(shí)現(xiàn)了基于DPDK的軟件數(shù)據(jù)包俘獲系統(tǒng),通過與傳統(tǒng)數(shù)據(jù)包俘獲軟件進(jìn)行實(shí)驗(yàn)對(duì)比證明,該系統(tǒng)在數(shù)據(jù)包捕獲率方面有較大的性能提升,系統(tǒng)雖然最終受磁盤寫入性能以及實(shí)驗(yàn)機(jī)的CPU核心數(shù)的限制并沒有達(dá)到萬兆線性速度,但也為后續(xù)優(yōu)化并達(dá)到萬兆網(wǎng)絡(luò)線性速度數(shù)據(jù)包捕捉提供了思路,同時(shí)也為高速數(shù)據(jù)過濾提供了技術(shù)參考.

1 徐慧,姜恒,楊林.PF_RING高效數(shù)據(jù)包捕獲技術(shù)研究與設(shè)計(jì).計(jì)算機(jī)科學(xué),2012,39(10S):88-89,114.

2 王佰玲,方濱興,云曉春.零拷貝報(bào)文捕獲平臺(tái)的研究與實(shí)現(xiàn).計(jì)算機(jī)學(xué)報(bào),2005,28(1):46-52.

3 王佰玲,方濱興,云曉春.傳統(tǒng)報(bào)文捕獲平臺(tái)性能影響因素分析.計(jì)算機(jī)工程與應(yīng)用,2003,(22):151-152.[doi:10.3321/j.issn:1002-8331.2003.22.049]

4 楊銘.伯克利數(shù)據(jù)包過濾器的探索與研究.科技創(chuàng)新與應(yīng)用,2014,(33):92.

5 張楠.基于IP網(wǎng)絡(luò)的通用數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[碩士學(xué)位論文].北京:北京郵電大學(xué),2015.

6 趙寧,謝淑翠.基于dpdk的高效數(shù)據(jù)包捕獲技術(shù)分析與應(yīng)用.計(jì)算機(jī)工程與科學(xué),2016,38(11):2209-2215.[doi:10.3969/j.issn.1007-130X.2016.11.008]

猜你喜歡
網(wǎng)卡內(nèi)核報(bào)文
在DDS 中間件上實(shí)現(xiàn)雙冗余網(wǎng)卡切換的方法
基于J1939 協(xié)議多包報(bào)文的時(shí)序研究及應(yīng)用
汽車電器(2022年9期)2022-11-07 02:16:24
萬物皆可IP的時(shí)代,我們當(dāng)夯實(shí)的IP內(nèi)核是什么?
強(qiáng)化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
CTCS-2級(jí)報(bào)文數(shù)據(jù)管理需求分析和實(shí)現(xiàn)
淺析反駁類報(bào)文要點(diǎn)
中國外匯(2019年11期)2019-08-27 02:06:30
Server 2016網(wǎng)卡組合模式
基于嵌入式Linux內(nèi)核的自恢復(fù)設(shè)計(jì)
Linux內(nèi)核mmap保護(hù)機(jī)制研究
ATS與列車通信報(bào)文分析
阿拉善左旗| 随州市| 东兰县| 荆门市| 乌兰察布市| 巴马| 烟台市| 托克托县| 白银市| 芜湖市| 大邑县| 亚东县| 澳门| 乌拉特后旗| 平遥县| 万年县| 修武县| 沁阳市| 登封市| 福建省| 嘉兴市| 扎赉特旗| 威宁| 桂东县| 卢龙县| 大姚县| 莒南县| 昌江| 澄江县| 常州市| 隆子县| 乐亭县| 淮南市| 会昌县| 山丹县| 海兴县| 乌海市| 和林格尔县| 岳阳市| 琼海市| 宣威市|