Featured image of post 最佳化 10Gbps+ 網卡的系統效能

最佳化 10Gbps+ 網卡的系統效能

10Gbps / 40Gbps 網卡的系統效能優化方法。 高速網卡提供了極高的數據傳輸速率,在預設情況下,網卡可能無法達到其最大的傳輸速率,這可能會導致數據傳輸瓶頸,影響到應用的性能。

最後更新
約 1033 字

前言

現時 10Gbps 網卡價格對比當年已經大幅下降,跌幅達 99% … 所以越來越多的家用伺服器開始使用 10Gbps 或以上速度的網卡,但是在預設情況下,如果發現網卡的傳輸速率遠低於其最大的傳輸速率,可以嘗試使用以下方法來優化網卡的系統效能。

淘寶上有很多便宜的 10Gbps 網卡,Intel X520 雙 SFP+ 或 Intel X540 雙 RJ45 隻需要 ¥95.00 左右就有交易,雖然都是拆機貨,但網卡一般非常耐用,值得一試。 留意這類拆機的網卡已經有一定歲月,都不支援現時流行的 2.5G 及 5G 協議的速率,只支援 1G / 10G。

優化方法

修改 /etc/sysctl.conf,加入以下內容,然後執行 sysctl -p 即可。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
net.ipv4.tcp_sack = 0
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_slow_start_after_idle=0
net.ipv4.tcp_syn_retries =3
net.ipv4.tcp_synack_retries=3
net.ipv4.ip_forward = 1

# memory allocation min/pressure/max.
# read buffer, write buffer, and buffer space
net.ipv4.tcp_rmem = 10000000 10000000 10000000
net.ipv4.tcp_wmem = 10000000 10000000 10000000
net.ipv4.tcp_mem = 10000000 10000000 10000000

net.core.rmem_max = 8388608
net.core.wmem_max = 8388608
net.core.rmem_default = 524287
net.core.wmem_default = 524287
net.core.optmem_max = 524287
net.core.netdev_max_backlog = 300000

net.ipv6.conf.all.disable_ipv6 = 1
vm.overcommit_memory = 1

fs.nr_open  = 10485760
fs.file-max = 10485760

常見問題

Retr 異常

當使用 iperf3 測試兩台裝置之間的網路速度時,可以發現當其中一台的網路速度遠低於另一台時,會出現 TCP 重傳 (Retr) 的問題。這是因為 TCP 的流量控制機制在高速和低速鏈路之間可能會出現不協調。

當高速鏈路(10G)向低速鏈路(2.5G)傳輸大量數據時,低速鏈路可能無法瞬間處理這些數據,導致數據包在網路中被丟棄。網路中的數據包丟失會導致 TCP 啟動其重傳機制,導致大量重傳。

要解決這個問題,一種可能的解決方案是在高速鏈路上實施速度限制,使其速度不超過低速鏈路的速度。

也可以嘗試調整 TCP 的窗口大小或使用其他一些優化 TCP 性能的技術參數,例如可以嘗試將 net.ipv4.tcp_sack 設定為 1

修改 TCP SACK 前

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
iperf3 -c 192.168.10.100 -R
Connecting to host 192.168.10.100, port 5201
Reverse mode, remote host 192.168.10.100 is sending
[  5] local 192.168.10.200 port 46606 connected to 192.168.10.100 port 5201
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  83.6 MBytes   701 Mbits/sec                  
[  5]   1.00-2.00   sec  88.0 MBytes   738 Mbits/sec                  
[  5]   2.00-3.00   sec  67.5 MBytes   566 Mbits/sec                  
[  5]   3.00-4.00   sec  70.6 MBytes   593 Mbits/sec                  
[  5]   4.00-5.00   sec  75.0 MBytes   629 Mbits/sec                  
[  5]   5.00-6.00   sec  97.8 MBytes   820 Mbits/sec                  
[  5]   6.00-7.00   sec  75.1 MBytes   630 Mbits/sec                  
[  5]   7.00-8.00   sec  58.0 MBytes   487 Mbits/sec                  
[  5]   8.00-9.00   sec  74.0 MBytes   621 Mbits/sec                  
[  5]   9.00-10.00  sec  77.0 MBytes   646 Mbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.04  sec   770 MBytes   643 Mbits/sec  124573          sender
[  5]   0.00-10.00  sec   767 MBytes   643 Mbits/sec                  receiver

iperf Done.

Retr 異常的解決方法

1
2
sysctl -w net.ipv4.tcp_sack=1
sysctl -p

修改 TCP SACK 後

設定後再次測試,速度應該會恢復正常。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
iperf3 -c 192.168.10.100 -R
Connecting to host 192.168.10.100, port 5201
Reverse mode, remote host 192.168.10.100 is sending
[  5] local 192.168.10.200 port 50840 connected to 192.168.10.100 port 5201
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec   287 MBytes  2.41 Gbits/sec                  
[  5]   1.00-2.00   sec   283 MBytes  2.37 Gbits/sec                  
[  5]   2.00-3.00   sec   283 MBytes  2.37 Gbits/sec                  
[  5]   3.00-4.00   sec   283 MBytes  2.37 Gbits/sec                  
[  5]   4.00-5.00   sec   282 MBytes  2.37 Gbits/sec                  
[  5]   5.00-6.00   sec   282 MBytes  2.37 Gbits/sec                  
[  5]   6.00-7.00   sec   283 MBytes  2.37 Gbits/sec                  
[  5]   7.00-8.00   sec   283 MBytes  2.37 Gbits/sec                  
[  5]   8.00-9.00   sec   283 MBytes  2.37 Gbits/sec                  
[  5]   9.00-10.00  sec   273 MBytes  2.29 Gbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.04  sec  2.76 GBytes  2.36 Gbits/sec    8             sender
[  5]   0.00-10.00  sec  2.76 GBytes  2.37 Gbits/sec                  receiver

iperf Done.

使用 Hugo 建立
主題 StackJimmy 設計