2

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

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

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

所以我对此感到困惑。

为什么它不是线性的?

4

1 回答 1

0

软中断在硬中断之后执行,该硬中断占用了不需要立即处理的部分代码。

所以软中断可以被硬中断抢占。一般硬中断执行后,再执行软中断(中断下半部分)。

但是如果这个时候有硬中断,软中断就会被抢占。

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

所以包的时间少,ksoftirq被唤醒的少,软%很低。很多软中断在idle过程中被硬中断打断,cpu消耗记录在idle%里面。

当负载高时,软中断被硬中断打断,所以ksoftirqd一直在运行,所以soft%会突然增加很多。

于 2017-06-23T08:31:04.880 回答