通过环回接口使用 UDP 时出现重新排序和重复的数据包

通过环回接口使用 UDP 时出现重新排序和重复的数据包

我们看到 UDP 数据包在通过 lo 发送时被重新排序和重复。我们可以看到这一点,因为我们正在发送 MPEG 传输流,这些传输流在标头中具有自己的序列号,尽管也可以通过以 RTP 形式发送流量并查看以这种方式重新排序的数据包来看到这一点。这可能与潜在相关问题是,尽管我们没有进行大量写入,因为我们使用的是通过网络发送数据的代码,因此我们的数据包适合 1500 字节的帧。

我们尝试使用默认的建议配置来配置 RFS(我们的 lo 只有一个 rx 队列),但这似乎没有什么区别。无论应用程序如何,无论是我们自己的 UDP/RTP 代码还是像 srt-live-transmit 这样的应用程序(我们没有测试 FFMPEG,但它的行为可能类似),这种情况似乎都会发生。

这是在 Redhat 8.3(内核 4.18.0-240.15.1.el8_3)上。

答案1

尝试启用 RPS:

cat /sys/devices/virtual/workqueue/cpumask > /sys/class/net/lo/queues/rx-0/rps_cpus

数据包重新排序是预料之中的,但 RPS 是一个修复方案,将来应该会继续发挥作用: https://lore.kernel.org/netdev/[电子邮件受保护]/

相关内容