轉載於:https://www.cnblogs.com/danxi/p/6591885.html
ethtool 常用命令如下,比如對eth0的操作:
ethtool eth0 //查詢ethx網口基本設置,其中 x 是對應網卡的編號,如eth0、eth1等等 ethtool –h //顯示ethtool的命令幫助(help) ethtool –i eth0 //查詢eth0網口的相關信息 ethtool –d eth0 //查詢eth0網口注冊性信息 ethtool –r eth0 //重置eth0網口到自適應模式 ethtool –S eth0 //查詢eth0網口收發包統計 ethtool –s eth0 [speed 10|100|1000] [duplex half|full] [autoneg on|off] //設置網口速率10/100/1000M、設置網口半/全雙工、設置網口是否自協商
我這里主要想發掘一下ethtool -k 相關的內容,以下命令在ubuntu 14.04上親測:
1、rx-checksumming: off
接收側硬件校驗和計算,如能設置為on,表示網卡支持該特性,命令: ethtool -K eth0 rx-checksum on|off
2、tx-checksumming: on
發送側硬件校驗和計算,如能設置為on,表示網卡支持該特性,命令: ethtool -K eth0 tx-checksum-ip-generic on|off
3、scatter-gather: on
分散/聚集 (Scatter Gather) 功能,是網卡要支持TSO的必要條件之一。
4、tcp-segmentation-offload: on
簡稱TSO,是一種利用網卡對TCP數據包分片,減輕CPU負荷的一種技術,有時也被叫做 LSO (Large segment offload) ,TSO是針對TCP的,UFO是針對UDP的。如果硬件支持 TSO功能,同時也需要硬件支持的TCP校驗計算和分散/聚集 (Scatter Gather) 功能。命令: ethtool -K eth0 tso on|off
在不支持TSO的網卡上,TCP層向IP層發送數據會考慮mss,使得TCP向下發送的數據可以包含在一個IP分組中而不會造成分片, mss是在TCP初始建立連接時由網卡MTU確定並和對端協商的,所以在一個MTU=1500的網卡上,TCP向下發送的數據不會大於min(mss_local, mss_remote)-ip頭-tcp頭。
網卡支持TSO時,TCP層會逐漸增大mss(總是整數倍數增加),當TCP層向下發送大塊數據時,僅僅計算TCP頭,網卡接到到了IP層傳下的大數據包后自己重新分成若干個IP數據包,添加IP頭,復制TCP頭並且重新計算校驗和等相關數據,這樣就把一部分CPU相關的處理工作轉移到由網卡來處理。
5、udp-fragmentation-offload: off
簡稱UFO,是網卡對udp提供的類似TSO的技術。 命令:ethtool -K eth0 ufo on | off
在我的網卡上不支持這個特性,所以命令執行失敗是這樣的:
root@ubuntu:~# ethtool -K eth0 ufo on Cannot change udp-fragmentation-offload Could not change any device features
6、generic-segmentation-offload: on
簡稱GSO,它比TSO更通用,基本思想就是盡可能的推遲數據分片直至發送到網卡驅動之前,此時會檢查網卡是否支持分片功能(如TSO、UFO), 如果支持直接發送到網卡,如果不支持就進行分片后再發往網卡。這樣大數據包只需走一次協議棧,而不是被分割成幾個數據包分別走,這就提高了效率。命令: ethtool -K eth0 gso on | off
7、large-receive-offload: off
簡稱LRO,通過將接收到的多個TCP數據聚合成一個大的數據包,然后傳遞給網絡協議棧處理,以減少上層協議棧處理 開銷,提高系統接收TCP數據包的能力。
8、generic-receive-offload: on
簡稱GRO,基本思想跟LRO類似,克服了LRO的一些缺點,更通用。后續的驅動都使用GRO的接口,而不是LRO。
附:
RSS(Receive Side Scaling),是一項網卡的新特性,俗稱多隊列。具備多個RSS隊列的網卡,可以將不同的網絡流分成不同的隊列,再分別將這些隊列分配到多個CPU核心上進行處理,從而將負荷分散,充分利用多核CPU的能力。
參考: