在 HP DL380 G4/G5 等機型運行 RHEL 4.4 時,dmesg 常出現大量 shpchp: acpi_shpchprm: get_device PCI ROOT HID fail=0x5 錯誤。雖不一定影響業務運行,但干擾日誌分析,且可能預示 ACPI 與硬體抽象層衝突。本文提供經驗證的解決方案。
錯誤來源為 shpchp(PCI Express 熱插拔控制器驅動)在解析 ACPI 表時失敗。_BBN 與 _HID 是 ACPI 命名空間中用於識別 PCI 根橋編號與硬體 ID 的方法,fail=0x5 表示 ACPI 執行環境回傳「不支援」或「無效引數」。常見於舊款伺服器 BIOS 實作不完全符合 ACPI 規範,或與 Linux 核心 ACPI 子系統不相容。
編輯 /boot/grub/menu.lst,在 kernel 那一行末尾加入以下參數(三選一,建議由上至下嘗試):
acpi=off noapic
acpi=noapic
acpi=off
修改範例:
kernel /vmlinuz-2.6.9-42.EL ro root=/dev/VolGroup00/LogVol00 rhgb quiet acpi=off noapic
| 參數 | 作用 | 副作用 |
|---|---|---|
acpi=off | 完全關閉 ACPI 電源管理、裝置枚舉、熱插拔等功能 | 失去電源管理、CPU 節電、熱插拔支援 |
noapic | 停用 IO-APIC,改用傳統 PIC 中斷控制器 | 多核心系統中斷負載可能不均 |
acpi=noapic | 保留 ACPI 電源管理,但不使用 IO-APIC 路由 | 折衷方案,相容性最佳 |
除上述錯誤外,以下情況同樣適用:
修改後重新開機,執行 dmesg | grep -i shpchp 確認錯誤消失。若業務無特殊電源管理需求,acpi=off noapic 是最穩妥的組合。
pci=nomsi、pci=noacpi 等參數微調。