多播发送性能

Ted*_*ham 5 c java performance networking multicast

我们最近完成了对组播发送性能的分析.令人高兴的是,Java和C几乎完全相同,因为我们在Windows和Solaris上测试了不同的流量发送速率.

但是,我们注意到发送多播消息的时间随着发送之间的时间的增加而增加.我们调用发送的频率越高,完成发送呼叫所需的时间就越少.

该应用程序让我们控制在调用发送之间等待的时间,低于您看到的时间随着数据包之间的延迟增加而增加.当发送1000个包/秒(1毫秒等待时间)时,调用发送只需要13微秒.在1包/秒(1000毫秒等待时间)下,该时间增加到20微秒.

Wait time (ms)                      us to send
0                                   8.67   
1                                   12.97  
10                                  13.06  
100                                 18.03  
1000                                20.82
10000                               57.20  
Run Code Online (Sandbox Code Playgroud)

我们从Java和C以及Windows和Solaris上都看到了这种现象.我们正在使用Intel Pro 1000双端口网卡在戴尔1950服务器上进行测试.微基准测试很难,特别是在Java中,但我们认为这与JITing或GC无关.

我用于测试的Java代码和命令行位于:http://www.moneyandsoftware.com/2009/09/18/multicast-send-performance/

Mar*_*ayo 2

一些理论:

我的第一个想法是,我会考虑缓存是这里的一个因素 - 如果任务和值仍在堆栈上或在最近的短期内存中,您可能会发现它能够更快地发送它们。随着时间的增加,它仍然可用的机会会减少,因此平均需要更长的时间。

但是,如果是这种情况,我希望有一个上限......在某个时刻它总是在缓存中。

另一种原因是,随着时间的推移,您的应用程序/测试/平台中存在内存泄漏或性能下降。这也意味着(如果存在)您等待的时间越长,降低性能的时间就越长,因此发送所需的时间就越长。

另外 - 如果您在发送数据包之间花费更长的时间 - 您可能会超过地址学习超时 - IP 表和 MAC 表。如果这些表/缓存已过期,他们需要在转发数据包之前重新学习它们。

祝你好运!