Điều chỉnh bộ đệm hệ thống - TCP và tối ưu hóa hiệu suất mạng

# Check NIC ring buffer sizes ethtool -g eth0 # Monitor socket buffer usage ss -tm # Check for TCP zero window events tcpdump -i any 'tcp[tcpflags] & tcp-push != 0' -vv # Check network statistics for buffer issues netstat -s | grep -i "buffer\|queue\|drop"

Chẩn đoán Windows

# Check TCP parameters
netsh interface tcp show global

# View network adapter buffer settings
Get-NetAdapterAdvancedProperty -Name "Ethernet" | Where-Object {$_.DisplayName -like "*buffer*"}

# Monitor TCP statistics
netstat -s -p tcp

# Check receive window auto-tuning
netsh interface tcp show global | findstr "Receive Window"

Chẩn đoán macOS

# Check current buffer settings
sysctl kern.ipc.maxsockbuf
sysctl net.inet.tcp.sendspace
sysctl net.inet.tcp.recvspace

# View network statistics
netstat -s -p tcp

# Monitor socket buffers
netstat -an -p tcp

Điều chỉnh bộ đệm Linux

Cài đặt Linux kế thừa (Circa 2009)

tham số Giá trị di sản (2009) Sự miêu tả
net.core.rmem_default 124928 (122KB) Kích thước bộ đệm ổ cắm nhận mặc định
net.core.rmem_max 131071 (128KB) Kích thước bộ đệm ổ cắm nhận tối đa
net.core.wmem_default 124928 (122KB) Kích thước bộ đệm ổ cắm gửi mặc định
net.core.wmem_max 131071 (128KB) Kích thước bộ đệm ổ cắm gửi tối đa
net.ipv4.tcp_rmem 4096 87380 174760 Bộ đệm nhận TCP: tối thiểu, mặc định, tối đa (tính bằng byte)
net.ipv4.tcp_wmem 4096 16384 131072 Bộ đệm gửi TCP: tối thiểu, mặc định, tối đa (tính bằng byte)
net.ipv4.tcp_mem 196608 262144 393216 Các trang bộ nhớ TCP: thấp, áp suất, cao
net.core.netdev_max_backlog 1000 Số gói tối đa trong hàng đợi đầu vào
net.core.optmem_max 10240 (10KB) Kích thước bộ đệm phụ trợ tối đa trên mỗi ổ cắm

Cài đặt Linux hiện tại (2025-2026)

tham số Giá trị đề xuất hiện tại Sự miêu tả
net.core.rmem_default 16777216 (16MB) Kích thước bộ đệm ổ cắm nhận mặc định
net.core.rmem_max 134217728 (128MB) Kích thước bộ đệm ổ cắm nhận tối đa
net.core.wmem_default 16777216 (16MB) Kích thước bộ đệm ổ cắm gửi mặc định
net.core.wmem_max 134217728 (128MB) Kích thước bộ đệm ổ cắm gửi tối đa
net.ipv4.tcp_rmem 4096 87380 134217728 Bộ đệm nhận TCP: tối thiểu, mặc định, tối đa (tối đa 128 MB)
net.ipv4.tcp_wmem 4096 65536 134217728 Bộ đệm gửi TCP: tối thiểu, mặc định, tối đa (tối đa 128 MB)
net.ipv4.tcp_mem 8388608 12582912 16777216 Các trang bộ nhớ TCP: thấp, áp suất, cao (hệ thống 64GB)
net.core.netdev_max_backlog 250000 Số gói tối đa trong hàng đợi đầu vào (10GbE+)
net.core.optmem_max 65536 (64KB) Kích thước bộ đệm phụ trợ tối đa trên mỗi ổ cắm
net.ipv4.tcp_congestion_control bbr Sử dụng kiểm soát tắc nghẽn BBR (thuật toán của Google)
net.ipv4.tcp_window_scaling 1 Kích hoạt tính năng chia tỷ lệ cửa sổ TCP (RFC 1323)
net.ipv4.tcp_timestamps 1 Bật dấu thời gian TCP để ước tính RTT tốt hơn
net.ipv4.tcp_sack 1 Kích hoạt xác nhận có chọn lọc
net.ipv4.tcp_no_metrics_save 1 Vô hiệu hóa bộ nhớ đệm của số liệu TCP

Ứng dụng cấu hình Linux

Thêm các cài đặt này vào/etc/sysctl.confhoặc tạo một tập tin mới/etc/sysctl.d/99-network-tuning.conf:

# Network Buffer Tuning for High-Performance Applications
# Optimized for 10GbE+ networks with RTT up to 300ms

# Core socket buffer settings
net.core.rmem_default = 16777216
net.core.rmem_max = 134217728
net.core.wmem_default = 16777216
net.core.wmem_max = 134217728

# TCP buffer settings
net.ipv4.tcp_rmem = 4096 87380 134217728
net.ipv4.tcp_wmem = 4096 65536 134217728
net.ipv4.tcp_mem = 8388608 12582912 16777216

# Device buffer settings
net.core.netdev_max_backlog = 250000
net.core.netdev_budget = 50000
net.core.netdev_budget_usecs = 5000
net.core.optmem_max = 65536

# TCP optimizations
net.ipv4.tcp_congestion_control = bbr
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_sack = 1
net.ipv4.tcp_no_metrics_save = 1
net.ipv4.tcp_moderate_rcvbuf = 1

# Apply with: sysctl -p /etc/sysctl.d/99-network-tuning.conf

Điều chỉnh bộ đệm vòng NIC

# Check current ring buffer sizes
ethtool -g eth0

# Set maximum ring buffer sizes (adjust based on NIC capabilities)
ethtool -G eth0 rx 4096 tx 4096

# Make persistent by adding to /etc/network/interfaces or systemd service
Cảnh báo quan trọng - Tiêu thụ bộ nhớ:Các giá trị tcp_mem nằm trong các trang bộ nhớ (thường là 4KB). Kích thước bộ đệm lớn có thể gây ra áp lực bộ nhớ nghiêm trọng:
  • Bộ nhớ cho mỗi kết nối:Mỗi kết nối có thể sử dụng tối đa rmem_max + wmem_max (256 MB với bộ đệm 128 MB)
  • Tổng tác động của hệ thống:1.000 kết nối × 256MB = 256GB mức sử dụng tiềm năng
  • Ước tính an toàn:Kết nối đồng thời tối đa × 256MB không được vượt quá 50% RAM hệ thống
  • Ví dụ:Máy chủ 64 GB nên giới hạn kết nối tối đa ở mức ~125 kết nối thông lượng cao đồng thời với bộ đệm 128 MB
  • Khuyến nghị dành cho máy chủ có RAM <16GB:Giảm bộ đệm xuống tối đa 16-32 MB và điều chỉnh tcp_mem theo tỷ lệ

Điều chỉnh bộ đệm Windows

Cài đặt Windows kế thừa (Circa 2009 - Windows Vista/7/Server 2008)

tham số Giá trị di sản (2009) Vị trí
Kích thước cửa sổ Tcp 65535 (64KB) Sổ đăng ký: HKLM\System\CurrentControlSet\Services\Tcpip\Parameters
Tcp1323Tùy chọn 0 (bị vô hiệu hóa) Chia tỷ lệ cửa sổ bị tắt theo mặc định
Cửa sổ nhận mặc định 8192 (8KB) Cửa sổ nhận mặc định
Cửa sổ gửi mặc định 8192 (8KB) Cửa sổ gửi mặc định
Kích thước cửa sổ GlobalMaxTcp 65535 (64KB) Kích thước cửa sổ TCP tối đa
TcpNumKết nối 16777214 Kết nối TCP tối đa

Cài đặt Windows hiện tại (Windows 10/11/Server 2019-2025)

Windows hiện đại sử dụngNhận tính năng tự động điều chỉnh cửa sổtính năng tự động điều chỉnh bộ đệm nhận dựa trên điều kiện mạng.

Tính năng Cài đặt được đề xuất hiện tại Sự miêu tả
Mức độ tự động điều chỉnh bình thường (hoặc mang tính thử nghiệm cao đối với 10GbE+) Điều chỉnh cửa sổ nhận động
Chia tỷ lệ bên nhận (RSS) đã bật Phân phối xử lý mạng trên các CPU
Giảm tải ống khói tự động (hoặc bị vô hiệu hóa trên các NIC hiện đại) Giảm tải TCP sang phần cứng NIC
NetDMA tàn tật Truy cập bộ nhớ trực tiếp (không dùng nữa)
Tham số toàn cầu TCP Xem các lệnh bên dưới Cài đặt TCP toàn hệ thống
Nhà cung cấp tắc nghẽn CUBIC (hoặc dự phòng NewReno) Thuật toán điều khiển tắc nghẽn TCP

Lệnh cấu hình Windows

# Check current auto-tuning level
netsh interface tcp show global

# Enable auto-tuning (normal mode - default for most scenarios)
netsh interface tcp set global autotuninglevel=normal

# For high-bandwidth, high-latency networks (10GbE+, data center environments)
netsh interface tcp set global autotuninglevel=experimental

# For conservative tuning (if experimental causes issues)
netsh interface tcp set global autotuninglevel=restricted

# For very conservative tuning (not recommended for high-performance networks)
netsh interface tcp set global autotuninglevel=highlyrestricted

# Enable CUBIC congestion provider (Windows Server 2022/Windows 11+ only)
netsh interface tcp set supplemental template=Internet congestionprovider=cubic

# Note: Windows 10 and Server 2019 use Compound TCP or NewReno by default
# CUBIC is not available on these older versions

# Enable Receive-Side Scaling (RSS)
netsh interface tcp set global rss=enabled

# Set chimney offload (automatic is recommended)
netsh interface tcp set global chimney=automatic

# Disable NetDMA (recommended for modern systems)
netsh interface tcp set global netdma=disabled

# Enable Direct Cache Access (if supported)
netsh interface tcp set global dca=enabled

# Enable ECN (Explicit Congestion Notification)
netsh interface tcp set global ecncapability=enabled

# Set initial congestion window to 10 (RFC 6928)
netsh interface tcp set global initialRto=3000

Cài đặt bộ đệm NIC nâng cao (thông qua Trình quản lý thiết bị hoặc PowerShell)

# View current adapter settings
Get-NetAdapterAdvancedProperty -Name "Ethernet"

# Increase receive buffers (adjust based on NIC)
Set-NetAdapterAdvancedProperty -Name "Ethernet" -DisplayName "Receive Buffers" -DisplayValue 2048

# Increase transmit buffers
Set-NetAdapterAdvancedProperty -Name "Ethernet" -DisplayName "Transmit Buffers" -DisplayValue 2048

# Enable Jumbo Frames (if network supports it)
Set-NetAdapterAdvancedProperty -Name "Ethernet" -DisplayName "Jumbo Packet" -DisplayValue 9014

# Enable Large Send Offload (LSO)
Set-NetAdapterAdvancedProperty -Name "Ethernet" -DisplayName "Large Send Offload V2 (IPv4)" -DisplayValue Enabled
Set-NetAdapterAdvancedProperty -Name "Ethernet" -DisplayName "Large Send Offload V2 (IPv6)" -DisplayValue Enabled

Tinh chỉnh sổ đăng ký (Nâng cao - Sử dụng thận trọng)

# These settings are typically NOT needed on Windows 10/11 due to auto-tuning
# Only modify if auto-tuning is disabled or problematic

# Registry path: HKLM\System\CurrentControlSet\Services\Tcpip\Parameters

# Maximum TCP window size (if auto-tuning disabled)
# TcpWindowSize = 16777216 (16MB) - REG_DWORD

# Enable window scaling (enabled by default on modern Windows)
# Tcp1323Opts = 3 - REG_DWORD

# Number of TCP Timed Wait Delay
# TcpTimedWaitDelay = 30 - REG_DWORD (default 240)
Cảnh báo:Trên Windows hiện đại (11/10/Server 2019+), hãy tránh sửa đổi sổ đăng ký thủ công trừ khi việc tự động điều chỉnh gây ra sự cố. Các thuật toán tự động điều chỉnh nhìn chung tốt hơn so với cài đặt tĩnh.

Điều chỉnh bộ đệm macOS

Cài đặt macOS kế thừa (Circa 2009 - Mac OS X 10.5/10.6)

tham số Giá trị di sản (2009) Sự miêu tả
kern.ipc.maxsockbuf 262144 (256KB) Kích thước bộ đệm ổ cắm tối đa
net.inet.tcp.sendspace 32768 (32KB) Bộ đệm gửi TCP mặc định
net.inet.tcp.recvspace 32768 (32KB) Bộ đệm nhận TCP mặc định
net.inet.tcp.autorcvbufmax 131072 (128KB) Bộ đệm nhận được điều chỉnh tự động tối đa
net.inet.tcp.autosndbufmax 131072 (128KB) Bộ đệm gửi được điều chỉnh tự động tối đa
net.inet.tcp.rfc1323 0 (bị vô hiệu hóa) Chia tỷ lệ cửa sổ TCP

Cài đặt macOS hiện tại (macOS 12-15 Monterey đến Sequoia)

tham số Giá trị đề xuất hiện tại Sự miêu tả
kern.ipc.maxsockbuf 8388608 (8MB) Kích thước bộ đệm ổ cắm tối đa
net.inet.tcp.sendspace 131072 (128KB) Bộ đệm gửi TCP mặc định
net.inet.tcp.recvspace 131072 (128KB) Bộ đệm nhận TCP mặc định
net.inet.tcp.autorcvbufmax 16777216 (16MB) Bộ đệm nhận được điều chỉnh tự động tối đa
net.inet.tcp.autosndbufmax 16777216 (16MB) Bộ đệm gửi được điều chỉnh tự động tối đa
net.inet.tcp.rfc1323 1 (đã bật) Kích hoạt tính năng chia tỷ lệ cửa sổ TCP
net.inet.tcp.sack 1 (đã bật) Kích hoạt xác nhận có chọn lọc
net.inet.tcp.mssdflt 1440 Kích thước phân đoạn tối đa TCP mặc định
net.inet.tcp.delayed_ack 3 Hành vi ACK bị trì hoãn

Ứng dụng cấu hình macOS

# Check current settings
sysctl kern.ipc.maxsockbuf
sysctl net.inet.tcp.sendspace
sysctl net.inet.tcp.recvspace
sysctl net.inet.tcp.autorcvbufmax
sysctl net.inet.tcp.autosndbufmax

# Apply settings temporarily (until reboot)
sudo sysctl -w kern.ipc.maxsockbuf=8388608
sudo sysctl -w net.inet.tcp.sendspace=131072
sudo sysctl -w net.inet.tcp.recvspace=131072
sudo sysctl -w net.inet.tcp.autorcvbufmax=16777216
sudo sysctl -w net.inet.tcp.autosndbufmax=16777216
sudo sysctl -w net.inet.tcp.rfc1323=1
sudo sysctl -w net.inet.tcp.sack=1

# Make settings persistent (create /etc/sysctl.conf)
sudo tee /etc/sysctl.conf <<EOF
kern.ipc.maxsockbuf=8388608
net.inet.tcp.sendspace=131072
net.inet.tcp.recvspace=131072
net.inet.tcp.autorcvbufmax=16777216
net.inet.tcp.autosndbufmax=16777216
net.inet.tcp.rfc1323=1
net.inet.tcp.sack=1
net.inet.tcp.mssdflt=1440
net.inet.tcp.delayed_ack=3
EOF

# Note: On recent macOS versions, /etc/sysctl.conf may not be read automatically
# Use a LaunchDaemon to apply settings at boot

Tạo LaunchDaemon cho cài đặt liên tục

# Create /Library/LaunchDaemons/com.local.sysctl.plist
sudo tee /Library/LaunchDaemons/com.local.sysctl.plist <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.local.sysctl</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/sbin/sysctl</string>
        <string>-w</string>
        <string>kern.ipc.maxsockbuf=8388608</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>
EOF

sudo chmod 644 /Library/LaunchDaemons/com.local.sysctl.plist
sudo launchctl load /Library/LaunchDaemons/com.local.sysctl.plist
Cảnh báo:macOS Ventura (13) trở lên có các hạn chế Bảo vệ toàn vẹn hệ thống (SIP). Một số tham số kernel có thể không thể sửa đổi được ngay cả với sudo. Kiểm tra cài đặt trong môi trường cụ thể của bạn.

Kiểm tra và xác nhận hiệu suất

Công cụ kiểm tra hiệu suất bộ đệm

iperf3 - Kiểm tra hiệu suất mạng

# Server side
iperf3 -s

# Client side - test TCP throughput
iperf3 -c server_ip -t 60 -i 5 -w 16M

# Test with multiple parallel streams
iperf3 -c server_ip -P 10 -t 60

# Test UDP performance
iperf3 -c server_ip -u -b 1000M -t 60

tcpdump - Chụp kích thước cửa sổ TCP

# Capture and display TCP window sizes
tcpdump -i any -n 'tcp' -vv | grep -i window

# Save capture for Wireshark analysis
tcpdump -i any -w /tmp/capture.pcap 'tcp port 443'

Phân tích Wireshark

Hãy tìm những dấu hiệu về vấn đề bộ đệm sau:

  • Thông báo cửa sổ TCP Zero
  • Gói cập nhật cửa sổ TCP
  • Cửa sổ TCP Thông báo đầy đủ
  • Tốc độ truyền lại cao với RTT thấp

Giám sát hệ thống

# Linux - Monitor network buffer statistics
watch -n 1 'cat /proc/net/sockstat'
watch -n 1 'ss -tm | grep -i mem'

# Check for drops
netstat -s | grep -i drop

# Windows - Monitor TCP statistics
netstat -e 1

# macOS - Monitor network statistics
netstat -s -p tcp

Tính toán sản phẩm độ trễ băng thông (BDP)

Để xác định kích thước bộ đệm tối ưu cho mạng của bạn, hãy tính Sản phẩm độ trễ băng thông:

BDP = Bandwidth (bits/sec) × RTT (seconds)

Example for 10 Gigabit Ethernet with 50ms RTT:
BDP = 10,000,000,000 × 0.050 = 500,000,000 bits = 62.5 MB

Buffer Size = BDP × 2 (for bidirectional traffic and headroom)
Buffer Size = 62.5 MB × 2 = 125 MB

This is why modern settings recommend 128MB maximum buffers.

Khuyến nghị cụ thể về khối lượng công việc

Loại khối lượng công việc Kích thước bộ đệm được đề xuất Thông số chính
Máy chủ Web (Độ trễ thấp) 4-16MB Bộ đệm thấp hơn, nhiều kết nối hơn, phản hồi nhanh
Máy chủ cơ sở dữ liệu 16-32MB Bộ đệm vừa phải, thông lượng ổn định
Truyền tệp / Sao lưu 64-128 MB Bộ đệm tối đa, ưu tiên thông lượng cao
Truyền phát video 32-64MB Bộ đệm lớn, tốc độ phân phối ổn định
HPC / Trung tâm dữ liệu 128-256MB Bộ đệm tối đa, kiểm soát tắc nghẽn chuyên dụng
Không dây / Di động 2-8 MB Bộ đệm bảo thủ, xử lý độ trễ thay đổi

Những sai lầm và cạm bẫy thường gặp

Những sai lầm cần tránh

  • Quá bộ đệm:Bộ đệm quá lớn có thể gây ra tình trạng phồng bộ đệm, tăng độ trễ
  • Bỏ qua các hạn chế về bộ nhớ:Bộ đệm lớn nhân với số lượng kết nối; một máy chủ có 10.000 kết nối và bộ đệm 128 MB cần 1,25TB RAM
  • Vô hiệu hóa tính năng tự động điều chỉnh mà không có lý do:Tự động điều chỉnh hệ điều hành hiện đại thường tốt hơn cài đặt tĩnh
  • Không kiểm tra sau khi thay đổi:Luôn xác nhận các cải tiến hiệu suất với khối lượng công việc thực tế
  • Quên bộ đệm NIC:Việc cạn kiệt bộ đệm vòng có thể xảy ra độc lập với bộ đệm ổ cắm
  • Cài đặt không nhất quán:Máy khách và máy chủ phải có cấu hình bộ đệm tương thích
  • Bỏ qua việc kiểm soát tắc nghẽn:BBR và CUBIC tốt hơn đáng kể so với các thuật toán cũ

Quy trình khắc phục sự cố

  1. Lập đường cơ sở:Đo hiệu suất hiện tại bằng iperf3 hoặc các công cụ tương tự
  2. Chụp gói tin:Sử dụng tcpdump/Wireshark để xác định hành vi của cửa sổ TCP
  3. Kiểm tra thống kê hệ thống:Tìm kiếm sự sụt giảm, cạn kiệt bộ đệm, truyền lại
  4. Tính BDP:Xác định kích thước bộ đệm tối ưu về mặt lý thuyết
  5. Áp dụng các thay đổi gia tăng:Đừng thay đổi mọi thứ cùng một lúc
  6. Kiểm tra và xác nhận:Đo lường mức độ cải thiện hiệu suất thực tế
  7. Theo dõi theo thời gian:Đảm bảo cài đặt vẫn tối ưu dưới các tải khác nhau

Tài liệu tham khảo và đọc thêm

  • RFC 1323 - Tiện ích mở rộng TCP cho hiệu suất cao (Mở rộng cửa sổ)
  • RFC 2018 - Tùy chọn xác nhận có chọn lọc TCP
  • RFC 6928 - Tăng cửa sổ ban đầu của TCP
  • RFC 8312 - Thuật toán kiểm soát tắc nghẽn CUBIC
  • Kiểm soát tắc nghẽn BBR (Google) - https://research.google/pubs/pub45646/
  • Tài liệu hạt nhân Linux - Networking/ip-sysctl.txt
  • Hướng dẫn điều chỉnh hiệu suất TCP/IP của Windows (Microsoft)
  • Hướng dẫn điều chỉnh mạng ESnet - https://fasterdata.es.net/

Phần kết luận

Việc cạn kiệt bộ đệm là nguyên nhân gốc rễ phổ biến của các vấn đề về hiệu suất dường như có liên quan đến mạng. Bằng cách hiểu rõ sự phát triển của kích thước bộ đệm từ giới hạn 128KB năm 2009 đến khả năng 128 MB ngày nay, các kỹ sư mạng có thể nhanh chóng xác định và giải quyết những vấn đề này.

Những điểm chính:

  • Các hệ thống hiện đại cần bộ đệm lớn hơn đáng kể so với cấu hình cũ (2009)
  • Luôn tính toán BDP cho các điều kiện mạng cụ thể của bạn
  • Sử dụng các tính năng tự động điều chỉnh hệ điều hành khi có sẵn (Windows, Linux hiện đại)
  • Theo dõi và kiểm tra để xác nhận các thay đổi
  • Xem xét các yêu cầu cụ thể về khối lượng công việc khi điều chỉnh

Hãy nhớ: "Sự cố mạng" được phát hiện qua phân tích gói để hiển thị cửa sổ TCP zero thực sự là sự cố tài nguyên hệ thống máy chủ. Với việc điều chỉnh bộ đệm thích hợp, bạn có thể loại bỏ những chẩn đoán sai này và đạt được hiệu suất tối ưu.


Cập nhật lần cuối: ngày 2 tháng 2 năm 2026

Tác giả: Đội ngũ kỹ thuật Baud9600