Gần đây, chúng tôi đã hoàn thành một phân tích về hiệu suất gửi đa hướng. Hạnh phúc, Java và C thực hiện gần như giống hệt nhau khi chúng tôi kiểm tra tốc độ gửi lưu lượng truy cập khác nhau trên Windows và Solaris.Khả năng gửi đa hướng
Tuy nhiên, chúng tôi nhận thấy rằng thời gian gửi tin nhắn đa hướng tăng lên khi thời gian giữa gửi tăng. Càng gửi chúng tôi càng thường xuyên, càng mất ít thời gian để hoàn thành cuộc gọi gửi.
Ứng dụng cho phép chúng tôi kiểm soát lượng thời gian chúng tôi chờ giữa việc gửi, bên dưới bạn thấy thời gian tăng khi độ trễ giữa các gói tăng lên. Khi gửi 1000 gói/giây (thời gian chờ đợi 1 ms), nó chỉ mất 13 micro giây để gọi gửi. Tại 1 gói/giây (thời gian chờ 1000 ms), thời gian đó tăng lên 20 micro giây.
Wait time (ms) us to send
0 8.67
1 12.97
10 13.06
100 18.03
1000 20.82
10000 57.20
Chúng tôi thấy hiện tượng này từ cả Java và C và trên cả Windows và Solaris. Chúng tôi đang thử nghiệm trên máy chủ Dell 1950, với thẻ mạng cổng kép Intel Pro 1000. Micro-benchmarking là khó, đặc biệt là trong Java, nhưng chúng tôi không nghĩ rằng điều này có liên quan đến JITing hoặc GC.
mã Java và dòng lệnh Tôi đang sử dụng cho các bài kiểm tra đang ở: http://www.moneyandsoftware.com/2009/09/18/multicast-send-performance/
Để xác minh lý thuyết này, OP nên kiểm tra với unicast và xem một cấu hình tương tự xuất hiện trong phân tích. – Stef
tốt, về mặt lý thuyết - nhưng hầu hết các thiết bị chuyển mạch/bộ định tuyến tôi đã làm việc với việc duy trì các bảng và bộ nhớ riêng biệt cho unicast so với đa hướng. Vì vậy, cả hai đều có cùng thời gian chờ, nhưng IIRC cũng có thể cấu hình được ... –
Sẽ không hết thời gian chờ trong bảng định tuyến dẫn đến mọi thứ trong thời gian chờ là cùng tốc độ, trong khi mọi thứ trên đều chậm hơn.Nhưng chúng ta thấy nó giảm dần khi chúng ta tăng thời gian giữa các gói. –