Anatomi Jebakan FIFO dan Sk_buff pada Kernel Default
tcp_wmem) sebesar mungkin dan membiarkan antrean perangkat keras (hardware ring buffer) terisi penuh sebelum sinyal kemacetan (congestion) dikenali. Algoritma kongesti berbasis loss tradisional seperti TCP CUBIC terus menaikkan congestion window (cwnd) secara agresif hingga mendeteksi packet loss.
Masalah fatal muncul ketika paket keluar dari antrean fisik server menuju link BGP peering yang melayani akses last-mile. Link seluler memiliki capacity variation dinamis akibat propagasi radio. Begitu kapasitas pipa mengecil sesaat, CUBIC tidak langsung menyadarinya; ia tetap membanjiri antrean antarmuka dengan struktur data sk_buff. Antrean FIFO (First-In, First-Out) di level queueing discipline (qdisc default seperti pfifo_fast) dan ring buffer NIC seketika membengkak. Paket-paket data mengendap diam di dalam memori kernel selama puluhan milidetik menunggu gilirannya ditransmisikan. Latensi membengkak (bloated), sementara paket-paket interaktif seperti jabat tangan TLS atau permintaan API perbankan terperangkap di belakang segmen video berukuran besar.
Peran TSQ dan Mengapa TCP BBR Membutuhkan Fair Queueing
fq (Fair Queueing). Qdisc fq menggunakan red-black tree untuk mengelola waktu rilis setiap paket berdasarkan timestamp transmisi yang dihitung BBR, memastikan paket dilepas ke NIC tepat waktu tanpa menumpuk antrean lokal.
Mengganti Qdisc Default dan Mengaktifkan TCP BBR
sysctl tanpa perlu melakukan recompile kernel. Parameter berikut menggantikan packet scheduler default menjadi Fair Queueing dan menetapkan BBR sebagai algoritma kongesti utama:
BASH
# /etc/sysctl.d/99-tcp-bbr-fq.conf
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
net.ipv4.tcp_notsent_lowat = 16384
net.core.netdev_max_backlog = 10000net.ipv4.tcp_notsent_lowat = 16384 adalah kunci tak kasat mata di sini. Parameter ini menginstruksikan kernel untuk menahan event epollout atau sinyal write ready ke aplikasi pengguna (seperti Nginx atau Envoy) hingga data yang belum terkirim di write buffer socket turun di bawah ambang batas 16 KB. Tanpa pengaturan ini, user space runtime akan terus mendorong puluhan megabyte data ke dalam memori kernel, mematikan efektivitas penjadwalan pacing BBR dan memicu konsumsi memori yang tidak terkontrol.
Observabilitas Kernel: Melacak Drop dan RTT Socket via ss
ping atau metrik antarmuka makro seperti ifconfig. Kita perlu membedah status internal transmisi TCP langsung dari socket structure di kernel menggunakan perintah ss:
BASH
ss -t -i -n 'sport = :443' dst 180.240.0.0/14pacing_rate, delivery_rate, rtt/rttvar, dan bytes_acked. Pada koneksi yang mengalami bufferbloat dengan CUBIC, nilai RTT terukur sering kali melonjak drastis saat throughput naik. Sebaliknya, dengan BBR dan FQ, RTT yang dilaporkan stabil mendekati angka dasar propagasi fisik (misalnya 12 ms pada rute Jakarta-Surabaya), sementara pacing_rate secara dinamis menyesuaikan tanpa adanya penumpukan antrean pada socket queue (skmem dan send-q).
Trade-Off: Pertarungan Antrean Heterogen di Link Agregasi
tcp_notsent_lowat, infrastruktur POP telco dapat menyalurkan transmisi line-rate tanpa mengorbankan p99 latensi para pengguna akhir.