收起左侧

GPE 6F中断风暴导致CPU持续高占用的问题

1
回复
24
查看
[ 复制链接 ]

2

主题

9

回帖

0

牛值

江湖小虾

问题以及分析过程

最近买了一块玲珑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来解决这个问题

收藏
送赞 1
分享
厉害
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则