我在客户端运行一个简单的程序,它继续将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
获得一段时间。
所以我对此感到困惑。
为什么它不是线性的?
答案 0 :(得分:0)
软中断在硬中断后执行,该中断接受不需要立即处理的部分代码。
因此可以通过硬中断来获取软中断。执行一般硬中断后,将执行软中断(中断下半部分)。
但是如果这次硬中断,软中断将被抢占。
这样,当软中断队列超过10时,将唤醒ksoftirqd
线程来处理软中断。 cpu占用的Ksoftirqd
线程在soft%的问题中描述。
所以包裹的时间越短,ksoftirq
被唤醒的越少,柔软的%就越低。空闲进程中的很多软中断被硬中断中断,cpu消耗被记录在idle%inside里面。
当负载较高时,软中断被硬中断中断,因此ksoftirqd
一直在运行,因此软%会突然增加很多。