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/
一些理论:
我的第一个想法是,我会考虑缓存是这里的一个因素 - 如果任务和值仍在堆栈上或在最近的短期内存中,您可能会发现它能够更快地发送它们。随着时间的增加,它仍然可用的机会会减少,因此平均需要更长的时间。
但是,如果是这种情况,我希望有一个上限......在某个时刻它总是在缓存中。
另一种原因是,随着时间的推移,您的应用程序/测试/平台中存在内存泄漏或性能下降。这也意味着(如果存在)您等待的时间越长,降低性能的时间就越长,因此发送所需的时间就越长。
另外 - 如果您在发送数据包之间花费更长的时间 - 您可能会超过地址学习超时 - IP 表和 MAC 表。如果这些表/缓存已过期,他们需要在转发数据包之前重新学习它们。
祝你好运!