系统不能处理软中断,但有空闲时间?

在处理软中断方面,我有5%和更多的CPU时间。 对此, ksoftirqd运行速度几乎不变,但使用的CPU很less(小于1%)。

然而,不pipe这个重负载还是有相当高的空闲时间百分比(30%以上)(这是闲置的top值,或者是从mpstat闲置的top值)。

一些背景(但是,我想要一个概念上的答案,而不是解决我的系统上的问题)。 该系统用于iptables的路由( echo 1 > /proc/sys/net/ipv4/ip_forward )和NAT,并运行与联网无关的附加用户空间应用。 另外,负载平均值始终高于1(这是一个单核处理器)(这是从top负载平均值或sar -q的输出值)。

什么是阻止系统使用空闲时间来防止软中断的处理被遗漏?

我期望看到空闲时间(ID顶部)用于服务软件中断(顶部si),并没有处理器错过任务,同时空闲。

你的系统没有沉重的负担。

正确处理中断,就像你的路由和你的应用程序一样。 如果不是这样,你的系统没有30%空闲。 (不pipe怎样,你在哪里看到的?)

使用小型系统同时处理许多不同的事情并不总是意味着过载,特别是如果没有太多的数据到NAT。 如果你的networking接口使用DMA(这是非常可能的),那么你的中断处理程序甚至不会在当前的内核中做单块拷贝。

除此之外,你正在加载你的系统非常不同(当你的网卡芯片与dma交谈时,你的应用程序可以工作)。

唯一的主要问题可能是在你的系统中任务开关的比例很大。 这是类似的,单核,多用途,精彩的服务器的主要问题。 但在你的情况下,它导致了一个沉重的系统负载,这并没有发生。

如果你能解释一下,我很乐意扩大这个答案,这个“30%空闲”的东西是从哪里来的。 你说,系统负载总是超过1。