System Buffer Tuning - TCP and Network Performance Optimization
Afinament de la memòria intermèdia del sistema: L' ocult de Culprit darrere de " Problemes en xarxa"
Resum executiu
Els enginyers de xarxa sovint troben situacions en les quals el procés de finestres TCP o l' aplicació es culpa a la infraestructura de xarxa. Després de realitzar captures de paquet extensos, tcpdumps, i anàlisis de xarxa, sovint es descobreix el autèntic coll embotellat: s'ha acabat la memòria cau de la interfície NIC (Network Card) o de l' SO en sistemes client o servidor.
Aquest article proporciona les configuracions de la memòria intermèdia (circa 2009) i l' actual (2025- 2626) per al Linux, Windows, i MarcOS, juntament amb tècniques diagnòstics per identificar el creixement de la memòria intermèdia abans que sigui un problema crític.
Symptomes comuns de l' Exhatus de memòria intermèdia
- Esdeveniments de finestra TCP Zero en captures de paquet
- L'alta taxa de remissió, malgrat el retard de la baixa xarxa
- Aplicació a través de l' amplada de banda disponible
- degradació de rendiment sota càrrega que millora quan es disminueix la càrrega
- Funcionament inconsistència a través de configuracions de maquinari similars
- Errors de sòcol o missatges "No disponibles temporalment"
Entendre el problema
L' escalat de la finestra TCP Machnisme
TCP usa un mecanisme de control de flux on el receptor anuncia una mida de "mida de finestra" que indica quantes dades poden acceptar. Quan s' omple la memòria intermèdia del sistema, aquesta finestra s'encongeix a zero, obliga al remitent a esperar. Això apareixerà com un problema de xarxa, però en realitat és un problema de recurs amfitrió.
On són els Buffers
- Buffer de sòcol (SO SNDBUF/ SO RCVBUF): Enviat per sòcol i rep la memòria intermèdia
- Memòria intermèdia de finestres TCP: Mida màxima de la finestra TCP per a les connexions
- Memòria intermèdia de dispositius de xarxa: Memòria intermèdia per a l' anell de paquet
- Memòria de tot el sistema: Memòria global assignada a la xarxa
Ordres Diagnòstics
Diagnòstics Linux
# Check current TCP buffer settings sysctl net.ipv4.tcp_rmem sysctl net.ipv4.tcp_wmem sysctl net.core.rmem_max sysctl net.core.wmem_max # 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"
Diagnòstics 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"
Diagnòstics 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
Ajust de memòria intermèdia del Linux
Arranjament del Linux heretat (Circa 2009)
| Paràmetre | Valor heretat (2009) | Descripció |
|---|---|---|
| net. corre. rem default | 124928 (122KB) | Per omissió rebeu la mida de la memòria intermèdia del sòcol |
| net.core.rm max | 131071 (128KB) | S' ha obtingut la mida màxima de la memòria intermèdia del sòcol |
| net. core. wem default | 124928 (122KB) | Mida per omissió de la memòria intermèdia del sòcol |
| net. core. wem max | 131071 (128KB) | Mida màxima d' enviament de la memòria intermèdia del sòcol |
| net.ipv4. tcp rmem | 4096 87380 174760 | TCP rep memòria intermèdia: min, predeterminat, max (en bytes) |
| net.ipv4. tcp wmem | 4096 1384 131072 | Memòria intermèdia TCP d' enviament: min, predeterminat, max (en bytes) |
| net.ipv4. tcp mem | 196608 262144 393216 | Pàgines de memòria TCP: baixa, pressió, alta |
| net. corre.netdev max log | 1000 | Nombre màxim de paquets a la cua d' entrada |
| net.core.opmem max | 10240 (10KB) | Mida màxima de la memòria intermèdia auxiliar per sòcol |
Arranjament actual del Linux (2025- 2026)
| Parameter | Valor recomanat actual | Description |
|---|---|---|
| net.core.rmem_default | 16777216 (16MB) | Default receive socket buffer size |
| net.core.rmem_max | 134217728 (128MB) | Maximum receive socket buffer size |
| net.core.wmem_default | 16777216 (16MB) | Default send socket buffer size |
| net.core.wmem_max | 134217728 (128MB) | Maximum send socket buffer size |
| net.ipv4.tcp_rmem | 4096 87380 134217728 | TCP rep memòria intermèdia: min, per omissió, max (128MB max) |
| net.ipv4.tcp_wmem | 4096 65536 134217728 | Memòria intermèdia TCP d' enviament: min, per defecte, max (128MB màx) |
| net.ipv4.tcp_mem | 8388608 12582912 16777216 | Pàgines de memòria TCP: baixa, pressió, sistema alt (64GB) |
| net.core.netdev_max_backlog | 250000 | Paquets màxims a la cua d' entrada (10GbE+) |
| net.core.optmem_max | 65536 (64KB) | Maximum ancillary buffer size per socket |
| net.ipv4. tcp congestió control | bbrunit description in lists | Usa el control BBR congestió (algoritme del Google) |
| net.ipv4. tcp window scaling | 1 | Habilita l' escalat de la finestra TCP (RFC 1323) |
| net.ipv4. tcp timestamps | 1 | Habilita les marques de temps TCP per a una millor estimació del RTT |
| net.ipv4. tcp ack | 1 | Habilita l' achodització racional |
| net. ipv4. tcp no mimes save | 1 | Deshabilita la cau de mètriques TCP |
Aplicació de configuració del Linux
Afegeix aquests paràmetres a /etc/sysctl.conf o crea un nou fitxer /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
Ajust de l' anell de memòria intermèdia NIC
# 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
- Memòria perconnexió: Cada connexió pot usar fins a rmem max + wmem max (256MB amb 128MB de memòria intermèdia)
- Impacte total del sistema: 1000 connexions × 256MB = 256GB Ús potencial
- Millora estimació: Les connexions Max concurrents × 256MB no haurien d' excedir el 50% de la RAM del sistema
- Exemple: Un servidor 64GB hauria de limitar connexions màximes a ~125 contàncies d' alt rendiment amb 128MB
- Recomanació per a servidors amb <16GB RAM: Redueix la memòria intermèdia a 1632MB max i ajusteu tcp mem proporcionalment
Ajust de la memòria intermèdia del Windows
Arranjament de Windows heretat (Circa 2009 - Windows Vista/7/ Server 2008)
| Parameter | Legacy Value (2009) | Localització |
|---|---|---|
| TcpWindowSize | 65535 (64KB) | Registory: HKLM\ Sistema\ ControlActual\ Servei\ Tcpip\ Paràmetres |
| Tcp1323Opts | 0 (deshabilitat) | Escalat de finestra deshabilitat per omissió |
| FinestraRecessiva per defecte | 8192 (8KB) | La finestra per omissió rep |
| Finestra per defecte | 8192 (8KB) | Finestra d' enviament per omissió |
| Mida globalMaxTcpWindow | 65535 (64KB) | Mida màxima de la finestra TCP |
| Connexiós TcpNum | 16777214 | Màxim de connexions TCP |
Arranjament de Windows actual (Windows 10/11/Server 2019- 25)
Les finestres modernes usen les Rebeu automàticament la finestra característica, que ajusta dinàmicament reben memòries cau basades en condicions de xarxa.
| Característica | Configuració recomanada actual | Description |
|---|---|---|
| Nivell d' autoengegament | normal (o molt experimental per 10GbE+) | Ajust de la finestra dinàmic |
| Escalat de recepció (RSSS) | habilitat | Distribueix el processament de xarxa a través de CPU |
| Carregat Chimney | Automàtic (o deshabilitat en els NIC moderns) | Càrrega TCP al maquinari NIC |
| NetDMA | deshabilitat | Accés de memòria directa (desaconsellat) |
| Paràmetres globals TCP | Mireu les ordres de sota | Paràmetres TCP de tot el sistema |
| Proveïdor CongestióName | CUBIC (o una nova alternativa) | Algorisme de control de la congestió TCP |
Ordres de configuració de 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
Arranjament avançat de Buffer (via Gestor de dispositius o 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
Registary Tweaks (avançat - Feu servir amb precaució)
# 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)
Ajust de la memòria intermèdia MacOS
Arranjament de macOS heretat (Circa 2009 - Mac OS X 10. 5/ 10. 6)
| Parameter | Legacy Value (2009) | Description |
|---|---|---|
| kern.ipc.maxsocuf | 262144 (256KB) | Mida màxima de la memòria intermèdia del sòcol |
| net.inet. tcp. sendspace | 32768 (32KB) | Memòria intermèdia d' enviament TCP per omissió |
| net.inet. tcp.recvspace | 32768 (32KB) | El TCP per omissió rep la memòria intermèdia |
| net.int. tcp. autorcvbumax | 131072 (128KB) | Obtén la memòria intermèdia màxima automàtica |
| net.int. tcp. autosndbumax | 131072 (128KB) | Memòria intermèdia màxima d' enviament automàtica |
| net.inet. tcp. rfc1323 | 0 (disabled) | Escalat de la finestra TCP |
Arranjament actual de macOS (macOS 1215 Montey via Sequia)
| Parameter | Current Recommended Value | Description |
|---|---|---|
| kern.ipc.maxsockbuf | 838608 (8MB) | Maximum socket buffer size |
| net.inet.tcp.sendspace | 131072 (128KB) | Default TCP send buffer |
| net.inet.tcp.recvspace | 131072 (128KB) | Default TCP receive buffer |
| net.inet.tcp.autorcvbufmax | 16777216 (16MB) | Maximum auto-tuned receive buffer |
| net.inet.tcp.autosndbufmax | 16777216 (16MB) | Maximum auto-tuned send buffer |
| net.inet.tcp.rfc1323 | 1 (activat) | Habilita l' escalat de la finestra TCP |
| net.inet. tcp. seck | 1 (enabled) | Enable Selective Acknowledgment |
| net.inet. tcp.msdflt | 1440 | Mida màxima del segment TCP per omissió |
| net.inet. tcp. delayed ack | 3 | Comportament retardat del ACK |
Aplicació de configuració del 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 <Crear un llançament per a arranjaments persistents
# Create /Library/LaunchDaemons/com.local.sysctl.plist sudo tee /Library/LaunchDaemons/com.local.sysctl.plist <EOF sudo chmod 644 /Library/LaunchDaemons/com.local.sysctl.plist sudo launchctl load /Library/LaunchDaemons/com.local.sysctl.plist Label com.local.sysctl ProgramArguments /usr/sbin/sysctl -w kern.ipc.maxsockbuf=8388608 RunAtLoad Avís: Les restriccions de protecció de macOS Ventura (13) i posterior tenen Sistema Integralitat (SIP). Alguns paràmetres del nucli no poden ser modificables fins i tot amb sudo. Arranjament de la prova en el vostre entorn específic.
Comprovació de rendiment i validació
Eines per al rendiment de la memòria intermèdia de prova
Iperf3 - Comprovació de rendiment de xarxa
# 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 - Captura mides de finestra 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'
Anàlisi Wireshark
Mireu aquests indicadors de temes de memòria intermèdia:
- Missatges de finestra TCP Zero
- Actualitza els paquets TCP de la finestraName
- Finestra TCP Notificacions completesName
- taxes d'alta remissió amb RT baixa
Monitorització del sistema
# 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
Càlcul de l' amplada de banda (BDP)
Per a determinar la mida òptima de la memòria intermèdia per a la vostra xarxa, calculeu el producte Band width- Delay Whell:
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.
Recomanacions específiques de càrrega de feina
| Tipus de càrrega de feina | Mida recomanada de la memòria intermèdia | Paràmetres de clau |
|---|---|---|
| Servidor web (B baixa retardenc) | 4- 16 MB | Memòria intermèdia inferior, més connexions, resposta ràpida |
| Servidor de bases de dades | 1632 MB | Memòria intermèdia moderada, consistent amb el rendiment |
| Transferència de fitxers / còpia de seguretat | 64- 128 MB | Memòria intermèdia màxima, alta prioritat d' alt rendiment |
| Corrent de vídeo | 3264 MB | Memòria intermèdia gran, taxa de lliurament consistent |
| Centre de dades HPC / | 128- 256 MB | Control màxim de memòria intermèdia, congestió especialitzada |
| Sense fils / Mòbil | 2-8 MB | Memòria intermèdia conservadora, gestió de la llicència variable |
Errors comuns i pilotes
Errors per a evitar
- Exagerant: Les grans memòries de memòria intermèdia poden causar la memòria intermèdia, cada cop més tard.
- S' estan ignorant les restriccions de memòria: Les grans memòria intermèdia multipliquen pel compte de connexió; un servidor amb 10.000 connexions i 128MB memòria intermèdia necessiten 1. 25TB de RAM
- Deshabilitant l' auto- apagat sense motiu: L' autocompleció modern de l' OSM normalment és millor que l' arranjament estàtic
- No comprovar després dels canvis: validar sempre millores de rendiment amb càrregues de treball reals
- Per a embarcar la memòria intermèdia NIC: L' origen de la memòria intermèdia dels anells pot ocórrer independentment de la memòria intermèdia del sòcol
- Arranjament informat: El client i servidor haurien de tenir configuracions compatibles amb la memòria intermèdia
- S' està ignorant el control de la congestió: BBR i CUBIC són molt millors que els algorismes més grans
Solució de problemes del flux de feina
- Estableix la línia base: Mesura el rendiment actual amb eines iperf3 o similars
- Paquets de captura: Usa tcpump/Wireshark per identificar el comportament de la finestra TCP
- Comprova les estadístiques del sistema: Cerca les gotes, l'esgotament de la memòria intermèdia, les remissió dels transports
- Calcula el BDP: Determina les mides teòricament òptimes de la memòria intermèdia
- Aplica els canvis incrementals: No ho canviïs tot alhora
- Prova i valida: Mesura la millora de rendiment actual
- Controla el temps: Assegureu- vos que els paràmetres romandran òptims sota un esforç variable
Referències i més informació
- RFC 1323 - Extensions TCP per a un rendiment alt (escalador de finestres)
- RFC 2018 - Opcions de selecció TCP
- RFC 6928 - Incrementant la finestra inicial del TCP
- RFC 8312 - Algorisme de control de CUBIC
- BBR Congestió Control (Google) - https://research.google/pubs/pub4546 /
- Documentació del nucli Linux - xarxa/ip- sctl. txt
- Guia de gestió de rendiment TCP/IP (Microsoft) Comment
- Guia d' afinament de xarxa ESnet - https://uderdata.es.net /
Conclusió
El creixement de la memòria intermèdia és una causa comuna de temes relacionats amb la xarxa. En entendre l'evolució de la mida de la memòria intermèdia dels límits 128 KB a les capacitats de 128MB, els enginyers de xarxa poden identificar ràpidament i resoldre aquests problemes.
Punts de clau:
- Els sistemes moderns necessiten una gran memòria intermèdia que el llegat (2009) de configuració
- calcula sempre BDP per les vostres condicions específiques de xarxa
- Usa característiques auto- control de SO quan estan disponibles (Windows, modern Linux)
- Monitor i prova per validar canvis
- Considereu els requeriments específics de treball en localitzar
Recordeu: Un problema "network" revelat per l'anàlisi de paquets per mostrar les finestres TCP zero és realment un problema del recurs amfitrió. Amb un ajustament de la memòria intermèdia apropiat, podeu eliminar aquests diagnòstics falsos i aconseguir rendiment òptima.
Darrera actualització: febrer 2, 2026
Autor: equip tècnic Baud9600