Tuning Buffer Sistem: Kebudayaan Tersembunyi Di balik "Masalah Jaringan"

Ringkasan Eksekutif

Insinyur jaringan sering menghadapi situasi di mana TCP windowing atau kinerja aplikasi disalahkan pada infrastruktur jaringan. Setelah melakukan penangkapan paket ekstensif, tcpdump, dan analisis jaringan, bottleneck sebenarnya sering ditemukan: kehabisan NIC (Network Interface Card) atau penyangga tingkat OS-pada sistem klien atau server.

Artikel ini menyediakan kedua warisan (sekitar 2009) dan saat ini (2025- 2026) penyangga konfigurasi untuk Linux, Windows, dan MacOS, bersama dengan teknik diagnostik untuk mengidentifikasi kelelahan penyangga sebelum menjadi isu kritis.

Gejala umum dari Penyangga Exhaustion

Memahami masalah

Mekanisme Skala Jendela TCP

TCP menggunakan mekanisme kontrol aliran di mana penerima mengiklankan "ukuran jendela" menunjukkan berapa banyak data yang dapat diterima. Ketika penyangga sistem diisi, jendela ini menyusut menjadi nol, memaksa pengirim untuk menunggu. Hal ini muncul sebagai masalah jaringan tapi sebenarnya merupakan masalah sumber daya host.

Where Buffers Matter

Perintah Diagnostik

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

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

Diagnostik makos

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

Pengaturan Linux Legacy (Circa 2009)

Parameter Nilai Legacy (2009) Deskripsi
net.core.rmem _ default 124928 (122KB) Ukuran socket buffer diterima baku
net.core.rmem _ max 131071 (128KB) Maksimum menerima ukuran socket buffer
net.core.wmem _ default 124928 (122KB) Ukuran socket buffer bawaan
net.core.wmem _ max 131071 (128KB) Maksimum kirim ukuran socket buffer
net.ipv4.tcp _ rmem 4096 87380 174760 TCP menerima buffer: min, default, max (dalam bytes)
net.ipv4.tcp _ wmem 4096 16384 131072 TCP mengirim buffer: min, default, max (dalam bytes)
net.ipv4.tcp _ mem 196608 262144 393216 Halaman memori TCP: rendah, tekanan, tinggi
net.core.netadev _ max _ backlog 1000 Paket maksimum dalam antrian masukan
net.core.optmem _ max 10240 (10KB) Ukuran buffer maksimal per soket

Pengaturan Linux saat ini (2025- 2026)

Parameter Nilai Yang Disarankan Saat Ini 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 menerima buffer: min, default, max (128MB max)
net.ipv4.tcp_wmem 4096 65336 134217728 TCP mengirim buffer: min, default, max (128MB max)
net.ipv4.tcp_mem 838608 12582912 16777216 Halaman memori TCP: rendah, tekanan, tinggi (sistem 64GB)
net.core.netdev_max_backlog 2500.000 Paket maksimum dalam antrian masukan (10GbE +)
net.core.optmem_max 65536 (64KB) Maximum ancillary buffer size per socket
net.ipv4.tcp _ contraffic _ control bbr Gunakan kontrol kemacetan BBR (algoritma Google)
net.ipv4.tcp _ window _ scaling 1 Aktifkan skala jendela TCP (RFC 1323)
net.ipv4.tcp _ timestamps 1 Aktifkan penanda waktu TCP untuk estimasi RTT yang lebih baik
net.ipv4.tcp _ sack 1 Aktifkan Pengakuan Selektif
net.ipv4.tcp _ no _ metrics _ save 1 Nonaktifkan caching dari metrics TCP

Aplikasi Konfigurasi Linux

Tambahkan pengaturan ini ke /etc/sysctl.conf atau membuat berkas baru /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

Buffer cincin NIC 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
Peringatan Kritik - Konsumsi Memori: Nilai tcp _ mem dalam halaman memori (biasanya 4KB). Ukuran penyangga besar dapat menyebabkan tekanan memori yang parah:

Windows Buffer Tuning

Pengaturan Jendela Legacy (Circa 2009 - Windows Vista / 7 / Server 2008)

Parameter Legacy Value (2009) Lokasi
TcpWindowSize 65535 (64KB) Registry: HKLM\ System\ Tease ControlSet\ Services\ Tcpip\ Parameter
Tcp133Opts 0 (dimatikan) Skala jendela dinonaktifkan secara baku
DefaultReceiveWindow 8192 (8KB) Menerima jendela bawaan
DefaultSendWindow 8192 (8KB) Kirim jendela bawaan
GlobalMaxTcpWindowSize 65535 (64KB) Ukuran jendela TCP maksimum
Koneksi TcpNumConnections 16777214 Koneksi TCP maksimum

Pengaturan Jendela Saat ini (Jendela 10 / 11 / Server 2019- 2025)

Jendela Modern memakai Menerima Jendela Otomatis-Tuning fitur, yang secara dinamis menyesuaikan menerima penyangga berdasarkan kondisi jaringan.

Fitur Tatanan Yang Disarankan Saat Ini Description
Tingkat Tuning Otomatis normal (atau sangat eksperimental untuk 10GBE +) Dinamis menerima penyesuaian jendela
Menerima Skala Sisi (RSS) diaktifkan Mengalihkan pemrosesan jaringan di seluruh CPU
Chimney Offload otomatis (atau dinonaktifkan pada NIC modern) TCP offload ke perangkat keras NIC
NetDMA dinonaktifkan Akses Memori Langsung (tak berlaku lagi)
Parameter Global TCP Lihat perintah di bawah Pengaturan TCP selebar sistem
Penyedia kemacetan CUBIC (atau NewReno fallback) Algoritma kendali kemacetan TCP

Perintah Konfigurasi 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

Pengaturan Penyangga NIC Lanjutan (melalui Manajer Perangkat atau 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

Registry tweaks (Lanjutan - Gunakan dengan Hati-hati)

# 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)
Peringatan: Pada Windows modern (10 / 11 / Server 2019 +), hindari modifikasi manual kecuali auto- tuning menyebabkan masalah. Algoritma auto- tuning umumnya lebih unggul dari pengaturan statis.

Tuning Buffer Macos

Pengaturan Mapos Legacy (Circa 2009 - Mac OS X 10,5 / 10.6)

Parameter Legacy Value (2009) Description
kern.ipc.maxsockbuf 262144 (256KB) Ukuran soket maksimum buffer
net.inet.tcp.sendspace 32768 (32KB) Buffer pengiriman TCP baku
net.inet.tcp.recvspace 32768 (32KB) Penyangga penerimaan TCP baku
net.inet.tcp.autorcvbufmax 131072 (128KB) Maksimum auto- tuned menerima buffer
net.inet.tcp.autosndbufmax 131072 (128KB) Maksimum auto- tuned kirim buffer
net.inet.tcp.rfc1323 0 (disabled) Skala jendela TCP

Pengaturan MacOS saat ini (makos 12-15 Monterey melalui Sequoles)

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 (diaktifkan) Aktifkan skala jendela TCP
net.inet.tcp.sack 1 (enabled) Enable Selective Acknowledgment
net.inet.tcp.mssdflt 1440 Ukuran Segmen Maksimum TCP Baku
net.inet.tcp.delay _ ack 3 Perilaku yang tertunda

Aplikasi Konfigurasi 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 <

Membuat Daemon Launchuntuk Pengaturan Persist

# 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
Peringatan: MacOS Ventura (13) dan kemudian memiliki pembatasan Integritas Sistem (SIP). Beberapa parameter kernel mungkin tidak dapat diubah bahkan dengan sudo. Uji pengaturan dalam lingkungan spesifik Anda.

Percobaan kinerja dan Validasi

Perkakas untuk Performance Buffer Pengujian

iperf3 - Uji Performance

# 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 - Tangkap Size Jendela 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'

Analisis WireShark

Cari indikator masalah penyangga ini:

Pemantauan Sistem

# 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

Kalkulasi Bandwidget-Tunda (BDP)

Untuk menentukan ukuran buffer optimal untuk jaringan Anda, perhitungkan Bandwidth - Delay Produk:

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.

Rekomendasi Kerja-Khusus

Tipe beban kerja Ukuran Penyangga Yang Disarankan Parameter Kunci
Server Web (Latensi Rendah) 4-16 MB Buffer bawah, lebih banyak koneksi, respon cepat
Server Basis Data 16- 32 MB buffer sedang, melalui konsisten
Transfer / Backup Berkas 64-128 MB Buffer maksimum, prioritas tinggi melalui put
Streaming Video 32-64 MB Buffer besar, tingkat pengiriman konsisten
Pusat HPC / Data 128- 256 MB Buffer maksimum, kontrol kemacetan khusus
Wireless / Mobile 2-8 MB buffer konservatif, penanganan latensi variabel

Kesalahan umum dan Pitfalls

Kesalahan untuk Hindari

Masalah hooting Workflow

  1. Atur baseline: Mengukur kinerja saat ini dengan iperf3 atau alat serupa
  2. Ambil paket: Gunakan tcpdump / Wirehiu untuk mengidentifikasi perilaku jendela TCP
  3. Periksa statistik sistem: Cari tetes, buffer kelelahan, transmisi ulang
  4. Menghitung BDP: Determine secara teoritis ukuran penyangga optimal
  5. Terapkan perubahan bertahap: Jangan mengubah semuanya sekaligus.
  6. Uji dan validasi: Mengukur peningkatan kinerja yang sebenarnya
  7. Monitor atas waktu: Pastikan pengaturan tetap optimal di bawah loads bervariasi

Referensi dan Pembacaan Lebih Jauh

Kesimpulan

Penyangga kelelahan adalah akar penyebab umum masalah kinerja yang tampaknya jaringan terkait. Dengan memahami evolusi ukuran penyangga dari 128KB tahun 2009 terbatas untuk kemampuan 128MB saat ini, insinyur jaringan dapat dengan cepat mengidentifikasi dan menyelesaikan masalah ini.

Tombol mengambil jalan:

Ingat: A "masalah jaringan" diungkapkan oleh analisis paket untuk menunjukkan jendela TCP nol sebenarnya merupakan masalah sistem host sumber daya. Dengan tuning penyangga yang tepat, Anda dapat menghilangkan diagnosis palsu ini dan mencapai kinerja optimal.


Terakhir Diperbarui: 2 Februari 2026

Penulis: Tim Teknik Baud9600