Điều chỉnh bộ đệm hệ thống - TCP và tối ưu hóa hiệu suất mạng
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
- 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)
Đ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
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ố
- 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ự
- Chụp gói tin:Sử dụng tcpdump/Wireshark để xác định hành vi của cửa sổ TCP
- 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
- Tính BDP:Xác định kích thước bộ đệm tối ưu về mặt lý thuyết
- Áp dụng các thay đổi gia tăng:Đừng thay đổi mọi thứ cùng một lúc
- Kiểm tra và xác nhận:Đo lường mức độ cải thiện hiệu suất thực tế
- 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