• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      零拷貝技術(shù)在網(wǎng)絡(luò)流量控制系統(tǒng)中的應(yīng)用

      2013-08-05 09:39:44張素娟馬軍
      關(guān)鍵詞:拷貝網(wǎng)卡內(nèi)核

      張素娟,馬軍

      (河北聯(lián)合大學(xué)網(wǎng)絡(luò)中心,河北唐山063009)

      隨著高速局域網(wǎng)的快速發(fā)展和各種網(wǎng)絡(luò)應(yīng)用的日益豐富,對網(wǎng)絡(luò)管理提出了越來越高的要求,流量控制應(yīng)運(yùn)而生[1]。流量控制就是要對網(wǎng)絡(luò)非關(guān)鍵業(yè)務(wù)的帶寬加以限制,以保證與工作和研究相關(guān)的關(guān)鍵業(yè)務(wù)的帶寬和服務(wù)質(zhì)量。然而目前的流量控制系統(tǒng)在實際的應(yīng)用環(huán)境中,工作效率往往不盡人意。流控系統(tǒng)對系統(tǒng)吞吐量和網(wǎng)絡(luò)處理能力要求非常高,如果達(dá)不到要求會造成網(wǎng)絡(luò)性能下降,甚至成為網(wǎng)絡(luò)出口的瓶頸[2-4]。因此對流量控制系統(tǒng)的數(shù)據(jù)處理能力的研究十分必要,本文研究了數(shù)據(jù)包的行走路徑,分析了數(shù)據(jù)包的收發(fā)過程中對系統(tǒng)資源的消耗,研究現(xiàn)有的技術(shù),提出一種改進(jìn)的零拷貝方案實現(xiàn)數(shù)據(jù)包的傳輸。

      1 零拷貝技術(shù)

      對于傳統(tǒng)網(wǎng)卡,處理一個64KB的文件,需要與主機(jī)CPU進(jìn)行60次交互,大約40次數(shù)據(jù)包交換,20次應(yīng)答。另外,在時間代價方面,數(shù)據(jù)拷貝操作的時間消耗占整個收包過程的57%左右[5-6]。因此,如果能減少數(shù)據(jù)拷貝和上下文切換,將會極大提高系統(tǒng)的處理性能,零拷貝就是在這種情況下提出的[7]。零拷貝技術(shù)是指某節(jié)點(diǎn)的報文收發(fā)過程中不會出現(xiàn)任何內(nèi)存間的拷貝,數(shù)據(jù)包由用戶緩沖區(qū)直接經(jīng)過網(wǎng)絡(luò)接口到達(dá)外部網(wǎng)絡(luò)。主要采用DMA和內(nèi)存映射等技術(shù)[8],通過用戶層和網(wǎng)絡(luò)接口交互,避免內(nèi)存間拷貝和上下文切換,縮短數(shù)據(jù)包行走路徑,節(jié)省CPU開銷。

      PF_RING套接字是一個第三方內(nèi)核數(shù)據(jù)包捕獲接口,有一種DNA(Direct NIC Access)的工作模式,一些系統(tǒng)用它來實現(xiàn)內(nèi)存零拷貝[9]。PF_RING在內(nèi)核中維護(hù)一個環(huán)狀緩存(RING),RING提供兩個接口,一個與網(wǎng)卡交互接口,一個與應(yīng)用程序交互的接口,網(wǎng)卡接收數(shù)據(jù)時[10],把數(shù)據(jù)包拷貝到RING中,數(shù)據(jù)不經(jīng)過內(nèi)核協(xié)議棧,應(yīng)用程序則通過mmap來訪問這個RING。

      PF_RING中RING的大小固定為1024個slot,網(wǎng)卡接收報文后放到RING中屬于硬件處理,速度非???。應(yīng)用程序處理數(shù)據(jù)包的速度要快,否則網(wǎng)卡就沒有空間再接收新的數(shù)據(jù)包。流量控制系統(tǒng)要對數(shù)據(jù)包進(jìn)行分析,顯然不具備這樣的速度,必須把數(shù)據(jù)拷貝出來,再進(jìn)行處理。如果在流量控制系統(tǒng)中采用PF_RING會發(fā)生一次拷貝過程,因此必須對PF_RING進(jìn)行優(yōu)化。

      2 優(yōu)化的零拷貝方案

      在優(yōu)化的零拷貝方案中,系統(tǒng)在內(nèi)核中同樣維護(hù)一個環(huán)狀緩存,如圖1所示。

      與PF_RING不同的是,環(huán)狀緩存里面存放是報文的描述符,即報文內(nèi)存指針的頁的起始地址和偏移位置,同時,內(nèi)核建立一個數(shù)據(jù)管理區(qū),用戶程序和網(wǎng)卡處理報文時不斷的向這個管理區(qū)申請可用內(nèi)存,并在用完后及時的釋放,以此來解決內(nèi)存緊張的狀況。網(wǎng)卡接收到達(dá)流控設(shè)備的數(shù)據(jù)包,通過DMA方式放到內(nèi)核緩沖區(qū),應(yīng)用程序通過mmap映射實現(xiàn)用戶空間和內(nèi)核空間的內(nèi)存共享。這樣應(yīng)用程序可以像訪問自己空間一樣快速的訪問到內(nèi)核空間的數(shù)據(jù)。在這個過程中網(wǎng)絡(luò)數(shù)據(jù)包跳過了內(nèi)核協(xié)議棧,實現(xiàn)了真正的零拷貝。

      圖1 零拷貝系統(tǒng)結(jié)構(gòu)

      2.1 數(shù)據(jù)包捕獲過程

      在優(yōu)化的零拷貝方案中,網(wǎng)絡(luò)數(shù)據(jù)包的捕獲過程如下:

      (1)首先把內(nèi)核中連續(xù)的若干頁映射到用戶空間,內(nèi)核模塊自行管理這些頁的內(nèi)存,并且作為DMA地址交給網(wǎng)卡收發(fā)包使用。

      (2)一旦數(shù)據(jù)包到達(dá)網(wǎng)卡,網(wǎng)卡先對數(shù)據(jù)包進(jìn)行預(yù)處理,如果需要交給應(yīng)用程序處理,就把報文的描述符放到指定的用戶緩沖區(qū)中,等待用戶空間讀取,相應(yīng)的報文內(nèi)存引用計數(shù)增加。

      (3)用戶空間讀取報文描述符,并計算出對應(yīng)的用戶空間地址,即可訪問報文;在報文生命周期結(jié)束后,減少內(nèi)核空間引用計數(shù),如果引用計數(shù)為1,內(nèi)核模塊則釋放之。

      (4)用戶空間發(fā)報文也采取類似的方式,只不過報文內(nèi)存由用戶空間發(fā)起命令,內(nèi)核分配,再交由用戶空間使用。

      2.2 同步問題

      零拷貝中涉及對共享內(nèi)存的讀寫,一邊是處于內(nèi)核空間的網(wǎng)卡驅(qū)動向內(nèi)存寫入數(shù)據(jù),一邊是用戶進(jìn)程直接對內(nèi)存數(shù)據(jù)進(jìn)行處理,兩者處于不同的空間,使得同步問題的解決非常關(guān)鍵,本方案采用的是增加標(biāo)志位的方式。

      首先,把環(huán)狀緩存分為四種類型:1空閑可供網(wǎng)卡使用的緩存,2存放等待用戶空間處理的數(shù)據(jù)的緩存,3存放正在被用戶空間處理的數(shù)據(jù)的緩存,4數(shù)據(jù)已經(jīng)被處理可以釋放的緩存。

      網(wǎng)卡接到報文后,如果要交到用戶空間,則將報文的描述符放到標(biāo)記為1的緩存中,并將標(biāo)記改為2,如果沒有標(biāo)記為1的,就把數(shù)據(jù)寫入標(biāo)記為2的緩存中。同時,用戶空間會讀這個ring,如果發(fā)現(xiàn)有標(biāo)記為2的,則先把標(biāo)記改為3,然后處理。用戶空間處理完數(shù)據(jù)后把相應(yīng)的緩存標(biāo)記為4。

      內(nèi)核中有一個定時器線程,掃描這個ring,如果發(fā)現(xiàn)有標(biāo)記為4的,則將相應(yīng)的空間釋放,并把標(biāo)記改為1。

      2.3 零拷貝內(nèi)存管理

      該零拷貝方案主要靠共享內(nèi)存的方式實現(xiàn),為了節(jié)約內(nèi)存,在內(nèi)核中維護(hù)一個數(shù)據(jù)管理區(qū),負(fù)責(zé)內(nèi)存的分配、管理和釋放。

      Node表示內(nèi)存頁中元信息的存儲單元,chunk表示被釋放或分配的存儲區(qū)。存儲區(qū)域按最小的單元劃分,大小為L1 cache的尺寸,每個node包括一個mask字段,用于標(biāo)記與此node連接的chunk是否被使用。所有free chunk都被放到一個數(shù)組中的雙向鏈表中,以大小索引。

      模塊初始化時,為每個CPU分配一個結(jié)構(gòu)體,其中建造一個三維鏈表,當(dāng)用戶申請內(nèi)存時,他的尺寸調(diào)整到能夠滿足要求的最小尺寸,并記錄進(jìn)相應(yīng)的字段,然后去chunk數(shù)組中查找,直到匹配成功一個合適的list。如果這個list比用戶要求的尺寸大,剩余的空間被放到其它list中供大小合適的請求使用,這個被選定的chunk被定義為一個node,相應(yīng)的mask被置為used。

      當(dāng)釋放內(nèi)存的請求發(fā)出時,首先記錄相應(yīng)的node和CPU信息,如果當(dāng)前CPU不是要求釋放的CPU,那么相應(yīng)的chunk被記錄成一個單鏈表,并放置到semi-free對象的list中等待在相應(yīng)的CPU中釋放。如果當(dāng)前CPU就是要求釋放的CPU,則根據(jù)相應(yīng)的node信息,查找與之連接的chunk,這些chunk以雙向列表元素格式賦值,然后所有free chunks合并成一個,并且節(jié)點(diǎn)中的相應(yīng)mask置為unused;這樣更大一點(diǎn)的chunk就按雙向鏈表格式被重新賦值,并被放到空閑對象list中供大小合適的對象使用。釋放算法檢查semi-freed list,如果list不空,則按照上述方法對該list中的chunk進(jìn)行釋放。

      除了semi-free list可以通過相應(yīng)的lock被不同CPU訪問外,其余的所有l(wèi)ists和arrays不能被不同的CPU訪問。

      內(nèi)存管理中重要的數(shù)據(jù)結(jié)構(gòu):

      3 零拷貝方案測試

      測試平臺主要配置如下:雙至強(qiáng)CPU3.00GHz,4GB內(nèi)存,Intel82575千兆網(wǎng)卡,修改網(wǎng)卡驅(qū)動程序支持零拷貝方案。linux的版本號為2.6.2,采用開源軟件netperf控制發(fā)包速率和數(shù)據(jù)包長,分別測試了使用傳統(tǒng)方式和零拷貝方式的報文捕獲情況,測試數(shù)據(jù)如表1所示:通過上面的數(shù)據(jù)可以看出,相比傳統(tǒng)數(shù)據(jù)包采集,采用零拷貝方案后CPU的占用率明顯降低,尤其是在大包的情況下性能提高的更為明顯,可以做到傳統(tǒng)方式的4倍,而且不丟包。

      表1 數(shù)據(jù)包捕獲情況對比

      在流量控制系統(tǒng)中應(yīng)用該零拷貝方案可以有效的提高網(wǎng)絡(luò)數(shù)據(jù)的傳輸效率,由于消除了內(nèi)存拷貝對系統(tǒng)資源的消耗,系統(tǒng)性能得到明顯改善,該方案還可以用于其他存在大數(shù)據(jù)傳輸?shù)南到y(tǒng)中,比如入侵檢測系統(tǒng),同樣可以降低CPU開銷,提高網(wǎng)絡(luò)吞吐量。

      [1] 王超,趙文杰.IP骨干網(wǎng)絡(luò)流量控制系統(tǒng)分析及方案部署[J].山東科技大學(xué)學(xué)報(自然科學(xué)版),2009,28(2):88-91.

      [2] WangWeihua,Marimuthu P..Application-Oriented Flow Control:Funddamentals,Algorithms and Faimess[J].IEEE/ACM Transactions on networking,2006 ,14:793-801.

      [3] 王鐘,雷為民.零拷貝技術(shù)在實時PCM捕獲中的應(yīng)用[J].微計算機(jī)信息,2009,34(3):193-195.

      [4] 李勝利,徐力,張明虎.基于實時微內(nèi)核的零拷貝通信協(xié)議[J].華中科技大學(xué)學(xué)報(自然科學(xué)版),2007,35(1):35-39.

      [5] 顧鵬,汪敏,盧旌平.零拷貝技術(shù)在網(wǎng)絡(luò)行為分析系統(tǒng)中的應(yīng)用與改進(jìn)[J].計算機(jī)工程與設(shè)計,2010,31(7):1462-1464.

      [6] MPC8572EPowerQUICC(TM)integrated host processor family referencemanual[M].Freescale Semiconductor,2008.

      [7] 石飛,史嵐,喬建忠,等.網(wǎng)絡(luò)數(shù)據(jù)采集技術(shù)研究[J].小型微型計算機(jī)系統(tǒng),2008,29(10):1913-1914.

      [8] 夏鴻,程克非.基于零拷貝技術(shù)的千兆網(wǎng)絡(luò)性能優(yōu)化研究[J].網(wǎng)絡(luò)與通信,2008,24:155-157.

      [9] Yousif M F.On generalizations of PF-rings[J].Communications in algebra,2004,32(2):65-69.

      [10] LiuTian-hua,Zhu Hong-feng,Chang Gui-ran,et al.The design and implementation of zero-copy for linux[C].Eighth International Conference on Intelligent Systems Design and Applications,2008,(3):121-123.

      猜你喜歡
      拷貝網(wǎng)卡內(nèi)核
      在DDS 中間件上實現(xiàn)雙冗余網(wǎng)卡切換的方法
      萬物皆可IP的時代,我們當(dāng)夯實的IP內(nèi)核是什么?
      強(qiáng)化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
      Server 2016網(wǎng)卡組合模式
      基于嵌入式Linux內(nèi)核的自恢復(fù)設(shè)計
      Linux內(nèi)核mmap保護(hù)機(jī)制研究
      唐氏綜合征是因為“拷貝”走樣了
      挑戰(zhàn)Killer網(wǎng)卡Realtek網(wǎng)游專用Dragon網(wǎng)卡
      文件拷貝誰最“給力”
      巧識劣質(zhì)水晶頭
      花莲市| 渭南市| 扎囊县| 沙雅县| 宁都县| 洛川县| 迭部县| 平阳县| 郸城县| 凤山县| 阿坝| 皮山县| 长武县| 榆林市| 织金县| 永川市| 湟中县| 庄浪县| 石棉县| 虞城县| 驻马店市| 宾阳县| 五华县| 南澳县| 永川市| 宁波市| 阿图什市| 石阡县| 马公市| 藁城市| 连城县| 昌吉市| 抚宁县| 宁明县| 宜宾市| 宁城县| 广昌县| 民勤县| 盖州市| 德格县| 巴里|