常見的網卡調優


常見的網卡調優

網卡多隊列

如果網卡及其驅動支持 RSS/多隊列,那你可以會調整 RX queue(也叫 RX channel)的數量。這可以用 ethtool 完成。
查看 RX queue 數量:

$ sudo ethtool -l eth0
Channel parameters for eth0:
Pre-set maximums:
RX:   0
TX:   0
Other:    0
Combined: 8
Current hardware settings:
RX:   0
TX:   0
Other:    0
Combined: 4

這里可以看到允許的最大值(網卡及驅動限制),以及當前設置的值。
注意:不是所有網卡驅動都支持這個操作。如果你的網卡不支持,會看到如下類似的錯誤:

$ sudo ethtool -l eth0
Channel parameters for eth0:
Cannot get device channel parameters
: Operation not supported

這意味着驅動沒有實現 ethtool 的 get_channels 方法。可能的原因包括:該網卡不支持調整 RX queue 數量,不支持 RSS/multiqueue,或者驅動沒有更新來支持此功能。

調整 RX queues

設置 combined 類型網卡的收發隊列為 8 個:

$ sudo ethtool -L eth0 combined 8

如果你的網卡支持獨立的 RX 和 TX 隊列數量,那你可以只修改 RX queue 數量:

$ sudo ethtool -L eth0 rx 8

注意:對於大部分驅動,修改以上配置會使網卡先 down 再 up,因此會造成丟包。請酌情使用。

kvm中設置網卡多隊列:
編輯虛擬機yaml文件,添加 <driver name='vhost' queues='4'/>
一般隊列數和虛擬機的vcpu保持一致

網卡隊列長度

增加RX queue 的大小可以在流量很大的時候緩解丟包問題,但是,只調整這個還不夠,軟件層面仍然可能會丟包,因此還需要其他的一些調優才能徹底的緩解或解決丟包問題

ethtool -g 可以查看 queue 的大小。

$ sudo ethtool -g eth0
Ring parameters for eth0:
Pre-set maximums:
RX:   4096
RX Mini:  0
RX Jumbo: 0
TX:   4096
Current hardware settings:
RX:   512
RX Mini:  0
RX Jumbo: 0
TX:   512

以上顯式網卡支持最多 4096 個接收和發送 descriptor(描述符,簡單理解,存放的是指向包的指針),但是現在只用到了 512 個。

ethtool -G 修改 queue 大小:

$ sudo ethtool -G eth0 rx 4096

注意:對於大部分驅動,修改以上配置會使網卡先 down 再 up,因此會造成丟包。請酌情使用。

網卡哈希字段

可以用 ethtool 調整 RSS 計算哈希時所使用的字段。

例子:查看 UDP RX flow 哈希所使用的字段:

$ sudo ethtool -n eth0 rx-flow-hash udp4
UDP over IPV4 flows use these fields for computing Hash flow key:
IP SA
IP DA

可以看到只用到了源 IP(SA:Source Address)和目的 IP。

我們接下來修改一下,加入源端口和目的端口:

$ sudo ethtool -N eth0 rx-flow-hash udp4 sdfn

sdfn 的具體含義解釋起來有點麻煩,請查看 ethtool 的幫助(man page)。

調整 hash 所用字段是有用的,而 ntuple 過濾對於更加細粒度的 flow control 更加有用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM