Radiant Asked: 2022-01-16 03:32:16 +0800 CST2022-01-16 03:32:16 +0800 CST 2022-01-16 03:32:16 +0800 CST 在 Linux 上禁用 Intel Alder Lake 效率内核 772 我的应用程序需要最大的单线程性能,并且因切换到 Intel E 内核而受到影响。 我正在寻找一种方法来在我的 Ubuntu 20.04 机器上禁用 Intel i9-12900K 上的 E 内核,而无需访问 bios(它是租用的专用服务器)。或者使用任何可能的方式来区分这些内核并分配 CPU 亲和性,taskset以将它们排除在执行之外。 试图自己在谷歌中找到答案。只发现目前确实存在调度程序问题,但对于我的问题没有明确的修复或解决方法。 linux intel 2 个回答 Voted Best Answer Artem S. Tashkinov 2022-01-16T05:48:58+08:002022-01-16T05:48:58+08:00 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 rustyx 2022-03-28T05:48:57+08:002022-03-28T05:48:57+08:00 不要完全禁用电子核心,而是使用isolcpus引导参数将电子核心与通用调度程序隔离开来。 例如,对于 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-core cset: $ sudo taskset -p 0xFF0000 <pid> 或者,也可以使用cset shield.
taskset
是一项标准功能,可将核心分配给在您的情况下完美运行的应用程序。例如,在 Intel Core i9 12900K 的情况下,将您的任务固定到前 16 个核心,您就可以开始了:第二种形式更长但更容易阅读。
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 测试物理内核,您将执行以下操作:
更多信息在这里:我如何知道哪些处理器是物理内核?
选项 N2:您可以将 E 核心离线,它们将对您的系统变得不可见:
对于 Intel Core i9 12900K 来说
不要完全禁用电子核心,而是使用
isolcpus
引导参数将电子核心与通用调度程序隔离开来。例如,对于 Intel Core i9 12900K:
$ sudo vi /etc/default/grub
$ sudo update-grub
taskset
然后,您仍然可以通过使用或手动将它们分配给特定进程来使用 e-corecset
:$ sudo taskset -p 0xFF0000 <pid>
或者,也可以使用
cset shield
.