任务集核心数字问题

任务集核心数字问题

我有四核 CPU,并且启用了超线程。所以我有 8 个逻辑核心。我想限制我的应用程序仅使用 4 个核心,并且我希望这 4 个核心是不同的物理核心。我应该使用哪些任务集选项(核心数)?:

  • taskset -c 0,1,2,3 命令或
  • taskset -c 0,2,4,6 命令

谢谢。

答案1

通过查看,您可以看到哪些核心位于哪些处理器上/proc/cpuinfo。例如,您将在具有双核 CPU 的机器上看到:

processor   : 0
(snip)
core id     : 0
cpu cores   : 2

对于处理器上的第一个核心,并且:

processor   : 1
(snip)
core id : 1
cpu cores   : 2

其次。

因此,一般来说,我认为你会想要:

taskset -c 0,1,2,3

或者:

taskset -c 4,5,6,7

答案2

你可能想看看CPU 设置 (cset)为您的应用程序创建 CPU 屏蔽组。这样您就可以确保使用真实内核来完成重要工作。我通常会为实时和低延迟应用程序禁用超线程(在 Nehalem 系统上)。

这里有一个使用 cset 为特定应用程序/进程创建 CPU 组的教程,它比 taskset 更有条理一些。https://rt.wiki.kernel.org/index.php/Cpuset_management_utility/tutorial

至于确定核心数量和位置分配,请查看:http://dag.wieers.com/blog/is-hyper-threading-enabled-on-a-linux-system

在启用超线程的四核 Nehalem 上快速运行该实用程序显示:

[root@XXX ~/hwloc-1.0.3]# ./utils/lstopo 
Machine (7980MB) + Socket #0 + L3 #0 (8192KB)
  L2 #0 (256KB) + L1 #0 (32KB) + Core #0
    PU #0 (phys=0)
    PU #1 (phys=4)
  L2 #1 (256KB) + L1 #1 (32KB) + Core #1
    PU #2 (phys=1)
    PU #3 (phys=5)
  L2 #2 (256KB) + L1 #2 (32KB) + Core #2
    PU #4 (phys=2)
    PU #5 (phys=6)
  L2 #3 (256KB) + L1 #3 (32KB) + Core #3
    PU #6 (phys=3)
    PU #7 (phys=7)

答案3

你可以像这样使用:

taskset -c -p 0-3 pid

相关内容