Ris*_*hiD 7 c sockets linux performance udp
我有一个非常高吞吐量/低延迟的网络应用程序(目标是每包5个usec),我想添加一些监控/指标.我听说过statsd热潮,似乎是收集指标并将它们输入我们的时间序列数据库的简单方法.发送指标是通过将小udp数据包写入守护程序(通常在同一服务器上运行)完成的.
我想描述在我的数据路径中发送~5-10 udp数据包的效果,以了解它会增加多少延迟,并对它有多糟糕感到惊讶.我知道这是一个非常模糊的微观基准,但只是想了解它的落脚点.
我试图理解为什么需要这么长时间(相对来说)将UDP数据包发送到localhost而不是远程主机.我是否可以进行任何调整以减少发送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(ip更改为IF)
我用以下设备运行了这个微基准测试.
一些基准结果:
小智 -2
如果将其合并到非常紧密的(实时)处理循环中,则磁盘或网络的 I/O 速度会非常慢。解决方案可能是将 I/O 卸载到单独的较低优先级任务。让实时循环通过(最好的无锁)队列将消息传递给 i/o 任务。