4,884 瀏覽數

Linux command – ethtool

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

網友的想法

  1. 自動參照通知: 網路連線的錯誤排除(二) | Benjr.tw

發表迴響