问题以及分析过程
最近买了一块玲珑S拆机的N5095主板,安装飞牛后,发现CPU开机后持续有25%左右的占用,使用top命令,发现是 irq/9-acpi
这个进程存在持续的高占用。
在AI的帮助下,继续分析得知 irq/9-acpi
这个线程的名字直译就是:“处理第9号中断的内核线程,这个中断与ACPI事件有关”。
这个异常可能是因为特定内核版本与主板 BIOS/UEFI 的 ACPI 实现存在兼容性问题,我们可以继续定位问题位置,使用命令查看最近的内核错误和警告
shylock@fnnas:/$ sudo dmesg -T | grep -i "error\|warn\|fail" | head -20
[Sat Sep 20 17:21:09 2025] pcieport 0000:00:1c.0: DPC: error containment capabilities: Int Msg #0, RPExt+ PoisonedTLP+ SwTrigger+ RP PIO Log 4, DL_ActiveErr+
[Sat Sep 20 17:21:09 2025] pcieport 0000:00:1c.1: DPC: error containment capabilities: Int Msg #0, RPExt+ PoisonedTLP+ SwTrigger+ RP PIO Log 4, DL_ActiveErr+
...删除部分无关log...
1720964 EN STS enabled unmasked
0 invalid unmasked
0 invalid unmasked
0 EN enabled unmasked
0 invalid unmasked
...删除部分无关log...
0 invalid unmasked
0 invalid unmasked
0 invalid unmasked
0 invalid unmasked
1721002
1720989
1
在 /sys/firmware/acpi/interrupts/
的输出中,有一些非常明显的异常:
1720964 EN STS enabled unmasked
...
1721002
1720989
这表示某个ACPI通用事件(GPE)已经被触发了超过170万次!这正是导致 irq/9-acpi
进程占用60% CPU的原因 - 系统正在处理这些异常频繁的中断。
下面我们需要找到哪个GPE文件对应这个高计数,运行:
for file in /sys/firmware/acpi/interrupts/*; do
count=$(cat "$file" | head -n1 | awk '{print $1}');
if [ "$count" -gt 1000 ]; then
echo "$file: $count";
fi;
done
执行结果:
shylock@fnnas:/$ for file in /sys/firmware/acpi/interrupts/*; do
> count=$(cat "$file" | head -n1 | awk '{print $1}');
> if [ "$count" -gt 1000 ]; then
> echo "$file: $count";
> fi;
> done
/sys/firmware/acpi/interrupts/gpe6F: 2459057
/sys/firmware/acpi/interrupts/gpe_all: 2459526
/sys/firmware/acpi/interrupts/sci: 2459521
确定是GPE 6F(十六进制)导致了中断风暴,GPE 6F 通常与以下硬件组件相关:
- USB 控制器或端口
- SATA 控制器
- 集成传感器(温度、风扇)
- 电源管理单元
- 某些 PCIe 设备
解决方案
临时验证方案
echo "disable" | sudo tee /sys/firmware/acpi/interrupts/gpe6F
下这个命令后,可以看到CPU占用明显下降回正常范围,检查中断计数是否停止增长:
cat /sys/firmware/acpi/interrupts/gpe6F
如果数字停止增长或增长非常缓慢,说明问题已解决。
永久解决方案
1.使用内核参数永久禁用 GPE 6F
编辑 GRUB 配置以永久禁用这个有问题的 GPE:
sudo vim /etc/default/grub
找到 GRUB_CMDLINE_LINUX_DEFAULT
行,添加 acpi_mask_gpe=0x6F
参数:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi_mask_gpe=0x6F"
保存文件,更新 GRUB 并重启:
sudo update-grub
sudo reboot
注意:飞牛更新后可能回还原grub参数,所以更新后可能还需要再次修改
2.更新 BIOS/UEFI
如果有条件,可以尝试更新BIOS来解决这个问题