Bali, Indonesia
Insights

Bedah Anatomi Bufferbloat pada Edge POP Telco: Mengapa Tuning TCP BBR dan Fair Queueing Mengikis Drop Kernel di BGP Peering

Invalid Date
0:00
Inisiatif perluasan node edge computing yang gencar dipromosikan operator telekomunikasi nasional seperti Telkom Indonesia—sebagaimana dipaparkan dalam ulasan resmi mereka mengenai pergeseran komputasi dari sentral cloud ke lapisan terdekat pengguna (Telkom Indonesia: Edge Computing)—membawa realitas jaringan yang menantang bagi para systems engineer. Di atas kertas, menaruh server transmisi dan cache langsung di Point of Presence (POP) agregasi kota-kota sekunder menjanjikan latensi satu digit milidetik. Namun ketika server Linux di POP tersebut melayani ribuan koneksi konkuren yang bercampur aduk antara backhaul fiber optik dan jaringan seluler 4G/5G yang fluktuatif, metrik p99 tail latency sering kali meledak ratusan milidetik. Fenomena klasik ini berakar dari satu musuh lama: bufferbloat pada lapisan socket dan subsistem packet scheduler kernel.
Secara historis, konfigurasi subsistem jaringan Linux dirancang dengan filosofi memaksimalkan throughput untuk interkoneksi datacenter yang stabil. Saat throughput menjadi metrik tunggal, kernel cenderung mengalokasikan socket buffer transmisi (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.
Untuk memutus siklus destruktif ini, kernel Linux modern mengintegrasikan TCP Small Queues (TSQ). TSQ bertindak sebagai rem internal yang membatasi seberapa banyak byte yang boleh dikirimkan oleh satu socket TCP ke antrean perangkat di bawahnya. Alih-alih membuang seluruh isi congestion window sekaligus, TSQ menahan paket di lapisan socket jika kuota inflight byte pada device queue telah terlampaui. Namun, TSQ saja tidak berdaya jika algoritma kongesti masih mengandalkan kehilangan paket (drop) untuk mendeteksi saturasi. Di sinilah TCP BBR (Bottleneck Bandwidth and Round-trip propagation time) mengubah paradigma. BBR tidak menganggap packet loss sebagai indikator utama kemacetan link. BBR membangun model eksplisit dari jalur transmisi dengan mengukur dua parameter independen secara berkala: BtlBw (kapasitas maksimum bottleneck) dan RTprop (waktu tempuh bolak-balik fisik terendah). Dari dua variabel ini, BBR menghitung Bandwidth-Delay Product (BDP): BDP = BtlBw × RTprop BBR membatasi jumlah data dalam penerbangan (data in flight) mendekati 1 × BDP, sehingga antrean penyangga di router perantara maupun kernel tetap kosong. Tetapi mekanisme ini menuntut pacing—pengiriman paket secara teratur dan berjarak halus sepanjang interval RTT, bukan menyemburkan satu burst segmen secara masif. Di kernel Linux, mesin pacing TCP BBR sangat bergantung pada qdisc 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.
Mengaktifkan sinergi BBR dan FQ pada edge POP dapat dilakukan langsung melalui antarmuka 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 = 10000
Direktif net.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.
Untuk membuktikan bahwa tuning ini berhasil mengikis antrean tersembunyi, kita tidak bisa hanya mengandalkan utilitas 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/14
Dari keluaran perintah tersebut, perhatikan metrik pacing_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).
Kendati BBR dan FQ menjadi kombinasi unggul untuk mengeliminasi bufferbloat, implementasinya di edge POP bukan tanpa kompromi teknis. Ketika flow BBR berbagi bottleneck queue fisik yang dangkal dengan flow TCP CUBIC agresif di titik pertukaran lalu lintas (Internet Exchange atau BGP peering transit), CUBIC terkadang dapat menekan alokasi bandwidth BBR karena CUBIC tidak ragu mengisi antrean hingga tumpah. Namun pada kernel Linux versi 5.15 ke atas, algoritma BBRv2 dan pembaruan BBRv3 telah memperbaiki respons terhadap loss dan sinyal Explicit Congestion Notification (ECN) untuk mengatasi ketimpangan koeksistensi tersebut. Meminimalkan antrean di tepi jaringan (edge) bukan sekadar urusan mencapai angka bandwidth terbesar di laporan benchmark, melainkan menjaga prediktabilitas waktu respons sistem saat beban puncak. Dengan memadukan model kapasitas BBR, penjadwalan presisi Fair Queueing, dan restriksi buffer melalui tcp_notsent_lowat, infrastruktur POP telco dapat menyalurkan transmisi line-rate tanpa mengorbankan p99 latensi para pengguna akhir.