gpt4 book ai didi

c++ - UDP 数据包未按时发送

转载 作者:行者123 更新时间:2023-11-30 04:24:54 25 4
gpt4 key购买 nike

我正在开发一个可以作为路由器的 C++ 应用程序。此应用程序在给定端口上接收 UDP 数据包(每秒近 37 个字节),并且必须在 10 毫秒内将它们多播到另一个目的地。但是,有时在接收数据包后,重传会超过 10 毫秒的限制,甚至可以达到 100 毫秒。这些禁区延迟是随机的。应用程序在相同的以太网接口(interface)上但在不同的端口上接收其他类型的数据包(每秒最多 200 个近 100 字节的数据包)。我不确定后面的流是否会干扰另一个流,因为这些延迟峰值太少了(10000 个数据包中有 2 个数据包)

这些零星延迟的原因可能是什么?以及如何解决?

附言我的应用程序在 Linux 2.6.18-238.el5PAE 上运行。延迟是在数据包接收到传输成功之后测量的!

更清晰的图像: enter image description here

最佳答案

10 毫秒对于非实时操作系统来说是一个艰难的期限。

  • 将您的进程分配给实时调度策略之一,例如SCHED_RR 或 SCHED_FIFO ( some reading )。可以通过 sched_setscheduler() 在代码中完成或通过命令行 chrt .同时调整优先级。

  • 确保您的代码不会消耗过多的 CPU,否则会影响整个系统的性能。

  • 您可能还需要 RT_PREEMPT patch .

总的来说,生成以太网流量以在 Linux 上进行调度的任务并不容易。例如。见BRUTE , 一个高性能的流量生成器;也许您会在其代码或研究论文中找到有用的东西。

关于c++ - UDP 数据包未按时发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12456182/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com