So sánh hiệu suất trình điều khiển mạng ở các phiên bản ở 10 ngôn ngữ lập trình

Một nhóm các nhà nghiên cứu từ các trường đại học Đức được phát hành phát hiện cuộc thí nghiệm, trong đó 10 phiên bản trình điều khiển tiêu chuẩn cho card mạng Intel Ixgbe (X10xx) 5 gigabit đã được phát triển bằng các ngôn ngữ lập trình khác nhau. Trình điều khiển chạy trong không gian người dùng và được triển khai trong C, Rust, Go, C#, Java, OCaml, Haskell, Swift, JavaScript và Python. Khi viết mã, trọng tâm chính là đạt được hiệu suất tốt nhất có thể, có tính đến đặc điểm của từng ngôn ngữ. Tất cả các tùy chọn đều giống hệt nhau về chức năng và bao gồm khoảng 1000 dòng mã. Phát triển dự án lây lan theo giấy phép BSD.

Phiên bản Rust của trình điều khiển hóa ra có hiệu suất rất gần với trình điều khiển tham chiếu trong ngôn ngữ C. Dưới tải gửi đồng thời 32 gói, trình điều khiển Rust hơi chậm, nhưng trong các thử nghiệm với hơn 32 gói mỗi khối, tốc độ thực tế không khác biệt so với trình điều khiển C và thể hiện hiệu suất ở mức xử lý 28 triệu gói mỗi giây trên máy chủ có CPU Xeon E3-1230 v2 3.3 GHz.

So sánh hiệu suất trình điều khiển mạng ở các phiên bản ở 10 ngôn ngữ lập trình

Vị trí tiếp theo về mặt hiệu suất do trình điều khiển sử dụng ngôn ngữ Go và C# chiếm giữ, cho kết quả khá gần (trình điều khiển Go đã giành chiến thắng trong các bài kiểm tra với các khối lên tới 16 gói và bắt đầu thua nhẹ trong các bài kiểm tra có hơn 16 gói). trong một khối). Với 256 gói mỗi khối, hiệu suất cao nhất của trình điều khiển C# là khoảng 28 triệu gói mỗi giây và trình điều khiển Go là khoảng 25 triệu gói mỗi giây.

Tiếp theo, với kết quả khá gần, là động lực cho
Java, OCaml và Haskell vốn đã tụt hậu đáng kể so với các tùy chọn đã được xem xét trước đó và không thể vượt qua thanh 12 triệu gói mỗi giây. Trình điều khiển Swift và JavaScript thậm chí còn có độ trễ lớn hơn khi có thể xử lý các luồng ở mức 5 triệu gói mỗi giây.

Xếp hạng cao nhất thuộc về trình điều khiển Python, trình điều khiển này chỉ có thể xử lý 0.14 triệu gói mỗi giây. Việc triển khai Python được sử dụng để đánh giá tốc độ của trình thông dịch không có JIT và không có tối ưu hóa cụ thể (mã được thực thi bằng CPython 3.7 và không tương thích với PyPy, nhưng cần lưu ý rằng việc tối ưu hóa cấu trúc lưu trữ dữ liệu có thể cải thiện hiệu suất khoảng 10 lần ).

Ngoài ra, các bài kiểm tra độ trễ đã được thực hiện để cho thấy tính hiệu quả của việc lưu vào bộ đệm và tác động của trình thu gom rác. Thử nghiệm đã đo độ trễ sau khi mỗi gói tin được trình điều khiển chuyển tiếp so với thời điểm chính xác được gửi đi. Dẫn đầu vẫn là trình điều khiển C và Rust, kết quả của chúng trên thực tế không thể phân biệt được với luồng 1 triệu gói mỗi giây (khoảng 20 µs). Trình điều khiển cờ vây hoạt động tốt, chỉ kém những người dẫn đầu một chút và cũng duy trì ở mức 20 µs. Trình điều khiển C# cho thấy độ trễ khoảng 50 µs.
Độ trễ dài nhất được hiển thị bởi trình điều khiển JavaScript và Java (độ trễ hơn 300 µs).

So sánh hiệu suất trình điều khiển mạng ở các phiên bản ở 10 ngôn ngữ lập trình

Nghiên cứu được thực hiện nhằm đánh giá khả năng phát triển trình điều khiển và các thành phần hệ điều hành bằng các ngôn ngữ cấp cao hơn C. Hiện tại, 39 trong số 40 vấn đề về bộ nhớ trong Linux có liên quan đến trình điều khiển, do đó vấn đề sử dụng ngôn ngữ an toàn hơn và di chuyển trình điều khiển ra khỏi kernel và vào không gian người dùng vẫn có liên quan và các nhà sản xuất đã tích cực thử nghiệm theo hướng này (ví dụ: Google đã phát triển ngăn xếp TCP cho HĐH Cây khoa vản anh bằng ngôn ngữ Go, công ty CloudFlare tạo triển khai giao thức QUIC trong Rust, Apple đã chuyển ngăn xếp TCP trên thiết bị di động vào không gian người dùng).

Trong quá trình làm việc, người ta kết luận rằng ngôn ngữ Rust là ứng cử viên tốt nhất để phát triển trình điều khiển. Khả năng của Rust loại bỏ các vấn đề liên quan đến quản lý bộ nhớ cấp thấp với cái giá là giảm hiệu suất khoảng 2% đến 10% so với trình điều khiển C. Go và C# cũng được coi là phù hợp để tạo các thành phần hệ thống trong các tình huống có thể chấp nhận được độ trễ dưới một phần nghìn giây do việc thu gom rác gây ra.

Nguồn: opennet.ru

Thêm một lời nhận xét