Laminar TCP

Apa itu Laminar?

Laminar adalah framework baru untuk kontrol kemacetan TCP yang memisahkan penjadwalan transmisi, yang menentukan secara tepat kapan data dikirim, dari Kontrol Kemacetan murni, yang menentukan jumlah total data yang dikirim selama setiap RTT.

Algoritma default untuk penjadwalan transmisi adalah penerapan ketat prinsip konservasi paket Van Jacobson [Jacobson88]. Data yang tiba di penerima menyebabkan ACK, yang pada akhirnya menyebabkan pengirim mengirim kembali jumlah data yang setara ke dalam jaringan. Variabel status utama bersifat implisit dalam jumlah data dan ACK yang beredar dalam jaringan. Status ini diamati melalui estimator tcp_packets_in_flight() yang ditingkatkan (alias total_pipe). Total_pipe didasarkan pada "pipe" seperti yang dijelaskan dalam RFC 3517, tetapi juga mencakup jumlah data yang dilaporkan oleh ACK saat ini dan transmisi tertunda yang telah melewati kontrol kemacetan, tetapi sedang menunggu peristiwa lain seperti TSO.

Variabel baru, CCwin, adalah variabel status kontrol kemacetan utama. Algoritma kontrol kemacetan menyesuaikan CCwin untuk mengatur tingkat kemacetan keseluruhan di sepanjang jalur. Meskipun CCwin mirip dengan cwnd, cwnd kelebihan beban dan digunakan oleh beberapa algoritma (seperti burst suppression) dengan tujuan yang berbeda dan terkadang bertentangan.

Setiap kali total_pipe berbeda dengan CCwin, algoritma penjadwalan transmisi sedikit menyesuaikan jumlah segmen yang dikirim sebagai respons terhadap setiap ACK. Awal yang lambat dan Pengurangan Laju Proporsional [PRR] (pengganti pengurangan tarif) keduanya disematkan dalam algoritme penjadwalan transmisi.

Keuntungan utama framework Laminar adalah dengan mempartisi kontrol kemacetan dan penjadwalan transmisi menjadi subsistem terpisah, masing-masing tunduk pada batasan desain yang jauh lebih sederhana, sehingga memudahkan pengembangan banyak algoritma baru yang tidak memungkinkan dengan pengaturan kode sebelumnya.

Framework Laminar mengubah filosofi desain yang mendasarinya dari kontrol kemacetan TCP dan berpotensi memiliki implikasi yang luas, di luar patch itu sendiri. Patch ini dimaksudkan untuk memungkinkan orang bereksperimen dengan kode, memberi komentar, dan membantu menemukan sudut pandang yang mungkin terabaikan. Selain itu, patch tidak lengkap dalam arti bahwa sejumlah algoritma masih belum ada, khususnya: algoritma kontrol kemacetan selain CUBIC dan Reno; validasi cwnd; metrik tujuan; dll. Akan sangat bagus jika orang dapat membantu memfaktorkan ulang beberapa algoritma lainnya.

Framework Laminar dan motivasinya dijelaskan secara lebih terperinci dalam Draf Internet, draft-mathis-tcpm-tcp-laminar.

Harap kirimkan komentar dan saran ke mattmathis@google.com.

Project ini adalah bagian dari upaya Google untuk Membuat Web Lebih Cepat melalui peningkatan protokol.

Catatan Penerapan

Laminar terutama diterapkan dalam 3 fungsi (tcp_input.c):

Tcp_cong_avoid() dan tcp_mult_decr() melakukan kontrol kemacetanAGD menggunakan variabel status CCwin. Kecuali untuk mengurungkan, kedua fungsi ini adalah satu-satunya tempat di mana CCwin berubah. (Kedua fungsi memanggil pengendali khusus modul kemacetan).

Tcp_laminar_schedule() menentukan berapa banyak data yang akan dikirim sebagai respons terhadap setiap ACK. Ini mengimplementasikan konservasi paket Van Jacobson, sedikit disesuaikan naik atau turun agar tcp_packets_in_flight() dikonvergensi ke CCwin.

Ada perubahan penting pada estimator tcp_packets_in_flight() untuk membuatnya invarian di sebagian besar peristiwa protokol. Aplikasi terhenti, penyesuaian pada tcp_laminar_schedule(), dan kehilangan paket aktual mengubah tcp_packets_in_flight(), sebagaimana mestinya. ACK, TSO, dan sebagian besar peristiwa lainnya. Perhatikan bahwa jika ada kerugian, jumlah paket sebenarnya dalam penerbangan akan segera berubah, tetapi tidak tercermin dalam estimator tcp_packets_in_flight() sampai mesin transmisi ulang menandainya sebagai hilang dan bertambah lost_out.

Mendapatkan patch

Patch ini bertentangan dengan net-berikutnya Dave Miller, dan berlaku dengan baik pada 3.5-rc2.
NB: Modul kontrol kemacetan lainnya yang belum diupdate oleh Reno dan CUBIC dan tidak akan dikompilasi. Jika konfigurasi Anda mem-build modul kontrol kemacetan lainnya, seperti vegas, skalabel, berkecepatan tinggi, dll., modul tersebut harus dinonaktifkan terlebih dahulu.