System Buffer Tuning - TCP and Network Performance Optimization
Windows diagnosztika
# 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"
macOS diagnosztika
# 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
Linux puffer hangolás
Korábbi Linux-beállítások (2009 körül)
| Paraméter | Legacy Value (2009) | Leírás |
|---|---|---|
| net.core.rmem_default | 124928 (122KB) | Alapértelmezett fogadási aljzat puffermérete |
| net.core.rmem_max | 131071 (128 KB) | Maximális vételi aljzat puffermérete |
| net.core.wmem_default | 124928 (122KB) | Alapértelmezett küldési socket pufferméret |
| net.core.wmem_max | 131071 (128 KB) | Maximális küldési socket pufferméret |
| net.ipv4.tcp_rmem | 4096 87380 174760 | TCP fogadási puffer: min, alapértelmezett, max (byte-ban) |
| net.ipv4.tcp_wmem | 4096 16384 131072 | TCP küldési puffer: min, alapértelmezett, max (byte-ban) |
| net.ipv4.tcp_mem | 196608 262144 393216 | TCP memórialapok: alacsony, nyomás, magas |
| net.core.netdev_max_backlog | 1000 | Maximum csomagok a bemeneti sorban |
| net.core.optmem_max | 10240 (10 KB) | Maximális kiegészítő pufferméret aljzatonként |
Jelenlegi Linux-beállítások (2025-2026)
| Paraméter | Jelenlegi ajánlott érték | Leírás |
|---|---|---|
| net.core.rmem_default | 16777216 (16 MB) | Alapértelmezett fogadási aljzat puffermérete |
| net.core.rmem_max | 134217728 (128 MB) | Maximális vételi aljzat puffermérete |
| net.core.wmem_default | 16777216 (16 MB) | Alapértelmezett küldési socket pufferméret |
| net.core.wmem_max | 134217728 (128 MB) | Maximális küldési socket pufferméret |
| net.ipv4.tcp_rmem | 4096 87380 134217728 | TCP fogadási puffer: min, alapértelmezett, max (max. 128 MB) |
| net.ipv4.tcp_wmem | 4096 65536 134217728 | TCP küldési puffer: min, alapértelmezett, max (max. 128 MB) |
| net.ipv4.tcp_mem | 8388608 12582912 16777216 | TCP memórialapok: alacsony, nyomás, magas (64 GB-os rendszer) |
| net.core.netdev_max_backlog | 250000 | Maximális csomagok a bemeneti sorban (10 GbE+) |
| net.core.optmem_max | 65536 (64 KB) | Maximális kiegészítő pufferméret aljzatonként |
| net.ipv4.tcp_congestion_control | bbr | BBR torlódáskezelés használata (a Google algoritmusa) |
| net.ipv4.tcp_window_scaling | 1 | A TCP ablak méretezésének engedélyezése (RFC 1323) |
| net.ipv4.tcp_timestamps | 1 | Engedélyezze a TCP időbélyegeket a jobb RTT becslés érdekében |
| net.ipv4.tcp_sack | 1 | Szelektív nyugtázás engedélyezése |
| net.ipv4.tcp_no_metrics_save | 1 | A TCP-metrikák gyorsítótárazásának letiltása |
Linux konfigurációs alkalmazás
Adja hozzá ezeket a beállításokat/etc/sysctl.confvagy hozzon létre egy új fájlt/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
NIC gyűrűpuffer hangolás
# 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
- Csatlakozásonkénti memória:Minden kapcsolat legfeljebb rmem_max + wmem_max (256 MB 128 MB pufferrel) használható
- Teljes rendszerhatás:1000 csatlakozás × 256 MB = 256 GB potenciális használat
- Biztonságos becslés:Az egyidejű kapcsolatok maximális száma × 256 MB nem haladhatja meg a rendszer RAM 50%-át
- Példa:Egy 64 GB-os szervernek a maximális kapcsolatokat ~125 egyidejű nagy áteresztőképességű kapcsolatra kell korlátoznia 128 MB pufferrel
- Javaslat <16 GB RAM-mal rendelkező szerverekhez:Csökkentse a puffereket maximum 16-32 MB-ra, és arányosan állítsa be a tcp_mem értéket
Windows pufferhangolás
Korábbi Windows-beállítások (2009 körül – Windows Vista/7/Server 2008)
| Paraméter | Legacy Value (2009) | Elhelyezkedés |
|---|---|---|
| TcpWindowSize | 65535 (64 KB) | Registry: HKLM\System\CurrentControlSet\Services\Tcpip\Parameters |
| Tcp1323Opts | 0 (letiltva) | Az ablakméretezés alapértelmezés szerint le van tiltva |
| DefaultReceiveWindow | 8192 (8 KB) | Alapértelmezett fogadási ablak |
| DefaultSendWindow | 8192 (8 KB) | Alapértelmezett küldési ablak |
| GlobalMaxTcpWindowSize | 65535 (64 KB) | Maximális TCP ablakméret |
| TcpNumConnections | 16777214 | Maximális TCP kapcsolatok |
Jelenlegi Windows-beállítások (Windows 10/11/Server 2019-2025)
A modern Windows aAz ablak automatikus hangolása fogadásafunkció, amely dinamikusan állítja be a vételi puffereket a hálózati feltételek alapján.
| Funkció | Jelenlegi ajánlott beállítás | Leírás |
|---|---|---|
| Automatikus hangolási szint | normál (vagy erősen kísérleti 10 GbE+ esetén) | Dinamikus fogadási ablak beállítás |
| Fogadóoldali méretezés (RSS) | engedélyezve van | Ossza meg a hálózati feldolgozást a CPU-k között |
| Kémény tehermentesítés | automatikus (vagy letiltva a modern hálózati kártyákon) | TCP-letöltés a hálózati kártya hardverére |
| NetDMA | letiltva | Közvetlen memória hozzáférés (elavult) |
| TCP globális paraméterek | Lásd az alábbi parancsokat | Rendszerszintű TCP beállítások |
| Dugulásszolgáltató | CUBIC (vagy NewReno tartalék) | TCP torlódást szabályozó algoritmus |
Windows konfigurációs parancsok
# 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
Speciális NIC-pufferbeállítások (Eszközkezelőn vagy PowerShell-en keresztül)
# 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
Rendszerleíró adatbázis módosítások (haladó – óvatosan használja)
# 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)
macOS pufferhangolás
Korábbi macOS-beállítások (2009 körül – Mac OS X 10.5/10.6)
| Paraméter | Legacy Value (2009) | Leírás |
|---|---|---|
| kern.ipc.maxsockbuf | 262144 (256 KB) | Maximális foglalat pufferméret |
| net.inet.tcp.sendspace | 32768 (32 KB) | Alapértelmezett TCP küldési puffer |
| net.inet.tcp.recvspace | 32768 (32 KB) | Alapértelmezett TCP fogadási puffer |
| net.inet.tcp.autorcvbufmax | 131072 (128 KB) | Maximális automatikusan hangolt vételi puffer |
| net.inet.tcp.autosndbufmax | 131072 (128 KB) | Maximális automatikusan hangolt küldési puffer |
| net.inet.tcp.rfc1323 | 0 (letiltva) | TCP ablak méretezése |
Jelenlegi macOS-beállítások (macOS 12-15 Monterey és Sequoia)
| Paraméter | Jelenlegi ajánlott érték | Leírás |
|---|---|---|
| kern.ipc.maxsockbuf | 8388608 (8 MB) | Maximális foglalat pufferméret |
| net.inet.tcp.sendspace | 131072 (128 KB) | Alapértelmezett TCP küldési puffer |
| net.inet.tcp.recvspace | 131072 (128 KB) | Alapértelmezett TCP fogadási puffer |
| net.inet.tcp.autorcvbufmax | 16777216 (16 MB) | Maximális automatikusan hangolt vételi puffer |
| net.inet.tcp.autosndbufmax | 16777216 (16 MB) | Maximális automatikusan hangolt küldési puffer |
| net.inet.tcp.rfc1323 | 1 (engedélyezve) | Engedélyezze a TCP ablak méretezését |
| net.inet.tcp.sack | 1 (engedélyezve) | Szelektív nyugtázás engedélyezése |
| net.inet.tcp.mssdflt | 1440 | Alapértelmezett TCP maximális szegmensméret |
| net.inet.tcp.delayed_ack | 3 | Késleltetett ACK viselkedés |
macOS konfigurációs alkalmazás
# 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
LaunchDaemon létrehozása az állandó beállításokhoz
# 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
Teljesítményteszt és érvényesítés
Eszközök a puffer teljesítményének teszteléséhez
iperf3 – Hálózati teljesítményteszt
# 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 - TCP ablakméretek rögzítése
# 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'
Wireshark elemzés
Keresse meg a pufferproblémák alábbi mutatóit:
- TCP Zero Window üzenetek
- TCP ablakfrissítési csomagok
- TCP Window Teljes értesítések
- Magas újraadási sebesség alacsony RTT mellett
Rendszerfigyelés
# 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
Sávszélesség-késleltetési termék (BDP) számítása
A hálózat optimális pufferméretének meghatározásához számítsa ki a sávszélesség-késleltetési szorzatot:
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.
Munkaterhelés-specifikus ajánlások
| Munkaterhelés típusa | Ajánlott pufferméret | Kulcsparaméterek |
|---|---|---|
| Webszerver (alacsony késleltetés) | 4-16 MB | Alacsonyabb pufferek, több kapcsolat, gyors reagálás |
| Adatbázis szerver | 16-32 MB | Mérsékelt pufferek, egyenletes átvitel |
| Fájlátvitel / biztonsági mentés | 64-128 MB | Maximális pufferek, magas átviteli prioritás |
| Videó streamelés | 32-64 MB | Nagy pufferek, egyenletes szállítási sebesség |
| HPC / adatközpont | 128-256 MB | Maximális pufferek, speciális torlódás-szabályozás |
| Vezeték nélküli / mobil | 2-8 MB | Konzervatív pufferek, változó késleltetésű kezelés |
Gyakori hibák és buktatók
Elkerülendő hibák
- Túlpufferelés:A túl nagy pufferek pufferfelfúvódást okozhatnak, ami növeli a késleltetést
- A memóriakorlátok figyelmen kívül hagyása:A nagy pufferek megszorozódnak a kapcsolatok számával; egy 10 000 kapcsolattal és 128 MB pufferrel rendelkező szerverhez 1,25 TB RAM szükséges
- Az automatikus hangolás ok nélküli letiltása:A modern operációs rendszer automatikus hangolása általában jobb, mint a statikus beállítások
- Változások után nem tesztel:A teljesítménynövekedést mindig valós munkaterhelés mellett érvényesítse
- A NIC pufferek elfelejtése:A gyűrűs puffer kimerülése a foglalat puffereitől függetlenül előfordulhat
- Ellentmondó beállítások:A kliensnek és a szervernek kompatibilis pufferkonfigurációkkal kell rendelkeznie
- A torlódásszabályozás figyelmen kívül hagyása:A BBR és a CUBIC lényegesen jobb, mint a régebbi algoritmusok
Hibaelhárítás munkafolyamat
- Állítsd fel az alapvonalat:Mérje meg az aktuális teljesítményt iperf3 vagy hasonló eszközökkel
- Csomagok rögzítése:A tcpdump/Wireshark segítségével azonosíthatja a TCP ablak viselkedését
- Ellenőrizze a rendszer statisztikáit:Keresse a cseppeket, a puffer kimerülését, az újraadásokat
- BDP kiszámítása:Határozza meg az elméletileg optimális pufferméreteket
- Folyamatos változtatások alkalmazása:Ne változtass meg mindent egyszerre
- Tesztelje és érvényesítse:Mérje meg a tényleges teljesítményjavulást
- Időbeli megfigyelés:Győződjön meg arról, hogy a beállítások optimálisak maradnak változó terhelés mellett
Hivatkozások és további irodalom
- RFC 1323 – TCP-bővítmények a nagy teljesítmény érdekében (ablakméretezés)
- RFC 2018 – TCP szelektív nyugtázási beállítások
- RFC 6928 - A TCP kezdeti ablakának növelése
- RFC 8312 – CUBIC torlódáskezelési algoritmus
- BBR Congestion Control (Google) – https://research.google/pubs/pub45646/
- Linux kernel dokumentáció - hálózatépítés/ip-sysctl.txt
- Windows TCP/IP teljesítményhangolási útmutató (Microsoft)
- ESnet hálózati hangolási útmutató - https://fasterdata.es.net/
Következtetés
A puffer kimerülése a hálózattal kapcsolatosnak tűnő teljesítményproblémák gyakori kiváltó oka. A pufferméretezés 2009-es 128 KB-os korlátaitól a mai 128 MB-os kapacitásig terjedő fejlődésének megértésével a hálózati mérnökök gyorsan azonosíthatják és megoldhatják ezeket a problémákat.
A legfontosabb elvitelek:
- A modern rendszereknek lényegesen nagyobb pufferekre van szükségük, mint a régebbi (2009) konfigurációknak
- Mindig számítsa ki a BDP-t az adott hálózati viszonyoknak megfelelően
- Használja az operációs rendszer automatikus hangolási funkcióit (Windows, modern Linux)
- Figyelje és tesztelje a változásokat
- Hangoláskor vegye figyelembe a munkaterhelés-specifikus követelményeket
Ne feledje: A csomagelemzés által feltárt "hálózati probléma" a TCP nulla ablakainak kimutatására valójában gazdarendszer-erőforrás probléma. Megfelelő pufferhangolással kiküszöbölheti ezeket a hamis diagnózisokat, és optimális teljesítményt érhet el.
Utolsó frissítés: 2026. február 2
Szerző: Baud9600 műszaki csapat