Как установить привязку процессора к процессу в Linux?

Ответы:

24

Я использовал набор задач для этого. Если у вас установлен набор задач, что-то вроде:

taskset -c 1,3 -p 45678

установил бы процесс с идентификатором 45678, чтобы иметь сходство с процессорами 1 и 3.

kbyrd
источник
1
Анонимное редактирование предполагает, что команда должна быть, taskset -p -c 1,3 45678а не taskset -c 1,3 -p 45678; то есть, что -c 1,3это маска спецификации и, как таковые, должны быть помещены между -pи pid.
G-Man говорит: «Восстановите Монику»
7

Внутри процесса вызов будет sched_setaffinity(), или для чего-то другого,pthread_setaffinity_np()

В связи с этим, если вы беспокоитесь о сродстве ЦП вашей программы, возможно, стоит обратить внимание и на то, как она распределяет память. Большие системы с памятью, подключенной к более чем одному контроллеру (т. Е. К нескольким сокетам ЦП, каждый со своим собственным), будут иметь различную задержку и пропускную способность между различными парами ЦП и памяти. Вы также захотите изучить сходство с NUMA, используя numactlкоманду или системные вызовы, с которыми она работает. Одна программа, над которой я работал, улучшила производительность на 10%.

Фил Миллер
источник
3

Вам необходимо установить schedutils(утилиты планировщика Linux). Я использую его на своем рабочем столе Ubuntu.

SF ссылка

Hemant
источник
1
taskset -c 1-3 ./a.out arg1 arg2

запускает a.outпроцесс с заданными аргументами и привязкой к процессорам 1, 2 или 3 (с нуля).

Вот минимальная тестовая программа на C, которую можно использовать, чтобы увидеть ее в действии: https://stackoverflow.com/questions/10490756/how-to-use-sched-getaffinity-and-sched-setaffinity-in-linux-from -с / 50117787 # 50117787

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
источник