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
Avís crític - Consumpció de memòria: Els valors tcp mem estan en pàgines de memòria (normalment 4KB). Les mides de memòria intermèdia grans poden causar una pressió greu de la memòria:
  • 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)
Avís: En les finestres modernes (10/11/Server 2019+), evitar modificacions del registre manual a menys que l' autocompleció produeix problemes. Els algorismes d' auto-unificació normalment són superiors a paràmetres estàtics.

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 <Labelcom.local.sysctlProgramArguments/usr/sbin/sysctl-wkern.ipc.maxsockbuf=8388608RunAtLoad
EOF

sudo chmod 644 /Library/LaunchDaemons/com.local.sysctl.plist
sudo launchctl load /Library/LaunchDaemons/com.local.sysctl.plist
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

  1. Estableix la línia base: Mesura el rendiment actual amb eines iperf3 o similars
  2. Paquets de captura: Usa tcpump/Wireshark per identificar el comportament de la finestra TCP
  3. Comprova les estadístiques del sistema: Cerca les gotes, l'esgotament de la memòria intermèdia, les remissió dels transports
  4. Calcula el BDP: Determina les mides teòricament òptimes de la memòria intermèdia
  5. Aplica els canvis incrementals: No ho canviïs tot alhora
  6. Prova i valida: Mesura la millora de rendiment actual
  7. 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