Bulk network packet transmission

來源:互聯網
上載者:User

標籤:style   blog   http   color   io   ar   strong   sp   資料   

Bulk network packet transmission

譯文zhangzl2013
譯文連結:http://www.cnblogs.com/zhangzl2013/p/bulk_network_packet_transmission.html
原文Jonathan Corbet
原文連結:Bulk network packet transmission
本文有可能會被轉載,從而導致評論留言的片段化。想參與評論和探討的同學,請找到原文或譯文的原始地址,與原文或譯文作者互動討論。

批量處理是當代系統提升效能的關鍵因素之一——在相對固有開銷之內儘可能做更多的事情。比如,如果某個子系統在做某些事情時必須要獲得鎖,那麼在獲得一次鎖的時候儘可能的把這類事情都做完能夠減少系統總開銷。最近幾年通過儘可能增加批量處理操作來提升效能的工作已經做了不少。最近對網路子系統增加批量處理操作,也讓它的效能有所提高。

每次在網路中傳輸一個資料包時,都需要做一些列的操作。包括擷取發送隊列的鎖,把資料包傳遞給驅動,把資料包插入裝置傳輸隊列並通知裝置開始傳輸。有一些操作必然是要針對每個資料包的,但有不是。例如,擷取隊列鎖的操作就不是,通知裝置開始傳輸的開銷也很大。它涉及到硬體操錯,在某些系統上還涉及到特權指令調用。

在傳輸一個資料包時,隊列中通常會有其他資料包;而網路通訊本身是可以叢發傳輸的。所以網路通訊協定棧可以試著把固有開銷平均到多個資料包上。 segmentation offload技術就會做類似的批量處理最佳化。但是當前的核心中,如果網路棧中有一系列的資料包要發送,也是每次一個這種低效的方式來發送。

這種情況在3.18中合并了一個小補丁集後會有所改變。看一些下面這個驅動匯出的發送資料包的函數:

netdev_tx_t    (*ndo_start_xmit) (struct sk_buff *skb, struct net_device *dev);

此函數擷取一個skb指標,通過dev裝置將它發送出去。每次調用都是一個獨立的操作,會有固定的開銷。3.18中,計劃給驅動添加一個新函數:

void (*ndo_xmit_flush)(struct net_device *dev, u16 queue);

如果驅動提供這個函數,就說明網路棧可以進行批量傳輸。網路棧可以接受多次ndo_start_xmit()函數調用,但驅動並不開始發送。在一系列的調用之後,再調用ndo_xmit_flush()函數來使驅動開始真正的傳輸。

考慮到在傳輸路徑上增加一個函數調用又增加了開銷,所以這個函數幾乎剛加入程式碼程式庫就又去除了。取而代之的是在sk_buff結構體中增加了一個新的布爾型變數xmit_more。如果它為真,意味著還有更多資料包要傳,驅動可以延遲硬體傳輸。這個變數使得在給驅動提供足夠的資訊的同時而又不必引入新的函數。

David Miller添加的這個機制實現了大量操作。一些驅動做了相應的支援,但是David沒有親自修改網路棧,而是由Jesper Dangaard Brouer在3.18中添加“bulk dequeue”補丁實現的。目前它的範圍也不大,只是用於單個傳輸隊列的情況中。

Jesper的改動很小:在有資料包要傳輸時,網路棧會盡量在獲得鎖之後一次性發送更多的資料包。“byte queue limit”機制限制了最大等待的資料數量。一旦達到這個上限,skb->xmit_more會置為假,從而開始真正的傳輸。

Eric Dumazet發現這個補丁集還可以進一步改進:確認資料包傳輸的工作可以完全放在隊列鎖之外,從而增加系統的並發性。Eric的補丁效果巨好:即使不用segmentation offload技術,也能達到40Gb每秒的速度。毫無疑問,這個補丁已經合并進了3.18.

改動雖然很小,但是小改動可以帶來大影響。這個小改動使3.18核心擁有目前最快的網路棧。

-- 結束 --

Bulk network packet transmission

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.