linux softirq cpu的用法看起来很奇怪

时间:2017-05-19 07:07:51

标签: c linux softirq

我在客户端运行一个简单的程序,它继续将udp数据包发送到服务器。服务器的接口是一个多队列网卡,但我将其udp4的rx-flow-hash设置为sd。所以所有数据包都将在一个CPU中生成。

当我收到40Wpackets / s时,服务器的CPU在softirq中花费1%。 当我收到60Wpackets / s时,服务器的CPU在softirq中的成本为8%。 当我收到90Wpackets / s时,服务器的CPU会在softirq中100%。

收到的号码是通过运行sar -n UDP 1一段时间获得的。 cpu成本通过mpstat -P ALL 1获得一段时间。

所以我对此感到困惑。

为什么它不是线性的?

1 个答案:

答案 0 :(得分:0)

软中断在硬中断后执行,该中断接受不需要立即处理的部分代码。

因此可以通过硬中断来获取软中断。执行一般硬中断后,将执行软中断(中断下半部分)。

但是如果这次硬中断,软中断将被抢占。

这样,当软中断队列超过10时,将唤醒ksoftirqd线程来处理软中断。 cpu占用的Ksoftirqd线程在soft%的问题中描述。

所以包裹的时间越短,ksoftirq被唤醒的越少,柔软的%就越低。空闲进程中的很多软中断被硬中断中断,cpu消耗被记录在idle%inside里面。

当负载较高时,软中断被硬中断中断,因此ksoftirqd一直在运行,因此软%会突然增加很多。