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
- 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)
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 <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 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ë
- Krijo: Mat ecurinë aktuale me iperf3 apo mjete të ngjashme
- Paketa: Përdor tcpdump/Wireshark për të identifikuar sjelljen e dritareve TCP
- Kontrollo statistikat e sistemit: Shiko për pika, buffer rraskapitje, ritransmetime
- Llogarit BDP: determini teorikisht madhësia
- Apliko: Mos ndrysho gjithçka menjëherë.
- Testi dhe i vlefshëm: Mat përmirësimin aktual të ecurisë
- 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