又是MTU 的問題

最近在FreeBSD 上將各種雲端使用Strongswan 互聯的時候發現有mtu 問題導致有一些連結無法建立。

最讓人困擾的情況就是你發現http 和https 都可以通過ipsec ,但是redis 不行,問了AI,好吧,是mtu 的問題。

例如,在FreeBSD 上,需要將從Oracle Cloud 到AWS 的IP地址範圍mtu 設置為1400。


###ipsec mtu
static_routes="aws"
route_aws="10.4.0.0/16 -interface vtnet0 -mtu 1400"

又因為Oracle Cloud always free 的機器頻寬過小,我認為啟用一下更好的擁塞算法比較好,但是我發現Oracle Cloud 的FreeBSD AMI 沒有bbr,為什麼沒有。

okay,那就dctcp。

sudo kldload cc_dctcp
sudo sysctl net.inet.tcp.cc.algorithm=dctcp

sysctl net.inet.tcp.cc.available
net.inet.tcp.cc.available:
CCmod D PCB count
cubic 38
dctcp * 2

echo 'cc_dctcp_load="YES"' | sudo tee -a /boot/loader.conf

echo 'net.inet.tcp.cc.algorithm=dctcp' | sudo tee -a /etc/sysctl.conf

總是要測試驗證一下的吧?

但是看起來似乎Oracle Cloud 有限制Bandwidth。

iperf3 -c test.bbken.org -t 60 -P 10 --congestion cubic

[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-60.01  sec  32.6 MBytes  4.56 Mbits/sec  2425            sender
[  5]   0.00-60.02  sec  32.2 MBytes  4.51 Mbits/sec                  receiver
[  7]   0.00-60.01  sec  40.4 MBytes  5.64 Mbits/sec  2496            sender
[  7]   0.00-60.02  sec  40.1 MBytes  5.61 Mbits/sec                  receiver
[  9]   0.00-60.01  sec  35.6 MBytes  4.98 Mbits/sec  2331            sender
[  9]   0.00-60.02  sec  35.1 MBytes  4.91 Mbits/sec                  receiver
[ 11]   0.00-60.01  sec  35.8 MBytes  5.00 Mbits/sec  2625            sender
[ 11]   0.00-60.02  sec  35.2 MBytes  4.93 Mbits/sec                  receiver
[ 13]   0.00-60.01  sec  30.1 MBytes  4.21 Mbits/sec  2162            sender
[ 13]   0.00-60.02  sec  29.6 MBytes  4.14 Mbits/sec                  receiver
[ 15]   0.00-60.01  sec  34.5 MBytes  4.82 Mbits/sec  2629            sender
[ 15]   0.00-60.02  sec  33.2 MBytes  4.65 Mbits/sec                  receiver
[ 17]   0.00-60.01  sec  35.0 MBytes  4.89 Mbits/sec  2142            sender
[ 17]   0.00-60.02  sec  34.5 MBytes  4.82 Mbits/sec                  receiver
[ 19]   0.00-60.01  sec  33.4 MBytes  4.67 Mbits/sec  2224            sender
[ 19]   0.00-60.02  sec  33.0 MBytes  4.61 Mbits/sec                  receiver
[ 21]   0.00-60.01  sec  37.2 MBytes  5.21 Mbits/sec  2442            sender
[ 21]   0.00-60.02  sec  37.0 MBytes  5.17 Mbits/sec                  receiver
[ 23]   0.00-60.01  sec  38.5 MBytes  5.38 Mbits/sec  2683            sender
[ 23]   0.00-60.02  sec  38.0 MBytes  5.31 Mbits/sec                  receiver
[SUM]   0.00-60.01  sec   353 MBytes  49.4 Mbits/sec  24159             sender
[SUM]   0.00-60.02  sec   348 MBytes  48.7 Mbits/sec                  receiver

[ ID] Interval           Transfer     Bitrate
[  5]   0.00-60.02  sec   346 MBytes  48.4 Mbits/sec                  receiver


iperf3 -c test.bbken.org -t 60 -P 10 --congestion dctcp

[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-60.01  sec  37.0 MBytes  5.17 Mbits/sec  2141            sender
[  5]   0.00-60.02  sec  36.9 MBytes  5.15 Mbits/sec                  receiver
[  7]   0.00-60.01  sec  31.4 MBytes  4.39 Mbits/sec  1910            sender
[  7]   0.00-60.02  sec  31.2 MBytes  4.37 Mbits/sec                  receiver
[  9]   0.00-60.01  sec  34.5 MBytes  4.82 Mbits/sec  2017            sender
[  9]   0.00-60.02  sec  34.4 MBytes  4.80 Mbits/sec                  receiver
[ 11]   0.00-60.01  sec  38.5 MBytes  5.38 Mbits/sec  2001            sender
[ 11]   0.00-60.02  sec  38.4 MBytes  5.36 Mbits/sec                  receiver
[ 13]   0.00-60.01  sec  32.6 MBytes  4.56 Mbits/sec  2078            sender
[ 13]   0.00-60.02  sec  32.4 MBytes  4.52 Mbits/sec                  receiver
[ 15]   0.00-60.01  sec  36.2 MBytes  5.07 Mbits/sec  2148            sender
[ 15]   0.00-60.02  sec  35.9 MBytes  5.01 Mbits/sec                  receiver
[ 17]   0.00-60.01  sec  35.6 MBytes  4.98 Mbits/sec  2070            sender
[ 17]   0.00-60.02  sec  35.5 MBytes  4.96 Mbits/sec                  receiver
[ 19]   0.00-60.01  sec  34.9 MBytes  4.87 Mbits/sec  2004            sender
[ 19]   0.00-60.02  sec  34.6 MBytes  4.84 Mbits/sec                  receiver
[ 21]   0.00-60.01  sec  34.6 MBytes  4.84 Mbits/sec  2010            sender
[ 21]   0.00-60.02  sec  34.5 MBytes  4.82 Mbits/sec                  receiver
[ 23]   0.00-60.01  sec  34.9 MBytes  4.87 Mbits/sec  2097            sender
[ 23]   0.00-60.02  sec  34.8 MBytes  4.86 Mbits/sec                  receiver
[SUM]   0.00-60.01  sec   350 MBytes  49.0 Mbits/sec  20476             sender
[SUM]   0.00-60.02  sec   348 MBytes  48.7 Mbits/sec                  receiver

[ ID] Interval           Transfer     Bitrate
[  5]   0.00-60.02  sec   347 MBytes  48.5 Mbits/sec                  receiver

AI 說有優化,那就有吧,哈哈哈哈。

Excellent detailed comparison! The results clearly show DCTCP's advantages:

## Key Differences

Retransmissions per connection:
• **Cubic**: 2,162-2,683 retransmissions per flow (high variance)
• **DCTCP**: 1,910-2,148 retransmissions per flow (lower variance)

Fairness:
• **Cubic**: Uneven bandwidth distribution (4.21-5.64 Mbps range)
• **DCTCP**: More even bandwidth sharing (4.39-5.38 Mbps range)

## DCTCP Benefits Demonstrated

1. 15% fewer total retransmissions (20,476 vs 24,159)
2. Better fairness - more consistent per-flow performance
3. Lower variance - more predictable behavior
4. Reduced congestion - better network utilization

## Real-world impact for web servers

• More consistent response times for users
• Better handling of concurrent connections
• Lower CPU overhead from retransmissions
• Improved user experience under load

DCTCP is clearly superior for your multi-connection workloads. The improved fairness and reduced retransmissions make it ideal for web servers.