ACPI 中断导致 kworker 的 CPU 使用率过高

ACPI 中断导致 kworker 的 CPU 使用率过高

我注意到,在我的 ASUS N550JV 上,我的平均负载始终高于 1。

我正在使用带有 4.19.0 内核的 D​​evuan Beowulf。

经过一番挖掘,我发现罪魁祸首是与 ACPI 相关的 kworker。

empire# pidstat 10      
Linux 4.19.0-5-amd64 (empire)   30/08/2019      _x86_64_        (8 CPU)

12:34:18      UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
12:34:28        0      3108    0,00    0,10    0,00    0,00    0,10     0  irq/38-nvidia
12:34:28      100      3201    0,10    0,00    0,00    0,00    0,10     5  dbus-daemon
12:34:28        0     14563    0,00   67,33    0,00    0,30   67,33     0  kworker/0:2-kacpi_notify
12:34:28        0     18056    0,40    0,60    0,00    0,20    1,00     4  Xorg
12:34:28     1000     18152    0,10    0,00    0,00    0,00    0,10     1  i3bar
12:34:28     1000     19570    0,20    0,00    0,00    0,00    0,20     4  chromium
12:34:28     1000     19618    0,00    0,10    0,00    0,00    0,10     5  chromium
12:34:28     1000     19857    0,10    0,00    0,00    0,00    0,10     3  x-terminal-emul
12:34:28        0     20254    0,00    0,10    0,00    0,00    0,10     5  kworker/5:0-events_freezable
12:34:28     1000     22871    1,70    0,70    0,00    0,10    2,40     2  telegram-deskto
12:34:28        0     23314    0,00    0,10    0,00    0,10    0,10     5  kworker/5:3-pm
12:34:28        0     23899    0,00    0,10    0,00    0,00    0,10     6  pidstat

您看到了吗,kworker/0:2-kacpi_notify是 67%?

因此我深入研究了导致这种情况的原因,并偶然发现关于 Unix 和 Linux SE 的这个问题

深入挖掘后/sys我得到了:

empire# grep . -r /sys/firmware/acpi/interrupts | grep -v "  0"
/sys/firmware/acpi/interrupts/gpe13: 3646789     STS enabled      unmasked
/sys/firmware/acpi/interrupts/sci: 3646793
/sys/firmware/acpi/interrupts/gpe_all: 3646799
/sys/firmware/acpi/interrupts/gpe19:       5  EN     enabled      unmasked

如果我echo disable > /sys/firmware/acpi/interrupts/sci和平均负载相同,gpe13则下降到一个合理的数字。

我的问题是:

  1. 这是解决问题的最佳方法吗?有没有“更干净”的替代方案?
  2. 有什么负面副作用吗?

答案1

ACPI 系统使用两种类型的中断(sci 和 gpe13)来执行系统上的各种功能。禁用这些中断可能会导致电源管理、设备检测或其他 ACPI 相关功能出现问题。

如果禁用 sci 中断,可能会遇到一些负面后果,包括:

  • 电源管理能力下降:ACPI 系统使用 sci 中断来监视与电源相关的事件,例如按下电源按钮或拔下 AC 适配器。

  • 减少设备检测和配置:ACPI 系统还使用 sci 中断来检测和配置设备,例如硬盘驱动器、键盘和 USB 设备。禁用此中断可能会导致无法正确检测或配置这些设备,从而导致使用它们时出现问题。

  • 系统性能下降:ACPI 系统使用 sci 中断来执行与性能相关的任务,例如 CPU 频率调整和热量管理。禁用此中断可能会影响系统优化性能的能力,从而导致整体性能下降。

禁用 gpe13 中断的负面后果可能与禁用 sci 中断的负面后果类似,因为 ACPI 系统也将 gpe13 用于各种功能。很难准确预测禁用 gpe13 会产生什么影响,因为这取决于它在您的特定系统上的使用方式。

一种潜在的“更干净”的替代方案是尝试找出问题的根本原因并直接解决它。以下是您可以尝试的一些方法:

  1. 检查与内核或 ACPI 相关的任何更新或错误修复。您遇到的问题可能已在较新版本的内核或其他系统组件中被识别和修复。

  2. 检查硬件问题。如果你最近在系统中添加了新硬件,或者注意到了其他硬件相关问题,那么问题可能与硬件有关,而不是软件。

  3. 检查电源管理配置是否存在问题。确保电源管理设置配置正确,并考虑禁用任何不使用的电源管理功能。

还值得注意的是,平均负载高于 1 并不一定表示存在问题。平均负载为 1 表示系统上平均至少有一个可运行任务。平均负载高于 1 仅表示可运行任务的数量多于运行这些任务的 CPU 数量,这在现代多核系统上并不罕见。如果您没有遇到任何其他问题,则可能无需采取任何措施。

相关内容