首先我們看一下一個主流多隊列網卡(E1000)跟多核CPU之間的關系圖:
非多隊列:
linux的網卡由結構體net_device表示,一個該結構體對應一個可以調度的數據包發送隊列。
數據包的實體在內核中以結構體sk_buff(skb),形如:
多隊列:
一個網卡可以擁有多個隊列
接下來,看看TX引擎是如何工作的(注:對於發送和接收數據包有兩個名詞,分別應對TX,RX)
解釋:
函數-dev_queue_xmit():入隊一個buffer以傳輸到網絡驅動設備。
配合該函數的源碼來解釋上圖的傳輸過程: