如何在 Linux 中终止 IRQ 进程?

TMi*_*Mit 6 signals process-management irq sigkill

我不能irq/${nnn}-nvidiakill -9或杀死pkill -f -9。有没有人如何杀死或停止这些过程?

使用 100% CPU 的 irq

(如果相关的话,我使用的是 Ubuntu 16.04。)

pet*_*erh 6

正如@hobbs 所解释的,它是一个内核线程。更广泛的观点如下:

IRQ 处理在任何操作系统中都是有问题的,因为中断可能随时到达。即使内核正在处理复杂任务并且资源不一致(指针指向无效地址等),中断也可能到达。这个问题可以用锁来解决,即在内核处于可中断的、一致的状态之前不允许中断处理程序运行。使用锁的缺点是过多的锁会导致系统运行缓慢且效率低下。

因此,该问题的最优解是这样的:

  1. 内核中断处理程序尽可能短。
  2. 他们唯一的工作就是将所有相关的中断数据移动到一个临时缓冲区中
  3. 某些“后台”线程在此缓冲区上连续工作,并代表中断处理程序执行实际工作。

这些“后台”线程是中断处理程序内核线程。

  • 您将它们top视为正常流程。
  • 但是,它们显示为好像使用零内存。
  • 是的,这是真的,因为没有真正的用户空间内存属于他们

它们本质上是在后台运行的内核线程。

你不能杀死内核线程:它们完全由内核管理。如果您可以杀死它,那么您的 nvidia 驱动程序中的 irq/142 处理程序将不再存在:如果您的视频卡发送了一个中断,则没有任何东西可以处理它。结果可能会冻结,但您的视频肯定不会再工作了。

您系统中的问题是该中断处理程序获得了大量 CPU 资源。有很多潜在的原因:

  • 出于某种原因,硬件(您的视频卡)发送了如此多的中断,以至于您的 CPU 无法处理所有这些中断。
  • 硬件有问题。
  • 司机是越野车。

了解 Nvidia 驱动程序的质量,不幸的是,最有可能是有缺陷的驱动程序。

解决方案是以某种方式重置此驱动程序。一些想法,按残酷程度排序:

  • 它是否在后台运行一些 3D 加速过程?例如谷歌地球?如果是,请停止或杀死它。
  • 从 X 切换回字符控制台 (alt/ctrl/f1),然后返回 (alt/ctrl/f7)。然后大部分视频将重新初始化。
  • 重新启动 X(通常退出,或键入 alt/ctrl/backspace 以终止 X 服务器)。
  • 杀死 X (killall -9 Xorg)。最好从字符控制台执行此操作。

如果你杀了 X 仍然看到这个内核线程,你可以尝试删除 Nvidia 内核模块(你可以在 给出的列表中看到它lsmod,然后你可以用 删除它rmmod)。重启 X 会insmod自动重启硬件。

如果这些都不起作用,则需要重新启动。如果普通重启不起作用,您可以使用额外的残酷手段:使用 alt/printscreen/s 后跟 alt/printscreen/b。


扩展:作为临时解决方法,您可以尝试为该线程 ( renice +20 -p 1135)赋予非常低的优先级。然后它仍然会运行,但它对您的系统性能的影响较小。