如果我寻找 ACPI 中断,我会发现:
/sys/firmware/acpi/interrupts/sci: 55414
/sys/firmware/acpi/interrupts/error: 0
/sys/firmware/acpi/interrupts/gpe00: 0 invalid
/sys/firmware/acpi/interrupts/gpe01: 0 invalid
/sys/firmware/acpi/interrupts/gpe02: 0 invalid
/sys/firmware/acpi/interrupts/gpe03: 0 invalid
/sys/firmware/acpi/interrupts/gpe04: 0 invalid
/sys/firmware/acpi/interrupts/gpe05: 0 invalid
/sys/firmware/acpi/interrupts/gpe06: 0 enabled
/sys/firmware/acpi/interrupts/gpe07: 0 enabled
/sys/firmware/acpi/interrupts/gpe08: 0 invalid
/sys/firmware/acpi/interrupts/gpe09: 0 disabled
/sys/firmware/acpi/interrupts/gpe10: 0 enabled
/sys/firmware/acpi/interrupts/gpe11: 0 invalid
/sys/firmware/acpi/interrupts/gpe12: 0 invalid
/sys/firmware/acpi/interrupts/gpe13: 0 invalid
/sys/firmware/acpi/interrupts/gpe14: 1 enabled
/sys/firmware/acpi/interrupts/gpe15: 0 invalid
/sys/firmware/acpi/interrupts/gpe16: 1 enabled
/sys/firmware/acpi/interrupts/gpe0A: 0 invalid
/sys/firmware/acpi/interrupts/gpe17: 54753 enabled
/sys/firmware/acpi/interrupts/gpe0B: 0 invalid
/sys/firmware/acpi/interrupts/gpe18: 0 invalid
/sys/firmware/acpi/interrupts/gpe0C: 0 invalid
/sys/firmware/acpi/interrupts/gpe19: 0 invalid
/sys/firmware/acpi/interrupts/gpe0D: 0 disabled
/sys/firmware/acpi/interrupts/gpe0E: 0 invalid
/sys/firmware/acpi/interrupts/gpe20: 0 invalid
/sys/firmware/acpi/interrupts/gpe0F: 0 invalid
/sys/firmware/acpi/interrupts/gpe21: 0 invalid
/sys/firmware/acpi/interrupts/gpe22: 0 invalid
/sys/firmware/acpi/interrupts/gpe23: 0 enabled
/sys/firmware/acpi/interrupts/gpe24: 0 invalid
/sys/firmware/acpi/interrupts/gpe25: 0 invalid
/sys/firmware/acpi/interrupts/gpe26: 0 invalid
/sys/firmware/acpi/interrupts/gpe1A: 0 invalid
/sys/firmware/acpi/interrupts/gpe27: 0 invalid
/sys/firmware/acpi/interrupts/gpe1B: 0 invalid
/sys/firmware/acpi/interrupts/gpe28: 0 invalid
/sys/firmware/acpi/interrupts/gpe1C: 0 invalid
/sys/firmware/acpi/interrupts/gpe29: 0 invalid
/sys/firmware/acpi/interrupts/gpe1D: 0 invalid
/sys/firmware/acpi/interrupts/gpe1E: 0 invalid
/sys/firmware/acpi/interrupts/gpe30: 0 invalid
/sys/firmware/acpi/interrupts/gpe1F: 0 invalid
/sys/firmware/acpi/interrupts/gpe31: 0 invalid
/sys/firmware/acpi/interrupts/gpe32: 0 invalid
/sys/firmware/acpi/interrupts/gpe33: 0 invalid
/sys/firmware/acpi/interrupts/gpe34: 0 invalid
/sys/firmware/acpi/interrupts/gpe35: 0 invalid
/sys/firmware/acpi/interrupts/gpe36: 0 invalid
/sys/firmware/acpi/interrupts/gpe2A: 0 invalid
/sys/firmware/acpi/interrupts/gpe37: 0 invalid
/sys/firmware/acpi/interrupts/gpe2B: 0 invalid
/sys/firmware/acpi/interrupts/gpe38: 0 invalid
/sys/firmware/acpi/interrupts/gpe2C: 0 invalid
/sys/firmware/acpi/interrupts/gpe39: 0 invalid
/sys/firmware/acpi/interrupts/gpe2D: 0 invalid
/sys/firmware/acpi/interrupts/gpe2E: 0 invalid
/sys/firmware/acpi/interrupts/gpe2F: 0 invalid
/sys/firmware/acpi/interrupts/gpe3A: 0 invalid
/sys/firmware/acpi/interrupts/gpe3B: 0 invalid
/sys/firmware/acpi/interrupts/gpe3C: 0 invalid
/sys/firmware/acpi/interrupts/gpe3D: 0 invalid
/sys/firmware/acpi/interrupts/gpe3E: 0 invalid
/sys/firmware/acpi/interrupts/gpe3F: 0 invalid
/sys/firmware/acpi/interrupts/sci_not: 0
/sys/firmware/acpi/interrupts/ff_pmtimer: 0 invalid
/sys/firmware/acpi/interrupts/ff_rt_clk: 0 disabled
/sys/firmware/acpi/interrupts/gpe_all: 55414
/sys/firmware/acpi/interrupts/ff_gbl_lock: 0 enabled
/sys/firmware/acpi/interrupts/ff_pwr_btn: 0 enabled
/sys/firmware/acpi/interrupts/ff_slp_btn: 0 invalid
Run Code Online (Sandbox Code Playgroud)
我写了一个服务脚本来在启动时禁用它:
#!/bin/bash
### BEGIN INIT INFO
# Provides: disable-gpe17
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO
logger -t gpe17 -s "Disabling gpe17 interrupts..."
/etc/pm/sleep.d/30_disable_gpe17 thaw
exit 0
Run Code Online (Sandbox Code Playgroud)
这调用了我的 PM 脚本:
#!/bin/sh
echo 0 > /sys/firmware/acpi/interrupts/gpe17 2>/dev/null
Run Code Online (Sandbox Code Playgroud)
我使这两个脚本都可以执行,并添加disable-gpe17
到引导脚本中:
sudo update-rc.d disable-gpe17 defaults
Run Code Online (Sandbox Code Playgroud)
当我查看启动日志时,我没有看到说明 gpe17 已被禁用的 syslog 条目记录。
有没有更好的方法,也许是 udev,在启动时禁用某些中断?如果没有,为什么我的服务脚本没有在启动时运行?
我在运行内核 3.19 和 Ubuntu 14.04 的 MacBook Pro 11,5 上。
小智 10
我有同样的问题,我需要为 kworker 禁用 gpe16 和 gpe17 以停止占用 CPU。我按照这里找到的食谱:http : //sudoremember.blogspot.com.au/2013/05/high-cpu-usage-due-to-kworker.html
缩写(并已更正,至少对我而言)版本在这里:
$ sudo -s
# echo "disable" > /sys/firmware/acpi/interrupts/gpe16
# echo "disable" > /sys/firmware/acpi/interrupts/gpe17
Run Code Online (Sandbox Code Playgroud)
您现在应该看到 CPU 负载/听到风扇下降。确保在重新启动时再次发生这种情况 - 仍然是 root 权限:
# crontab -e
Run Code Online (Sandbox Code Playgroud)
这将打开您最喜欢的编辑器。添加这些行:
@reboot echo "disable" > /sys/firmware/acpi/interrupts/gpe16
@reboot echo "disable" > /sys/firmware/acpi/interrupts/gpe17
Run Code Online (Sandbox Code Playgroud)
由于挂起模式对我不起作用,因此我没有费心遵循有关如何创建在挂起后恢复时重新激活这些设置的脚本的其余说明。
在 Linux 4.19 中,我发现禁用 GPE ( echo "disable" > /sys/firmware/acpi/interrupts/gpe17
) 并不能再解决这个问题。即使 GPE 被禁用,数字仍然在增加并且 CPU 仍然忙碌。自 Linux 4.10 以来,新的解决方案似乎是屏蔽而不是禁用:
# echo mask > /sys/firmware/acpi/interrupts/gpe17
Run Code Online (Sandbox Code Playgroud)
或者使用启动参数acpi_mask_gpe=0x17
(在 Debian/Ubuntu 中将其添加到/etc/default/grub
行GRUB_CMDLINE_LINUX_DEFAULT
,然后运行update-grub
并重新启动)。
有关更多详细信息,请参阅首次合并在 Linux 4.10-rc3 中的Linux 内核提交 9c4aa1ee以及从那里链接到的错误报告。
我在旧 Macbook 2006 上运行 Lubuntu 20.10、5.8 内核时遇到同样的问题。就我而言,解决方案是使用 Peter Nowee 建议。
我将启动参数添加acpi_mask_gpe=0x17
到 GRUB 并重新启动。这样就解决了CPU占用率高的问题。
我发现这个命令有问题:
grep . -r /sys/firmware/acpi/interrupts/
问题:
/sys/firmware/acpi/interrupts/gpe17: 3491042 EN enabled unmasked
归档时间: |
|
查看次数: |
14149 次 |
最近记录: |