2009-09-18 31 views
5

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/

Trả lời

2

Một số lý thuyết:

Suy nghĩ đầu tiên của tôi là tôi sẽ xem xét bộ nhớ đệm là một yếu tố ở đây - nếu các nhiệm vụ và giá trị vẫn nằm trên ngăn xếp hoặc trong bộ nhớ ngắn hạn gần đây, bạn có thể thấy nó có thể gửi chúng nhanh hơn. Khi thời gian tăng, cơ hội nó vẫn có sẵn giảm, do đó, trung bình sẽ mất nhiều thời gian hơn.

Tuy nhiên, tôi hy vọng sẽ có giới hạn trên nếu đây là trường hợp ... một số điểm mà tại đó nó luôn nằm trong bộ nhớ cache.

Lý do khác là có rò rỉ bộ nhớ hoặc một số hiệu suất xuống cấp theo thời gian trong ứng dụng/thử nghiệm/nền tảng của bạn. Điều này cũng sẽ (nếu nó tồn tại) có nghĩa là bạn còn chờ lâu hơn, thời gian càng lâu để làm giảm hiệu suất, và do đó sẽ mất nhiều thời gian hơn để gửi.

CSONG - nếu bạn đang dùng lâu hơn giữa các gói để gửi chúng - bạn có thể vượt quá thời gian chờ của địa chỉ - cả bảng IP và bảng MAC. Nếu các bảng/bộ nhớ này đã hết hạn, chúng sẽ cần phải học lại chúng trước khi chuyển tiếp gói.

Chúc may mắn!

+0

Để 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

+0

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 ... –

+0

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. –

1

Mã để thực hiện các tác vụ đó được lưu vào bộ nhớ cache gần CPU hơn (có thể vẫn còn trong sổ đăng ký) khi cuộc gọi vừa diễn ra.

+0

Nếu đúng, bạn sẽ thấy hiệu suất của bất kỳ hoạt động nào bị suy giảm khi thời gian giữa các hoạt động tăng lên. Tôi thay đổi thử nghiệm để làm một sqrt hoặc tan thay vào đó và chúng ta thấy một đường cong giảm hiệu suất tương tự. Có sử dụng mối quan hệ CPU và che chắn đúng cách để giải quyết vấn đề này không? –

1

Bạn đợi giữa các lần gửi như thế nào? Bạn đã cố gắng bận rộn chờ đợi, do đó bạn không từ bỏ CPU?

Các vấn đề liên quan