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

min*_*ill 6 linux cpu-usage acpi

我注意到,在我的华硕 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
Run Code Online (Sandbox Code Playgroud)

你看到了kworker/0:2-kacpi_notify67% 吗?

所以我深入研究了可能导致这种情况的原因,并在 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
Run Code Online (Sandbox Code Playgroud)

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

我的问题是:

  1. 这是修复它的最佳方法吗?有“更清洁”的替代品吗?
  2. 有任何负面影响吗?

Mus*_*did -1

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

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

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

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

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

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

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

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

  2. 检查是否有任何硬件问题。如果您最近向系统添加了任何新硬件,或者您注意到任何其他与硬件相关的问题,则该问题可能与硬件而不是软件有关。

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

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