Mozilla telah berjaya menggantikan tumpukan rangkaian UDP lama Firefox dengan pelaksanaan moden berasaskan Rust, memberikan peningkatan prestasi yang mengagumkan untuk trafik HTTP/3. Projek ini, yang mengambil masa lebih setahun untuk disiapkan, menunjukkan bagaimana pengemaskinian kod rangkaian berusia beberapa dekad dapat membuka kunci peningkatan ketara dalam kelajuan pelayaran web.
Peningkatan Prestasi Besar-besaran dalam Senario Terikat CPU
Pelaksanaan baharu ini memberikan hasil yang luar biasa dalam persekitaran ujian. Firefox kini mencapai daya pemprosesan sehingga 4 Gbps berbanding kurang daripada 1 Gbps dengan sistem lama - peningkatan 400% dalam kes-kes ekstrem. Peningkatan ini datang daripada penggantian perpustakaan NSPR (Netscape Portable Runtime) yang lapuk dengan quinn-udp, perpustakaan UDP moden yang dibina untuk projek Quinn QUIC.
Lonjakan prestasi ini penting kerana sekitar 20% daripada trafik HTTP Firefox kini menggunakan HTTP/3, yang berjalan di atas protokol QUIC dan UDP. Setiap kali anda memuatkan laman web menggunakan HTTP/3, pelayar anda mengendalikan aktiviti rangkaian UDP yang besar di belakang tabir.
Perbandingan Prestasi
- Sistem NSPR lama: < 1 Gbps daya pemprosesan
- Sistem quinn-udp baharu: Sehingga 4 Gbps daya pemprosesan
- Peningkatan: Peningkatan 400% dalam senario terikat CPU
- Trafik HTTP/3: ~20% daripada jumlah trafik HTTP Firefox
Panggilan Sistem Moden Membuka Potensi Tersembunyi
Kunci kepada peningkatan ini terletak pada penggunaan ciri-ciri sistem pengendalian canggih yang tidak wujud ketika kod rangkaian asal Firefox ditulis. Sistem moden menawarkan keupayaan kumpulan melalui API seperti sendmmsg dan recvmmsg, yang boleh mengendalikan berbilang paket rangkaian sekaligus dan bukannya memprosesnya secara individu. Sesetengah platform juga menyokong pemindahan segmentasi, di mana kad rangkaian itu sendiri mengendalikan pemecahan ketulan data besar kepada paket yang lebih kecil.
Walau bagaimanapun, perbincangan komuniti mendedahkan bahawa walaupun peningkatan mengagumkan ini mungkin meninggalkan prestasi yang ketara. Analisis teknikal mencadangkan sistem asas secara teorinya boleh mengendalikan daya pemprosesan yang jauh lebih tinggi, menunjukkan kesesakan di tempat lain dalam tumpukan rangkaian.
Ciri-ciri Teknikal
- Keselamatan Memori: Pelaksanaan Rust menggantikan kod NSPR berasaskan C
- Sokongan ECN: ~50% daripada sambungan QUIC dalam Firefox Nightly menggunakan ECN
- Pemprosesan Kelompok: sendmmsg/recvmmsg untuk pemprosesan berbilang paket
- Segmentasi Offload: GSO/GRO pada Linux , USO/URO pada Windows (dilumpuhkan)
Cabaran Khusus Platform Mencipta Masalah
Walaupun pelaksanaan Linux berjalan lancar dengan sokongan penuh untuk ciri-ciri canggih, platform lain menimbulkan halangan yang ketara. Ciri UDP Segmentation Offload (USO) Windows terpaksa dilumpuhkan selepas menyebabkan kehilangan paket dan bahkan ranap pemacu rangkaian pada sesetengah sistem. Pepijat yang sangat mengelirukan menjejaskan peranti Windows on ARM dengan WSL diaktifkan, di mana sistem tidak dapat menentukan saiz paket dengan betul.
macOS membawa komplikasi tersendiri walaupun menawarkan API pemprosesan kelompok tidak berdokumen yang dipanggil sendmmsg_nocopy dan recvmmsg_nocopy. Mozilla akhirnya memutuskan untuk tidak menggunakan ciri-ciri ini dalam pengeluaran kerana kebimbangan mengenai Apple yang berpotensi mengeluarkannya tanpa notis.
Android terbukti sangat mencabar, dengan Firefox masih menyokong peranti Android 5 yang berusia lebih 10 tahun. Platform kuno ini memerlukan penyelesaian untuk penapis keselamatan dan kekurangan sokongan untuk ciri-ciri rangkaian moden, memaksa pembangun mengekalkan keserasian dengan sistem yang sangat lapuk.
Status Sokongan Platform
- Linux: Sokongan penuh GSO/GRO diaktifkan
- Windows: USO dilumpuhkan disebabkan kehilangan paket dan kerosakan pemacu
- macOS: API kelompok tidak didokumentasikan tersedia tetapi tidak digunakan dalam pengeluaran
- Android: Sokongan terhad, mengekalkan keserasian dengan Android 5 (10+ tahun lama)
Keselamatan dan Faedah Masa Depan
Selain prestasi mentah, pelaksanaan berasaskan Rust menyediakan kelebihan keselamatan memori berbanding kod berasaskan C sebelumnya. Sistem baharu juga membolehkan sokongan Explicit Congestion Notification (ECN) merentasi semua platform utama, dengan Firefox Nightly menunjukkan kira-kira 50% sambungan QUIC kini menggunakan ECN.
Projek ini menunjukkan kedua-dua potensi dan cabaran dalam memodernkan infrastruktur pelayar. Walaupun peningkatan prestasi adalah besar, pengalaman ini menyerlahkan bagaimana ketidakkonsistenan platform dan keperluan sokongan warisan boleh merumitkan pengoptimuman yang mudah sekalipun.
Nota teknikal: QUIC ialah protokol pengangkutan moden yang direka untuk meningkatkan prestasi web, manakala UDP (User Datagram Protocol) ialah protokol rangkaian asas yang digunakan QUIC untuk penghantaran data.
Rujukan: Fast UDP I/O for Firefox in Rust