在 Linux 上禁用 Intel Alder Lake 效率核心
我的應用程序需要最大的單執行緒性能,並且因切換到 Intel E 核心而受到影響。
我正在尋找一種方法來在我的 Ubuntu 20.04 機器上禁用 Intel i9-12900K 上的 E 核心,而無需訪問 bios(它是租用的專用伺服器)。或者使用任何可能的方式來區分這些核心並分配 CPU 親和性,
taskset
以將它們排除在執行之外。試圖自己在Google中找到答案。只發現目前確實存在調度程序問題,但對於我的問題沒有明確的修復或解決方法。
taskset
是一項標準功能,可將核心分配給在您的情況下完美執行的應用程序。例如,在 Intel Core i9 12900K 的情況下,將您的任務固定到前 16 個核心,您就可以開始了:taskset 0xFFFF application taskset -c 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 application
第二種形式更長但更容易閱讀。
AFAIK 標準 Linux 核心目前沒有任何基礎設施來提示核心某些應用程序需要使用某些類型的核心。是的,Linux 核心支持 BIG.little ARM 架構,但我還沒有聽說過使用此功能的 API。
自 2022 年 1 月起,Linux 核心不支持任何形式的英特爾執行緒控制器。沒有更新檔,什麼都沒有。
最後,值得注意的是,Linux 和 Windows 在報告 HT/SMT 兄弟姐妹的方式上有所不同。
Windows 將它們成對列出,即核心 1:執行緒 1 執行緒 2、核心 2:執行緒 1 執行緒 2 等。Linux 首先列出所有物理核心,然後是它們的 HT/SMT 兄弟。
因此,如果您想在不使用 HT/SMT 的情況下對 16 核 CPU 測試物理核心,您將執行以下操作:
taskset -c 0,1,2,3,4,5,6,7 application taskset 0xFF application
更多資訊在這裡:我如何知道哪些處理器是物理核心?
選項 N2:您可以將 E 核心離線,它們將對您的系統變得不可見:
echo 0 | sudo tee /sys/devices/system/cpu/cpu{NN}/online
對於 Intel Core i9 12900K 來說
for i in {16..23}; do echo 0 | sudo tee /sys/devices/system/cpu/cpu${i}/online; done