我有超线程启用四核心CPU。 所以我有8个逻辑核心。 我想限制我的应用程序只使用4个内核,我希望这4个内核是不同的物理内核。 我应该使用哪个任务集选项(核心号码)? :
谢谢。
通过查看/ 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