ethtool 在 Linux 下面算是一個常用到的指令,關於網卡的設定值或是要重新設定都是透過這一個指令來使用.
ethtool devname
[root@benjr ~]# ethtool eth0 Settings for eth0 Supported ports: [ TP ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Supports auto-negotiation: Yes Advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Advertised auto-negotiation: Yes Speed: 100Mb/s Duplex: Full Port: Twisted Pair PHYAD: 1 Transceiver: internal Auto-negotiation: on Supports Wake-on: pumbag Wake-on: g Current message level: 0×00000001 (1) Link detected: yes
ethtool -s devname
ethtool -s devname speed N [duplex half|full] [port tp|aui|bnc|mii] [autoneg on|off] [advertise N] [phyad N] [xcvr internal|external] [wol p|u|m|b|a|g|s|d…] [sopass xx:yy:zz:aa:bb:cc] [msglvl N | msglvl type on|off …]
我們除了可透過 ethtool 看網卡有支援的速度, 10baseT/Half ,10baseT/Full ,100baseT/Half ,100baseT/Full ,1000baseT/Full 等不同速度 或是半速 ( half :顧名思義就次每次傳送接收資料時,只能單一方向,傳送時就不能接收,反之亦同.概念就像是無線電對講機.) 和全速 ( full) .也可以過 ethtool 該指令來更改它的設定值.
[root@benjr ~]# ethtool –s eth0 autoneg off speed 10 duplex full
- Autoneg off -> 如果要自訂速度那第一步就要先將 auto negotiation 的功能關掉.auto negotiation 就是速度由網卡依據目前網路狀況自己來決定.
- Speed 10 -> 除了 10 以外,還有 100M,1G,10G 等的速度
- Duplex full -> 有半速 ( half ) 和全速 ( full) 可以選擇.
如果你的網卡有支援 WOL(Wake On Lan),這個 tool 也可以使用.
[root@benjr ~]# ethtool -s eth0 wol g [root@benjr ~]# ethtool eth0 wake-on=g
檢查一下看 wake-on LAN 的功能是否開啟,的確是有的.
ethtool -k devname
ethtool -k|–show-features|–show-offload devname
還有一些網路卡的細項可以透過 #ethtool -k | –show-offload ethX 來查詢的.
-k 參數也可以用 –show-offload 來使用.
root@benjr:~# ethtool -k eth0 Features for eth0: rx-checksumming: on tx-checksumming: on tx-checksum-ipv4: on tx-checksum-ip-generic: off [fixed] tx-checksum-ipv6: on tx-checksum-fcoe-crc: off [fixed] tx-checksum-sctp: off [fixed] scatter-gather: on tx-scatter-gather: on tx-scatter-gather-fraglist: off [fixed] tcp-segmentation-offload: on tx-tcp-segmentation: on tx-tcp-ecn-segmentation: off [fixed] tx-tcp6-segmentation: on udp-fragmentation-offload: off [fixed] generic-segmentation-offload: on generic-receive-offload: on large-receive-offload: off [fixed] rx-vlan-offload: on tx-vlan-offload: on ntuple-filters: off [fixed] receive-hashing: on highdma: on [fixed] rx-vlan-filter: on [fixed] vlan-challenged: off [fixed] tx-lockless: off [fixed] netns-local: off [fixed] tx-gso-robust: off [fixed] tx-fcoe-segmentation: off [fixed] tx-gre-segmentation: off [fixed] tx-ipip-segmentation: off [fixed] tx-sit-segmentation: off [fixed] tx-udp_tnl-segmentation: off [fixed] tx-mpls-segmentation: off [fixed] fcoe-mtu: off [fixed] tx-nocache-copy: on loopback: off [fixed] rx-fcs: off [fixed] rx-all: off tx-vlan-stag-hw-insert: off [fixed] rx-vlan-stag-hw-parse: off [fixed] rx-vlan-stag-filter: off [fixed] l2-fwd-offload: off [fixed]
ethtool -C devname
# ethtool -C ethX rx-usecs 0 tx-usecs 0 adaptive-rx off adaptive-tx off
關閉 ITR, ITR (Interrupt Throttle Rate) 不知道是幹嘛的,不過這邊使用了兩個參數 x-usecs , tx-usecs 與 adaptive-rx , adaptive-tx
我們先來看看什麼是 adaptive-rx , adaptive-tx, 查了一下參數資料 MTNIC_for_XEN_Readme.txt 相信還是看不懂.
x-usecs , tx-usecs : Above an upper limit of packet rate, adaptive moderation will set the moderation time to its highest value. Below a lower limit of packet rate, the moderation time will be set to its lowest value.
adaptive-rx , adaptive-tx : By default, the driver uses adaptive interrupt moderation for the receive path, which adjusts the moderation time to the traffic pattern
不過在 Intel 的 gbe-controllers-interrupt-moderation-appl-note.pdf 文件有提到關於 ITR (Interrupt Throttle Rate)
其實概念很簡單 Intel 的網路卡有針對 ITR (Interrupt Throttle Rate) 做限制,也就是我們可以透過設定針對 Ethernet 網卡對系統處理器發出的 interrupt 的頻率.一共有 4 種演算法個針對不同的 I/O 狀況而定的.
- Bulk/Intermediate – 適用於大量的一般封包的網路傳輸.
- Low Latency – 流量不大 而且 小的數據封包明顯是多數時
- Lowest Latency – 小流量而且大多是小數據封包
除了可以透過 ethtool 來設定,在 Linux 下可以在載入模組時就先設定好.
- insmod e1000.ko InterruptThrottleRate=1 (Mode 1)
- insmod e1000.ko InterruptThrottleRate=0 (ITR off)
- insmod e1000.ko InterruptThrottleRate=8000 (Fixed value for all I/O patterns)
多個網路裝置時,可以一起設定.
- insmod e1000.ko InterruptThrottleRate=1,1,1,1
在 Linux 下 Interrupt Throttle Rate 與 Interrupt Rates ,Latency ,CPU Utilization 的數值如下
Mode/Value | Interrupt Rates | Latency | Throughput | CPU Utilization |
3 | 4,000 to 20,000 | High to Low | High | Low to High |
1 | 4,000 to 70,000 | High to Low | High | Low to High |
0 | No Limit | Lowest | Varies | Highest |
Fixed Value | 100 to 100,000 | High to Low | Varies | Low to High |
接下來討論 rx-usecs 與 tx-usecs ,通常封包資料從收到,到處理完然後再處理下一個封包資料的時間被稱為延遲 (latency) 時間.如果延遲時間太短則 cpu overhead (消耗 CPU)就會高.所以通常 kernels 2.6.15 以前的版本是 25us,之後的版本是 75us (單位為 us 10的負6次方,0.000001 秒).
ethtool -G ethX
-g(小寫)查詢設定
# ethtool -g ethX
-G (大寫)修改設定
# ethtool -G ethX [rx <N>] [tx <N>]
ring size (或是 ring buffer) 是網路卡所需要的一塊記憶體空間,藉由增加網路介面接收信號緩衝區( ring size , ring buffer ) 的容量有助於抑制行程切換次數的增加,我們可透過 ethtool -g ethX 顯示數值,或是透過 ethtool -G ethx 來設定,不過這最大值在編譯驅動程式時就已經決定.
# ethtool -G ethX rx 4096 tx 4096
ethtool -K ethX
關閉 general receive offload,GRO (generic receive offload) 他是 LRO(Large Receive Offload) 的增強版,主要是針對TCP的機制,LRO 與 GRO 它將多個 TCP 封包集合在一個大封包才交給上層的其他網絡協議,這樣可以減少上層協議處理的數量.但如果在測試效能時,還是關閉這樣功能,避免效能的降低.
我們可透過 ethtool -k ethX 顯示數值,或是透過 ethtool -K ethx 來設定
# ethtool -K ethX gro off
ethtool -S eth0
-S 可以看網卡總共收過及發過幾個封包,還可以看到封包的傳送過程中是不是有錯誤發生.
# ethtool -S ethX
更多的 ethtool 參數可以透過 #man ethtool 或是網路查詢 http://linux.die.net/man/8/ethtool
One thought on “Linux command – ethtool”