首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >低延迟/高性能网络(以太网)消息传递

低延迟/高性能网络(以太网)消息传递
EN

Stack Overflow用户
提问于 2012-01-04 08:25:02
回答 2查看 2.2K关注 0票数 10

背景

我想创建一个测试应用程序来测试不同系统的网络性能。为此,我计划让这台机器通过私有(否则不是繁忙的)网络发送以太网帧到另一台机器(或设备),后者只接收消息并将其发回。发送应用程序将记录往返时间(除其他外)。

测试的目的是查看一个特定的系统(OS +组件等)。当涉及到网络流量时执行。在下面的图片中,这是作为机器A的说明。请注意,我对对不感兴趣--网络基础设施的性能--(交换机、电缆等)--我试图测试机器A内部的网络流量性能(即当它碰到网卡直到到达用户空间时)。

我们将(试着)测量各种事情,一件事是消息的总往返,也包括机器A的中断延迟,一般的驱动程序开销等。机器A将是一个实时系统。但是为了支持这些测试,我需要一台单独的机器,它可以弹出消息,并以其他方式向被测试的系统添加网络刺激。这台独立的机器是下图中的机器B,也是这个问题的主题。

我的问题

我想开发一个应用程序,它可以以尽可能一致的(最好是较低的)延迟来接收和返回这些消息。我希望至少在几微秒内得到一致的延迟。为了简单起见,我想在像Windows或Linux这样的通用操作系统上这样做,但我愿意接受其他建议。除了操作系统和我的测试应用程序之外,机器上不会有其他负载(CPU或其他负载)。

我想到了以下几种方法:

  • 在具有高优先级的用户空间中运行的正常应用程序
  • 在内核空间中运行以避免用户空间/内核空间转换的线程
  • 一个现成的设备已经能做到这一点了(不过我还没找到)

问题

是否有任何其他方法或框架已经这样做了?为了获得一致和低延迟,我还需要想些什么呢?建议采取什么办法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-04 12:41:10

您提到要测试Machine的内部性能,但是“需要一个单独的机器”;但是,您不想测试网络基础结构的性能。

您比我更了解您的需求;但是,如果我在机器A中测试网络基础设施,我会这样设置我的测试:

造成这种情况的原因有两个:

  • 您可以使用以太网回线来模拟机器B执行的“乒乓”功能
  • 在衡量性能时,消除您不关心的基础设施传输几乎总是一个更好的解决方案。

如果使用此测试方法,请务必注意以下几点:

  • 以太网在建立链接之前对铜进行信号噪声测试。如果你使你的回环弯曲太紧,你可以引入更多的延迟,如果以太网决定回到一个较低的速度,因为在电缆扭结。铜以太网布线没有最小长度。
  • 正如您可能知道的,NIC/驱动程序版本/ OS的组合可能会对主机内延迟产生重大影响。我在一家网络设备制造商工作,办公室里的一个人曾经是SolarFlare的应用工程师。他声称,许多华尔街交易系统使用SolarFlare的NIC,因为他们的产品延迟时间较短;他还说SolarFlare的驱动程序可以让您访问NIC缓冲区。警告:第三方信息,我无法证实自己。
  • 如果将帧循环到机器A,则将源和目标mac-地址设置为NIC上刻录的内地址。

即使您需要从Machine接收修改过的"pong“帧,您仍然可以使用此拓扑结构,只需在机器A中的代码接收端重写数据包字段。在机器A的”模块“中放置尽可能多(或很少)的插装点来比较帧时间戳。

FYI:

我在对您的问题的评论中提到的嵌入式系统是用于测量网络基础设施的延迟,而不是终端主机。这是我能想到的检测主机延迟的最好方法。

票数 9
EN

Stack Overflow用户

发布于 2012-01-04 11:21:45

作为一个现成的解决方案,我建议看看Solace,Tibco和AMQP。这些都是在交易应用程序中广泛使用的企业消息传递框架。AMQP是开放源码的,能够处理每秒最多10万条消息的吞吐量。我不确定其他框架的延迟性。AMQP消息路由器有一个Java或C++实现。当然,C++ one会返回更高的性能。

编辑我刚刚听说了一个名为UltraMessaging的新产品,它可以以每秒7,000,000条消息的速度向Java、C++或C#客户端提供吞吐量。克里奇。

诚挚的问候,

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8723937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档