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
시작 시 이 기능을 비활성화하는 서비스 스크립트를 작성했습니다.
#!/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
이것은 내 PM 스크립트를 호출합니다.
#!/bin/sh
echo 0 > /sys/firmware/acpi/interrupts/gpe17 2>/dev/null
두 스크립트를 모두 실행 가능하게 만들고 disable-gpe17
시작 스크립트에 추가했습니다.
sudo update-rc.d disable-gpe17 defaults
부팅 로그를 보면 gpe17이 비활성화되었음을 나타내는 syslog 항목이 없습니다.
시작 시 특정 인터럽트를 비활성화하는 더 좋은 방법(아마도 udev)이 있습니까? 그렇지 않은 경우 시작 시 서비스 스크립트가 실행되지 않는 이유는 무엇입니까?
저는 커널 3.19와 Ubuntu 14.04를 실행하는 MacBook Pro 11.5를 사용하고 있습니다.
답변1
저도 같은 문제가 있습니다. kworker가 CPU 소비를 중지하려면 gpe16 및 gpe17을 비활성화해야 합니다. 나는 여기에 있는 레시피를 따랐습니다.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
이제 CPU 로드를 확인하고 팬이 회전하는 소리를 들을 수 있습니다. 재부팅 시에도 이런 일이 발생하는지 확인하세요. 여전히 루트 권한을 사용하고 있습니다.
# crontab -e
즐겨찾는 편집기가 열립니다. 다음 줄을 추가하세요.
@reboot echo "disable" > /sys/firmware/acpi/interrupts/gpe16
@reboot echo "disable" > /sys/firmware/acpi/interrupts/gpe17
일시 중지 모드가 작동하지 않았기 때문에 일시 중지 후 다시 시작할 때 이러한 설정을 다시 활성화하는 스크립트를 만드는 방법에 대한 나머지 지침을 따르지 않았습니다.
답변2
echo "disable" > /sys/firmware/acpi/interrupts/gpe17
Linux 4.19에서는 GPE( )를 비활성화해도 더 이상 문제가 해결되지 않는 것으로 나타났습니다 . GPE가 비활성화되어 있어도 숫자는 계속 증가하고 CPU는 여전히 사용 중입니다. Linux 4.10부터 새로운 솔루션은 비활성화보다는 차단하는 것으로 보입니다.
# echo mask > /sys/firmware/acpi/interrupts/gpe17
또는 시작 매개변수를 사용하십시오 acpi_mask_gpe=0x17
(Debian/Ubuntu에서는 이를 /etc/default/grub
행 에 추가한 GRUB_CMDLINE_LINUX_DEFAULT
후 실행 update-grub
하고 재부팅하십시오).
자세한 내용은 다음을 참조하세요.Linux 커널 커밋 9c4aa1eeLinux 4.10-rc3에서 처음 병합되었으며 버그 보고서가 여기에 링크되어 있습니다.
답변3
이전 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
답변4
Linux Lite 5.2, MacBook Pro 9.2, Bios 233.0.0.0(2020년 6월 10일)에서 gpe17 및 sci 인터럽트에 문제가 있습니다.
위의 Peter Nowee의 솔루션이 작동합니다!
systemctl을 사용하여 차단했습니다.
- 파일 만들기
/etc/systemd/system/mask-gpe17.service
- 다음 줄을 복사하고 파일을 저장합니다.
[Unit] Description=Mask GPE 17 [Service] ExecStart=/usr/bin/bash -c 'echo "mask" > /sys/firmware/acpi/interrupts/gpe17' [Install] WantedBy=multi-user.target
- 파일 만들기
/etc/systemd/system/mask-sci.service
- 다음 줄을 복사하고 파일을 저장합니다.
[Unit] Description=Mask SCI [Service] ExecStart=/usr/bin/bash -c 'echo "mask" > /sys/firmware/acpi/interrupts/sci' [Install] WantedBy=multi-user.target
- 그런 다음 터미널에서 서비스를 활성화합니다.
sudo systemctl enable mask-gpe17.service sudo systemctl enable mask-sci.service