LinuxでIntel Alder Lake Efficiency Coreを無効にする

LinuxでIntel Alder Lake Efficiency Coreを無効にする

私のアプリケーションは最大のシングルスレッドパフォーマンスを必要とし、Intel Eコアに切り替えるのに苦労しています。

私はBIOSにアクセスせずにUbuntu 20.04システムのIntel i9-12900KでEコアを無効にする方法を探しています(レンタル専用サーバーです)。あるいは、これらのコアを区別し、CPU類似性を割り当てることによってtaskset実行から除外することができる可能な方法があります。

私はGoogleで自分の答えを見つけようとしました。現在、間違いなくスケジューラの問題があることがわかりましたが、私の問題に対する明確な修正や回避策はありません。

答え1

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

2番目の形式は長いですが、読みやすいです。

私が知っている限り、標準のLinuxカーネルには現在、特定のアプリケーションが特定の種類のカーネルを使用する必要があることをカーネルに知らせるインフラストラクチャはありません。はい、LinuxカーネルはBIG.little ARMアーキテクチャをサポートしていますが、この機能を使用するAPIについて聞いたことはありません。

2022年1月現在、Linuxカーネルはいいえあらゆる形態のIntelスレッドコントローラをサポートします。パッチもなく、何もありません。

最後に、LinuxとWindowsがHT / SMT兄弟を報告する方法が異なることに注意する必要があります。

Windowsでは、これをペアでリストします(たとえば、コア1:スレッド1スレッド2、コア2:スレッド1スレッド2など)。 Linux はまずすべての物理コアをリストし、次に HT/SMT 兄弟コアをリストします。

したがって、物理コアをテストしたい場合いいえ16コアCPUにHT / SMTを使用すると、次のことができます。

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

答え2

e-core を完全に無効にする代わりに、以下を使用します。isolcpus汎用スケジューラーからe-coreを分離するために使用される開始パラメーター。

たとえば、Intel Core i9 12900Kの場合:

$ sudo vi /etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="isolcpus=16,17,18,19,20,21,22,23"    

$ sudo update-grub

tasksetその後、以下を使用するか、手動でeコアを特定のプロセスに割り当てることによって引き続き使用できますcset

$ sudo taskset -p 0xFF0000 <pid>

または、次のものを使用できます。cset shield

答え3

chcpu -d [cpulist]いつでもコアをオフラインに切り替えることができます。

バラよりman chcpu

関連情報