System Buffer Tuning - TCP and Network Performance Optimization

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

Windowsi diagnostika

# 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-i diagnostika

# 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

Linuxi puhvri häälestamine

Linuxi pärandseaded (umbes 2009)

Parameeter Pärandväärtus (2009) Kirjeldus
net.core.rmem_default 124928 (122KB) Vastuvõtupesa vaikepuhvri suurus
net.core.rmem_max 131071 (128KB) Vastuvõtupesa puhvri maksimaalne suurus
net.core.wmem_default 124928 (122KB) Saatmispesa puhvri vaikesuurus
net.core.wmem_max 131071 (128KB) Maksimaalne saatmispesa puhvri suurus
net.ipv4.tcp_rmem 4096 87380 174760 TCP vastuvõtupuhver: min, vaikimisi, max (baitides)
net.ipv4.tcp_wmem 4096 16384 131072 TCP saatmispuhver: min, vaikimisi, max (baitides)
net.ipv4.tcp_mem 196608 262144 393216 TCP mälulehed: madal, rõhk, kõrge
net.core.netdev_max_backlog 1000 Maksimaalne pakettide arv sisendjärjekorras
net.core.optmem_max 10240 (10KB) Maksimaalne lisapuhvri suurus pesa kohta

Praegused Linuxi seaded (2025–2026)

Parameeter Praegune soovitatav väärtus Kirjeldus
net.core.rmem_default 16777216 (16 MB) Vastuvõtupesa vaikepuhvri suurus
net.core.rmem_max 134217728 (128 MB) Vastuvõtupesa puhvri maksimaalne suurus
net.core.wmem_default 16777216 (16 MB) Saatmispesa puhvri vaikesuurus
net.core.wmem_max 134217728 (128 MB) Maksimaalne saatmispesa puhvri suurus
net.ipv4.tcp_rmem 4096 87380 134217728 TCP vastuvõtupuhver: min, vaikimisi, max (max 128 MB)
net.ipv4.tcp_wmem 4096 65536 134217728 TCP saatmispuhver: min, vaikimisi, max (max 128 MB)
net.ipv4.tcp_mem 8388608 12582912 16777216 TCP-mälu lehed: madal, surve, kõrge (64 GB süsteem)
net.core.netdev_max_backlog 250000 Maksimaalne pakettide arv sisendjärjekorras (10 GbE+)
net.core.optmem_max 65536 (64KB) Maksimaalne lisapuhvri suurus pesa kohta
net.ipv4.tcp_congestion_control bbr Kasutage BBR-i ummikute kontrolli (Google'i algoritm)
net.ipv4.tcp_window_scaling 1 TCP akna skaleerimise lubamine (RFC 1323)
net.ipv4.tcp_timestamps 1 Parema RTT hinnangu saamiseks lubage TCP ajatemplid
net.ipv4.tcp_sack 1 Luba valikuline kinnitus
net.ipv4.tcp_no_metrics_save 1 Keelake TCP mõõdikute vahemällu salvestamine

Linuxi konfiguratsioonirakendus

Lisage need seaded/etc/sysctl.confvõi looge uus fail/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-rõngapuhvri häälestamine

# 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
Kriitiline hoiatus – mälu tarbimine:Tcp_mem väärtused on mälulehtedel (tavaliselt 4KB). Suured puhvri suurused võivad põhjustada tõsist mälusurvet:
  • Ühendusepõhine mälu:Iga ühendus võib kasutada kuni rmem_max + wmem_max (256 MB koos 128 MB puhvriga)
  • Süsteemi kogumõju:1000 ühendust × 256 MB = 256 GB potentsiaalne kasutus
  • Ohutu hinnang:Samaaegsete ühenduste maksimaalne maht × 256 MB ei tohiks ületada 50% süsteemi RAM-ist
  • Näide:64 GB server peaks piirama maksimaalset ühendust ~ 125 samaaegse suure läbilaskevõimega ühendusega 128 MB puhvriga
  • Soovitus serveritele, millel on <16 GB muutmälu:Vähendage puhvreid maksimaalselt 16–32 MB-ni ja kohandage tcp_mem proportsionaalselt

Windowsi puhvri häälestamine

Windowsi pärandsätted (umbes 2009 – Windows Vista/7/Server 2008)

Parameeter Pärandväärtus (2009) Asukoht
TcpWindowSize 65535 (64KB) Register: HKLM\System\CurrentControlSet\Services\Tcpip\Parameters
Tcp1323Opts 0 (keelatud) Akna skaleerimine on vaikimisi keelatud
DefaultReceiveWindow 8192 (8KB) Vaikimisi vastuvõtuaken
DefaultSend Window 8192 (8KB) Vaikimisi saatmise aken
GlobalMaxTcpWindowSize 65535 (64KB) Maksimaalne TCP akna suurus
TcpNumConnections 16777214 Maksimaalne TCP-ühendus

Praegused Windowsi sätted (Windows 10/11/Server 2019–2025)

Kaasaegne Windows kasutabSaate akna automaatse häälestusefunktsioon, mis kohandab dünaamiliselt vastuvõtupuhvreid vastavalt võrgutingimustele.

Funktsioon Praegune soovitatav seade Kirjeldus
Automaatse häälestamise tase tavaline (või väga eksperimentaalne 10 GbE+ jaoks) Dünaamiline vastuvõtuakna reguleerimine
Vastuvõtupoole skaleerimine (RSS) lubatud Jaotage võrgutöötlus protsessorite vahel
Korstna mahalaadimine automaatne (või tänapäevastel NIC-idel keelatud) TCP mahalaadimine NIC-riistvarasse
NetDMA puudega Otsene juurdepääs mälule (aegunud)
TCP globaalsed parameetrid Vaadake allolevaid käske Süsteemiülesed TCP-sätted
Ummikute pakkuja CUBIC (või NewReno varu) TCP ülekoormuse kontrolli algoritm

Windowsi konfiguratsioonikäsud

# 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

NIC-puhvri täpsemad sätted (seadmehalduri või PowerShelli kaudu)

# 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

Registri muudatused (täiustatud – kasutage ettevaatusega)

# 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)
Hoiatus:Kaasaegses Windowsis (10/11/Server 2019+) vältige registri käsitsi muutmist, välja arvatud juhul, kui automaatne häälestamine põhjustab probleeme. Automaatse häälestamise algoritmid on üldiselt paremad kui staatilised sätted.

macOS-i puhvri häälestamine

Pärand macOS-i seaded (umbes 2009 – Mac OS X 10.5/10.6)

Parameeter Pärandväärtus (2009) Kirjeldus
kern.ipc.maxsockbuf 262144 (256 KB) Pesapuhvri maksimaalne suurus
net.inet.tcp.sendspace 32768 (32KB) Vaikimisi TCP saatmispuhver
net.inet.tcp.recvspace 32768 (32KB) Vaikimisi TCP vastuvõtupuhver
net.inet.tcp.autorcvbufmax 131072 (128KB) Maksimaalne automaatselt häälestatud vastuvõtupuhver
net.inet.tcp.autosndbufmax 131072 (128KB) Maksimaalne automaatselt häälestatud saatmispuhver
net.inet.tcp.rfc1323 0 (keelatud) TCP akna skaleerimine

Praegused macOS-i seaded (macOS 12–15 Monterey kuni Sequoia)

Parameeter Praegune soovitatav väärtus Kirjeldus
kern.ipc.maxsockbuf 8388608 (8 MB) Pesapuhvri maksimaalne suurus
net.inet.tcp.sendspace 131072 (128KB) Vaikimisi TCP saatmispuhver
net.inet.tcp.recvspace 131072 (128KB) Vaikimisi TCP vastuvõtupuhver
net.inet.tcp.autorcvbufmax 16777216 (16 MB) Maksimaalne automaatselt häälestatud vastuvõtupuhver
net.inet.tcp.autosndbufmax 16777216 (16 MB) Maksimaalne automaatselt häälestatud saatmispuhver
net.inet.tcp.rfc1323 1 (lubatud) TCP akna skaleerimise lubamine
net.inet.tcp.sack 1 (lubatud) Luba valikuline kinnitus
net.inet.tcp.mssdflt 1440 Vaikimisi TCP maksimaalne segmendi suurus
net.inet.tcp.delayed_ack 3 Hilinenud ACK käitumine

macOS-i konfiguratsioonirakendus

# 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

LaunchDaemoni loomine püsivate sätete jaoks

# 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
Hoiatus:macOS Ventural (13) ja uuematel versioonidel on süsteemi terviklikkuse kaitse (SIP) piirangud. Mõned kerneli parameetrid ei pruugi olla muudetavad isegi sudo abil. Testige seadeid teie konkreetses keskkonnas.

Toimivuse testimine ja valideerimine

Vahendid puhvri jõudluse testimiseks

iperf3 – võrgu jõudluse testimine

# 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 akna suuruste jäädvustamine

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

Wiresharki analüüs

Otsige järgmisi puhvriprobleemide näitajaid:

  • TCP Zero Window teated
  • TCP akna värskenduspaketid
  • TCP-aken täielikud teatised
  • Kõrge taasedastuskiirus madala RTT-ga

Süsteemi jälgimine

# 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

Bandwidth-Delay toote (BDP) arvutamine

Võrgu optimaalse puhvri suuruse määramiseks arvutage ribalaiuse viivitusprodukt:

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.

Töökoormusepõhised soovitused

Töökoormuse tüüp Soovitatav puhvri suurus Põhiparameetrid
Veebiserver (madal latentsusaeg) 4-16 MB Madalamad puhvrid, rohkem ühendusi, kiire reageerimine
Andmebaasi server 16-32 MB Mõõdukad puhvrid, ühtlane läbilaskevõime
Failiedastus / varundamine 64-128 MB Maksimaalsed puhvrid, kõrge läbilaskevõime prioriteet
Video voogesitus 32-64 MB Suured puhvrid, ühtlane tarnekiirus
HPC / andmekeskus 128-256 MB Maksimaalsed puhvrid, spetsiaalne ummikute kontroll
Juhtmeta / mobiil 2-8 MB Konservatiivsed puhvrid, muutuva latentsusaja käsitlemine

Levinud vead ja lõksud

Vead, mida vältida

  • Ülepuhverdamine:Liiga suured puhvrid võivad põhjustada puhvri paisumist, suurendades latentsust
  • Mälupiirangute ignoreerimine:Suured puhvrid korrutatakse ühenduste arvuga; 10 000 ühenduse ja 128 MB puhvriga server vajab 1,25 TB muutmälu
  • Automaatse häälestamise keelamine põhjuseta:Kaasaegne OS-i automaathäälestus on tavaliselt parem kui staatilised sätted
  • Pärast muudatusi ei testita:Kinnitage jõudluse täiustused alati tegeliku töökoormusega
  • NIC-puhvrite unustamine:Rõngapuhvri ammendumine võib toimuda pesapuhvritest sõltumatult
  • Ebajärjekindlad seaded:Kliendil ja serveril peavad olema ühilduvad puhvri konfiguratsioonid
  • Ummikute kontrolli ignoreerimine:BBR ja CUBIC on oluliselt paremad kui vanemad algoritmid

Töövoo tõrkeotsing

  1. Määrake lähtejoon:Mõõtke voolu jõudlust iperf3 või sarnaste tööriistadega
  2. Püüdke paketid:Kasutage TCP-akna käitumise tuvastamiseks tcpdump/Wiresharki
  3. Kontrollige süsteemi statistikat:Otsige kukkumisi, puhvri ammendumist, kordusülekandeid
  4. Arvutage BDP:Määrake teoreetiliselt optimaalsed puhvri suurused
  5. Rakendage järkjärgulisi muudatusi:Ärge muutke kõike korraga
  6. Testige ja kinnitage:Mõõtke tegelikku jõudluse paranemist
  7. Jälgige aja jooksul:Veenduge, et seaded jääksid erinevate koormuste korral optimaalseteks

Viited ja lisalugemine

  • RFC 1323 – TCP laiendused suure jõudlusega (akna skaleerimine)
  • RFC 2018 – TCP valikulise kinnituse valikud
  • RFC 6928 – TCP algse akna suurendamine
  • RFC 8312 – CUBIC ummikukontrolli algoritm
  • BBR ummikukontroll (Google) – https://research.google/pubs/pub45646/
  • Linuxi tuuma dokumentatsioon – võrgundus/ip-sysctl.txt
  • Windowsi TCP/IP jõudluse häälestamise juhend (Microsoft)
  • ESneti võrgu häälestamise juhend – https://fasterdata.es.net/

Järeldus

Puhvri ammendumine on jõudlusprobleemide sagedane algpõhjus, mis näivad olevat võrguga seotud. Mõistes puhvri suuruse arengut alates 2009. aasta 128 KB piirangutest kuni tänapäevaste 128 MB võimalusteni, saavad võrguinsenerid need probleemid kiiresti tuvastada ja lahendada.

Peamised pakkumised:

  • Kaasaegsed süsteemid vajavad oluliselt suuremaid puhvreid kui pärandkonfiguratsioonid (2009).
  • Arvutage BDP alati oma konkreetsete võrgutingimuste jaoks
  • Kasutage OS-i automaatse häälestamise funktsioone, kui need on saadaval (Windows, kaasaegne Linux)
  • Jälgige ja testige muudatuste kinnitamiseks
  • Häälestamisel arvestage töökoormuse spetsiifilisi nõudeid

Pidage meeles: "võrguprobleem", mis ilmnes paketianalüüsis, mis näitab TCP nullakende olemasolu, on tegelikult hostsüsteemi ressursiprobleem. Õige puhvri häälestamisega saate need valediagnoosid kõrvaldada ja saavutada optimaalse jõudluse.


Viimati värskendatud: 2. veebruar 2026

Autor: Baud9600 tehniline meeskond