taskset核心号码的问题

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

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

谢谢。

通过查看/ proc / cpu info,可以看到哪些内核位于哪个处理器上。 例如,你会看到一台双核心CPU的机器上

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

为处理器上的第一个核心

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

在第二。

所以,一般来说,我想你会想要的

 taskset -c 0,2,4,6 

要么

 taskset -c 1,3,5,7 

您可能需要查看CPU Set(cset)以为您的应用程序创buildCPU屏蔽组。 这样可以确保真正的内核被用于重要的工作。 我通常禁用超线程(在Nehalem系统)为我的实时和低延迟应用程序。

下面是一个教程,用于使用cset创build特定应用程序/进程的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) 

你可以使用像:

taskset -c -p 0-3 pid