gpt4 book ai didi

linux - Zynq 7000 上的嵌入式 Linux,丢弃几乎所有 UDP 数据包

转载 作者:IT王子 更新时间:2023-10-29 00:34:26 26 4
gpt4 key购买 nike

我在 Zynq 7000 板上使用 Linux 的 Xilinx 发行版。它有两个 ARM 处理器、一些二级缓存、一个 DRAM 接口(interface)和大量的 FPGA 结构。我们的设备收集由 FPGA 处理的数据,然后通过千兆网络将其发送到其他系统。

我们需要在此设备上支持的服务之一是 SNMP,它依赖于 UDP 数据报,尽管 SNMP 确实支持 TCP,但我们不能强制客户端使用它。

我发现这个系统正在丢失几乎所有的 SNMP 请求。

重要的是要注意网络和 CPU 都没有过载。数据速率不是特别高,CPU 的负载通常在 30% 左右。另外,我们正在为 SNMP 使用 SNMP++ 和 Agent++ 库,所以我们可以控制它们,所以这不是系统守护程序中断的问题。但是,如果我们停止处理和网络事件,SNMP 请求不会丢失。 SNMP 在其自己的线程中处理,并且我们已确保保持请求的稀有性和分散性,以便在任何时候缓冲的请求实际上不应该超过一个。由于 CPU 负载较低,上下文切换到接收进程来处理请求应该没有问题。

因为这不是 CPU 或以太网带宽问题,我最好的猜测是问题出在 Linux 内核上。尽管网络负载很低,但我猜测有限的网络堆栈缓冲区已满,这就是它丢弃 UDP 数据报的原因。

在谷歌搜索时,我找到了如何使用 netstat 报告丢失数据包的示例,但这在这个系统上似乎不起作用,因为没有“-s”选项。我如何监控这些丢包?我如何诊断原因?我如何调整内核参数以最小化这种损失?

谢谢!

最佳答案

Wireshark 或 tcpdump 是一个很好的方法。您可能想查看/proc/sys/net/ipv4/中的设置或尝试使用较旧的内核(3.x 而不是 4.x)。我们在使用 4.4 内核的 Zynq 上遇到了 tcp 连接问题,但这可以在系统日志中看到(有关 SYN cookie 和可能的泛洪的警告)。

关于linux - Zynq 7000 上的嵌入式 Linux,丢弃几乎所有 UDP 数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39644698/

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