首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >UDP通过环回发送到性能

UDP通过环回发送到性能
EN

Stack Overflow用户
提问于 2014-02-23 22:32:10
回答 2查看 3.9K关注 0票数 8

背景

我有一个非常高的吞吐量/低延迟网络应用程序(目标是每包<< 5 usec ),我想给它添加一些监视/度量。我听说过statsd的流行,这似乎是收集度量并将其输入我们的时间序列数据库的一种简单方法。发送度量是通过向守护进程(通常运行在同一台服务器上)写入一个小udp数据包来完成的。

我想描述在我的数据路径中发送5-10个udp数据包的影响,以了解它会增加多少延迟,并对它有多么糟糕感到惊讶。我知道这是一个非常模糊的微观基准,但我只是想大致了解一下它的落脚点。

我有个问题

我试图理解为什么要花这么长时间(相对地说)才能将UDP数据包发送到本地主机而不是远程主机。我是否可以进行任何调整以减少发送UDP数据包的延迟?我正在考虑的解决方案是将度量集合推送到辅助核心,或者在单独的主机上实际运行statsd守护进程。

我的设置/基准

CentOS 6.5与一些强大的服务器硬件。

我一直在使用的客户端测试程序可以在这里获得:https://gist.github.com/rishid/9178261

用gcc 4.7.3 gcc -O3 -std=gnu99 -mtune=native udp_send_bm.c -lrt -o udp_send_bm编译

接收端正在运行nc -ulk 127.0.0.1 12000 > /dev/null (每个IF的ip更改)。

我用下面的设备运行了这个微基准测试。

一些基准结果:

  • 回环
    • 数据包大小500 //每次发送时间() 2159纳塞克//总时间2.159518

  • 集成1GB美孚控制器
    • 数据包大小500 //每次发送时间() 397纳塞克//总时间0.397234

  • 英特尔ixgbe 10 Gb
    • 数据包大小500 //每次发送时间() 449纳塞克//总时间0.449355

  • 带有用户空间堆栈(onload) 的太阳耀斑10 Gb
    • 数据包大小500 //每次发送时间() 317纳塞克//总时间0.317229

EN

回答 2

Stack Overflow用户

发布于 2014-02-24 23:14:54

写入回送将不是一种有效的方式来沟通进程间的剖析。通常,缓冲区在被处理之前会被复制多次,并且您会因为使用udp而面临丢弃数据包的风险。您还在操作系统中进行额外的调用,因此增加了上下文切换的风险(~2us)。

目标是每包<< 5 usec

这是一个硬实时要求,还是一个软要求?通常,当您在微秒内处理事情时,分析应该是零开销。你用的是太阳光?所以我觉得你是认真的。我所知道的最好的方法是挖掘物理线路,并嗅探流量以获取度量。许多产品都是这样做的。

票数 3
EN

Stack Overflow用户

发布于 2014-02-23 22:49:31

i/o到磁盘或网络非常慢,如果您将它合并在一个非常紧凑(实时)的处理循环中。解决方案可能是将i/o卸载到单独的低优先级任务。让实时循环通过(最佳无锁定)队列将消息传递给i/o任务。

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

https://stackoverflow.com/questions/21975577

复制
相关文章

相似问题

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