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

时间:2010-07-28 02:26:15

标签: networking linux-kernel

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

'top'表示ksoftirqd消耗了超过80%的CPU。

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

2 个答案:

答案 0 :(得分:6)

ksoftirqd内核线程正在驱动......软IRQ,例如TIMER_SOFTIRQSCSI_SOFTIRQTASKLET_SOFTIRQ以及与此相关的内容您的情况,NET_TX_SOFTIRQNET_RX_SOFTIRQ。这些是在内核的下半部分中实现的,因为来自上半部分的默认工作 - 设备驱动程序中实际的中断处理程序,其中延迟是至关重要的。

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

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

希望这有点帮助。

编辑:

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

答案 1 :(得分:1)

ksoftirqd是IRQ处理程序。您可以检查/proc/interrupts以查看哪个IRQ正在加载。

CPU过载:使用更强大的模型,或使用更简单的iptables规则。 Linux NAT在内核空间中运行,ksoftirqd在内核空间中运行。