เพิ่ม Network Speed VPS ด้วย TCP BBR

เพิ่ม Network Speed VPS ด้วย TCP BBR

มิถุนายน 2026 · อ่าน 6 นาที

TCP BBR (Bottleneck Bandwidth and Round-trip propagation time) เป็น congestion control algorithm ที่ Google พัฒนา ช่วยเพิ่ม throughput และลด latency โดยเฉพาะบน connection ที่มี packet loss เล็กน้อย เปิดใช้ได้ง่ายบน Linux kernel 4.9+ โดยไม่ต้อง compile kernel ใหม่

ตรวจสอบ Kernel และเปิด BBR

# ตรวจ kernel version (ต้องการ 4.9+)
uname -r

# ดู congestion control ที่ใช้อยู่ปัจจุบัน
sysctl net.ipv4.tcp_congestion_control

# ดู algorithm ที่ available
sysctl net.ipv4.tcp_available_congestion_control
# เปิด BBR (มีผลทันที ไม่ต้อง reboot)
sudo modprobe tcp_bbr
echo "tcp_bbr" | sudo tee -a /etc/modules-load.d/modules.conf

# ตั้งค่าใน sysctl
sudo tee -a /etc/sysctl.conf << 'EOF'
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
EOF

sudo sysctl -p

Kernel Network Tuning เพิ่มเติม

ปรับ kernel parameters เพิ่ม performance สำหรับ web server ที่รับ connection จำนวนมาก:

sudo tee -a /etc/sysctl.conf << 'EOF'
# เพิ่ม socket buffer
net.core.rmem_max = 134217728
net.core.wmem_max = 134217728
net.ipv4.tcp_rmem = 4096 87380 134217728
net.ipv4.tcp_wmem = 4096 65536 134217728

# เพิ่ม connection queue
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65535
net.ipv4.tcp_max_syn_backlog = 65535

# TIME_WAIT optimization
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 15

# เปิด IP forwarding (ถ้าเป็น router/NAT)
# net.ipv4.ip_forward = 1
EOF

sudo sysctl -p
Tip: การตั้งค่า net.core.somaxconn ต้องตั้งใน application ด้วย เช่น Nginx ตั้ง listen 80 backlog=65535 ไม่งั้น application จะ cap ที่ค่าต่ำกว่า

ทดสอบ Speed ก่อนและหลัง

# ติดตั้ง speedtest
sudo apt install speedtest-cli -y
speedtest

# ทดสอบ TCP throughput ระหว่าง VPS 2 เครื่อง (ต้องมีทั้ง server และ client)
# บน server
iperf3 -s

# บน client
iperf3 -c SERVER_IP -t 30

ตรวจสอบว่า BBR ทำงานถูกต้อง

# ตรวจ congestion control ที่ใช้งานจริง
sysctl net.ipv4.tcp_congestion_control
# ต้องได้: net.ipv4.tcp_congestion_control = bbr

# ตรวจ qdisc
tc qdisc show | grep fq

# ดู BBR stats ของ connection จริง
ss -tin | grep bbr | head -5

# ตรวจ module โหลดแล้ว
lsmod | grep bbr
Tip: BBR ช่วยได้มากที่สุดบน connection ที่มี latency 30ms+ หรือมี packet loss เล็กน้อย บน LAN ที่ latency ต่ำมากอาจไม่เห็นความแตกต่างชัดเจน

แก้ปัญหาที่พบบ่อย

Error: "modprobe: FATAL: Module tcp_bbr not found"

Kernel เก่าเกินไปหรือ VPS ใช้ OpenVZ virtualization ซึ่งแชร์ kernel กับ host ไม่สามารถโหลด module เพิ่มได้:

# ตรวจ kernel version
uname -r  # ต้องการ 4.9+

# ตรวจ virtualization type
systemd-detect-virt

# ถ้าเป็น OpenVZ จะได้ "openvz"
# ต้องขอให้ provider เปิด BBR ที่ host level แทน

sysctl -p แจ้ง "No such file or directory" บางค่า

บาง parameter ไม่มีในบาง kernel หรือ module ยังไม่โหลด ลอง apply เฉพาะค่าที่รองรับ:

# Apply แบบข้าม error
sudo sysctl --system 2>&1 | grep -v "No such file"

# หรือ apply ทีละค่า
sudo sysctl net.ipv4.tcp_congestion_control=bbr

BBR ตั้งแล้วแต่ reboot แล้วหาย

การ modprobe และ sysctl -w มีผลชั่วคราว ต้องบันทึกถาวรใน 2 ที่:

# 1. บันทึก module
echo "tcp_bbr" | sudo tee /etc/modules-load.d/tcp_bbr.conf

# 2. บันทึก sysctl
sudo tee /etc/sysctl.d/99-bbr.conf << 'EOF'
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
EOF

# ทดสอบหลัง reboot
sudo reboot
# หลัง reboot:
sysctl net.ipv4.tcp_congestion_control

Nginx connection ยังช้าทั้งที่ตั้ง BBR แล้ว

BBR ช่วย layer TCP แต่ Nginx ต้องตั้ง backlog และ worker connections ให้เหมาะสมด้วย:

sudo nano /etc/nginx/nginx.conf

events {
    worker_connections  65535;
    use                 epoll;
    multi_accept        on;
}

# และใน server block:
listen 80 backlog=65535;

คำถามที่พบบ่อย

BBR ต่างจาก CUBIC อย่างไร?

CUBIC (algorithm เดิม) ปรับขนาด window ตาม packet loss เมื่อ loss เกิดจาก buffer เต็ม (bufferbloat) CUBIC จะลด window เกินความจำเป็น BBR ปรับตาม bandwidth จริงและ RTT ทำให้ throughput สูงกว่าและ latency ต่ำกว่าในสภาวะ network จริง

BBR เหมาะกับทุก use case ไหม?

BBR เหมาะมากสำหรับ: web server, file transfer, video streaming BBR อาจให้ผลน้อยกว่าบน: LAN ความเร็วสูง latency ต่ำมาก (ไม่ค่อยมีใน VPS) บาง report ระบุว่า BBR ใช้ bandwidth ได้ aggressive กว่า CUBIC เล็กน้อยในสภาพ congestion

การตั้งค่า sysctl เหล่านี้ปลอดภัยกับทุก application ไหม?

โดยรวมปลอดภัยสำหรับ web server ทั่วไป แต่ค่า tcp_tw_reuse อาจมีผลข้างเคียงกับ application บางตัวที่ sensitive กับ TIME_WAIT state ถ้าเจอปัญหา connection หลัง apply ให้ปิด tcp_tw_reuse ก่อน