Tôi đang điều tra xem liệu tôi có thể triển khai ứng dụng HPC trên Windows để nhận các datagram đa tuyến UDP nhỏ (chủ yếu là 100-400 byte) với tốc độ cao hay không, sử dụng hàng tá hoặc tối đa 200 nhóm phát đa hướng (tức là sử dụng MSI-X và RSS chia tỷ lệ thành nhiều lõi), thực hiện một số xử lý cho mỗi gói và sau đó gửi nó ra. Gửi qua TCP Tôi đã cố gắng tăng lên đến mức tôi cần (6.4Gb / giây) mà không va vào tường, nhưng việc nhận datagram với tốc độ pps cao hóa ra là một vấn đề.
Trong một thử nghiệm gần đây trên máy NUMA thông số kỹ thuật cao với một ethernet ethernet 10 cổng 10 cổng trên Windows 2012 R2, tôi chỉ có thể nhận được hàng trăm ngàn datagram UDP mỗi giây (giảm sớm, tức là không thực sự xử lý dữ liệu, để loại bỏ chi phí xử lý của ứng dụng của tôi khỏi phương trình để xem tốc độ của nó nhanh như thế nào) bằng cách sử dụng lõi 2x12 và phần nhân của 12 nhóm phát đa hướng được kiểm tra dường như được phân phối trên 8 hoặc 10 lõi của một nút NUMA ( hàng đợi tối đa RSS đã được đặt đến 16) - mặc dù có ứng dụng .net, vì vậy các ứng dụng gốc sẽ có thể đi nhanh hơn.
Nhưng ngay cả Len Holgate cũng chỉ có thể nhận được các gói UDP với tốc độ 500kpps trong các thử nghiệm Windows RIO hiệu suất cao của mình , sử dụng tải trọng UDP là 1024 byte.
Trong whitepaper của QLogic (Hệ điều hành đang được thử nghiệm không được đề cập), các giới hạn cho "định tuyến gói siêu nhỏ đa luồng" (để bao gồm cả nhận và gửi sau?) Được đặt ở mức 5,7Mpps . Trong các bài viết về mạng Linux , các giới hạn được đặt ở mức 1Mpps đến 2Mpps trên mỗi lõi (được báo cáo tăng tỷ lệ tuyến tính nhiều hơn hoặc ít hơn), hoặc thậm chí 15Mpps với các giải pháp đặc biệt bỏ qua kernel.
Ví dụ: sơ đồ mạng
có thể tạo lưu lượng ở tốc độ đường truyền ( 14,88Mpps ) trên liên kết 10GigE chỉ với một lõi duy nhất chạy ở tốc độ 900Mhz. Điều này tương đương với khoảng 60-65 chu kỳ xung nhịp cho mỗi gói và có tỷ lệ tốt với lõi và tần số xung nhịp (với 4 lõi, tốc độ đường truyền đạt được ở mức dưới 450 MHz). Tỷ lệ tương tự đạt được ở phía nhận .
Vậy tôi có thể đi bao xa (các phiên bản mới nhất) của Windows / Windows Server, đặc biệt là nhận đa tuyến UDP như được mô tả trong đoạn đầu?
Chỉnh sửa Có một bài đăng trên blog trên nền tảng đám mây - và một phần bình luận thú vị - về cách thực hiện trên Linux: Cách nhận một triệu gói mỗi giây và có trang bình luận tin tức về tin tặc tương ứng .