ืืจืฉืช ืืืืืืืืช ื- Google Cloud ืืกืคืงืช ืืืื ืืช ืืืืื ืืืื ืืืืืจ ื ืืื ืขื ืืื ืืืืืจ ืืคืืืงืฆืืืช ืืื ืืืืจืื ืืืืืจื ืืืื ืืช ืืื ืืฆืืช ืืืจืฉืช ืฉื Google. ืขื ืืืช, ืืืืจืืช ืืจืืจืช ืืืืื ืฉื Linux TCP/IP ืืืชืืืืช ืืจืื ืืกืืืืืช ืืงืืืืืช, ืืืืืืืช ืืืจืื ืืฆืืืืจื ืืงืืืง ืืืืฆืืขืื ืืขื ื.
ืืื ืืืฉืื ืืช ืืืืฆืืขืื ืืื ืืืืื ื- Google Cloud, ืืืืืฅ ืืืฉืชืืฉ ืืืืืจืืช TCP/IP ืฉืืืคืืขืืช ืืืกืื ืืื, ืฉืขืืจื ืืืคืืืืืืฆืื ืืืืืื ืืกืืืืช ืืขื ื.
ืืืืืจืืช ืฉืืืืืจืืช ืืืกืื ืืื ื ืืืงื ืืฉืืืืฉ ืืกืืืืชGoogle Cloud . ืืืืืจืืช ืืืื ืืืืขืืืช ืืขืืงืจ ืืชืงืฉืืจืช ืคื ืืืืช ืืื ืืืคืขืื, ืืื ืืืืจื ืืชืงืฉืืจืช ืืื ืืืคืขืื ืฉื Compute Engine ืืืื ืืชืืืืช ืืืฆืื ืืืช.
ืืกืืจ ืขื ืืืืืช ืืชืคืืงื
ืคืจืืืืงืื TCP ืืฉืชืืฉ ืืื ืื ืื ืฉื 'ืืืื ืืช' ืืื ืื ืื ืืช ืืจืืืช ืื ืชืื ืื ืืื ืืฉืืื ืืืื ืืืงืื. ืืชืคืืงื ืืืงืกืืืืืช ืฉืืคืฉืจ ืืืฉืื ื ืงืืขืช ืืคื ืืงืฉืจ ืืื:
Throughput <= window size / round-trip time (RTT) latency
ืืขืืฆืื ืืืงืืจื ืฉื TCP, ืืืื ืืืืื ืืืงืกืืืื ืืืืื ื-65,535 ืืืื (64KiB โ 1), ืืืื ืืขืืชืื ืงืจืืืืช ืจืฉืชืืช ืืืืจื ืืืช ืืืืจืืช ืื ืื ืืฆืืืช ืืกืคืืง, ืื ืืฉืืื ืืืื ืืขืืืื ื ืืืื.
ืกืงืจืืคื Shell ืืืืคืืืืืืฆืื ืฉื ืืืฆืืขื TCP
ืืืืืฅ ืืืฉืชืืฉ ืืืืืจืืช ื-TCP ืืืืืช ืืื ืืฉืคืจ ืืช ืืืืฆืืขืื:
- ืืงืื ืช MinRTO: ืืื ืืืชืืืฉืฉ ืืืจ ืืืชืจ ืืืืืื ืืืืืืช, ืฆืจืื ืืืงืืื ืืช ืืขืืืืืื ืืืขืืจื ืืืืฉ.
- ืืคืขืืช ืชืืจ ืืืื: ืฆืืฆืื ืืขืืืก ืืื ืืชืืงืื ืืืื ืคืจืฆื ืชืขืืืจื ืืืคืืืงืฆืืืช.
- ืืฉืืชืช ืืชืืื ืืืืืช ืืืจื ืืฆื ืืื ืคืขืืืืช: ืืคืขืื ืืืืฉ ืืงืฆื ืืืขืืจื ืืืืจืื ืืืืืข ืืืื ืืืจื ืชืงืืคื ืฉื ืืืกืจ ืคืขืืืืช ืืืืืืจ.
- ืืฉืืชื ืฉื TCP Cubic HyStart ACK train: ืืชืขืืืืช ืืืืชืืช ืืืืฉ ืืืืืืื ืืืืืื ืืฉืืืืืจืื ืืช ืงืฆื ืืขืืจืช ืื ืชืื ืื.
- ืืืืืช ืชืงืฆืืื ืืืืืจืื ืฉื ืืฉืงืขืื: ืืืืืช ืืืืืช ืืืงืกืืืืืช ืืืืชืจืช ืฉื ื ืชืื ืื ืืชืืืื ืืื ืืืืืจ.
- ืืคืขืืช GRO ืืืืืจื: ืฉืืคืืจ ืืืขืืืืช ืฉื ืขืืืื ืงืืืช TCP/IP ืืืจืืืืช ืืืืืืช ืขื ืืื ืฉืืืื ื ืชืื ืื ืืคืืืช ืื ืืช ืืืืืืช ืืืชืจ.
- ืืืืืช ื-MTU ื-4,082 ืืืื: ืืืืืช ืืขืืืืช ืืืขืืจื ืืืจืืืืช ืืืืืืช ืฉื ืชืคืืงื.
ืืคืฉืจ ืืืคืขืื ืืช ืืืืืจืืช ืืืืฆืขืืช ืืืื ืืืืฆืขืืช ืกืงืจืืคื ืืขืืคืช ืืื. ืืคื ื ืฉืืจืืฆืื ืืช ืืกืงืจืืคื, ืืฉืื ืืืืืืฃ ืืช eth0 ืืืืฉืง ืืจืฉืช ืืจืืฉื ืฉื ืืืคืข ืืืืฉืื.
# Set DEV to your primary network interface
DEV=eth0
# 1. Reduce MinRTO
sysctl -w net.ipv4.tcp_rto_min_us=5000
# 2. Enable Fair Queueing
tc qdisc replace dev $DEV root fq
# 3. Disable slow start after idle
sysctl -w net.ipv4.tcp_slow_start_after_idle=0
# 4. Disable TCP Cubic HyStart ACK train
echo 2 > /sys/module/tcp_cubic/parameters/hystart_detect
# 5. Increase socket memory budgets
echo 4194304 > /proc/sys/net/core/rmem_max
echo 4194304 > /proc/sys/net/core/wmem_max
echo 4194304 > /proc/sys/net/ipv4/tcp_notsent_lowat
echo "4096 262144 16777216" > /proc/sys/net/ipv4/tcp_rmem
echo "4096 262144 33554432" > /proc/sys/net/ipv4/tcp_wmem
# 6. Enable hardware GRO
ethtool -K $DEV rx-gro-hw on
ืืงืืขืื ืืืืื ืืคืืจืืืช ืื ืืืช ืืืืืืจืืช ืืืืืืฆืืช.
ืืคืืชืช MinRTO
ืืคืืชืช ืืขืืืืืื ืืืขืืจื ืืืืฉ ืืืคืฉืจืช ืืชืืืฉืฉืืช ืืืืจื ืืืชืจ ืืืืืื ืืืืืืช ื ืชืื ืื.
ืืืื ืืงืฆืื ืืชืคืืื (RTO) ืฉื ืฉืืืืจ ืืืืจ ืฉื TCP ืงืืืข ืืื ืืื ืฉืืื TCP ืืืชืื ืืืืช ACK ืืคื ื ืฉืืืืจ ืืืืจ. ืืขืจืืช Linux ืืืชืืืช ืืช ื-RTO ืืฉื ืืื ืืืช (ืืืชืื ืืกืขืืฃ 2.1 ื-RFC 6298), ืืื ืืฉื ื ืืืชื ืืืืจื ืืื ืืืชืื ืืืื ืืืื ืืฉืื (RTT) ืืชืืกืคืช ืืจืืื ืืืืืื.
ืืืืืจื 'ืืื ืืชืืืฉืฉืืช ืืื ืืืื' (MinRTO) ืืืืืขื ืืืื ืชืืชืื ืืืชืืื ืืื. ืื ืืืขืจืื ืฉื RTO ื ืืืื ืืื, ืืื ืขืืืื ืืืจืื ืืฉืืืืจ ืืืืจ ืฉืืื, ืฉืื ืืฉืืื ืืฉืืจ ืืืืฉ ืื ืืช ืืืื ืฉืืชืืืื ืขืืืื ืืชืืืื.
ืขืจื ืืจืืจืช ืืืืื ืฉื MinRTO ืืื 200ย ms, ืฉืืื ืขืจื ืฉืืจื ื ืืื ืขืืืจ ืจืฉืชืืช ืขื ื ืืืืจื ืืืช. ืืขืจื 5ย ms ื ืืืง ืืืืคื ื ืจืื ื-Google Cloud ืืืื ืขืจื ืืจืืจืช ืืืื ืืืื ืืืืืืจืื ืืื ืฉืจืชื Linux ืืืืจื ืืื ื- Google Cloud.
ืืืจื ื ืืกืฃ ืืื ืืืฉืืจื ืงืืื (ACK) ืืืฉืืื, ืฉืืื ืืขืืืช ืืขืื ACK ืชืืืืืช. ืืขืืืื ืืื ืืืคืฉืจ ืืฉืืื ืืืฉืืจื ืงืืื (ACK) ืืงืืืฆืืช ืขื ืคื ื ืืื ืื ืืช ื ืชืื ืื, ืื ืืฉืื ืืืฉืืจ ืงืืื ืขื ืื ืช ื ืชืื ืื ืืืืืื ืืืคืื.ACK ืืืืืจืื ืฉื ืืืฉืืจ (ACK) ืืืฉืื ืืืืกืกืื ืขื ืืื ืืืื ืืฉืื (RTT), ืืืืื ืืืืืืจ ืฉื ืคืกืง ืืื (RTO).
ืืืจืืช ืืขืจื ืฉื MinRTO ืืืจืืช ืืช ืชืืงืื ืืืืืื ืืืืืืจืื ืขื RTT ื ืืื, ืืื ืืืืืจืื ืืชืื ืืืืจ ืื ืืืืจ. ืืืชืืื ืืื ืื ืืฉืคืืขื ืขื ืืชื ืืืืช ืืืืืืจืื ืฉืืื ืืื ื-RTT ืืืื, ืื ืืื ืื ืืฉื ื ืืช ืืื ื-RTT ืืืฉืืขืจ ืฉืืื.
ืืืืจืช MinRTO
ืืคืฉืจ ืืืืืืจ ืืช MinRTO ืืืืช ืืฉืชื ืืจืืื:
ืืืืฆืขืืช
sysctl(Linux 6.11 ืืืืื):ืืคืฉืจ ืืืืืืจ ืืช ืืจืืจืช ืืืืื ืฉื MinRTO ืืืืฆืขืืช ืืคืงืืื
sysctl:sysctl -w net.ipv4.tcp_rto_min_us=5000ืฉืืืืฉ ื-
ip route(ืฉืืืื ืืื ืืกืืื, ืื ืืจืกืืืช Linux ืืืงืืืืช ืืืชืจ ื-6.11):ืืืืืคืื, ืืืจืกืืืช ืืฉื ืืช ืืืชืจ ืฉื Linux ืื ืืื ืืฉืืื ืืื ืืกืืื ืื ืคืจื, ืืคืฉืจ ืืืืืืจ ืืช MinRTO ืืื ืืกืืื ืื ืคืจื:
ip route change default rto_min 5ms
ืืืืฉื ืฉื ืืืืจืช ืืกืืื ืืื ืืืืืจ ืขืืืคื ืืกืืืืืช ืฉืืื ืืืื ืืืืืช ืฉืืืืืจืื ืืฆืื Google Cloud ืื ืืชืงืฉืจื ืขื ืืืกื ืืืช TCP/IP ืฉืืื ื Linux. ืืืื ืืืืืช ืฉืืืขืจืืืช ืืืื ืืฉ ืืืืืจืื ืฉืื ืื ืฉื ืืืฉืืจ (ACK) ืืืฉืื. ืืคืจืืกื ืจืืื ืืืื ืืจื ื ืืฆืืืืจื, ืืืืืฅ ืืืฉืชืืฉ ืืืืืจืช ืืจืืจืช ืืืืื ืืฉืืจื ืืช ืฉื minRTO ืืืืืื ืืช ืืืืืจื ืฉื 5ย ms ืจืง ืขื ืืกืืืืื ืืชืื Google Cloud ืืขื ื ืืืืืจืืืืื ืืคืจืื (VPC).
ืืคืขืืช ืชืืจ ืืืื
ืืฆืืฆื ืืช ืืขืืืก ืืืช ืืืืื ืืื ืืช ืฉื ืืจืืื ืืชืืฆืื ืืคืจืฆื ืคืขืืืืช ืฉื ืืืคืืืงืฆืื.
ืื ืืืื ืืชืืจืื ืจืืืืื ืืกืื FIFO (ืจืืฉืื ืฉื ืื ืก, ืจืืฉืื ืฉืืืฆื), ืชืืจื FQ (Fair Queueing) ืืืืงืื ืืช ืจืืื ืืคืก ืืืืคื ืืืื ืืื ืืจืืืืช ืฉืื ืืช. ืืื ืื ืืืคืฉืจืช ืืืืืื ืืช ื ืคื ืืชื ืืขื ืขื ืืื ืืืฉืื ืงืฆื ืืืกืืจื ืืืืคืืืืื ืืืื ืืืกืืจื ืืืืคืืืืื ืฉื ืื ืื ื (packet) ืืื ืืืืืจ TCP. ืื FQ ืงืืื, ืืืกื ืืช ื-TCP ืืกืชืืืช ืขื FQ ืืื ืืืฉืืืช ืืืืืืช ืขื ืืืื ืืืกืืจื ืืืืคืืืืื ืฉืืื. ืืงืฆื ืืื ืืคืืืช ืืช ืคืจืฆื ืืชื ืืขื ืืืจืืื, ืืื ืืฆืืฆื ืืช ื ืคืืืช ืืื ืืช ืืืช ืืฉืืืืจ ืืืืืจ ืฉืืื.
ืืื ืืืืืืจ ืืช FQ traffic shaper ืืืื ืืขืืฆืื ืชืขืืืจื ืฉื ืืืฉืืจ ืืจืฉืช, ืืฉืชืืฉืื ืืคืงืืื ืืืื ืฉื tc (traffic control):
tc qdisc replace dev $DEV root fq
ืืืืคืขืื ืืืืืื ืขื ืจืืื ืคืก ืืืื ืฉื ืืฆืืื, ืืืื ืืืืืช ืฉืืืืฉืืจ ืืจืฉืช ืืฉ ืืื ืชืืจืื ืืืขืืจื. ืืืงืจืื ืืืื, ืขืืืฃ ืืคืฆื ืืช ื ืืืื ืืชื ืืขื ืืื ืชืืจื ืฉืืืืจ ืขื ืืื ืืชืงื ืช ืืืื Multi Queue (MQ) traffic shaper. ืืื ืืจืื ืฉืืฆืจืฃ ืืขืฆื ืชื ืืขื ืขืฆืืื ืืื ืชืืจ ืฉืืืืจ. ืืืืจืช ืืืืืื ืชื ืืขื ืืื ืชืืจ ืืคืืืชื ืืช ืืชืืจืืช ืขื ื ืขืืืืช ืืขื ืฉืืจืืช ืืืืื ืืื ืืืขืืืื.
ืืฉืืชืช ืืืชืืื ืืืืืืช ืืืจื ืืฆื ืืืชื ื
ืฉืืืจื ืขื ืงืฆื ืืขืืจื ืืืื ืืืจื ืฉืืืืืืจ ืืื ืืืฆื ืื ืคืขืื.
ืืื ืืื ืืข ืขืืืก, ืืืืืจื TCP ืืชืืืืื ืืฉืืืืช ื ืชืื ืื ืืงืฆื ื ืืื ืืื ืืืืืืื ืืช ืืงืฆื ืืืืคื ืืงืกืคืื ื ืฆืืืื ืขื ืืืืืื ืืืืื ืื ืืช. ืืฉืื ืืจืืฉืื ื ืืื ื ืงืจื ืืชืืื ืืืืืช.
ืืืจืืจืช ืืืื, ืคืจืืืืงืื TCP ืืืืจ ืืืืืจืืช ืืฉืืจื ืืืช ืฉื 'ืืชืืื ืืืืืช' ืืืจื ืชืงืืคื ืฉื ืืืกืจ ืคืขืืืืช. ืชืงืืคืช ืืืกืจ ืคืขืืืืช ืืืืื ืืืืืช ืงืฆืจื ืืื ืคืกืง ืืื ืืื ืฉื ืฉืืืืจ ืืืืจ (RTO), ืืคื ืฉืืืืืจ ื-RFC 2581. ืืฉืืชื ืฉื ืืชืืื ื ืืื ืืืคืฉืจืช ืืืืฉ ืืช ืืืืืืจ ืืืืคื ืืืืื ืืงืฆื ืืืืืข ืืืืจืื.
ืืืฉืจ ืืคืฉืจ, ืืืคืืืงืฆืืืช ืฆืจืืืืช ืืืฉืชืืฉ ืืืืืืจืื ืืืืื ืืจืื ืืืงืื ืืืฆืืจ ืืืืืจืื ืืืืจืื ืืืืชื ืขืืืช. ืื ื ืื ืขืช ืืขืืืช ืฉื ืืฆืืจืช ืืืืืืจ, ืืืืืข ืขื ืขืืืก ื ืฉืืจ. ืืื ืื ืืืืืืจืื ืืจืืื ืืืื, ืืืจื ืชืงืืคื ืฉื ืืืกืจ ืคืขืืืืช, ืคืจืืืืงืื TCP ืฉืืื ืืช ืคืจืื ืืขืืืก ืืืจืืจืช ืืืื ืืืืืจ ืืืืืจื ืืฉืืจื ืืช ืืจืืฉืื ืืช ืืืฉืื 'ืืชืืื ืืืืืช'.
ืืื ืืืฉืืืช ืืช ืืชืืื ื 'ืืชืืื ืืืืืช ืืืจื ืืืกืจ ืคืขืืืืช', ืืฉืชืืฉืื ืืคืงืืื ืืืื:
sysctl -w net.ipv4.tcp_slow_start_after_idle=0
ืืฉืืชื ืฉื ืจืฆืฃ ืืืฉืืจืื ืฉื TCP Cubic HyStart
ืืืืืื ืืืืืจืืช ืืช ืงืฆื ืืืขืืจื ืขื ืืื ืืชืขืืืืช ืืืืชืืช ืฉืืื ืฉื ืขืืืก.
ืงืฆื ืืืืืื ืืืงืกืคืื ื ืฆืืืื ืืฉืื 'ืืชืืื ืืืืืช' ืืืื ืืืืืช ืืืจืกืืื, ืืืืื ืืืืืช ืฉืืื ืืขืืืจ ืืช ืงืฆื ืืืขื ืืืืคืืืืื. ืืชืืื ืืืืจืืืืช (HyStart) ืืื ืื ืื ืื ื ืืกืฃ ืฉื ืืขื ืืฆืืช ืืฉืื ืืืชืืื ืืืืืืช ืืืงืื ืืืชืจ ืืืืฆืขืืช ืฉื ื ืืืชืืช ืืจืืืืื ืฉื ืขืืืก:
- ืขืืืื ืฉื ืืื ืืืื ืืฉืื (RTT): ืืื ืืขืืืื ืืืชืคืฉืืืช ืฉื ืืืืืืช ื ืชืื ืื ืืจืฉืช. ืืืืื ืชืงืืคืืช ืฉื ืขืืืก ืืจืฉืช, ืชืืจื ืืืืืืช ื ืชืื ืื ืืฆืืืจืื ืืงืืฉืืจืื ืฉืืืฆืจืื ืฆืืืืจ ืืงืืืง. ืืชืืฆืื ืืื, ืืื ื-RTT ืขืืื, ืืื ืืืื ืืืฆืืืข ืขื ืขืืืก.
- ืืจืืื ืืื ืืืฉืืจื ืงืืื (ACK): ืืกืชืื ืขื ืืืชืืช ืฉืืคืืื ืืฉ ืขืืืื ืืืืืืืช ืืฆืืืืจ ืืงืืืง, ืืื ืืชืืงื ืืืืฉืืจ ืืงืืื ืฉื ืืชืืืื. ืืื ืื ืื ืืื ืื ืื ืฉืื ืืื ืขืืืก, ืืืฉืืจื ื-ACK ืืืืขื ืขื ืืืชื ืืจืืื ืืื ืื ืืช ืื ืชืื ืื ืืืงืืจืืืช. ืืืคืืก ืืื ื ืงืจื ืืขืืชืื ืงืจืืืืช ACK train (ืจืืืช ืืืฉืืจื ืงืืื). ืื ืืืฉืืจื ื-ACK ืืชืขืืืื ืืขืืจ ืืชืื ืืช ืืฆืคืืื ืืื, ืืืื ืืืืืช ืฉืืฉ ืขืืืก ืืจืฉืช.
ืืื ืืืฆืข ืืืคืืืืืืฆืื ืฉื ืืืืฆืืขืื, ืืฉืืืชืื ืืช ืืืืืื ืฉื ืจืฆืฃ ืื ืืช ACK, ืืื ืืฉืืืจืื ืืช ืื ืื ืื ืืขืืืื ืฉื RTT ืืืคืขื.
echo 2 > /sys/module/tcp_cubic/parameters/hystart_detect
ืืืืืช ืชืงืฆืืื ืืืืืจืื ืฉื ืฉืงืข
ืืื ืืืืืื ืืช ืืชืคืืงื ืืืงืกืืืืืช ืืงืืฉืืจืื ืขื RTT ืืืื, ืฆืจืื ืืืคืฉืจ ืืืชืจ ื ืชืื ืื ืืืขืืจื.
ืืืืช ืื ืชืื ืื ืฉืืืขืืจืื ืืื ืคืื ืงืฆืื ืฉื ืจืืื ืืคืก ืืืื ืืืฉืืื ืฉื ืืืชืคืฉืืืช, ืฉื ืงืจืืช ืืืคืืช ืจืืื ืืคืก ืืืืฉืืื (BDP). ืื ืืกืื ืืืืฉืื ื-BDP: ืจืืื ืืคืก ืืคืื ืืื ืืืื ืืฉืื (RTT). ืืชืืฆืื ืืื ืขืจื ืฉืืฆืืื ืืช ืืืกืคืจ ืืืืคืืืืื ืฉื ืืืืื ืืฉืืืื ืืื ืืืื ืืช ืืฆืื ืืจ:
BDP (bits) = bandwidth (bits/second) * RTT (seconds)
ืื ืื ืชืื ืื ืฉืืืขืืจืื ืฆืจืืืื ืืืืฉืืจ ืืืืืจืื ืืืืืื ืฉื ืืฉืืื ืืืงืจื ืฉืืืื ืฆืืจื ืืฉืืื ืืืชื ืืืืฉ. ืืืืืืช ืืืืืจืื ืฉื ืฉืงืข TCP ืืืืืืช ืืืืืื ืืฉืืจืืช ืืช ืืชืคืืงื ืฉืืคืฉืจ ืืืฉืื, ืื ืื ืงืืืขืืช ืืื ื ืชืื ืื ืืชืืืื ืืืขืืจื ืืคืฉืจ ืืฉืืืจ ืืืืืจ.
ื-Linux, ืืืืืืช ืืืืืจืื ืฉื ืฉืงืข TCP ืืืืืจืืช ืืืืฆืขืืช ืืืืืจืืช ืืืืืช:
sysctl(8)
net.core.rmem_maxnet.core.wmem_maxnet.ipv4.tcp_rmemnet.ipv4.tcp_wmem
ืืืืืืช ืืืืืจืื ืฉื ืฉืงืขื TCP ืงืืืืืช ืืื ืืื ืืข ืฉืืืืฉ ืืื ืืืืจืื ืืืขืจืืช ืืืื ืืื ืืข ืืฆืืื ืฉื ืืืกืจ ืืืืจืื (OOM), ืืืืืื ืืขืืืกื ืขืืืื ืขื ืืจืื ืืืืืจืื. ืืืืืช ืืืืืืืช ืืืื ืืืืื ืืืืืื ืืช ืงืฆื ืืขืืจืช ืื ืชืื ืื, ืืืืืื ืื ืชืืืื ืขื RTT ืืืื. ืืื ืื ืืกืคืจ ืืืืืืจืื ืืื ืืืืืื ืื, ืืกืืืื ืืืืืืช ืืืืืืืช ืืืื ืืื ื ืืื.
ืืืฉืชื ืื ืืืื ืืืืืจืื ืืืืืืช ืขืืืื ืื ืืืืื ืฉืื ืืืืกืื ืืืื ื ืฉื ืืฉืงืข, ืืื ืืงืฆืืช ืืืืจืื ืืฉืืจื. ืืืืืช ืืขืจืืื ืืืื ืื ืืฉืคืืขื ืขื ืืงืฆืืช ืืืืืจืื ืืคืืขื ืืืืืืจืื ืขื RTT ื ืืื, ืืื ืืืืืจืื ืืชืื ืืืืจ Google Cloud .
ืฉื ื ืืคืจืืืจืื ืืจืืฉืื ืื ืฉื ืืชื ืื ืืืชืืื ืืฉืคืืขืื ืขื ืืืืื ืืืงืกืืืื ืฉื ืืืื TCP ืืืคืืืงืฆืืืช ืฉืืืืืจืืช ืืช ืืืืื ืฉื ืืืื TCP ืืืืคื ืืฉืืจ. ืืฉ ืืืกืืช ืืขื ืืคืืืงืฆืืืช ืืืื. ืืืืืืืช ืืืื ืืืืืจืืช ืืช ืื ืฉืืคืืืงืฆืื ืืืืื ืืืงืฉ ืืืืคื ืืคืืจืฉ ืืืืฆืขืืช ืืคืฉืจืืืืช ืฉื ืฉืงืข SO_RCVBUF ื-SO_SNDBUF.
ืืืจืกืืืช ืืืื ืฉื Linuxโ 6.18 ืืืืื, ืขืจืื ืืจืืจืช ืืืืื ืฉื net.core.rmem_max ืืฉื net.core.wmem_max ืื 4ย MB. ืืืืืจืืช ืืืื ื ืืฉืืืช ืืืืืืช ืขื ืกืื ื ืืกืืื ืฉื ืฉื ืื. ืืืจืกืืืช ืงืืืืืช ืฉื Linux, ืืืืืฅ ืืืืืื ืืช ืืืืืืืช ืืืื ื-4ย MB ืืคืืืคืืจืืืช ืืืืจื ืืืช:
echo 4194304 > /proc/sys/net/core/rmem_max
echo 4194304 > /proc/sys/net/core/wmem_max
ืืงืืืฆื ืืฉื ืืื ืฉื ืืืืืืืช, net.ipv4.tcp_rmem ื-net.ipv4.tcp_wmem, ืื ืืืช ืืช ืืืืืืืช ืฉื ืืืื ืื ืืืืืืื ืฉื ืืืืจืื ืืื ืืื ืืฉืืืื ืืืงืืื ืฉื TCP.
ืืื ืืืช ืืืืืืจืืช ืืืื ืืฉ ืฉืืืฉื ืขืจืืื: ืืืื ืืืืจืื ืืืื ืืืื, ืืืื ืืืืจืื ืืจืืจืช ืืืืื ืืจืืฉืื ื ืืืืื ืืืืจืื ืืืงืกืืืื ืฉื ืฉืงืข. ืขืจืื ืืจืืจืช ืืืืื ืืืงืกืืืืืื ืื ืืจืื ืฉืืจื ืืื ืืืชืจ ืืื ืืจืฉ ืืคืืืคืืจืืืช ืืืืจื ืืืช, ืืืฉื:
- โซ
tcp_rmem: 4096, 131072, 6291456 - โซ
tcp_wmem: 4096, 16384, 4194304
ืืขืจื TCP ืืฉื ื ืืช ืืืืื ืฉื ืืืืจื ืื ืชืื ืื ืืืื ืืื ืฉื TCP ืืฉืืืื ืืืงืืื ืืืืคื ืืืืืืื, ืขื ืกืื ืืืืื ืื ืฉื ืืื ืืืื ืืฉืื (RTT) ืืืืื ืืขืืืก. ืืืื ืืงืกืืืื ืฉื ืฉืื ืืืกืื ืืื ื ืืืชืืื ืฉื 4, 194,304 ืื 4ย MB ืืื ืงืื ืืืืืืจืื ืขื RTT ืืืื. ืขื RTT ืฉื 100ย ms, ืืืืืจื ืืื ืืืืืื ืืช ืืชืคืืงื ื-40ย MB/s ืืืงืจื ืืืื. ืืืงืื ืื ืกืืช ืืืฉื ืืช ืืขืจืืื ืฉืืื ืฆืจืื ืืืฉืชืืฉ, ืืืฉื ืคืฉืืื ืืืชืจ ืืื ืืืฉืชืืฉ ืืขืจืื ืืจืืจืช ืืืื ืืืืืื ืืฉืจืชืื ืืืืจื ืืื ืขื ืืจืื ืืืืจืื RAM.
ืืื ืื ืงืื ืืืฆืขื ืืืืจืืช ื ืืกืฃ, ืืืืืฅ ืืืืืื ืืช ืืืืช ืื ืชืื ืื ืฉืืคืฉืจ ืืืืกืืฃ ืืชืืจ ืืฉืงืข ืืื ืขืืืื ืื ื ืฉืืื. ืืืืจื ืฉื ืืืืืช ืืขืจื ืืืงืกืืืื ืฉื wmem ืืื ืืืคืฉืจ ืืืชืจ ื ืชืื ืื ืืืขืืจื, ืืื ืชืืืื ืืืื ืืืชืื ืืฉืงืข ืืืจ ืืืชืจ ืืื ืฉ-TCP ืืืื ืืฉืืื, ืืืืจืื ืืืฆืืืจืืช ืฉื ืชืืจ ืฉื ื ืชืื ืื ืฉืื ื ืฉืืื ืืืืจื ืืืืืืื ืืืืจืื. ืืื ืืื ืืข ืืช ืื, ืืืืืืื ืืช ืืืืช ืื ืชืื ืื ืฉืื ื ืฉืืื ืขืืืื ืขื ืืื ืืืืจืช tcp_notsent_lowat, ืืื ืืืืืืื ืืช ืืืืืื ืืืืืืช ืฉื wmem ืืื ืืืคืฉืจ ืืืืจื ื ืชืื ืื ืืืืืื ืืืชืจ ืืฉืืืืฉ
ืืื ืื ืืฉืจืช ืืฉ ืืืืืื ื ืืืืืจืื, ืืืืืจืืช ืืืืืช ืืืืจืืช ืืืืืช ืืืืืืช. ืืื, ืื ืืชื ื ืชืงืืื ืืชื ืืื ืฉื ืืืกืจ ืืืืจืื ืขื ืืืืืจืื ืจืืื, ืืืื ืืืฉืชืืฉ ืืืืื ืฉืื ืืืกืื ืืื ื ื ืืื ืืืชืจ.
echo 4194304 > /proc/sys/net/ipv4/tcp_notsent_lowat
echo "4096 262144 16777216" > /proc/sys/net/ipv4/tcp_rmem
echo "4096 262144 33554432" > /proc/sys/net/ipv4/tcp_wmem
ืืคืขืืช GRO ืืืืืจื
ืฉืืคืืจ ืืืขืืืืช ืฉื ืขืืืื ืงืืืช TCP/IP ืืืจืืืืช ืืืืืืช. ืฆืืฆืื ืืชืงืืจื ืฉื ืืืขืื (CPU) ืืืืฆืขืืช ืืฆืืื ืฉื ืืืืืืช ืฉืืชืงืืื
ืืจืื ืืคืขืืืืช ืฉื TCP/IP, ืืขืืืช ืฉื ืืืืืจ CPU ืขืืื ืืืชืื ืืงืฆื ืืืืืืืช, ืืื ืืงืฆื ืืืืืืื. ืืื ืืฆืืฆื ืืช ืืชืงืืจื ืืื ืืืขืืจื, ืืขืจืืืช ืืคืขืื ืืืืจื ืืืช ืฉืืืืืช ื ืชืื ื TCP ืืจื ื ืชืื ืืืขืืจื ืืืืืืืช ืืืืืืช ืฉืืืืืืช ืืื ืคืืื TCP. ืืืืื ืฉืืื ืืืื ืืืืืข ืขื 64KB, ืื ืืคืืื ืืืืช ืงืืืืืืื ืขื Linux BIG-TCP.
ืืืืืืช ืืืืืืช ืืืื ืืืจืืืช ืืืืื ืืืืืื ืืืงืกืืืื ืืจืฉืช, ื-MTU. ืืืืคืืืืืืฆืื ืืื ืฉื ืืขืจืืช ืืืคืขืื ืืกืชืืืช ืขื ืชืืืื ืืืืฉืืจ ืืจืฉืช ืืื ืืคืฆื ืืช ืืืืืืืช ืืืื ืืืฉืืื ืืืชื ืืจืฆืฃ ืฉื ืืืืืืช ืงืื ืืช ืืืชืจ, ืฉืื ืืืช ืืื ืืืืื ืคืื TCP ืืื. ืืชืืืื ืืื, TCP Segmentation Offload โ (TSO), ืืืื ื ืืืืคื ื ืจืื ืืืืคืขืืช ืืืจืืจืช ืืืื.
ืืฉืืืฉืืจืื ืฉื GVNIC ืืคืืืคืืจืืืช ืืืืืจ ืืฉืืืฉื ืืืขืื ืืงืืืื ื ืชืื ืื, ืื ืืืืืื ืืืฆืข ืืช ืืคืขืืื ืืืคืืื: ืื ืฉืืืจืื ืืื ืืช ืืืืืจ ื ืชืื ืื ืืื ื ืคืืืื ืืื ืืืืืง ืื ืืืืขืื ืคืืืื ืขืืงืืื. ืื ืื, ืื ืืฉืืืื ืืืชื ืืืขืืืจืื ืืืชื ืืื ืืช ืืจืืืืช ืคืืืื ืืืืจื. ืืชืืื ื ืืื ื ืงืจืืช Receive Segment Coalescing (RSC)โ ื-Windows, โ Large Receive Offload (LRO)โ ืื Hardware Generic Receive Offload (HW-GRO)โ ื-Linux. โซHW-GRO ืืื ืฉืืคืืจ ืืืืืจ ืืืชืจ ืฉื LRO.
ืืคืฉืจ ืืืคืขืื ืืช HW-GRO ืืืจืืจืช ืืืื ืืืืื. ืืืคืฉืจืืช ืืื ืชืืื ืืืื ื ืืกืืคื ืฉื ืืืจ.
ืืื ืชืืื, ืืคืืืคืืจืืืช ืขื ืืืฉืืจื GVNIC ืฉืชืืืืื ืืชืืื ื, ืฆืจืื ืืืคืขืื ืืช HW-GRO ืืืืฆืขืืช ethtool. ืืืชืื ืืืจืกืช ืืืืื ืืืืจืืืืจ, ืืชืืื ื ืืืฆืืช ื-LRO ืื ื-HW-GRO. ืืืืืขื ืืื, ืืื ืงืฉืจ ืืฉื.
ethtool -K $DEV large-receive-offload on
ethtool -K $DEV rx-gro-hw on
ืืืืืช ืืืื ื-MTU ื-4,082 ืืืืืื
ืฉืืคืืจ ืืืขืืืืช ืฉื ืืขืืจืช ื ืชืื ืื ืืจืฆืคื ืคืขืืืืช ืขื ื ืคื ื ืชืื ืื ืืืื.
ืืืืืช ืืืื ืืื ื, ืืืืื ืืืืคืืืืืืฆืืืช ืฉื TSO ื-HW-GRO, ืืฉืคืจืช ืืช ืืขืืืืช ืืืขืืจื ืื ืจืื ืืขืืืื ืืชืืฆืข ืืื ืื ื ืืื ืืื ืืืื.
Google Cloud ืจืฉืชืืช VPC ืืืืืืช ืืชืืื ืืื ืืช ืืืืื ืฉื ืขื 8,898 ืืืื, ืฉืืื ืืืื ืืฉืืขืืชืืช ืื-MTU ืฉืืืืืจ ืืืจืืจืช ืืืื ืฉื 1,460 ืืืื. ืฉืืืืฉ ืืืืื ืืืื ืืืชืจ ืฉื ืื ืืช ื ืชืื ืื ืืจืฉืช ืืคืืืช ืืช ืืืืืจื ื-CPU ืฉืืืฉืงืขืื ืืื ืืืื ืฉื ืชืคืืงื (goodput).
ืฉืืงืืืื ืืืื ืืืื ืืืืื ืืืคืืืืื
ืืืจื ืืื, ืขืืืฃ ืืืฉืชืืฉ ืืื ืืช ืืืืืืช ืืืชืจ, ืืื ืื ืชืืื ืืืื ืืืืืจ ืืขืจื ื-MTU ืืืงืกืืืื ืืืคืฉืจื. ืืืขืืืืช ืฉืืืฉืืช ืืฉืืืืช ืคืืืช ืื ืืช ืฆืจืืื ืืืืืช ืืืืื ืช ืขื ืืขืืืืืช ืืืืืช:
- ืืฉืืืืฉ ืืืืืจืื: ืืืืจื ื ืชืื ืื ืืื ืืื ืืืืืื ืืืชืจ ืืืจืฉืื ืืืชืจ ืืืืจืื ืฉืืืงืฆื ืืืืฉืืจ ืืจืฉืช ืืงืืืืช ืืืืืืช ื ืชืื ืื. ืื ืืฉ ืืื ืืจืื ืชืืจืื, ืืืื ืืืืืช ืฉืชืืฉืืจ ืืืืช ืืืืื ืฉื ืืืืจืื ืืื ืฉืืืืฉ.
- ืืืคืื ืืืืืืืช ืงืื ืืช: ืืืืจื ื ืชืื ืื ืืืืืื ืืืชืจ ืืืคืืื ืืืืืืืช ืงืื ืืช, ืืื ืืืฉืืจื ืงืืื (ACK) ืืืืจืื, ืืฆืืจื ืคืืืช ืืขืืื.
- ืขืืืืืช ืืงืฆืืช CPU: ืขืืืืืช ื ืชืื ืื ืชืื ืื ืืืฉืคืขืืช ืืืืคื ืืฉืืขืืชื ืืืงืฆืื ืืืฉืืจืืจ ืฉื ืืืืจืื. ืืชืืืช ืืืื ืืื ื ืืืืคืื ืฉื ืืคื ืืืืจืื ืขืืืจืช ืืืฆืข ืืืคืืืืืืฆืื ืฉื ืขืืืช ืืืขืื.
- ืืื ืืจืืงืฆืื ืฉื TSO: ืืืื ืืื ื ืืฉืคืืข ืืืืคื ืขืืื ืขื TCP Segmentation Offload โ(TSO). ืืื ืืืฆืืจ ืืช ืืืืืช ื-TSO ืืืืืื ืืืืชืจ ืฉืืคืฉืจ, ืืืื ืืืืืช ืฉืชืฆืืจืื ืืืืืจ ืืืืื ืืงืกืืืื ืงืื ืืืชืจ ืฉื ืคืื (MSS). ืืืืืื, ืื ืืืืืช ื-IP ืืืืืื ืืืืชืจ ืืืคืฉืจืืช ืืื 64ย KB ืืืื ืืืชืจืืช, ืขืจื MSS ืฉื 4ย KB ืืืืื ืืืืขื ืืืขืืื ืืืื ืืืชืจ (60ย KB) ืืืฉืจ ืขืจื MSS ืฉื 8ย KB (56ย KB).
ืืจืื ืขืืืกื ืืขืืืื, ืืืืื ืืืขืืืืช ืืื ืืืืืืช MTU ืืืืื 4KB,โ 8KB ืื 9KB ืืื ืงืื. ืขื ืืืช, ืื ืืื ืืืขืจืืื ืืืื ืืืืฆื ืฉืืคืืจ ืืฉืืขืืชื ืืขืืืช ืื ืืช ืืจืืจืช ืืืืื ืฉื 1,460 ืืืื.
ืืืืฆื ืืืื ืื ืืช ืืืืื ืืฃ
ืืืคืฉืจืืช ืืืงื ืืืขืืื ืืืจื ืืื, ืื ืื ื ืืืืืฆืื ืืืืืืจ ืืช ืืืื ื-MTU ืืจืฉืช ื-VPC ื-4,082ย ืืืื. ืืืืืฅ ืืืฉืชืืฉ ืืืืื ืืื ืื ืืื ืืืคืฉืจ ืืื ืืืืืช ืื ืชืื ืื ืฉื Ethernet ืืืืื ืก ืืืฃ ืืืืจืื ืืืืื 4,096 ืืืื, ืืื ืืชืืฆืขืช ืืืคืืืืืืฆืื ืฉื ืืงืฆืืช ืืคื ืืืืจืื. ืืืืืฆื ืืื ืืชืืืืกืช ื-MTU ืืฉืืื 3, ืฉืืืื ืืช ืืืชืจืช ื-IP, ืืื ืื ืืืื ืืช ืฉืืืช ืืงืืฉืืจ ืฉื Ethernet ืืืืื 14 ืืืื.
ืืืืจืช IP MTU
ืืคืฉืจ ืืืืืืจ ืืช ื-MTU ืืื ืจืฉืช VPC ืืฉืืจืืช ืืจื ืืกืืฃ Google Cloud .
ืืจืื ืืคืฆืืช Linux ื- Google Cloud, ืื ื ืืจืฉืช ืืืืจื ืืื ืืช ืืืืคืข ืืืืฉืื. ืืืืคืข ืืืื ืืืืคื ืืืืืืื ืืช ื-MTU ืฉื ืืจืฉืช ืืืืฆืขืืช DHCP ืืืืื ืืืชืืื (ืืืืฆืขืืช ืืคืฉืจืืช 26). ืืืืจ ืืื ืืืืคืข ืืืืืจ ืืช ื-MTU ืฉื ืืืฉืืจ ืืจืฉืช ืื ืฉืืชืืื. ืืืืืฅ ืืืฉืชืืฉ ืืืืืจื ืืืืืืืืืช ืืื.
ืื ื ืืจืฉืช ืืืืจื ืืื ืืช, ืืคืฉืจ ืืืืืืจ ืืช ื-MTU ืฉื ืืืฉืืจ ืืจืฉืช ืืขืจื ื ืืื ืืืชืจ ืื-MTU ืฉื ืจืฉืช ื-VPC ืืืืฆืขืืช ืืคืงืืื ืืืื:
ip link set dev $DEV mtu 4082
ืืืืจืช ืืืืื ืฉืื ืื ืฉื MTU ืืืกืืืืื ืกืคืฆืืคืืื
ืื ืืืคืขืืช ืชืงืฉืืจืช ืืืฆืื ืืช ืฉื ืืืคืข ืืืฉืื ืืืืฅ ื-VPC, ืฉืื ื-MTU ืฉื ืื ืชืื ืขืฉืื ืืืืืช ื ืืื ืืืชืจ, ืขืืืฃ ืืืืืืจ MTU ืื ืชืืืื ืกืคืฆืืคืืื. ืืืงืจื ืืื, ืฆืจืื ืืืืืืจ ืืช ื-MTU ืฉืืืืืจ ืืืจืืจืช ืืืื ื-1,460ย ืืืื, ืฉืืื ืขืจื ืฉืืจื ื, ืืืืืื ืืช ื-MTU ืืืืื ืืืชืจ, ืืืฉื 4,082ย ืืืื, ืจืง ืขื ื ืชืืืื ืืชืื ื-VPC:
#Set intra-VPC route MTU:
ip -4 route change $SUBNET/$MASK dev $DEV mtu 4082
#Set default route MTU:
ip -4 route change default dev $DEV mtu 1460
ืืืืจืช ืืืืื ืืืงืกืืืื ืฉื ืคืื TCPโ (MSS)
ืืืืื ืืืงืกืืืื ืฉื ืคืื TCPโ (MSS) ืงืืืข ืืช ืืืื ืืืืขื ืืืืขืืื (payload) ืฉื ืืืืืื ืืืืืืจ TCP. ืืืืืื ืฉืืืื ืืืืืืช TCP/IP ืื ืืืื ืืืจืื ืืืืื ื-MTU ืืื ืืื ืืข ืคืืฆืื ืื ืืฉืืื ืฉื ืืืืืืช, ืฆืจืื ืืฉื ืืช ืืช ืืืื ื-MSS ืืืชืื.
ืืืจื ืืื, ืื ืฆืจืื ืืืืืืจ ืืช TCP MSS ืืืืคื ืืื ื, ืื ืืขืจืืช ืืืคืขืื ืืืืจืช ืืืชื ืืืืคื ืืืืืืื ื-MTU ืฉื ืื ืชืื.
ื-MSS ืืืกื ืืช ืืืืขื ืืืืขืืื (payload) ืืืช ืืคืฉืจืืืืช ื-TCP, ืืื ืื ืืืื ืืช ืืืชืจืช ื-IPv4 ืืืืื 20 ืืืื ืืืช ืืืชืจืช ื-TCP ืืืืื 20 ืืืื. ืืื, ืืจืฉืช IPv4, โ ื-MSS ืืืจื ืืื ืงืื ื-40ย ืืืื ืื-MTU.
ืื ืืชื ืืขืืืคืื MSS ืงืื ืืืชืจ ืืชื ืืขื ืกืคืฆืืคืืช, ืืชื ืืืืืื ืืืืืืจ ืืืชื ืขื ืืกืืก ืื ื ืชืื. ืืืืืื, ืื ืจืฉืช ื-VPC ืื-MTU ืฉื ืืืืฉืืจ ืืฉืชืืฉืื ืืืงืกืืืื (8,896ย ืืืื) ืืชื ืืขื ืืืืืช, ืืื ืืชื ืจืืฆืื ืืืฉืชืืฉ ื-MTU ืฉื 4ย KB ืืชื ืืขืช TCP, ืืชื ืืืืืื ืืืฉืชืืฉ ืืคืงืืื ืืืื:
ip -4 route change default dev $DEV advmss 4042
ืืฆื ืคืืฆืื ืืืืชืจืช
ืื ืื ืืืชืงื gVNIC gve ืืืจืกืืืช ืืืืช Linuxโ 6.9 ืืืืื ืชืืื ืืคืืฆืื ื ืชืื ื ืืืชืจืช TCP โ (tcp-data-split), ืฉืืืฉืืช ืืืจืืจืช ืืืื.
ืคืืฆืื ืืืืชืจืช ืืคืจืื ืืื ืืืชืจืืช ืืืืืืืช ืืืื ืื ืชืื ืื ืืืืืจื ื ืชืื ืื ื ืคืจืืื. ืืคืขืืื ืืื ืืืคืฉืจืช ืืืื ืืฃ ืืืืจืื ืฉืื ื-4,096ย ืืืื ืฉื ื ืชืื ืื. ืืืคืจืื ืืื ืืืคืฉืจืช ืืืฆืข ืืืคืืืืืืฆืืืช ืืฉืืืืช, ืืื ืืืืคื ืฉื ืคืขืืืืช ืืงืจืืช ืฉื ืืขืชืงื ืืืจืื ืืืืื ืืืจืื ืืืฉืชืืฉ ืืคืขืืืืช ืืืืืช ืืืชืจ ืฉื ืืืคืื ืืคื ืืืืจืื (ืืืืืื, ืืืืฆืขืืช Linux TCP_ZEROCOPY_RECEIVE).
ืืฉืืคืขืืืื ืืช ืืชืืื ื ืฉื ืคืืฆืื ืืืชืจืช ืืงืืื, ืืืืฉืื ืฉื MTU ืืฉืชื ื. ื-MTU ืืืืคืืืืื ืืื ืืื ืฉืื ืื ืืืืชืจืืช ืืืืคืืช ืืืืืจ ืืืืชืจืืช, ืืืืืจ ืืืืขื ืืืืขืืื ืืืื ืืฃ ืฉืื ืฉื ื ืชืื ืื. ืื ืืืคืฉืจืืช 'ืคืืฆืื ืืืชืจืช' ืืืคืขืืช:
- ืืืืจ ืืืชืจืืช ืืืื:
- ืืชืจื ื (14 ืืืื)
- โซIPv4 (20 ืืืืืื)
- ืืืชืจืืช TCP (20 ืืืื)
- ืืคืฉืจืืืืช ื ืคืืฆืืช ืฉื TCP (12 ืืืื ืืืืืจืช ืืจืืจืช ืืืื ืขื ืืืชืืืช ืืื ืฉื TCP )
- ืืืืจ ืื ืชืื ืื ืืืื ื ืืืื 4096ย ืืืืืื ืฉื ื ืชืื ื ืืืขื ืืืขืืื.
ืืชืืฆืื ืืื ืืืื ืืกืืจืช ืืืื ืฉื 4,162ย ืืืืืื, ืืืื MTU ืฉื 4,148ย ืืืืืื.
ืืืืืจืื ืืืืื
- ืืืื ืืงืจืื ืืช ืืคืืกื ืืืืื ืื ืืฉื 5 ืฉืืืื ืืฉืืคืืจ ืืืืฆืืขืื ืฉื Google Cloud ืืจืฉืช.
- ืืืืข ื ืืกืฃ ืขื Global Networking Products
- ืืืืข ืขื ืืกืืืื ืจืฉืช ื- Google Cloud
- ืืื ืืฉืืืื ืืช ืืืฆืืขื ืืจืฉืช