Ladenie vyrovnávacej pamäte systému - TCP a optimalizácia výkonu siete

# 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"

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
Kritické varovanie – spotreba pamäte:Hodnoty tcp_mem sú na stránkach pamäte (zvyčajne 4 kB). Veľké veľkosti vyrovnávacej pamäte môžu spôsobiť silný tlak na pamäť:
  • 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)
POZOR:V modernom systéme Windows (10/11/Server 2019+) sa vyhnite manuálnym úpravám registra, pokiaľ problémy nespôsobuje automatické ladenie. Algoritmy automatického ladenia sú vo všeobecnosti lepšie ako statické nastavenia.

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
POZOR:macOS Ventura (13) a novšie verzie majú obmedzenia System Integrity Protection (SIP). Niektoré parametre jadra nemusia byť upraviteľné ani pomocou sudo. Otestujte nastavenia vo svojom špecifickom prostredí.

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

  1. Stanovte základnú líniu:Zmerajte aktuálny výkon pomocou iperf3 alebo podobných nástrojov
  2. Zachytiť pakety:Na identifikáciu správania TCP okna použite tcpdump/Wireshark
  3. Skontrolujte štatistiku systému:Hľadajte kvapky, vyčerpanie vyrovnávacej pamäte, opakované prenosy
  4. Vypočítajte BDP:Určte teoreticky optimálnu veľkosť vyrovnávacej pamäte
  5. Použiť prírastkové zmeny:Nemeňte všetko naraz
  6. Otestujte a overte:Zmerajte skutočné zlepšenie výkonu
  7. 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