多隊列網卡簡介以及Linux通過網卡發送資料包源碼解讀__Linux

來源:互聯網
上載者:User

首先我們看一下一個主流多隊列網卡(E1000)跟多核CPU之間的關係圖:


非多隊列:

linux的網卡由結構體net_device表示,一個該結構體對應一個可以調度的資料包發送隊列。

資料包的實體在核心中以結構體sk_buff(skb),形如:

多隊列:

一個網卡可以擁有多個隊列

接下來,看看TX引擎是如何工作的(註:對於發送和接收資料包有兩個名詞,分別應對TX,RX)


解釋:

函數-dev_queue_xmit():入隊一個buffer以傳輸到網路驅動裝置。

配合該函數的源碼來解釋上圖的傳輸過程:

步驟一:可以看到如果裝置支援隊列,則資料包入裝置隊列。在入隊操作前後,有加鎖和釋放隊列鎖的過程。

步驟二:調出裝置的qdisc(該對象是隊列的排隊規則)

QDisc(排隊規則)是queueingdiscipline的簡寫,它是理解流量控制(traffic control)的基礎。無論何時,核心如果需要通過某個網路介面發送資料包,它都需要按照為這個介面配置的qdisc(排隊規則)把資料包排入佇列。然後,核心會儘可能多地從qdisc裡面取出資料包,把它們交給網路介面卡驅動模組。最簡單的QDisc是pfifo它不對進入的資料包做任何的處理,資料包採用先入先出的方式通過隊列。不過,它會儲存網路介面一時無法處理的資料包。

步驟三:重設skb的隊列映射,置為0


步驟四:tx lock->hard_start_xmit

到這裡,我們好像沒有看到tx_lock、hard_start_xmit函數,反而我們在無隊列的裝置分支中看到了這些:

Dev_hard_start_xmit的定義:

很明顯我們應該撥開雲霧看到一些本質,再次回到裝置支援隊列的分支中(這才是我們關心的):不管怎麼樣,你總該有發送的函數調用吧,就是下面圈起來的這個:


果不其然,這是一個封裝函數:

參考:

http://www.landley.net/kdocs/ols/2007/ols2007v2-pages-305-310.pdf

http://vger.kernel.org/~davem/davem_nyc09.pdf

http://www.chineselinuxuniversity.net/kerneldocs/networking/API-dev-queue-xmit.html

http://apps.hi.baidu.com/share/detail/36206005

http://cache.baidu.com/c?m=9d78d513d98017f419bc837f7d01d0120e55f0237b8bc7150ec3e54c84145d563164f4cd25351174c4b5777075d95e2cebe74703234460e99492ce0c9fac935b3295776a2d499141658243f4971532c157c304b2ff4ab7e9e732e4ff8f8cc2040d97061832daabc8015c41ca65ed4771a5fdc816424240b8fa3013a4537d2c992742b750f997682858df&p=ce7ddc1187904eac59b5c4710e14d625&user=baidu&fm=sc&query=qdisc%5Frun+%D6%B4%D0%D0%B9%FD%B3%CC&qid=f6ae9cf00151dde4&p1=1

http://lwn.net/Articles/289137/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.