ksoftirqd在嵌入式平台上消耗> 80%的CPU

1 networking linux-kernel

我们正在设计基于MIPS处理器的SOHO路由器,与24端口交换机连接.CPU运行NAT(使用iptables配置),iptables规则,dhcp等.这些功能没有任何H/W加速.在全网状模式下测试NAT时(即一个WAN端口,其他是LAN端口),我们观察到重要系统的速度减慢,特别是控制台响应速度非常慢,并且还有数据包丢失.

'top'表明ksoftirqd消耗了超过80%的CPU.

这种行为的原因是什么?Linux NAT是否在用户空间中运行?

Nik*_*sov 6

ksoftirqds为内核线程驱动...柔软的IRQ,之类的东西TIMER_SOFTIRQ,SCSI_SOFTIRQ,TASKLET_SOFTIRQ,和什么有关你的情况,NET_TX_SOFTIRQNET_RX_SOFTIRQ.这些是在内核的下半部分实现的,因为从上半部分开始工作- 设备驱动程序中的实际中断处理程序,其中延迟是至关重要的.

网卡的实际中断处理程序或硬件IRQ涉及尽可能快地从设备获取数据.它对NAT和其他TCP/IP处理一无所知.它知道它的总线处理(比如PCI),它的卡特定(环形缓冲区,控制/配置寄存器),DMA以及有关以太网的一些信息.它skbuf通过队列向/从下半部分接收/接收数据包(确切地说是s).

看看ethtool(8)你还没有.看看你是否可以调整硬件/驱动程序以进行校验和/分段卸载等.我在NAT前面没有任何建议,我不使用它.

希望这个对你有帮助.

编辑:

如评论中所述,请检查NIC硬件是否有中断缓解以及NAPI支持的支持驱动程序.