为什么ksoftirqd / 0进程使用了​​我所有的CPU?


67

我当时感觉Ubuntu运行缓慢,然后去查看正在运行的进程,发现其中一个进程使用的CPU占50%ksoftirqd/0

有谁知道该进程的作用,为什么要使用这么多的CPU以及如何降低它的CPU占用率?

Answers:


77

您的计算机通过IRQ(中断请求)与其连接的设备进行通信。当中断来自设备时,操作系统将暂停正在执行的操作并开始处理该中断。

在某些情况下,IRQ接一个接一个地非常快地出现,并且操作系统无法在另一个到达之前完成一个服务。当高速网卡在短时间内收到大量数据包时,可能会发生这种情况。

因为操作系统无法在IRQ到达时对其进行处理(因为它们一个接一个地太快地到达),所以操作系统将它们排队,以供以后使用特殊的内部进程进行处理ksoftirqd

如果ksoftirqd占用的CPU时间超过很小一部分,则表明计算机处于沉重的中断负载下。


22

在手册页中,ksoftirqd是一个每CPU内核线程,在计算机承受大量软中断负载时运行。

您可以通过定义哪个CPU接收某个中断来稍微调整设置。您可以通过更改的内容来实现/proc/irq/$interrupt_number/smp_affinity。您可以通过执行以下操作获取中断列表及其含义:

cat /proc/interrupts

中的数字smp_affinity是cpus的位图,以十六进制代码表示。最右边的位是最低有效位。例如,我的系统有8个核心。如果我只想使用核心1、3和4,则可以将smp_affinity设置为1a

cpu_7 cpu_6 cpu_5 cpu_4 cpu_3 cpu_2 cpu_1 cpu_0
  0     0     0     1     1     0     1     0    = 0001 1010 = 1a (in hex)

就个人而言,我设置了任何cpu以便能够通过以下命令获取中断29(在我的8核系统中为eth0):

sudo echo ff > /proc/irq/29/smp_affinity

4

ksoftirqd是每个CPU的内核线程,在计算机承受较大的软中断负载时运行,因此,它不是在消耗CPU而是减少IRQ负载。


1
我知道这是askubuntu.com,但是在Raspberry Pi上情况恰好相反,ksoftirqd在密集的IRQ负载上吞噬了所有CPU。
machineaddict 2015年

据我了解,ksoftirqd处理延迟的softirq(当它们不能足够快地处理时)。当有很多softirqs和/或它们消耗大量CPU时间进行处理时,ksoftirqd将消耗大量CPU时间。
pabouk '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.