Hiệu suất UDP của Firefox tăng vọt 400% với System Calls hiện đại, nhưng vẫn còn vấn đề về nền tảng

Nhóm Cộng đồng BigGo
Hiệu suất UDP của Firefox tăng vọt 400% với System Calls hiện đại, nhưng vẫn còn vấn đề về nền tảng

Mozilla đã thành công trong việc thay thế hệ thống mạng UDP lỗi thời của Firefox bằng một triển khai hiện đại dựa trên Rust, mang lại những cải thiện hiệu suất ấn tượng cho lưu lượng HTTP/3. Dự án này, mất hơn một năm để hoàn thành, cho thấy việc cập nhật mã mạng cũ hàng thập kỷ có thể mở khóa những cải thiện đáng kể trong tốc độ duyệt web.

Tăng hiệu suất khổng lồ trong các tình huống giới hạn CPU

Triển khai mới mang lại kết quả đáng chú ý trong môi trường thử nghiệm. Firefox hiện đạt được thông lượng lên tới 4 Gbps so với ít hơn 1 Gbps với hệ thống cũ - một cải thiện 400% trong các trường hợp cực đoan. Sự tăng trưởng này đến từ việc thay thế thư viện NSPR ( Netscape Portable Runtime ) lỗi thời bằng quinn-udp, một thư viện UDP hiện đại được xây dựng cho dự án Quinn QUIC.

Sự tăng trưởng hiệu suất này quan trọng vì khoảng 20% lưu lượng HTTP của Firefox hiện sử dụng HTTP/3, chạy trên các giao thức QUIC và UDP. Mỗi khi bạn tải một trang web sử dụng HTTP/3, trình duyệt của bạn xử lý hoạt động mạng UDP đáng kể ở hậu trường.

So sánh hiệu suất

  • Hệ thống NSPR cũ: < 1 Gbps thông lượng
  • Hệ thống quinn-udp mới: Lên đến 4 Gbps thông lượng
  • Cải thiện: Tăng 400% trong các tình huống bị giới hạn bởi CPU
  • Lưu lượng HTTP/3: ~20% tổng lưu lượng HTTP của Firefox

System Calls hiện đại mở khóa tiềm năng ẩn

Chìa khóa cho những cải thiện này nằm ở việc sử dụng các tính năng hệ điều hành tiên tiến mà không tồn tại khi mã mạng gốc của Firefox được viết. Các hệ thống hiện đại cung cấp khả năng xử lý hàng loạt thông qua các API như sendmmsg và recvmmsg, có thể xử lý nhiều gói mạng cùng một lúc thay vì xử lý từng cái một. Một số nền tảng cũng hỗ trợ segmentation offloading, nơi chính card mạng xử lý việc chia nhỏ các khối dữ liệu lớn thành các gói nhỏ hơn.

Tuy nhiên, các cuộc thảo luận cộng đồng tiết lộ rằng ngay cả những cải thiện ấn tượng này cũng có thể để lại hiệu suất đáng kể trên bàn. Phân tích kỹ thuật cho thấy các hệ thống cơ bản về mặt lý thuyết có thể xử lý thông lượng cao hơn nhiều, chỉ ra các nút thắt cổ chai ở nơi khác trong ngăn xếp mạng.

Tính năng Kỹ thuật

  • Bảo mật Bộ nhớ: Triển khai Rust thay thế mã NSPR dựa trên C
  • Hỗ trợ ECN: ~50% kết nối QUIC trong Firefox Nightly sử dụng ECN
  • Xử lý theo Lô: sendmmsg/recvmmsg cho việc xử lý nhiều gói tin
  • Phân tải Phân đoạn: GSO/GRO trên Linux, USO/URO trên Windows (đã tắt)

Thách thức đặc thù nền tảng tạo ra đau đầu

Trong khi triển khai Linux diễn ra suôn sẻ với sự hỗ trợ đầy đủ cho các tính năng tiên tiến, các nền tảng khác lại đặt ra những trпрепятствия đáng kể. Tính năng UDP Segmentation Offload (USO) của Windows phải bị vô hiệu hóa sau khi gây ra mất gói tin và thậm chí crash driver mạng trên một số hệ thống. Một lỗi đặc biệt khó hiểu ảnh hưởng đến Windows trên các thiết bị ARM với WSL được bật, nơi hệ thống không thể xác định đúng kích thước gói tin.

macOS mang lại những phức tạp riêng mặc dù cung cấp các API xử lý hàng loạt không có tài liệu gọi là sendmmsg_nocopy và recvmmsg_nocopy. Mozilla cuối cùng quyết định không sử dụng những tính năng này trong sản xuất do lo ngại về việc Apple có thể loại bỏ chúng mà không thông báo.

Android tỏ ra đặc biệt thách thức, với Firefox vẫn hỗ trợ các thiết bị Android 5 đã hơn 10 tuổi. Nền tảng cổ xưa yêu cầu các giải pháp thay thế cho bộ lọc bảo mật và thiếu hỗ trợ cho các tính năng mạng hiện đại, buộc các nhà phát triển phải duy trì khả năng tương thích với các hệ thống lỗi thời nghiêm trọng.

Tình trạng hỗ trợ nền tảng

  • Linux: Đã bật đầy đủ hỗ trợ GSO/GRO
  • Windows: USO bị vô hiệu hóa do mất gói tin và lỗi driver
  • macOS: Các API batch không được ghi chép có sẵn nhưng không sử dụng trong sản xuất
  • Android: Hỗ trợ hạn chế, duy trì khả năng tương thích với Android 5 (hơn 10 năm tuổi)

Bảo mật và lợi ích tương lai

Ngoài hiệu suất thô, triển khai dựa trên Rust cung cấp lợi thế an toàn bộ nhớ so với mã dựa trên C trước đó. Hệ thống mới cũng cho phép hỗ trợ Explicit Congestion Notification (ECN) trên tất cả các nền tảng chính, với Firefox Nightly cho thấy khoảng 50% kết nối QUIC hiện sử dụng ECN.

Dự án này chứng minh cả tiềm năng và thách thức của việc hiện đại hóa cơ sở hạ tầng trình duyệt. Trong khi những cải thiện hiệu suất là đáng kể, trải nghiệm này làm nổi bật cách mà sự không nhất quán của nền tảng và yêu cầu hỗ trợ legacy có thể làm phức tạp ngay cả những tối ưu hóa đơn giản.

Ghi chú kỹ thuật: QUIC là một giao thức truyền tải hiện đại được thiết kế để cải thiện hiệu suất web, trong khi UDP (User Datagram Protocol) là giao thức mạng cơ bản mà QUIC sử dụng để truyền dữ liệu.

Tham khảo: Fast UDP I/O for Firefox in Rust