Основной номер задачи
У меня четырехъядерный процессор с включенной гиперпоточностью. Итак, у меня 8 логических ядер. Я хочу ограничить свое приложение только четырьмя ядрами, и я хочу, чтобы эти четыре ядра были разными физическими ядрами. Какие параметры набора задач (номера ядра) я должен использовать?:
- команда taskset -c 0,1,2,3 или
- команда taskset -c 0,2,4,6
Спасибо.
3 ответа
Вы можете увидеть, какие ядра на каких процессорах, взглянув на информацию / proc / 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), чтобы создать защитную группу CPU для вашего приложения. Таким образом, вы можете убедиться, что реальные ядра используются для важной работы. Обычно я отключаю гиперпоточность (в системах Nehalem) для своих приложений реального времени и приложений с низкой задержкой.
Вот учебник по созданию групп процессоров для конкретных приложений / процессов с использованием cset, который немного более организован, чем набор задач. 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)