我有 5% 以上的 CPU 时间用于处理软中断。因此,ksoftirqd
几乎一直在运行,但只占用了很少的 CPU 时间(不到 1%)。
但是,尽管负载很重,仍然有相当高比例的空闲时间(30% 以上)(这是top
空闲的值,或者空闲的起始值mpstat
)。
一些背景知识(但是,我想要一个概念性的答案,而不是解决我系统上问题的答案)。该系统用于路由(echo 1 > /proc/sys/net/ipv4/ip_forward
)和使用 iptables 的 NAT,并运行与网络无关的附加用户空间应用程序。此外,平均负载始终高于 1(它是单核处理器)(这是来自 的平均负载值top
,或 的输出sar -q
)。
什么阻止系统利用空闲时间来防止错过软中断的处理?
我希望看到空闲时间(top 中的 id)用于服务软件中断(top 中的 si),并且不会让处理器错过任务并同时处于空闲状态。
答案1
您的系统没有重负载。
中断得到正确处理,就像您的路由和应用程序一样。如果不是这样,您的系统就不会有 30% 的空闲时间。(无论如何,您在哪里看到的?)
同时使用小型系统处理许多不同的事情并不一定意味着过载,特别是当没有太多数据需要 NAT 时。如果您的网络接口使用 DMA(这很有可能),那么您的中断处理程序在当前内核中甚至不会执行单个块复制。
除此之外,您以非常不同的方式加载系统(当您的网卡芯片与 dma 对话时,您的应用程序可以工作)。
您的系统中唯一的主要问题可能是任务切换比例过高。这是类似、单核、多用途、出色的服务器的主要问题。但就您而言,它会导致系统负载过重,而这种情况不会发生。
如果您能解释一下“30% 空闲”这个数字从何而来,我很乐意扩展这个答案。您说,系统负载始终超过 1。