首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在嵌入式平台上,ksoftirqd消耗超过80%的CPU

问在嵌入式平台上,ksoftirqd消耗超过80%的CPU
EN

Stack Overflow用户
提问于 2010-07-28 10:26:15
回答 2查看 14.4K关注 0票数 1

我们正在设计基于MIPS处理器的SOHO路由器,配上24端口的交换机。CPU运行NAT (配置了iptables)、iptables规则、dhcp等,它没有为这些功能提供任何硬件加速。在全网状模式下测试NAT时(例如,一个WAN端口和其他端口是LAN端口),我们观察到系统的显著减慢,特别是控制台响应非常慢,并且还存在数据包丢失。

“top”显示ksoftirqd占用了超过80%的CPU。

这种行为的原因是什么呢?Linux NAT在用户端运行吗?

EN

回答 2

Stack Overflow用户

发布于 2010-07-28 10:36:14

ksoftirqd是内核线程驱动...软IRQ,如TIMER_SOFTIRQ,SCSI_SOFTIRQ,TASKLET_SOFTIRQ,以及与您的案例相关的内容,NET_TX_SOFTIRQ和NET_RX_SOFTIRQ。这些是在内核的下半部分中实现的,因为上半部分的延迟工作-延迟非常关键的设备驱动程序中的实际中断处理程序。

网卡的实际中断处理程序,或硬件IRQ,关心的是尽可能快地将数据传入/传出设备。它对NAT和其他TCP/IP处理一无所知。它知道它的总线处理(比如PCI)、它的卡特性(环缓冲器、控制/配置寄存器)、DMA,以及一些关于以太网的知识。它通过队列向/从下半部分传递/接收分组(准确地说是skbuf)。

如果您还没有,请看一下ethtool(8)。看看你是否可以调整硬件/驱动程序来做校验和/分段卸载,等等。我对NAT前端没有任何建议,我不使用它。

希望这能对你有所帮助。

编辑:

如注释中所述,请检查网卡硬件是否支持中断,以及支持驱动程序是否支持NAPI。

票数 6
EN

Stack Overflow用户

发布于 2010-07-28 10:31:06

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3349455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档