前言
現時 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.
|