我的第 12 代 Intel© Core™ i7-1260P (Alder Lake) 有 4 个性能核心 + 4 个线程和 8 个效率核心。
如果启动多线程任务,它会优先选择最快的性能核心,然后是物理效率核心,最后是线程。这是在Tom 的硬件文章并且可以从 CPU 获得最大性能。
但是较旧的(5.18 之前的)内核无法正确使用效率核心,并且也在性能核心上运行后台进程(如索引文件)——即使系统处于空闲状态,这些进程上也总会有一些随机活动。
有没有办法模拟英特尔® Thread Director,将这些后台任务引导到效率核心,并将性能核心保留用于“真正繁重”的任务,如处理图形等?
答案1
答案是肯定的 - 使用 CPU 集。为效率核心创建一个集合,并将所有根进程移至该集合(后台任务将不再在性能核心上运行)。然后为性能核心创建一个集合,并修改所有需要额外功率来使用此集合的程序的启动器。
我的 i7-1260P 配置(0、2、4、6 为性能核心,1、3、5、7 为线程,8..15 为效率核心)如下所示(我使用cset
实用程序来创建和操作集合):
# cset set --cpu=0-15 --set=all
# cset set --cpu=0-7 --set=perf
# cset set --cpu=8-15 --set=effi
名为“all”的集合使用所有核心和线程,“perf”仅使用性能核心+线程,“effi”仅使用效率核心。如有必要,您可以随意创建其他集合,例如仅用于物理性能核心或单个核心的集合。
# cset proc -m -f root -t effi
启动系统后,我将所有进程移至“effi”集 - 它们现在仅使用效率核心。
# chmod -R 777 /cpusets
必须进行此项设置,以便用户可以在所请求的 CPU 集上启动他们的程序。
$ cset proc --set=perf --exec gimp
这是用户如何启动 Gimp 并在性能核心上运行它的示例。这样,可以修改所有所需的启动器(例如,在某些系统中,在 .local/share/applications 中),以便从菜单甚至从 mime 类型运行它们时,使用请求的 CPU 核心。