前面花了好多篇幅,終於將網絡協議棧的初始化相關的內容介紹完了,也就是說完成前面的那些步驟以後,網絡協議棧具備了數據包的收發功能。在網絡接口層,它只負責數據包的接收與發送,而不關注數據包在網絡層的類型是什麼,所以傳輸速率的快慢往往與接口層的處理有着密切的關係,下面我們來了解一下在提供傳輸速率上面,現在的內核都引進了哪些新的特性。
數據包的接收: NAPI, RPS,RFS
數據包的發送: TSO, GRO
數據包的處理: slab, RCU
1. NAPI
從上圖我們可以看到,NAPI和非NAPI的最大區別是skb到達網絡層的方式,前者通過輪詢直接將包傳遞到網絡層,後者則需要等待中斷一個一個將數據包傳遞到網絡層。
下面是NAPI的處理過程:
下面是每個CPU都獨有的一個結構體,主要管理在該CPU上數據的收發:
下面是介紹NAPI的兩篇文章,詳細可以參考:
2. RPS
Linux網卡調優:RPS (Receive Packet Steering)
3. GSO/TSO
Linux GSO邏輯分析
linux tcp GSO和TSO實現
4. slab
Linux slab 分配器剖析
5. RCU
linux內核 RCU機制詳解
上面這些內容可以先了解以後,起碼知道每個特性的幹什麼的,後面在分析代碼的時候會詳細分析怎麼實現的,下面講進入網絡接口層數據包的接收和發送過程。