核心網路協議棧offload功能盤點

2021-10-09 17:44:49 字數 1553 閱讀 6327

tso

tcp segmentation offload的縮寫,只針對tcp包傳送,超過 mtu 大小的報文不需要在協議棧分段,直接offload到網絡卡,由網絡卡硬體實現分段,降低 cpu 負載。除了tso,還有乙個lso(large segment offload),lso的定義相對於tso更加寬泛一些,不僅僅只是指tcp包,不過一般可以近似認為二者是同乙個概念,猜測可能是硬體上網絡卡很難做到針對所有協議都可以offload的特性,所以核心中並沒有針對這個特性的功能實現。

ufo

udp fragmentation offload的縮寫,和tso類似,只針對udp包傳送。

gso

generic segment offload的縮寫,它是 tso 的軟體實現,延遲大報文分段時機到 ip 層結束或者裝置層發包前,不同版本核心實現不同。

lro

large receive offload的縮寫,在接收網路包時,由網絡卡硬體實現網路包的聚合,聚合成乙個大的資料報在上報到核心協議棧中去處理,從而減少協議棧的處理壓力提公升效能。

gro

generic receive offload,是 lro 功能的軟體實現版本,通過將接收到的多個資料報聚合成乙個大的資料報,然後傳遞給網路協議棧處理,以減少上層協議棧處理開銷,提高系統效能。

rss

receive-side scaling (rss), 基於多個硬體接收佇列執行接收操作,多cpu同時處理,提公升接收效能。

rps

receive packet steering,和rss類似,區別在於rps是軟體實現的佇列,利用軟體來做接收資料分發,多cpu同時處理。

rfs

receive flow steering,相對於rps來說進一步提高了cache hit的效能。

xps

transmit packet steering縮寫,和rss/rps相對應,對於有多佇列的網絡卡,建立 cpu 與 tx queue 的對應關係,而對於只有單佇列的網絡卡,則沒有優化作用。

xdp

基於ebpf實現,只作用於接收操作,在hook點協議棧處理之前,可以在進入協議棧之前處理一些包的策略,從而offload協議棧的負載到更底層。

tc

基於ebpf實現,只作用於傳送操作,實現qos和流控功能。

checksum offload

對於tcp層和udp層的checksum計算,可以offload到網絡卡中利用硬體進行計算,從而減少checksum計算帶來的一些計算開銷。

使用ethtool -k可以檢視對應網絡卡的checksum offload特性支援情況:

generic-segmentation-offload: on

Linux核心網路協議棧7 socket埠管理

一 前情回顧 上一節 socket 位址繫結 中提到,應用程式傳遞過來的埠在核心中需要檢查埠是否可用 if sk sk prot get port sk,snum 按照前面的例子來分析,這裡是呼叫了 tcp prot 結構變數中的 get prot 函式指標,該函式位於net ipv4 inet c...

Linux核心網路協議棧8 socket監聽

幾個問題 了解以下幾個問題的同學可以直接忽略下文 1 listen 庫函式主要做了什麼?2 什麼是最大併發連線請求數?3 什麼是等待連線佇列?socket 監聽相對還是比較簡單的,先看下應用程式 listen server sockfd,5 其中,第乙個引數 server sockfd為服務端 so...

linux核心網路協議棧 網絡卡報文收發(十六)

linux版本 3.10.103 網絡卡驅動 ixgbev 網絡卡驅動預設採用的是napi的報文處理方式。即中斷 輪詢的方式,網絡卡收到乙個報文之後會產生接收中斷,並且遮蔽中斷,直到收夠了netdev max backlog個報文 預設300 或者收完網絡卡上的所有報文之後,重新開啟中斷。網絡卡啟用...