Tuning de tampons système: le culprit caché derrière "problèmes de réseau"

Résumé

Les ingénieurs du réseau rencontrent fréquemment des situations où la performance de la fenêtre ou de l'application TCP est imputée à l'infrastructure du réseau. Après avoir effectué de vastes captures de paquets, des tcprumps et une analyse de réseau, le vrai goulot d'étranglement est souvent découvert: NIC épuisé (Network Interface Card) ou tampons de niveau OS sur les systèmes client ou serveur.

Cet article fournit à la fois l'héritage (vers 2009) et les configurations de tampons actuelles (2025-2026) pour Linux, Windows et macOS, ainsi que des techniques de diagnostic pour identifier l'épuisement du tampon avant qu'il ne devienne un problème critique.

Symptômes fréquents d'échappement des tampons

Comprendre le problème

Le mécanisme d'élargissement de la fenêtre TCP

TCP utilise un mécanisme de contrôle de flux où le récepteur annonce une « taille de fenêtre » indiquant la quantité de données qu'il peut accepter. Lorsque les tampons système se remplissent, cette fenêtre se rétrécit à zéro, forçant l'expéditeur à attendre. Cela apparaît comme un problème de réseau, mais est en fait un problème de ressource hôte.

Où les tampons comptent

Commandes diagnostiques

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

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

diagnostics 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

Tuning de tampon Linux

Paramètres Linux hérités (Circa 2009)

Paramètres Valeur historique (2009) Désignation des marchandises
net.core.rmem default 124928 (122 Ko) Taille du tampon de réception par défaut
N.R.M.S.M. 131071 (128Ko) Taille maximale du tampon de la prise de réception
net.core.wmem default 124928 (122KB) Taille du tampon d'envoi par défaut
net.core.wmem max 131071 (128KB) Taille maximale du tampon d'envoi
Net.ipv4.tcp rmem 4096 87380 174760 TCP recevoir le tampon : min, par défaut, max (en octets)
Net.ipv4.tcp wmem 4096 16384 131072 TCP envoie le tampon : min, par défaut, max (en octets)
Net.ipv4.tcp mem 196608 262144 393216 Pages de mémoire TCP : basse, pression, haute
net.core.netdev max backlog 1 000 Nombre maximal de paquets en attente d'entrée
Le nombre d'heures de travail est le plus élevé. 10240 (10Ko) Taille maximale du tampon auxiliaire par socket

Paramètres Linux actuels (2025-2026)

Parameter Valeur actuelle recommandée Description
net.core.rmem_default 16777216 (16MB) Default receive socket buffer size
net.core.rmem_max 134217728 (128Mo) 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 recevoir le tampon: min, par défaut, max (128 Mo max)
net.ipv4.tcp_wmem 4096 65536 134217728 TCP envoie le tampon : min, par défaut, max (128 Mo max)
net.ipv4.tcp_mem 8388608 12582912 16777216 Pages de mémoire TCP : basse, pression, haute (système 64GB)
net.core.netdev_max_backlog 250000 Nombre maximal de paquets en file d'attente (10GbE+)
net.core.optmem_max 65536 (64Ko) Maximum ancillary buffer size per socket
net.ipv4.tcp congestion control bbr Utiliser le contrôle de congestion BBR (algorithme de Google)
net.ipv4.tcp window scaling 1 Activer l'échelle de fenêtre TCP (RFC 1323)
net.ipv4.tcp timestamps 1 Activer les timestamps TCP pour une meilleure estimation RTT
Net.ipv4.tcp sack 1 Activer la reconnaissance sélective
net.ipv4.tcp no metrics save 1 Désactiver la mise en cache des mesures TCP

Application de configuration Linux

Ajouter ces paramètres à /etc/sysctl.conf ou créer un nouveau fichier /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

Tuning de tampons 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
Avertissement critique - Consommation de mémoire : Les valeurs tcp mem sont dans les pages de mémoire (généralement 4KB). De grandes tailles de tampon peuvent causer une pression mémoire sévère:

Tuning de tampon Windows

Paramètres de Windows (Circa 2009 - Windows Vista/7/Server 2008)

Parameter Legacy Value (2009) Lieu
TcpWindowSize 65535 (64Ko) Registre: HKLM\System\CurrentControlSet\Services\Tcpip\Paramètres
Tcp1323Opts 0 (désactivé) Échelle de fenêtre désactivée par défaut
ReceiveWindow par défaut 8192 (8Ko) Fenêtre de réception par défaut
Envoi par défautWindow 8192 (8KB) Fenêtre d'envoi par défaut
GlobalMaxTcpWindowSize 65535 (64KB) Taille maximale de la fenêtre TCP
Connexions TcpNum 16777214 Connexions TCP maximales

Paramètres actuels de Windows (Windows 10/11/Server 2019-2025)

Windows moderne utilise le Receive Fenêtre Auto-Tuning caractéristique, qui s'ajuste dynamiquement recevoir des tampons en fonction des conditions du réseau.

Fonctionnalité Réglage actuel recommandé Description
Niveau de tuning automatique normale (ou très expérimentale pour 10GbE+) Réglage dynamique des fenêtres de réception
Étalonnage du côté de réception (RSS) activé Distribuer le traitement réseau entre les processeurs
Chimney Décharge automatique (ou désactivé sur les NIC modernes) Décharge TCP vers le matériel NIC
DMA net handicapés Accès direct à la mémoire (déprécié)
Paramètres mondiaux TCP Voir les commandes ci-dessous Paramètres TCP à l ' échelle du système
Fournisseur de congestion CUBIC (ou recul de NewReno) Algorithme de contrôle de la congestion TCP

Commandes de configuration 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

Paramètres avancés du tampon NIC (via le gestionnaire de périphériques ou 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

Typologie du registre (Advanced - Utilisation avec prudence)

# 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)
Avertissement : Sur Windows moderne (10/11/Server 2019+), évitez les modifications manuelles du registre à moins que le réglage automatique ne cause des problèmes. Les algorithmes de réglage automatique sont généralement supérieurs aux paramètres statiques.

accord de tampon macOS

Paramètres macOS (Circa 2009 - Mac OS X 10.5/10.6)

Parameter Legacy Value (2009) Description
kern.ipc.maxsockbuf 262144 (256 Ko) Taille maximale du tampon de prise
Net.inet.tcp.sendspace 32768 (32Ko) Par défaut TCP envoie le tampon
l'espace net.inet.tcp.recvspace 32768 (32KB) Par défaut, TCP reçoit le tampon
Le nombre d'heures de travail est égal à celui des heures de travail. 131072 (128Ko) Maximum auto-tuné recevoir tampon
Le taux d'utilisation de l'eau de mer dans le secteur de l'alimentation humaine est de 5 %. 131072 (128KB) tampon d'envoi automatique maximal
Pour le calcul de la valeur de référence, voir le tableau 1. 0 (disabled) Échelle de la fenêtre TCP

Paramètres macOS actuels (macOS 12-15 Monterey par Sequoia)

Parameter Current Recommended Value Description
kern.ipc.maxsockbuf 8388608 (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 (activé) Activer l'échelle des fenêtres TCP
Sack net.inet.tcp. 1 (enabled) Enable Selective Acknowledgment
C'est la raison pour laquelle il n'y a pas d'écart entre les taux de change et les taux de change. 1440 Taille maximale du segment par défaut TCP
net.inet.tcp.relayed ack 3 Comportement d'ACK retardé

application de configuration 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 <

Création d'un LaunchDaemon pour les paramètres persistants

# Create /Library/LaunchDaemons/com.local.sysctl.plist
sudo tee /Library/LaunchDaemons/com.local.sysctl.plist <



    Label
    com.local.sysctl
    ProgramArguments
    
        /usr/sbin/sysctl
        -w
        kern.ipc.maxsockbuf=8388608
    
    RunAtLoad
    


EOF

sudo chmod 644 /Library/LaunchDaemons/com.local.sysctl.plist
sudo launchctl load /Library/LaunchDaemons/com.local.sysctl.plist
Avertissement : macOS Ventura (13) et plus tard ont des restrictions de protection de l'intégrité du système (SIP). Certains paramètres du noyau peuvent ne pas être modifiables même avec sudo. Testez les paramètres dans votre environnement spécifique.

Essais de performance et validation

Outils pour tester la performance du tampon

iperf3 - Essai de performance du réseau

# 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 - Capturer les tailles de fenêtre 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'

Analyse de Wireshark

Recherchez ces indicateurs de problèmes tampons :

Surveillance du système

# 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

Calcul de la largeur de bande du produit relais (BDP)

Pour déterminer les tailles de tampon optimales pour votre réseau, calculez le produit Bandwidth-Delay :

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.

Recommandations spécifiques concernant la charge de travail

Type de charge Taille recommandée du tampon Paramètres clés
Serveur Web (faible latence) 4-16 Mo Moins de tampons, plus de connexions, réponse rapide
Serveur de base de données 16-32 Mo tampons modérés, débit constant
Transfert de fichiers / Sauvegarde 64 à 128 Mo Des tampons maximums, une priorité de débit élevée
Diffusion vidéo 32-64 MB Grands tampons, taux de livraison uniforme
HPC / Centre de données 128-256 Mo Des tampons maximaux, un contrôle spécialisé de la congestion
Sans fil / Mobile 2-8 Mo tampons conservateurs, manipulation variable de latence

Erreurs et pièges courants

Erreurs à éviter

Dépannage du flux de travail

  1. Établir le niveau de référence : Mesurer les performances actuelles avec iperf3 ou des outils similaires
  2. Capturer les paquets & #160;: Utilisez tcpdump/Wireshark pour identifier le comportement de la fenêtre TCP
  3. Statistiques du système de contrôle: Rechercher les gouttes, l'épuisement du tampon, les retransmissions
  4. Calculer BDP: Déterminer théoriquement les tailles optimales du tampon
  5. Appliquer des modifications progressives & #160;: Ne changez pas tout à la fois.
  6. Tester et valider: Mesurer l ' amélioration des résultats
  7. Surveiller avec le temps : Veiller à ce que les réglages restent optimaux sous différentes charges

Références et lectures complémentaires

Conclusion

L'épuisement des tampons est une cause principale de problèmes de performance qui semblent être liés au réseau. En comprenant l'évolution du calibrage du tampon des limites de 128 Ko de 2009 aux capacités de 128 Mo d'aujourd'hui, les ingénieurs réseau peuvent rapidement identifier et résoudre ces problèmes.

À emporter :

Rappelez-vous : Un "problème réseau" révélé par l'analyse de paquets pour montrer TCP 0 windows est en fait un problème de ressources système hôte. Avec un réglage tampon approprié, vous pouvez éliminer ces faux diagnostics et atteindre des performances optimales.


Dernière mise à jour: février 2, 2026

Auteur: Baud9600 Équipe technique