System Buffer Tuning - TCP and Network Performance Optimization
Vindoza Diagnozo
# 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-Diagnozo
# 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
Linukso-Buffer-Agordado
Heredaj Linukso-Agordoj (ĉirkaŭ 2009)
| Parametro | Heredaĵo-valoro (2009) | Priskribo |
|---|---|---|
| net.core.rmem_default | 124928 (122KB) | Defaŭlta riceva bufrograndeco |
| net.core.rmem_max | 131071 (128KB) | Maksimuma riceva bufrograndeco |
| net.core.wmem_default | 124928 (122KB) | Defaŭlta sendu socket bufrograndeco |
| net.core.wmem_max | 131071 (128KB) | Maksimuma sendo-bufrgrandeco |
| net.ipv4.tcp_rmem | 4096 87380 174760 | TCP-riceva bufro: min, defaŭlta, maksimumo (en bajtoj) |
| net.ipv4.tcp_wmem | 4096 16384 131072 | TCP-senda bufro: min, defaŭlta, maksimumo (en bajtoj) |
| net.ipv4.tcp_mem | 196608 262144 393216 | TCP-memorpaĝoj: malalta, premo, alta |
| net.core.netdev_max_backlog | 1000 | Maksimumaj pakoj en enirvico |
| net.core.optmem_max | 10240 (10KB) | Maksimuma helpa bufrograndeco per ingo |
Nunaj Linuksaj Agordoj (2025-2026)
| Parametro | Nuna Rekomendita Valoro | Priskribo |
|---|---|---|
| net.core.rmem_default | 16777216 (16MB) | Defaŭlta riceva bufrograndeco |
| net.core.rmem_max | 134217728 (128MB) | Maksimuma riceva bufrograndeco |
| net.core.wmem_default | 16777216 (16MB) | Defaŭlta sendo-bufrgrando |
| net.core.wmem_max | 134217728 (128MB) | Maksimuma sendo-bufrgrandeco |
| net.ipv4.tcp_rmem | 4096 87380 134217728 | TCP-riceva bufro: min, defaŭlta, maksimumo (128MB maksimume) |
| net.ipv4.tcp_wmem | 4096 65536 134217728 | TCP-senda bufro: min, defaŭlta, maksimumo (128MB maksimume) |
| net.ipv4.tcp_mem | 8388608 12582912 16777216 | TCP-memorpaĝoj: malalta, premo, alta (64GB-sistemo) |
| net.core.netdev_max_backlog | 250000 | Maksimumaj pakoj en enirvico (10GbE+) |
| net.core.optmem_max | 65536 (64KB) | Maksimuma helpa bufrograndeco per ingo |
| net.ipv4.tcp_kongestion_control | bbr | Uzu BBR-ŝtopiĝokontrolon (la algoritmo de Google) |
| net.ipv4.tcp_window_scaling | 1 | Ebligu TCP-fenestran skaladon (RFC 1323) |
| net.ipv4.tcp_timestamps | 1 | Ebligu TCP-tempomarkojn por pli bona RTT-takso |
| net.ipv4.tcp_sack | 1 | Ebligu Selekteman Akonon |
| net.ipv4.tcp_no_metrics_save | 1 | Malebligu kaŝmemoron de TCP-metrikoj |
Linuksa Agorda Apliko
Aldonu ĉi tiujn agordojn al/etc/sysctl.confaŭ krei novan dosieron/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
Agordado de NIC Ring Buffer
# 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
- Po-koneksa memoro:Ĉiu konekto povas uzi ĝis rmem_max + wmem_max (256MB kun 128MB bufroj)
- Tuta sistema efiko:1,000 konektoj × 256MB = 256GB ebla uzado
- Sekura takso:Maksimumaj samtempaj konektoj × 256MB ne devus superi 50% de la sistema RAM
- Ekzemplo:64GB-servilo devus limigi maksimumajn konektojn al ~125 samtempaj altproduktaj ligoj kun 128MB-bufroj
- Rekomendo por serviloj kun <16GB RAM:Reduktu bufrojn al 16-32MB maksimume kaj ĝustigu tcp_mem proporcie
Vindoza Buffer-Agordado
Heredaj Vindozaj Agordoj (Ĉirkaŭ 2009 - Vindozo Vista/7/Servilo 2008)
| Parametro | Heredaĵo-valoro (2009) | Loko |
|---|---|---|
| TcpWindowSize | 65535 (64KB) | Registro: HKLM\System\CurrentControlSet\Services\Tcpip\Parameters |
| Tcp1323Opts | 0 (malfunkciigita) | Fenestra skalado malebligita defaŭlte |
| DefaultReceiveWindow | 8192 (8KB) | Defaŭlta riceva fenestro |
| DefaultSendWindow | 8192 (8KB) | Defaŭlta senda fenestro |
| GlobalMaxTcpWindowSize | 65535 (64KB) | Maksimuma TCP-fenestra grandeco |
| TcpNumConnections | 16777214 | Maksimumaj TCP-konektoj |
Nunaj Vindozaj Agordoj (Vindozo 10/11/Servilo 2019-2025)
Moderna Vindozo uzas laRicevu Fenestran Aŭtomatan Agordontrajto, kiu dinamike ĝustigas ricevi bufrojn surbaze de retaj kondiĉoj.
| Karakterizaĵo | Nuna Rekomendita Agordo | Priskribo |
|---|---|---|
| Aŭtomata Agorda Nivelo | normala (aŭ tre eksperimenta por 10GbE+) | Dinamika riceva fenestra ĝustigo |
| Ricevanta Flanka Skalado (RSS) | ebligita | Distribuu retan prilaboradon tra CPUoj |
| Kamentubo Elŝuto | aŭtomata (aŭ malŝaltita sur modernaj NICs) | TCP-elŝuto al NIC-aparataro |
| NetDMA | malfunkciigita | Rekta Memoraliro (malrekomendita) |
| TCP Tutmondaj Parametroj | Vidu komandojn sube | Tutsistemaj TCP-agordoj |
| Kongesta Provizanto | CUBIC (aŭ NewReno-returniĝo) | Algoritmo de kontrolo de ŝtopiĝo de TCP |
Vindozaj Agordaj Komandoj
# 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
Altnivelaj NIC-Buffer-Agordoj (per Aparato-Administranto aŭ 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
Registraj Tweaks (Altnivelaj - Uzu kun Singardemo)
# 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)
Agordo de Buffer de macOS
Heredaj agordoj de macOS (ĉirkaŭ 2009 - Mac OS X 10.5/10.6)
| Parametro | Heredaĵo-valoro (2009) | Priskribo |
|---|---|---|
| kern.ipc.maxsockbuf | 262144 (256KB) | Maksimuma inga bufrograndeco |
| net.inet.tcp.sendspace | 32768 (32KB) | Defaŭlta TCP senda bufro |
| net.inet.tcp.recvspace | 32768 (32KB) | Defaŭlta TCP-riceva bufro |
| net.inet.tcp.autorcvbufmax | 131072 (128KB) | Maksimuma aŭtomate agordita riceva bufro |
| net.inet.tcp.autosndbufmax | 131072 (128KB) | Maksimuma aŭtomate agordita senda bufro |
| net.inet.tcp.rfc1323 | 0 (malfunkciigita) | TCP-fenestra skalo |
Nunaj macOS-Agordoj (macOS 12-15 Monterey tra Sequoia)
| Parametro | Nuna Rekomendita Valoro | Priskribo |
|---|---|---|
| kern.ipc.maxsockbuf | 8388608 (8MB) | Maksimuma inga bufrograndeco |
| net.inet.tcp.sendspace | 131072 (128KB) | Defaŭlta TCP senda bufro |
| net.inet.tcp.recvspace | 131072 (128KB) | Defaŭlta TCP-riceva bufro |
| net.inet.tcp.autorcvbufmax | 16777216 (16MB) | Maksimuma aŭtomate agordita riceva bufro |
| net.inet.tcp.autosndbufmax | 16777216 (16MB) | Maksimuma aŭtomate agordita senda bufro |
| net.inet.tcp.rfc1323 | 1 (aktivigita) | Ebligu TCP-fenestran skaladon |
| net.inet.tcp.sako | 1 (aktivigita) | Ebligu Selekteman Akonon |
| net.inet.tcp.mssdflt | 1440 | Defaŭlta TCP Maksimuma Segmenta Grandeco |
| net.inet.tcp.delayed_ack | 3 | Malfrua ACK-konduto |
macOS-Agorda Apliko
# 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
Kreante LaunchDaemon por Konstantaj Agordoj
# 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
Testado de Efikeco kaj Valido
Iloj por Testado de Buffer-Efikeco
iperf3 - Testado de Reto-Efikeco
# 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 - Kaptu TCP-fenestrograndecojn
# 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 Analizo
Serĉu ĉi tiujn indikilojn de bufroproblemoj:
- Mesaĝoj de TCP Zero Window
- TCP Fenestro Ĝisdatigu pakojn
- TCP Fenestro Plenaj sciigoj
- Altaj retranssendotarifoj kun malalta RTT
Sistema Monitorado
# 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
Kalkulo de Bandwidth-Delay Product (BDP).
Por determini optimumajn bufrograndojn por via reto, kalkulu la Bandwidth-Prokrastan Produkton:
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.
Laborŝarĝo-Specifikaj Rekomendoj
| Tipo de Laborŝarĝo | Rekomendita Buffer Grandeco | Ŝlosilaj Parametroj |
|---|---|---|
| Reteja Servilo (Malalta latenco) | 4-16 MB | Pli malaltaj bufroj, pli da ligoj, rapida respondo |
| Datumbaza Servilo | 16-32 MB | Moderaj bufroj, konsekvenca trafluo |
| Dosiera Transdono / Rezervo | 64-128 MB | Maksimumaj bufroj, alta traira prioritato |
| Video Streaming | 32-64 MB | Grandaj bufroj, konsekvenca liverrapideco |
| HPC/Datumcentro | 128-256 MB | Maksimumaj bufroj, speciala kongesta kontrolo |
| Sendrata / Poŝtelefono | 2-8 MB | Konservativaj bufroj, ŝanĝiĝema latencia uzado |
Oftaj Eraroj kaj Kapabloj
Eraroj por Eviti
- Troa bufro:Troe grandaj bufroj povas kaŭzi bufroŝveladon, pliigante latentecon
- Ignorante memorlimojn:Grandaj bufroj multiĝas per konektokalkulo; servilo kun 10,000 konektoj kaj 128MB-bufroj bezonas 1.25TB da RAM
- Malŝalti aŭtomatan agordon sen kialo:Moderna OS-aŭtomatagordado estas kutime pli bona ol senmovaj agordoj
- Ne testado post ŝanĝoj:Ĉiam validigu rendimentajn plibonigojn kun realaj laborŝarĝoj
- Forgesante NIC-bufrojn:Ringbufrelĉerpiĝo povas okazi sendepende de ingobufroj
- Malkonsekvencaj agordoj:Kliento kaj servilo havu kongruajn bufrajn agordojn
- Ignorante obstrukciĝon:BBR kaj CUBIC estas signife pli bonaj ol pli malnovaj algoritmoj
Solvanta Laborfluo
- Establi bazlinion:Mezuru aktualan rendimenton per iperf3 aŭ similaj iloj
- Kapti pakojn:Uzu tcpdump/Wireshark por identigi TCP-fenestran konduton
- Kontrolu sistemajn statistikojn:Serĉu gutojn, bufroelĉerpiĝon, retransmisiojn
- Kalkuli BDP:Determini teorie optimumajn bufrograndecojn
- Apliki pliigajn ŝanĝojn:Ne ŝanĝu ĉion samtempe
- Testu kaj validu:Mezuru realan agado-plibonigon
- Monitoro laŭlonge de la tempo:Certigu, ke agordoj restas optimumaj sub diversaj ŝarĝoj
Referencoj kaj Plia Legado
- RFC 1323 - TCP-Etendaĵoj por Alta Efikeco (Fenestra Skalado)
- RFC 2018 - TCP-Selektemaj Akcepto-Ebloj
- RFC 6928 - Pliigante la Komencan Fenestron de TCP
- RFC 8312 - KUBIKA Kongesta Kontrola Algoritmo
- BBR Kongesta Kontrolo (Google) - https://research.google/pubs/pub45646/
- Linukso Kernel Dokumentado - networking/ip-sysctl.txt
- Vindoza TCP/IP-Agorda Gvidilo (Mikrosofto)
- ESnet Network Agordigvidilo - https://fasterdata.es.net/
Konkludo
Bufrelĉerpiĝo estas ofta radika kaŭzo de rendimentaj problemoj, kiuj ŝajnas esti retaj. Komprenante la evoluon de bufrograndeco de la 128KB-limoj de 2009 ĝis la hodiaŭaj 128MB-kapabloj, retaj inĝenieroj povas rapide identigi kaj solvi ĉi tiujn problemojn.
Ŝlosilaĵoj:
- Modernaj sistemoj bezonas signife pli grandajn bufrojn ol heredaj (2009) konfiguracioj
- Ĉiam kalkulu BDP por viaj specifaj retaj kondiĉoj
- Uzu aŭtomatajn agordajn funkciojn de OS kiam disponeblas (Vindozo, moderna Linukso)
- Monitoru kaj provu por validigi ŝanĝojn
- Konsideru laborŝarĝajn specifajn postulojn dum agordado
Memoru: "retoproblemo" malkaŝita per paka analizo por montri TCP-nulajn fenestrojn fakte estas mastro-sistema rimedproblemo. Kun taŭga bufro-agordado, vi povas forigi ĉi tiujn falsajn diagnozojn kaj atingi optimuman rendimenton.
Laste Ĝisdatigita: Februaro 2, 2026
Aŭtoro: Baud9600 Teknika Teamo