我们有一台 Debian 服务器,一条链接至内部 VLAN,一条链接至外部 VLAN - 两者都直接连接到同一个交换机。
在这两个链路上,我们间歇性地看到异常大量的错误接收事件,以及高延迟。
Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
ethA 1500 0 884347583 0 49965509 49965509 1697514631 0 0 0 BMRU
ethB 1500 0 1611102819 0 77615811 77615811 819321274 0 0 0 BMRU
我们还看到,两个接口的 ksoftirqd 进程在大多数情况下都达到 90% 以上的最大值,即使表面上一切应该很安静。
44 root 20 0 0 0 0 R 98.8 0.0 2557:46 ksoftirqd/3
51 root 20 0 0 0 0 R 85.6 0.0 2722:33 ksoftirqd/5
据我了解,这意味着服务器正在最大限度地利用分配的 CPU 来处理通过此接口传入的所有数据包。但即使我们看到传入速度约为 50Mbps(而相同的服务器正在处理 >800Mbps),这些进程也可能达到最大值,并且 RX-DRP 会飙升。irqbalance 正在运行,并且 /proc/interrupts 确认这些 CPU 并没有忙于处理其他任何事情。
造成这种情况的原因有哪些?
分配多个 CPU(通过 smp_affinity)来处理这些接口的中断是否有帮助?我找不到将多个 CPU 分配给单个网络接口的单个示例,因此这看起来充其量是不合常规的,最坏的情况是系统崩溃。
这已经在生产中造成了一段时间的问题,所以我很乐意接受任何潜在的解决方法。