我想创建一个测试应用程序来测试不同系统的网络性能。为此,我计划让该机器通过专用(非繁忙)网络将以太网帧发送到另一台机器(或设备),该机器只接收该消息并将其发回。发送应用程序将记录总往返时间(以及其他内容)。
测试的目的是了解特定的系统(OS +组件等)在网络流量方面的表现。这在下图中显示为机器A.请注意,我对网络基础设施(交换机,电缆等)的性能不感兴趣 - 我正在尝试测试机器A内网络流量的性能(即从它到达网卡直到它到达用户空间的时候)
我们将(尝试)测量所有类型的东西,一件事是消息的总往返,还有机器A的中断延迟,一般驱动程序开销等。机器A将是一个实时系统。但是为了支持这些测试,我需要一个可以反弹消息的独立机器,并以其他方式为测试系统添加网络刺激。这个单独的机器是下图中的机器B,是这个问题的关键。
我想开发一个应用程序,它可以尽可能一致地(最好是低)延迟接收和返回这些消息。我希望至少在几微秒内得到一致的延迟。为简单起见,我想在Windows或Linux等通用操作系统上执行此操作,但我愿意接受其他建议。除操作系统和我的测试应用程序外,机器上不会有其他负载(CPU或其他)。
我想到了以下方法:
是否还有其他方法或框架可以做到这一点?还需要考虑什么才能获得一致且低延迟?建议采用什么方法?
答案 0 :(得分:9)
您提到要测试机器A的内部性能,但“需要一台单独的机器”;但是,您不希望测试网络基础架构的性能。
你比我更了解你的要求;但是,如果我在机器A中测试网络基础设施,我会设置我的测试:
这有几个原因:
如果您使用此测试方法,请务必注意以下几点:
即使您需要从机器B接收修改后的“pong”帧,您仍然可以使用此拓扑,只需在机器A的代码接收端重写数据包字段。放入尽可能多(或很少)的仪器在机器A的“模块”中按照您的意愿点来比较帧时间戳。
供参考:
我在您的问题评论中提到的嵌入式系统用于测量网络基础架构的延迟,而不是终端主机。这是我能够考虑用于检测主机延迟的最佳方法。
答案 1 :(得分:4)
作为现成的解决方案,我建议看看Solace,Tibco和AMQP。这些都是在交易应用程序中广泛使用的企业消息传递框架。 AMQP是开源的,能够处理每秒高达100,000条消息的吞吐量。我不确定其他框架的延迟。 AMQP消息路由器有Java或C ++实现。 C ++当然会返回更高的性能。
编辑我刚刚听说过一种名为UltraMessaging的新产品,它可以为Java,C ++或C#客户端提供每秒7,000,000条消息的吞吐量。 Crikey。
致以最诚挚的问候,