System Buffer Tuning - TCP and Network Performance Optimization
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 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
Penyetelan Buffer Linux
Pengaturan Linux Lama (Sekitar tahun 2009)
| Parameter | Nilai Warisan (2009) | Keterangan |
|---|---|---|
| net.core.rmem_default | 124928 (122KB) | Ukuran buffer soket penerimaan default |
| net.core.rmem_max | 131071 (128KB) | Ukuran buffer soket penerimaan maksimum |
| net.core.wmem_default | 124928 (122KB) | Ukuran buffer soket pengiriman default |
| net.core.wmem_max | 131071 (128KB) | Ukuran buffer soket pengiriman maksimum |
| net.ipv4.tcp_rmem | 4096 87380 174760 | TCP menerima buffer: min, default, max (dalam byte) |
| net.ipv4.tcp_wmem | 4096 16384 131072 | Buffer pengiriman TCP: min, default, max (dalam byte) |
| net.ipv4.tcp_mem | 196608 262144 393216 | Halaman memori TCP: rendah, tekanan, tinggi |
| net.core.netdev_max_backlog | 1000 | Paket maksimum dalam antrian input |
| net.core.optmem_max | 10240 (10KB) | Ukuran buffer tambahan maksimum per soket |
Pengaturan Linux Saat Ini (2025-2026)
| Parameter | Nilai yang Direkomendasikan Saat Ini | Keterangan |
|---|---|---|
| net.core.rmem_default | 16777216 (16 MB) | Ukuran buffer soket penerimaan default |
| net.core.rmem_max | 134217728 (128MB) | Ukuran buffer soket penerimaan maksimum |
| net.core.wmem_default | 16777216 (16 MB) | Ukuran buffer soket pengiriman default |
| net.core.wmem_max | 134217728 (128MB) | Ukuran buffer soket pengiriman maksimum |
| net.ipv4.tcp_rmem | 4096 87380 134217728 | Buffer penerimaan TCP: min, default, maks (maks 128MB) |
| net.ipv4.tcp_wmem | 4096 65536 134217728 | Buffer pengiriman TCP: min, default, maks (maks 128MB) |
| net.ipv4.tcp_mem | 8388608 12582912 16777216 | Halaman memori TCP: rendah, tekanan, tinggi (sistem 64GB) |
| net.core.netdev_max_backlog | 250000 | Paket maksimum dalam antrian input (10GbE+) |
| net.core.optmem_max | 65536 (64KB) | Ukuran buffer tambahan maksimum per soket |
| net.ipv4.tcp_congestion_control | bbr | Gunakan kontrol kemacetan BBR (algoritma Google) |
| net.ipv4.tcp_window_scaling | 1 | Aktifkan penskalaan jendela TCP (RFC 1323) |
| net.ipv4.tcp_timestamps | 1 | Aktifkan stempel waktu TCP untuk estimasi RTT yang lebih baik |
| net.ipv4.tcp_sack | 1 | Aktifkan Pengakuan Selektif |
| net.ipv4.tcp_no_metrics_save | 1 | Nonaktifkan cache metrik TCP |
Aplikasi Konfigurasi Linux
Tambahkan pengaturan ini ke/etc/sysctl.confatau buat file 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
Penyetelan Penyangga Cincin 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
- Memori per koneksi:Setiap koneksi dapat menggunakan hingga rmem_max + wmem_max (256MB dengan buffer 128MB)
- Dampak sistem total:1.000 koneksi × 256MB = potensi penggunaan 256GB
- Estimasi aman:Koneksi bersamaan maksimal × 256MB tidak boleh melebihi 50% dari RAM sistem
- Contoh:Server 64GB harus membatasi koneksi maksimal hingga ~125 koneksi throughput tinggi secara bersamaan dengan buffer 128MB
- Rekomendasi untuk server dengan RAM <16GB:Kurangi buffer hingga maksimal 16-32MB dan sesuaikan tcp_mem secara proporsional
Penyetelan Buffer Windows
Pengaturan Windows Lama (Sekitar tahun 2009 - Windows Vista/7/Server 2008)
| Parameter | Nilai Warisan (2009) | Lokasi |
|---|---|---|
| TcpWindowSize | 65535 (64KB) | Registri: HKLM\System\CurrentControlSet\Services\Tcpip\Parameters |
| Tcp1323Pilihan | 0 (dinonaktifkan) | Penskalaan jendela dinonaktifkan secara default |
| Jendela Penerimaan Default | 8192 (8KB) | Jendela penerimaan default |
| JendelaKirim Default | 8192 (8KB) | Jendela pengiriman default |
| GlobalMaxTcpWindowSize | 65535 (64KB) | Ukuran jendela TCP maksimum |
| Koneksi TcpNum | 16777214 | Koneksi TCP maksimum |
Pengaturan Windows Saat Ini (Windows 10/11/Server 2019-2025)
Windows modern menggunakanMenerima Penyetelan Otomatis Jendelafitur, yang secara dinamis menyesuaikan buffer penerimaan berdasarkan kondisi jaringan.
| Fitur | Pengaturan yang Direkomendasikan Saat Ini | Keterangan |
|---|---|---|
| Tingkat Penyetelan Otomatis | normal (atau sangat eksperimental untuk 10GbE+) | Penyesuaian jendela penerimaan dinamis |
| Penskalaan Sisi Terima (RSS) | diaktifkan | Mendistribusikan pemrosesan jaringan ke seluruh CPU |
| Pembongkaran Cerobong | otomatis (atau dinonaktifkan pada NIC modern) | Pembongkaran TCP ke perangkat keras NIC |
| NetDMA | dengan disabilitas | Akses Memori Langsung (tidak digunakan lagi) |
| Parameter Global TCP | Lihat perintah di bawah | Pengaturan TCP seluruh sistem |
| Penyedia Kemacetan | CUBIC (atau pengganti NewReno) | Algoritma kontrol 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 Buffer NIC Tingkat Lanjut (melalui Pengelola 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
Perubahan Registri (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)
Penyetelan Penyangga MacOS
Pengaturan macOS lawas (Sekitar tahun 2009 - Mac OS X 10.5/10.6)
| Parameter | Nilai Warisan (2009) | Keterangan |
|---|---|---|
| kern.ipc.maxsockbuf | 262144 (256 KB) | Ukuran buffer soket maksimum |
| net.inet.tcp.sendspace | 32768 (32KB) | Buffer pengiriman TCP default |
| net.inet.tcp.recvspace | 32768 (32KB) | TCP default menerima buffer |
| net.inet.tcp.autorcvbufmax | 131072 (128KB) | Buffer penerimaan maksimum yang disetel secara otomatis |
| net.inet.tcp.autosndbufmax | 131072 (128KB) | Buffer pengiriman maksimum yang disetel secara otomatis |
| net.inet.tcp.rfc1323 | 0 (dinonaktifkan) | Penskalaan jendela TCP |
Pengaturan macOS saat ini (macOS 12-15 Monterey hingga Sequoia)
| Parameter | Nilai yang Direkomendasikan Saat Ini | Keterangan |
|---|---|---|
| kern.ipc.maxsockbuf | 8388608 (8 MB) | Ukuran buffer soket maksimum |
| net.inet.tcp.sendspace | 131072 (128KB) | Buffer pengiriman TCP default |
| net.inet.tcp.recvspace | 131072 (128KB) | TCP default menerima buffer |
| net.inet.tcp.autorcvbufmax | 16777216 (16 MB) | Buffer penerimaan maksimum yang disetel secara otomatis |
| net.inet.tcp.autosndbufmax | 16777216 (16 MB) | Buffer pengiriman maksimum yang disetel secara otomatis |
| net.inet.tcp.rfc1323 | 1 (diaktifkan) | Aktifkan penskalaan jendela TCP |
| net.inet.tcp.sack | 1 (diaktifkan) | Aktifkan Pengakuan Selektif |
| net.inet.tcp.mssdflt | 1440 | Ukuran Segmen Maksimum TCP Default |
| net.inet.tcp.delayed_ack | 3 | Perilaku ACK 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 <<EOF kern.ipc.maxsockbuf=8388608 net.inet.tcp.sendspace=131072 net.inet.tcp.recvspace=131072 net.inet.tcp.autorcvbufmax=16777216 net.inet.tcp.autosndbufmax=16777216 net.inet.tcp.rfc1323=1 net.inet.tcp.sack=1 net.inet.tcp.mssdflt=1440 net.inet.tcp.delayed_ack=3 EOF # Note: On recent macOS versions, /etc/sysctl.conf may not be read automatically # Use a LaunchDaemon to apply settings at boot
Membuat LaunchDaemon untuk Pengaturan Persisten
# Create /Library/LaunchDaemons/com.local.sysctl.plist
sudo tee /Library/LaunchDaemons/com.local.sysctl.plist <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.local.sysctl</string>
<key>ProgramArguments</key>
<array>
<string>/usr/sbin/sysctl</string>
<string>-w</string>
<string>kern.ipc.maxsockbuf=8388608</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
EOF
sudo chmod 644 /Library/LaunchDaemons/com.local.sysctl.plist
sudo launchctl load /Library/LaunchDaemons/com.local.sysctl.plist
Pengujian dan Validasi Kinerja
Alat untuk Menguji Kinerja Buffer
iperf3 - Pengujian Kinerja Jaringan
# 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 Ukuran 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
Carilah indikator masalah penyangga berikut ini:
- Pesan TCP Zero Window
- Paket Pembaruan Jendela TCP
- Pemberitahuan Penuh Jendela TCP
- Tingkat transmisi ulang yang tinggi dengan RTT rendah
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
Perhitungan Produk Penundaan Bandwidth (BDP).
Untuk menentukan ukuran buffer optimal untuk jaringan Anda, hitung Produk Penundaan Bandwidth:
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 Khusus Beban Kerja
| Jenis Beban Kerja | Ukuran Buffer yang Direkomendasikan | Parameter Utama |
|---|---|---|
| Server Web (latensi rendah) | 4-16 MB | Buffer lebih rendah, koneksi lebih banyak, respons cepat |
| Server Basis Data | 16-32MB | Buffer sedang, throughput konsisten |
| Transfer / Cadangan File | 64-128MB | Buffer maksimum, prioritas throughput tinggi |
| Streaming Video | 32-64MB | Buffer besar, kecepatan pengiriman konsisten |
| HPC / Pusat Data | 128-256MB | Buffer maksimum, kontrol kemacetan khusus |
| Nirkabel / Seluler | 2-8MB | Buffer konservatif, penanganan latensi variabel |
Kesalahan dan Kesalahan Umum
Kesalahan yang Harus Dihindari
- Buffer berlebih:Buffer yang terlalu besar dapat menyebabkan bufferbloat, sehingga meningkatkan latensi
- Mengabaikan batasan memori:Buffer besar dikalikan dengan jumlah koneksi; server dengan 10.000 koneksi dan buffer 128MB membutuhkan RAM 1,25TB
- Menonaktifkan penyetelan otomatis tanpa alasan:Penyetelan otomatis OS modern biasanya lebih baik daripada pengaturan statis
- Tidak menguji setelah perubahan:Selalu validasi peningkatan kinerja dengan beban kerja nyata
- Melupakan buffer NIC:Kehabisan buffer ring dapat terjadi secara independen dari buffer soket
- Pengaturan tidak konsisten:Klien dan server harus memiliki konfigurasi buffer yang kompatibel
- Mengabaikan pengendalian kemacetan:BBR dan CUBIC secara signifikan lebih baik daripada algoritma lama
Alur Kerja Pemecahan Masalah
- Tetapkan dasar:Ukur kinerja saat ini dengan iperf3 atau alat serupa
- Menangkap paket:Gunakan tcpdump/Wireshark untuk mengidentifikasi perilaku jendela TCP
- Periksa statistik sistem:Carilah tetesan, kelelahan buffer, transmisi ulang
- Hitung BDP:Tentukan ukuran buffer yang optimal secara teoritis
- Terapkan perubahan bertahap:Jangan mengubah semuanya sekaligus
- Uji dan validasi:Ukur peningkatan kinerja aktual
- Pantau dari waktu ke waktu:Pastikan pengaturan tetap optimal pada beban yang bervariasi
Referensi dan Bacaan Lebih Lanjut
- RFC 1323 - Ekstensi TCP untuk Kinerja Tinggi (Penskalaan Jendela)
- RFC 2018 - Opsi Pengakuan Selektif TCP
- RFC 6928 - Meningkatkan Jendela Awal TCP
- RFC 8312 - Algoritma Pengendalian Kemacetan KUBIK
- Pengendalian Kemacetan BBR (Google) - https://research.google/pubs/pub45646/
- Dokumentasi Kernel Linux - jaringan/ip-sysctl.txt
- Panduan Penyetelan Kinerja Windows TCP/IP (Microsoft)
- Panduan Penyetelan Jaringan ESnet - https://fasterdata.es.net/
Kesimpulan
Kehabisan buffer adalah akar penyebab umum masalah kinerja yang tampaknya terkait dengan jaringan. Dengan memahami evolusi ukuran buffer dari batas 128KB pada tahun 2009 hingga kemampuan 128MB saat ini, teknisi jaringan dapat dengan cepat mengidentifikasi dan menyelesaikan masalah ini.
Kesimpulan utama:
- Sistem modern memerlukan buffer yang jauh lebih besar dibandingkan konfigurasi lama (2009).
- Selalu hitung BDP untuk kondisi jaringan spesifik Anda
- Gunakan fitur penyetelan otomatis OS jika tersedia (Windows, Linux modern)
- Pantau dan uji untuk memvalidasi perubahan
- Pertimbangkan persyaratan spesifik beban kerja saat melakukan penyetelan
Ingat: "Masalah jaringan" yang diungkapkan oleh analisis paket untuk menunjukkan jendela nol TCP sebenarnya adalah masalah sumber daya sistem host. Dengan penyetelan buffer yang tepat, Anda dapat menghilangkan diagnosis palsu ini dan mencapai performa optimal.
Terakhir Diperbarui: 2 Februari 2026
Penulis: Tim Teknis Baud9600