【发布时间】:2012-02-02 04:21:27
【问题描述】:
背景
我想创建一个测试应用程序来测试不同系统的网络性能。为此,我计划让该机器通过专用(否则不忙)网络将以太网帧发送到另一台机器(或设备),该机器(或设备)只是接收消息并将其发回。发送应用程序将记录总往返时间(除其他外)。
测试的目的是查看特定系统(操作系统 + 组件等)在网络流量方面的表现。这在下图中显示为机器 A。请注意,我对网络基础设施(交换机、电缆等)的性能不感兴趣 - 我正在尝试测试机器 A 内网络流量的性能(即从它碰到网卡直到它到达用户空间)
我们将(尝试)测量所有类型的东西,一是消息的总往返,还有机器 A 的中断延迟、一般驱动程序开销等。机器 A 将是一个实时系统。但是为了支持这些测试,我需要一台可以反弹消息并以其他方式向测试系统添加网络刺激的单独机器。这台单独的机器是下图中的机器 B,这就是这个问题的内容。
我的问题
我想开发一个能够以尽可能一致(最好是低)延迟接收和返回这些消息的应用程序。我希望至少在几微秒内获得一致的延迟。为简单起见,我想在 Windows 或 Linux 等通用操作系统上执行此操作,但我愿意接受其他建议。除了操作系统和我的测试应用程序之外,机器上不会有其他负载(CPU 或其他负载)。
我想到了以下方法:
- 在用户空间中以高优先级运行的普通应用程序
- 在内核空间中运行的线程以避免用户空间/内核空间转换
- 现成的设备已经可以做到这一点(虽然我还没有找到)
问题
是否有其他方法或框架已经可以做到这一点?为了获得一致的低延迟,我还需要考虑什么?推荐什么方法?
【问题讨论】:
-
问:“我还需要考虑什么才能获得一致的低延迟?” A:内核执行(linux)/驱动程序执行(windows)。也就是说,您能否阐明您关心的延迟限制以及您将如何使用您获得的信息? “尽可能精确”并不总是可行的,您可能会发现让您的测量结果“足够好”更容易
-
要达到尽可能低的延迟,请考虑在 FPGA 中实现。您不需要处理器,只需要一个 MAC 和一些逻辑来在重新发送之前重写数据包标头。您可以开始使用带有 FPGA 和 PHY 的评估板。
-
@Mike:好点子。老实说,我不确定我可以期待什么数字,我准备好使用解决方案/系统可以给我的东西。虽然如果延迟在几微秒内保持一致会很好。我不知道这是否可能,因为我以前从未这样做过 - 事实上,作为问题的答案,这种输入将非常有价值
-
@IsakSavo,您能否说明您将如何使用您获得的信息?已经有嵌入式系统可以在微秒内测量和存档网络延迟;但是,我需要了解您的申请才能提供帮助
-
只使用
hrPing怎么样?见stackoverflow.com/a/3951875/288747和cfos.de/en/ping/ping.htm
标签: windows linux performance network-programming