我使用的 PC 有 2 个 PCIe NIC(我们称它们为eth0(Nvidia/Mellanox ConnectX-5)和eth1(Intel 82599ES)) 目前在 5.19.0-46-generic 上运行 Ubuntu 22.04。我正在使用 DPDK 应用程序 (DPDK 22.11.2 LTS) 捕获eth0。 同时,eth1通过 sshfs 和服务器挂载连接到互联网。
只要我不使用任何严重的流量,此设置就可以正常工作eth1只要 DPDK 正在处理eth0。
但是,当我尝试通过复制数据时eth1在 DPDK 处理时发送到服务器eth0,网络连接eth1几秒钟后似乎超时(复制约 3GB)。
连接本身并没有丢失(即仍然显示为已连接),但我既无法访问已安装的服务器,也无法访问任何网站。远程工作时 SSH 连接也会丢失。但是,当我停止 DPDK 进程处理时eth0,网络连接eth1立即正常工作。
我没有办法调试这个问题。
- 我也遇到过同样的问题偶尔当使用主板 1GbE NIC 而不是 *eth1* 时。在某个时候,它完全消失并且工作正常(但使用 1GbE 对我的应用程序来说太慢了)。
- 我在 Ubuntu 20.04 及更旧的内核上遇到了同样的问题。
- 我在 DPDK 20.11 LTS 上遇到了同样的问题。
- 使用远程桌面时连接偶尔也会断开(网络负载高eth1?)
htop
问题出现时,没有发现失控线程(CPU 或内存使用) 。- 其他症状是某些应用程序在问题发生期间甚至无法启动(例如 Chromium);可能是因为它们试图访问挂起的可以说正在运行的网络。
我的DPDK应用程序执行以下操作:
- 初始化 NICeth0
- 设置流程规则没有设备
- 启动设备
- 称呼eth_rx_burst()循环(实时调度线程,100%运行时间,固定到某个核心)直到停止
我该如何进一步调试它?我可以重现该问题,但我找不到任何奇怪的东西而且我不知道该去哪里查找。