Sistema-bufferra sintonizatzen: "Sareko arazoen atzean ezkutatzen den Culprit"

Laburpen exekutiboa

Sareko ingeniariek sarritan aurkitzen dituzte TCPren leiho edo aplikazioen errendimendua sareko azpiegiturei egozten zaien egoerak. Paketeen kaptura, tcpdumps eta sareko analisia egin ondoren, benetako botila-lepoa aurkitu ohi da: NIC agortua (Network Interface Card) edo OS mailako bufferrak bezeroaren edo zerbitzari-sistemetan.

Artikulu honek ondare (2009 inguruan) eta uneko (2025-2026) buffer-konfigurazioak eskaintzen ditu Linux, Windows eta macOSentzat, baita diagnostiko-teknikak ere, bufferraren nekea identifikatzeko arazo larria izan aurretik.

Bufferraren itzaltzearen ohiko sintomak

Arazoa ulertzea

TCP leihoa eskalatzeko mekanismoa

TCPk fluxu-kontrolaren mekanismo bat erabiltzen du, non hartzaileak "leiho-tamaina" iragartzen duen, zenbat datu onartzen dituen adieraziz. Sistemaren bufferrak betetzen direnean, leiho hau zerorantz jaisten da, bidaltzaileak itxaron dezan. Sareko arazoa dirudi, baina ostalari-baliabideen arazoa da.

Bufferrak zer diren

Komando diagnostikoak

Linux diagnostikoa

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

Windows-en diagnostikoa

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

# 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

Linux bufferra sintonizatzen

Legacy Linux Settings (Circa 2009)

Parametroa Ondarearen balioa (2009) Azalpena
net.core.rmem default 124928 (122KB) Onartutakoen bufferraren tamaina lehenetsia
net.core.rmem max 131071 (128KB) Jaso gehienezko bufferraren tamaina
net.core.wmem default 124928 (122KB) Bidali socket bufferraren tamaina lehenetsia
net.core.wmem max 131071 (128KB) Bidali socket bufferraren gehienezko tamaina
net.ipv4.tcp rmem 4096 87380 174760 TCPk bufferra jasotzen du: min, default, max (bytetan)
net.ipv4.tcp wmem 4096 16384 131072 TCPk bufferra bidaltzen du: min, default, max (bytetan)
net.ipv4.tcp mem 196608 262144 393216 TCP memoria orriak: baxua, presioa, altua
net.core.netdev max backlog 1000 Gehienezko paketeak sarrerako ilaran
net.core.optmem max 10240 (10KB) Bufferraren gehienezko tamaina socket bakoitzeko

Uneko Linux ezarpenak (2025-2026)

Parameter Uneko gomendatutako balioa 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 TCPk bufferra jasotzen du: min, default, max (128MB gehienez)
net.ipv4.tcp_wmem 4096 65536 134217728 TCPk bufferra bidaltzen du: min, default, max (128MB gehienez)
net.ipv4.tcp_mem 8388608 12582912 16777216 TCP memoria orriak: baxua, presioa, altua (64GB sistema)
net.core.netdev_max_backlog 250000 Gehienezko paketeak sarrerako ilaran (10GbE+)
net.core.optmem_max 65536 (64KB) Maximum ancillary buffer size per socket
net.ipv4.tcp congestion control bbr Erabili BBR kongestioaren kontrola (Googleren algoritmoa)
net.ipv4.tcp window scaling 1 Gaitu TCP leihoen eskalatzea (RFC 1323)
net.ipv4.tcp timestamps 1 Gaitu TCP ordu-zigiluak RTT estimatzeko
net.ipv4.tcp sack 1 Gaitu aitortza selektiboa
net.ipv4.tcp no metrics save 1 Desgaitu TCP metriken cachea

Linux konfiguratzeko aplikazioa

Gehitu ezarpen hauek /etc/sysctl.conf edo fitxategi berria sortu /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 Ring Buffer Tuning

# 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
Abisu kritikoa - Memoria-kontsumoa: Tcp mem balioak memoria-orrietan daude (normalean 4KB). Buffer-tamaina handiek memoria-presio larria eragin dezakete:

Windows bufferra sintonizatzen

Leiho zaharren ezarpenak (Circa 2009 - Windows Vista/7/Server 2008)

Parameter Legacy Value (2009) Kokalekua
TcpWindowSize 65535 (64KB) Erregistroa: HKLM\System\CurrentControlSet\Services\Tcpip\Parametroak
Tcp1323Opts 0 (desgaituta) Leihoaren eskala desgaituta lehenespenez
Leiho lehenetsia 8192 (8KB) Jasotzeko leiho lehenetsia
Lehenetsitako leihoa 8192 (8KB) Bidaltzeko leiho lehenetsia
GlobalMaxTcpWindowSize 65535 (64KB) TCP leihoaren gehienezko tamaina
TcpNumConnections 16777214 TCP konexio maximoak

Uneko Windows ezarpenak (Windows 10/11/Server 2019-2025)

Leiho modernoek erabiltzen dute Jaso leihoa automatikoki elkartzea Ezaugarri horrek, dinamikoki doitzen denak, bufferrak jasotzen ditu sare-baldintzen arabera.

Eginbidea Gomendatutako ezarpenak Description
Elkartze maila automatikoa normala (edo oso esperimentala 10GbE+erako) Jaso leihoa doitzea
Jaso-Side Scaling (RSS) gaituta Banatu sareko prozesamendua PUZetan zehar
Chimney Offload automatikoa (edo desgaitu NIC modernoetan) TCP deskargatu hardware NIC-ra
NetDMA desgaituta Zuzeneko Memoria Sarbidea (zaharkitua)
TCP parametro orokorrak Komandoak behean Sistema osoko TCP ezarpenak
Congestion hornitzailea CUBIC (edo NewRenoko jaitsiera) TCP kongestio-kontrolaren algoritmoa

Windows konfiguratzeko komandoak

# 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-en bufferraren ezarpen aurreratuak (gailu-kudeatzailearen edo PowerShell-en bidez)

# 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

Erregistroko Tweaks (aurreratua - Kontuz erabili)

# 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)
Abisua: Windows modernoan (10/11/Server 2019+), saihestu eskuzko erregistro-aldaketak, ez bada automatikoki doitzeak arazoak sortzen baditu. Automatikoki sintonizatzen diren algoritmoak ezarpen estatikoak baino hobeak dira.

macOS bufferra sintonizatzen

MacOS Ezarpenak (Circa 2009 - Mac OS X 10.5/10.6)

Parameter Legacy Value (2009) Description
kern.ipc.maxsockbuf 262144 (256KB) Socket-aren bufferraren gehienezko tamaina
net.inet.tcp.sendspace 32768 (32KB) TCPren buffer lehenetsia
net.inet.tcp.recvspace 32768 (32KB) TCP lehenetsiaren bufferra
net.inet.tcp.autorcvbufmax 131072 (128KB) Automatikoki doitutako gehienezko bufferra
net.inet.tcp.autosndbufmax 131072 (128KB) Bidalitako gehienezko bufferra
net.inet.tcp.rfc1323 0 (disabled) TCP leihoa eskalatzea

MacOS-en uneko ezarpenak (macOS 12-15 Monterey-tik Sequoia-ra)

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 (gaituta) Gaitu TCP leihoa eskalatzea
net.inet.tcp.sack 1 (enabled) Enable Selective Acknowledgment
net.inet.tcp.msdflt 1440 TCPren gehienezko segmentuaren tamaina lehenetsia
net.inet.tcp.delayed ack 3 Atzeratutako ACK portaera

macOS konfigurazio-aplikazioa

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

Ezarpen iraunkorretarako daemon-a sortzea

# 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
Abisua: macOS Ventura (13) eta gero Sistema Osotasunaren Babesa (SIP) murriztapenak ditu. Nukleoaren parametro batzuk ezin dira aldatu sudoarekin ere. Proba-ezarpenak ingurune jakin batean.

Errendimendu-probak eta balidazioa

Tresnak bufferraren errendimendua probatzeko

iperf3 - Sareko errendimenduaren probak

# 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 - Kapturatu TCP leihoen tamainak

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

Bilatu bufferreko arazoen adierazle hauek:

Sistemaren monitorizazioa

# 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 Produktua (BDP) Kalkulua

Sarearen bufferraren tamaina optimoa zehazteko, kalkulatu Bandwidth-Delay Produktua:

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.

Lan-kargarako gomendio espezifikoak

Lan-karga mota Gomendatutako bufferraren tamaina Gakoaren parametroak
Web zerbitzaria (latentzia baxua) 4-16 MB Jaitsi bufferrak, konexio gehiago, erantzun azkarra
Datu-basearen zerbitzaria 16-32 MB Buffer moderatuak, irteera koherentea
Fitxategi-transferentzia / babeskopia 64-128 MB Gehienezko bufferrak, irteera handiko lehentasuna
Bideo-korrontea 32-64 MB buffer handiak, entrega-tasa konstantea
HPC / Datuen Zentroa 128-256 MB Gehienezko bufferrak, kongestioaren kontrol espezializatua
Haririk gabekoa / mugikorra 2-8 MB Buffer kontserbadoreak, latentzien kudeaketa aldakorra

Akats eta hutsegite arruntak

Saihestu beharreko akatsak

Arazoak laneko fluxua konpontzeko

  1. Ezarri oinarri-lerroa: Neurtu uneko errendimendua iperf3 edo antzeko tresnekin
  2. Kapturatu paketeak: Erabili tcpdump/Wireshark TCP leihoen portaera identifikatzeko
  3. Egiaztatu sistemaren estatistikak: Bilatu tantak, bufferraren nekea, itzulpenak
  4. Kalkulatu BDP: Zehaztu bufferraren tamaina teoriko optimoak
  5. Aplikatu gehikuntza-aldaketak: Ez aldatu dena batera.
  6. Probatu eta balioztatu: Neurtu benetako errendimendua
  7. Monitorea denboran zehar: Ziurtatu ezarpenak optimoak izaten jarraitzen dutela karga desberdinetan

Erreferentziak eta irakurketa gehiago

Ondorioa

Bufferraren nekea sareko arazoen erro-kausa da. 2009ko 128KB-tik 128MB-ra bitarteko bufferraren bilakaera ulertuz, sareko ingeniariek berehala identifikatu eta ebatzi ditzakete arazo horiek.

Gako-iruzkinak:

Gogoratu: paketeen analisiak TCP zero leihoak erakusteko "sare-arazoa" ostalari-sistemaren baliabideen arazoa da. Bufferraren doikuntza egokiarekin, diagnostiko faltsu horiek ezabatu eta errendimendu optimoa lor dezakezu.


Azken eguneraketa: otsailak 2, 2026

Egilea: Baud9600 Talde teknikoa