當多核變單核:破解CPU核心神秘失蹤的終極指南!

rainsc發表於2024-10-23

CPU 核心與執行緒識別問題解決文件


1. 背景

在一臺物理主機上執行 lscpu 命令時,發現系統僅識別到 1 個核心和 1 個執行緒,儘管主機搭載的是 Intel Xeon E5-2686 v4 處理器,且應該具有多個核心和執行緒。這種情況表明系統未正確識別 CPU 資源,需要進一步排查問題並解決。
image


2. 初步排查

首先透過 lscpu 輸出確認當前 CPU 的識別情況:

lscpu

輸出內容如下:

架構:                    x86_64
CPU:                      1
每個核的執行緒數:          1
每個座的核數:            1
座:                      1
型號名稱:                Intel(R) Xeon(R) CPU E5-2686 v4 @ 2.30GHz

以上內容顯示系統僅識別了 1 個核心1 個執行緒,這顯然與硬體配置不符。


3. 檢視系統啟動引數

為了進一步排查問題,檢查 /proc/cmdline 檔案,檢視系統啟動時使用的引數:

cat /proc/cmdline

輸出結果如下:

BOOT_IMAGE=/boot/vmlinuz-6.8.0-47-generic root=UUID=bcde7882-62a5-4ddc-a9e6-4f2ed6a6e8a3 ro quiet splash acpi=off vt.handoff=7

透過檢查啟動引數,發現啟動時使用了 acpi=off,即禁用了 ACPI(高階配置與電源介面)。ACPI 是管理系統硬體和電源的重要模組,禁用它會導致系統無法正確識別 CPU 核心、記憶體等硬體資源。


4. 問題原因分析

由於 acpi=off 引數被啟用,系統無法使用 ACPI 來正確識別 CPU 核心和執行緒數。這是導致系統僅顯示 1 個核心和 1 個執行緒的主要原因。為了解決此問題,需要移除 acpi=off 引數。


5. 解決步驟

5.1 移除 acpi=off 引數
  1. 編輯 GRUB 配置檔案:

    sudo nano /etc/default/grub
    
  2. 在編輯器中找到如下行:

    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi=off"
    
  3. 刪除 acpi=off 引數,修改後的行應如下:

    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
    
  4. 儲存並退出編輯器(在 nano 中按 Ctrl + O 儲存,Ctrl + X 退出)。

5.2 更新 GRUB 並重啟系統
  1. 更新 GRUB 配置以應用更改:

    sudo update-grub
    
  2. 重啟系統:

    sudo reboot
    

6. 驗證結果

重啟後,執行 lscpu 再次檢視 CPU 核心和執行緒的識別情況:

lscpu

image

系統應能夠識別到完整的 CPU 核心和執行緒數。


7. 其他可能性排查

如果移除 acpi=off 之後問題仍然存在,可以繼續排查以下幾個方面:

  1. BIOS 設定

    • 進入主機板 BIOS 設定,確保多核和超執行緒(Hyper-Threading)已啟用。
  2. 核心或系統配置

    • 檢查系統啟動引數,確保沒有其他限制 CPU 核心數的引數,例如 maxcpus
  3. CPU 驅動或韌體問題

    • 確保系統的核心和 CPU 微程式碼(microcode)已更新到最新版本。你可以使用以下命令更新韌體:
      sudo apt update
      sudo apt upgrade
      sudo apt install intel-microcode
      
  4. 硬體問題

    • 如果其他方法都無效,可能需要檢查 CPU 和主機板的物理連線,或使用硬體診斷工具確認是否存在硬體故障。

8. 總結

在這臺物理主機上,acpi=off 導致了系統無法正確識別多核 CPU。透過移除該引數,並重啟系統後,系統應能正確識別所有的核心和執行緒。如果問題仍然存在,可以繼續從 BIOS 設定、核心配置、韌體更新和硬體狀態等方面進行進一步排查。

相關文章