- QUIC là giao thức được kỳ vọng sẽ mang lại bước thay đổi đột phá trong việc cải thiện hiệu năng ứng dụng web, nhưng hiệu năng thực tế không đạt như kỳ vọng
- Bài báo này phân tích một cách có hệ thống hiệu năng của QUIC trên các mạng tốc độ cao
Tóm tắt
- Trên Internet tốc độ cao, ngăn xếp UDP+QUIC+HTTP/3 cho thấy thông lượng dữ liệu giảm tới 45,2% so với TCP+TLS+HTTP/2
- Khoảng cách hiệu năng giữa QUIC và HTTP/2 càng lớn khi băng thông cơ sở tăng lên
- Vấn đề này được quan sát trên các ứng dụng khách truyền dữ liệu nhẹ và các trình duyệt web phổ biến (Chrome, Edge, Firefox, Opera), trên nhiều loại thiết bị (máy tính để bàn, di động) và nhiều loại mạng khác nhau (băng rộng có dây, mạng di động)
- Không chỉ ảnh hưởng đến truyền tệp mà còn tác động đến nhiều ứng dụng khác như truyền phát video (giảm bitrate video tới 9,8%), duyệt web, v.v.
- Thông qua phân tích truy vết gói tin nghiêm ngặt cùng với profiling ở không gian kernel và không gian người dùng, nghiên cứu đã xác định được nguyên nhân gốc rễ
- Cụ thể, chi phí xử lý phía máy nhận tăng cao do số lượng gói dữ liệu quá mức và ACK của QUIC được xử lý ở không gian người dùng
- Nghiên cứu cũng đưa ra các khuyến nghị cụ thể để giảm thiểu các vấn đề hiệu năng đã quan sát được
Nguyên nhân gốc rễ của suy giảm hiệu năng
- Phát sinh chi phí xử lý gói tin quá mức ở cấp kernel phía máy nhận
- QUIC không sử dụng UDP GRO (Generic Receive Offload), nên phải xử lý nhiều gói tin hơn rất nhiều so với TCP
- Điều này được xác nhận qua số lần gọi hàm
netif_receive_skb cao hơn nhiều ở QUIC
- QUIC cũng phát sinh chi phí xử lý gói tin quá mức trong không gian người dùng
- Có chi phí lớn khi xử lý số lượng lớn gói tin được chuyển lên từ kernel
- Việc tạo QUIC ACK trong không gian người dùng cũng là một nguyên nhân gây overhead
Đề xuất để giảm thiểu suy giảm hiệu năng
- Áp dụng UDP GRO ở phía máy nhận
- Giảm số lượng gói tin mà ngăn xếp UDP phải xử lý, từ đó giảm overhead ở cả kernel và không gian người dùng
- Tuy nhiên, việc triển khai UDP GRO trên nhiều môi trường client khác nhau có thể không dễ dàng
- Cải tiến các giải pháp offloading như GSO/GRO để phù hợp hơn với QUIC
- Hỗ trợ offloading cả các chuỗi gói UDP có kích thước khác nhau
- Bổ sung thiết lập pacing phù hợp cho GSO để tránh tắc nghẽn mạng
- Tối ưu hóa logic QUIC ở phía máy nhận
- Trì hoãn việc gửi QUIC ACK để giảm overhead khi tạo phản hồi
- Sử dụng
recvmmsg để đọc nhiều gói UDP trong một lần, qua đó cải thiện hiệu năng
- Sử dụng tải xuống đa luồng
- Với các tệp lớn, tải xuống đa luồng tận dụng nhiều lõi CPU có thể cải thiện hiệu năng nhận
- Tuy nhiên, cần cân nhắc vấn đề công bằng
1 bình luận
Ý kiến trên Hacker News
uringphức tạp, nhưng cần một API ở mức trung gian