TSO、UFO、GSO、LRO、GRO和RSS介紹
ethtool -k < 網(wǎng)絡(luò)接口>,可以看到很多網(wǎng)絡(luò)接口的offload特性,例如:
$ sudo ethtool -k eth0
Offload parameters for eth0:
rx-checksumming: on
tx-checksumming: on
scatter-gather: on
tcp-segmentation-offload: on
udp-fragmentation-offload: off
generic-segmentation-offload: on
generic-receive-offload: on
large-receive-offload: off
這些offload特性都是為了提升網(wǎng)絡(luò)收/發(fā)性能。TSO、UFO和GSO是對應(yīng)網(wǎng)絡(luò)發(fā)送,在接收方向上對應(yīng)的是LRO、GRO。
TSO
TSO(TCP Segmentation Offload),是一種利用網(wǎng)卡對TCP數(shù)據(jù)包分片,減輕CPU負荷的一種技術(shù),有時也被叫做 LSO (Large segment offload) ,TSO是針對TCP的,UFO是針對UDP的。如果硬件支持 TSO功能,同時也需要硬件支持的TCP校驗計算和分散/聚集 (Scatter Gather) 功能。
GSO
GSO(Generic Segmentation Offload),它比TSO更通用,基本思想就是盡可能的推遲數(shù)據(jù)分片直至發(fā)送到網(wǎng)卡驅(qū)動之前,此時會檢查網(wǎng)卡是否支持分片功能(如TSO、UFO),如果支持直接發(fā)送到網(wǎng)卡,如果不支持就進行分片后再發(fā)往網(wǎng)卡。這樣大數(shù)據(jù)包只需走一次協(xié)議棧,而不是被分割成幾個數(shù)據(jù)包分別走,這就提高了效率。
LRO
LRO(Large Receive Offload),通過將接收到的多個TCP數(shù)據(jù)聚合成一個大的數(shù)據(jù)包,然后傳遞給網(wǎng)絡(luò)協(xié)議棧處理,以減少上層協(xié)議棧處理 開銷,提高系統(tǒng)接收TCP數(shù)據(jù)包的能力。
GRO
GRO(Generic Receive Offload),基本思想跟LRO類似,克服了LRO的一些缺點,更通用。后續(xù)的驅(qū)動都使用GRO的接口,而不是LRO。
RSS
RSS(Receive Side Scaling),是一項網(wǎng)卡的新特性,俗稱多隊列。具備多個RSS隊列的網(wǎng)卡,可以將不同的網(wǎng)絡(luò)流分成不同的隊列,再分別將這些隊列分配到多個CPU核心上進行處理,從而將負荷分散,充分利用多核處理器的能力。