System Buffer Tuning - TCP and Network Performance Optimization

Sistemi Buffer Tuning: Kulteri i fshehur pas "problemeve të rrjetit"

Përmbledhja ekzekutive

Inxhinierët e rrjetit ndeshin shpesh situata ku përformanca e hapjes së TCP apo aplikimit është fajësuar në infrastrukturën e rrjetit. Pas kryerjes së kopjeve të mëdha të paketave, tcpdumps, dhe analizës së rrjetit, ngushtimi i vërtetë shpesh është zbuluar: NIC (Karta e InterfaqeveNetwork) ose bufferët e nivelit të OS në sistemet e klientit apo server-it të shteruar.

Ky artikull siguron si trashëgimi (circa 2009) ashtu edhe konfigurimet aktuale (2025-2026) për Linux, Dritaret dhe machos, së bashku me teknikat e diagnostikimit për të identifikuar lodhjen tampon para se të bëhet një çështje kritike.

Simptomat e zakonshme të përjashtimit të Buffer

  • TCP Zero dritare
  • Normat e larta të ritransmetimit pavarësisht nga mungesa e ulët e rrjetit
  • Aplikativi
  • Përformanca e degradimit nën peshë, përmirësohet kur ngarkesa pakësohet
  • Përformancë e papërputhshme nëpër konfigurime të ngjashme të hardware
  • Gabimet e socket ose mesazhet "Resource përkohësisht jo në dispozicion"

Të kuptojmë problemin

Mekanizmi i Skanimimit të dritares TCP

TCP përdor mekanizmin e kontrollit të fluksit ku marrësi reklamon një "masa të zezë" që tregon se sa të dhëna mund të pranojnë. Kur sistemi përmban, kjo dritare tkurret në zero, duke e detyruar dërguesin të presë. Kjo duket si një problem në rrjet por në fakt është një çështje e burimeve pritëse.

Ku ka rëndësi biffers

  • Socket Buffers (SO SNDBUF/SO RCVBUF): Dërgo dhe merr
  • TCP Dritarja Buffers: Madhësia maksimum e dritares TCP për lidhjet
  • Rrjeti NIC për
  • Kujtesa në të gjithë sistemin: Kujtesë e përgjithshme e rezervuar për rrjetin

Komanda diagnostikuese

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

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

Diagnoza makrone

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

Organizata e Rregullimet Linux (Circa 2009)

Parametrat Vlera e trashëgimisë (2009) Përshkrimi
paracaktuar 124928 (122KB) E prezgjedhur
Rrjeti 131071 (128KB) Madhësia maksimum e socket
paracaktuar 124928 (122KB) E prezgjedhur
Rrjeti 131071 (128KB) Madhësia maksimum e socket së dërgimit
to 4096 87380 174760 TCP merr buffer: minuta, paracaktuar, maksimumi (në bytes)
to 4096 16384 131072 TCP dërgo
to 196608 262144 393216 Faqet e kujtesës TCP: e ulët, presioni, e lartë
Netdev max backlog 1000 Paketat maksimume në rreshtin e input
Rrjeti 10240 (10KB) Madhësia maksimum e buffer për socket

Aktual Linux Rregullimet (2025-2026)

Parameter Vlera aktuale e rekomanduar Description
net.core.rmem_default 16777216 (16MB) Default receive socket buffer size
net.core.rmem_max 1342728 (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 merr
net.ipv4.tcp_wmem 4096 65536 134217728 TCP dërgon
net.ipv4.tcp_mem 8388608 12582912 16777216 Faqet e kujtesës TCP: e ulët, presioni, e lartë (64-GB sistem)
net.core.netdev_max_backlog 25000 Paketat maksimume në rreshtin e input (10GBE+)
net.core.optmem_max 64KB Maximum ancillary buffer size per socket
neto.ipv4.tcp congestion kontroll bbr kontrolli
Rrjeti 1 Aktivo shkallëzimin e dritareve TCP (RFC 1323)
web.ipv4.tcp timestamps 1 Aktivo TCP
rrjetë.ipv4.tcp sack 1 Zgjidh
to 1 Ç'aktivo krijimin e metrikës TCP

Program Konfigurimi Linux

Shto këto rregullime /etc/sysctl.conf ose a i ri /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
Paralajmërim kritik: Konsumi i kujtesës: Vlerat e tcp mm janë në faqet e kujtesës (tipike 4KB). Madhësia e madhe e buffer mund të shkaktojë presion të rëndë të kujtesës:
  • Kujtesa e lidhjes: Çdo lidhje mund të përdoret në rmm max + wmm max (256MB me 128MB buffers)
  • Ndikimi total i sistemit: 1,000 lidhje
  • Vlerësim i sigurt: Max concurrent lidhje x 256MB nuk duhet të kalojë 50% të sistemit RAM
  • Shembull: A server me
  • Rekomandimi për serverët me <16GB RAM: buffer

Dritaret Buffer Tuning

Rregullimet e trashëgimisë Windows (Circa 2009 - Windows Vista/7/ Serveri 2008)

Parameter Legacy Value (2009) Vendodhja
Tcp Dritarja Size 65535 (64KB) Regjistri: HKLM\System\CurrentControtion\Services\Tcpip\Parameters
Tcp1323opts 0 (disibled) Dritarja
E prezgjedhur 8192 (8KB) Dritarja e paracaktuar e marrjes
E prezgjedhur Dritarja 8192 (8KB) Dritarja e paracaktuar e dërgimit
GlobalMaxTcp Dritarja Size 65535 (64KB) Madhësia maksimum e dritares TCP
Lidhjet TcpNum 16777214 Lidhjet maksimum TCP

Aktual Dritaret Rregullimet Dritaret Dritaret (Windows 10/11/ Serveri 2019-2025)

Dritaret moderne përdorin Merr Dritaren Auto-Tuing Karakteristikat, të cilat përshtaten në mënyrë dinamike marrin buffera bazuar në kushtet e rrjetit.

pikë Rregullimi aktual Description
Niveli i lidhjes automatike normale për Dinamik merr rregullimet e dritares
Merr aktivizuar Përpunimi i rrjetit të shpërndarë nëpër CPU
Çimni Ofload asnjë në TCP offload to NIC hardware
NetDMA çaktivuar Hyrje direkt në kujtesë (nuk përdoret më)
Parametrat globale TCP Shiko komandat poshtë Rregullimet TCP në të gjithë sistemin
Sigurues i Progesave CUBIC (ose NjuReno fallback) Algoritmi i kontrollit të bllokimit TCP

Komandat e Konfigurimit 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

Rregullimet e detajuara NIC Buffer (vija Menaxhues i Pajisjeve ose 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

Rregjistrimi: Përdoreni me kujdes

# 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)
Kujdes: Në Windows moderne (10/11/Serveri 2019+), shmang modifikimet e regjistrit manual po të mos shkaktojë probleme auto-trajtimi. Algoritmat auto-trajtues janë përgjithësisht superiore ndaj rregullimeve statike.

MakOS Buffer Tuning

Rregullimet e trashëgimisë machos (Circa 2009 - Mac OS X 10.5/10.6)

Parameter Legacy Value (2009) Description
kern.ipc.maxsockbuf 262144 (256KB) Madhësia maksimum e socket
internet 32768 (32KB) E prezgjedhur
internet 32768 (32KB) E prezgjedhur
internet 131072 (128KB) nga
rrjetë.inet.tcp.autosndbufmax 131072 (128KB) Buffer maksimum i postës auto-tuned
neto.inet.tcp.rfc1323 0 (disabled) j

Parametrat aktuale

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 (i dukshëm) Aktivo shkallëzimin e dritareve TCP
rrjetë.inet.tcp.sack 1 (enabled) Enable Selective Acknowledgment
rrjetë.inet.tcp.msdflat 1440 Dimensioni i prezgjedhur TCP
at 3 Sjellja e vonuar

Aplikativi i konfigurimit të macons

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

Krijon një Daemon lançimi për rregullimet e vazhdueshme

# 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
Kujdes: MakaOS Ventura (13) dhe më vonë kanë kufizime për mbrojtjen e integritetit të Sistemit (SIP). Disa parametra kokrrash mund të mos jenë të ndryshueshëm edhe me sudonë. Rregullimet e testimit në mjedisin tuaj specifik.

Provat dhe vlefshmëria

Mjete për testimin e performancës së Buffer

iperf3 - Testimi i performancës së rrjetit

# 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

j

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

Analizë Wireshark

Kërko për këta tregues të çështjeve tampon:

  • TCP Zero dritare
  • Paketat e rifreskimit të dritares TCP
  • Njoftimet e plota të dritares TCP
  • Normat e larta të ritransmetimit me RTT të ulët

Monitorimi i Sistemit

# 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

Kalkulimi i Fangwidth-Delay

Për të përcaktuar madhësinë optimale tampon për rrjetin tuaj, llogarit prodhimin 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.

Rekomandimet e ngarkesës së punës

Lloji i ngarkesës së punës Madhësia e rekomanduar e Buffer Parametrat e kyçit
Serveri web (Low hincy) 4-16 MB poshtë
Serveri Databaza 16-32 MB korniza
File Transferim / backup 64-128 MB maksimum
Video: 32-64 MB E madhe
HPC / Qendra e të Dhënave 128-256 MB Buffer maksimum, kontrolli i specializuar i bllokimit
Wireless / Mobile 2-8 MB për

Gabimet e zakonshme dhe grackat

Gabime që duhen shmangur

  • Mbi-buffering: Tampon i madh në rritje
  • Shpërfill kufizimet e kujtesës: E madhe me nga a server me dhe 128MB nga
  • Zhgënjimi i makinave pa arsye: Përshtatja moderne e makinave është zakonisht më e mirë se rregullimet statike
  • Jo pas ndryshimeve: Gjithmonë i vlefshëm përmirësimet e performancës me ngarkesa të vërteta pune
  • Harimi i bufferëve NIC: Punimi i ziles së ziles mund të ndodhë i pavarur nga bazat
  • Rregullimet e papajtueshme: Klienti dhe serveri duhet të kenë konfigurime kompatibël
  • Duke injoruar kontrollin e bllokimit: BBR dhe CUBIC janë shumë më mirë se algoritmet e vjetra

Shpërthim në punë

  1. Krijo: Mat ecurinë aktuale me iperf3 apo mjete të ngjashme
  2. Paketa: Përdor tcpdump/Wireshark për të identifikuar sjelljen e dritareve TCP
  3. Kontrollo statistikat e sistemit: Shiko për pika, buffer rraskapitje, ritransmetime
  4. Llogarit BDP: determini teorikisht madhësia
  5. Apliko: Mos ndrysho gjithçka menjëherë.
  6. Testi dhe i vlefshëm: Mat përmirësimin aktual të ecurisë
  7. Ekrani me kalimin e kohës: Rregullimet e sigurta mbeten optimale nën ngarkesa të ndryshme

Referimet dhe leximi i mëtejshëm

  • RFC 1323 - TCP Shtesat për performancën e Lartë (Shkëlqimi në dritare)
  • FC 2018 - TCP Mundësitë e pranimit të zgjedhjes
  • RFC 6928 - Dritarja fillestare TCP
  • RFC 8312 - Algoritmi i Kontrollit të Konsultimit CUBIC
  • Kontrolli i Falimentimit të BBR (Google) - https://research.google/pubs/pub45646/
  • Linux Kernel Dokumentation - Network/ip-syskttl.txt
  • Windows TCP/IP Reformance Tuning Guide (Microsoft)
  • ESnet Tuning Guide - https://fterdata.es.net/

Përfundo

rraskapitja e Buferit është një shkak bazë i përbashkët i çështjeve të ecurisë që duket të jenë të lidhura me rrjetin. Duke kuptuar evolucionin e pompimit nga 128KB limitet e 2009 në 128MB aftësitë e sotme, inxhinierët e rrjetit mund t'i identifikojnë dhe t'i zgjidhin shpejt këto çështje.

Çelësi:

  • Sistemet moderne kanë nevojë për bufferë më të mëdhenj se trashëgimia (2009) për konfigurime
  • Gjithmonë llogarit BDP për kushtet e rrjetit tuaj specifik
  • Përdor karakteristikat auto-trajtuese OS kur është në dispozicion (Windows, modern Linux)
  • Ekrani dhe testi për ndryshime të vlefshme
  • Shqyrto kërkesat specifike për ngarkesën e punës gjatë sinkronizimit

Mos harroni: Një "problem neto" i zbuluar nga analiza e paketave për të treguar dritaret TCP zero është në fakt një problem i burimeve të sistemit pritës. Me sinkronizimin e duhur tampon, ju mund të eliminoni këto diagnoza të rreme dhe të arrini një performancë optimale.


U rifreskua e fundit: 2 shkurt 2026

Autori: Grupi Teknik Baud9600