Ladenie vyrovnávacej pamäte systému - TCP a optimalizácia výkonu siete
Diagnostika systému 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"
Diagnostika 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
Ladenie vyrovnávacej pamäte Linuxu
Staršie nastavenia systému Linux (približne 2009)
| Parameter | Staršia hodnota (2009) | Popis |
|---|---|---|
| net.core.rmem_default | 124928 (122 kB) | Predvolená veľkosť vyrovnávacej pamäte prijímacieho soketu |
| net.core.rmem_max | 131071 (128 kB) | Maximálna veľkosť vyrovnávacej pamäte prijímacieho soketu |
| net.core.wmem_default | 124928 (122 kB) | Predvolená veľkosť vyrovnávacej pamäte odosielacieho soketu |
| net.core.wmem_max | 131071 (128 kB) | Maximálna veľkosť vyrovnávacej pamäte odosielacieho soketu |
| net.ipv4.tcp_rmem | 4096 87380 174760 | TCP prijímacia vyrovnávacia pamäť: min, predvolená, max (v bajtoch) |
| net.ipv4.tcp_wmem | 4096 16384 131072 | TCP odosielacia vyrovnávacia pamäť: min, predvolená, max (v bajtoch) |
| net.ipv4.tcp_mem | 196608 262144 393216 | Pamäťové stránky TCP: nízky, tlak, vysoký |
| net.core.netdev_max_backlog | 1000 | Maximálny počet paketov vo vstupnej fronte |
| net.core.optmem_max | 10240 (10 kB) | Maximálna veľkosť pomocnej vyrovnávacej pamäte na zásuvku |
Aktuálne nastavenia systému Linux (2025 – 2026)
| Parameter | Aktuálna odporúčaná hodnota | Popis |
|---|---|---|
| net.core.rmem_default | 16777216 (16 MB) | Predvolená veľkosť vyrovnávacej pamäte prijímacieho soketu |
| net.core.rmem_max | 134217728 (128 MB) | Maximálna veľkosť vyrovnávacej pamäte prijímacieho soketu |
| net.core.wmem_default | 16777216 (16 MB) | Predvolená veľkosť vyrovnávacej pamäte odosielacieho soketu |
| net.core.wmem_max | 134217728 (128 MB) | Maximálna veľkosť vyrovnávacej pamäte odosielacieho soketu |
| net.ipv4.tcp_rmem | 4096 87380 134217728 | TCP prijímacia vyrovnávacia pamäť: min, predvolená, max (128 MB max) |
| net.ipv4.tcp_wmem | 4096 65536 134217728 | TCP odosielacia vyrovnávacia pamäť: min, predvolená, max (128 MB max) |
| net.ipv4.tcp_mem | 8388608 12582912 16777216 | Pamäťové stránky TCP: nízky, tlak, vysoký (64 GB systém) |
| net.core.netdev_max_backlog | 250000 | Maximálny počet paketov vo vstupnej fronte (10GbE+) |
| net.core.optmem_max | 65536 (64 kB) | Maximálna veľkosť pomocnej vyrovnávacej pamäte na zásuvku |
| net.ipv4.tcp_congestion_control | bbr | Použiť kontrolu preťaženia BBR (algoritmus Google) |
| net.ipv4.tcp_window_scaling | 1 | Povoliť zmenu mierky okna TCP (RFC 1323) |
| net.ipv4.tcp_timestamps | 1 | Povoľte časové pečiatky TCP pre lepší odhad RTT |
| net.ipv4.tcp_sack | 1 | Povoliť selektívne potvrdenie |
| net.ipv4.tcp_no_metrics_save | 1 | Zakázať ukladanie metrík TCP do vyrovnávacej pamäte |
Konfiguračná aplikácia pre Linux
Pridajte tieto nastavenia do/etc/sysctl.confalebo vytvorte nový súbor/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 Ring Buffer Tuning
# 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
- Pamäť na pripojenie:Každé pripojenie môže použiť až rmem_max + wmem_max (256 MB so 128 MB vyrovnávacej pamäte)
- Celkový vplyv na systém:1 000 pripojení × 256 MB = potenciálne využitie 256 GB
- Bezpečný odhad:Maximálny počet súbežných pripojení × 256 MB by nemal presiahnuť 50 % systémovej pamäte RAM
- Príklad:Server s kapacitou 64 GB by mal obmedziť maximálny počet pripojení na ~ 125 súbežných pripojení s vysokou priepustnosťou so 128 MB vyrovnávacej pamäte
- Odporúčanie pre servery s <16 GB RAM:Znížte vyrovnávacie pamäte na maximálne 16-32 MB a upravte tcp_mem proporcionálne
Ladenie vyrovnávacej pamäte systému Windows
Staršie nastavenia systému Windows (približne 2009 – Windows Vista/7/Server 2008)
| Parameter | Staršia hodnota (2009) | Poloha |
|---|---|---|
| TcpWindowSize | 65535 (64 kB) | Register: HKLM\System\CurrentControlSet\Services\Tcpip\Parameters |
| Tcp1323Opts | 0 (zakázané) | Zmena mierky okna je predvolene vypnutá |
| DefaultReceiveWindow | 8192 (8 kB) | Predvolené prijímacie okno |
| DefaultSendWindow | 8192 (8 kB) | Predvolené okno odoslania |
| GlobalMaxTcpWindowSize | 65535 (64 kB) | Maximálna veľkosť okna TCP |
| TcpNumConnections | 16777214 | Maximálny počet TCP spojení |
Aktuálne nastavenia systému Windows (Windows 10/11/Server 2019-2025)
Moderný Windows používaAutomatické ladenie prijímacieho oknafunkcia, ktorá dynamicky upravuje prijímacie vyrovnávacie pamäte na základe podmienok siete.
| Funkcia | Aktuálne odporúčané nastavenie | Popis |
|---|---|---|
| Úroveň automatického ladenia | normálne (alebo vysoko experimentálne pre 10GbE+) | Dynamické nastavenie prijímacieho okna |
| Škálovanie na strane príjmu (RSS) | povolené | Distribuujte sieťové spracovanie medzi CPU |
| Vyloženie komína | automatické (alebo vypnuté na moderných NIC) | Znižovanie zaťaženia TCP na hardvér NIC |
| NetDMA | zdravotne postihnutých | Priamy prístup do pamäte (zastarané) |
| Globálne parametre TCP | Pozrite si príkazy nižšie | Nastavenia TCP v celom systéme |
| Poskytovateľ preťaženia | CUBIC (alebo záloha NewReno) | Algoritmus riadenia preťaženia TCP |
Konfiguračné príkazy systému 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
Rozšírené nastavenia vyrovnávacej pamäte NIC (cez Správcu zariadení alebo 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
Vylepšenia registra (pokročilé – používajte opatrne)
# 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)
Ladenie vyrovnávacej pamäte macOS
Nastavenia starého systému macOS (približne 2009 – Mac OS X 10.5/10.6)
| Parameter | Staršia hodnota (2009) | Popis |
|---|---|---|
| kern.ipc.maxsockbuf | 262144 (256 kB) | Maximálna veľkosť vyrovnávacej pamäte soketu |
| net.inet.tcp.sendspace | 32768 (32 kB) | Predvolená vyrovnávacia pamäť na odosielanie TCP |
| net.inet.tcp.recvspace | 32768 (32 kB) | Predvolená prijímacia vyrovnávacia pamäť TCP |
| net.inet.tcp.autorcvbufmax | 131072 (128 kB) | Maximálna automaticky ladená prijímacia vyrovnávacia pamäť |
| net.inet.tcp.autosndbufmax | 131072 (128 kB) | Maximálna automaticky ladená vyrovnávacia pamäť odosielania |
| net.inet.tcp.rfc1323 | 0 (zakázané) | Škálovanie okna TCP |
Aktuálne nastavenia macOS (macOS 12-15 Monterey cez Sequoia)
| Parameter | Aktuálna odporúčaná hodnota | Popis |
|---|---|---|
| kern.ipc.maxsockbuf | 8388608 (8 MB) | Maximálna veľkosť vyrovnávacej pamäte soketu |
| net.inet.tcp.sendspace | 131072 (128 kB) | Predvolená vyrovnávacia pamäť na odosielanie TCP |
| net.inet.tcp.recvspace | 131072 (128 kB) | Predvolená prijímacia vyrovnávacia pamäť TCP |
| net.inet.tcp.autorcvbufmax | 16777216 (16 MB) | Maximálna automaticky ladená prijímacia vyrovnávacia pamäť |
| net.inet.tcp.autosndbufmax | 16777216 (16 MB) | Maximálna automaticky ladená vyrovnávacia pamäť odosielania |
| net.inet.tcp.rfc1323 | 1 (povolené) | Povoliť zmenu mierky okna TCP |
| net.inet.tcp.sack | 1 (povolené) | Povoliť selektívne potvrdenie |
| net.inet.tcp.mssdflt | 1440 | Predvolená maximálna veľkosť segmentu TCP |
| net.inet.tcp.delayed_ack | 3 | Oneskorené správanie ACK |
Konfiguračná aplikácia pre 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
Vytvorenie LaunchDaemona pre trvalé nastavenia
# 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
Testovanie výkonu a validácia
Nástroje na testovanie výkonu vyrovnávacej pamäte
iperf3 - Testovanie výkonu siete
# 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 - Zachytenie veľkosti okien 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'
Analýza Wireshark
Hľadajte tieto indikátory problémov s vyrovnávacou pamäťou:
- Správy TCP Zero Window
- Aktualizačné pakety TCP okna
- TCP okno Úplné upozornenia
- Vysoké retransmisné rýchlosti s nízkym RTT
Monitorovanie systému
# 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
Výpočet produktu oneskorenia šírky pásma (BDP).
Ak chcete určiť optimálne veľkosti vyrovnávacej pamäte pre vašu sieť, vypočítajte produkt oneskorenia šírky pásma:
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.
Odporúčania špecifické pre pracovnú záťaž
| Typ pracovného zaťaženia | Odporúčaná veľkosť vyrovnávacej pamäte | Kľúčové parametre |
|---|---|---|
| Webový server (nízka latencia) | 4-16 MB | Nižšie vyrovnávacie pamäte, viac pripojení, rýchla odozva |
| Databázový server | 16-32 MB | Mierne vyrovnávacie pamäte, konzistentná priepustnosť |
| Prenos súborov / Zálohovanie | 64 – 128 MB | Maximálne vyrovnávacie pamäte, vysoká priorita priepustnosti |
| Streamovanie videa | 32-64 MB | Veľké nárazníky, konzistentná rýchlosť dodávky |
| HPC / dátové centrum | 128 – 256 MB | Maximálne vyrovnávacie pamäte, špecializovaná kontrola preťaženia |
| Bezdrôtové / mobilné | 2-8 MB | Konzervatívne vyrovnávacie pamäte, manipulácia s variabilnou latenciou |
Časté chyby a úskalia
Chybám, ktorým sa treba vyhnúť
- Nadmerné ukladanie do vyrovnávacej pamäte:Príliš veľké vyrovnávacie pamäte môžu spôsobiť nafúknutie vyrovnávacej pamäte, čo zvyšuje latenciu
- Ignorovanie pamäťových obmedzení:Veľké vyrovnávacie pamäte sa násobia počtom spojení; server s 10 000 pripojeniami a 128 MB vyrovnávacej pamäte potrebuje 1,25 TB RAM
- Bezdôvodné vypnutie automatického ladenia:Moderné automatické ladenie OS je zvyčajne lepšie ako statické nastavenia
- Netestuje sa po zmenách:Vždy overte vylepšenia výkonu so skutočným pracovným zaťažením
- Zabudnutie vyrovnávacej pamäte NIC:Vyčerpanie kruhovej vyrovnávacej pamäte môže nastať nezávisle od vyrovnávacej pamäte soketu
- Nekonzistentné nastavenia:Klient a server by mali mať kompatibilné konfigurácie vyrovnávacej pamäte
- Ignorovanie kontroly preťaženia:BBR a CUBIC sú výrazne lepšie ako staršie algoritmy
Riešenie problémov Workflow
- Stanovte základnú líniu:Zmerajte aktuálny výkon pomocou iperf3 alebo podobných nástrojov
- Zachytiť pakety:Na identifikáciu správania TCP okna použite tcpdump/Wireshark
- Skontrolujte štatistiku systému:Hľadajte kvapky, vyčerpanie vyrovnávacej pamäte, opakované prenosy
- Vypočítajte BDP:Určte teoreticky optimálnu veľkosť vyrovnávacej pamäte
- Použiť prírastkové zmeny:Nemeňte všetko naraz
- Otestujte a overte:Zmerajte skutočné zlepšenie výkonu
- Monitorovať v priebehu času:Zabezpečte, aby nastavenia zostali optimálne pri premenlivom zaťažení
Referencie a ďalšie čítanie
- RFC 1323 - Rozšírenia TCP pre vysoký výkon (zmena veľkosti okna)
- RFC 2018 – možnosti selektívneho potvrdenia TCP
- RFC 6928 - Zvýšenie počiatočného okna TCP
- RFC 8312 - CUBIC algoritmus kontroly preťaženia
- BBR Congestion Control (Google) – https://research.google/pubs/pub45646/
- Dokumentácia k jadru Linux – networking/ip-sysctl.txt
- Windows TCP/IP Performance Tuning Guide (Microsoft)
- Sprievodca ladením siete ESnet – https://fasterdata.es.net/
Záver
Vyčerpanie vyrovnávacej pamäte je bežnou hlavnou príčinou problémov s výkonom, ktoré sa zdajú byť spojené so sieťou. Pochopením vývoja veľkosti vyrovnávacej pamäte z limitov 128 kB v roku 2009 na dnešné možnosti 128 MB môžu sieťoví inžinieri rýchlo identifikovať a vyriešiť tieto problémy.
Kľúčové poznatky:
- Moderné systémy potrebujú podstatne väčšie vyrovnávacie pamäte ako staršie konfigurácie (2009).
- Vždy vypočítajte BDP pre vaše špecifické podmienky siete
- Použiť funkcie automatického ladenia operačného systému, ak sú k dispozícii (Windows, moderný Linux)
- Monitorujte a testujte na overenie zmien
- Pri ladení zvážte požiadavky špecifické pre pracovné zaťaženie
Pamätajte: „Problém so sieťou“ odhalený analýzou paketov, ktorá ukazuje nulové okná TCP, je v skutočnosti problémom so zdrojmi hostiteľského systému. Správnym vyladením vyrovnávacej pamäte môžete tieto falošné diagnózy eliminovať a dosiahnuť optimálny výkon.
Posledná aktualizácia: 2. februára 2026
Autor: Technický tím Baud9600