
Как установить привязку процесса к процессору в Linux?
решение1
Я использовал taskset для этого. Если у вас установлен taskset, то что-то вроде:
taskset -cp 0,2 45678
установит процесс с идентификатором 45678 так, чтобы он имел привязку к процессорам 1 и 3.
решение2
Внутри процесса вызов будет выглядеть так sched_setaffinity()
, или для pthreads,pthread_setaffinity_np()
В связи с этим, если вы беспокоитесь о привязке к процессору вашей программы, возможно, стоит обратить внимание на то, как она распределяет память. Более крупные системы с памятью, подключенной к более чем одному контроллеру (т. е. несколько сокетов процессора, каждый со своим собственным), будут иметь переменную задержку и пропускную способность между различными парами процессор-память. Вам также следует рассмотреть привязку NUMA, используя команду numactl
или системные вызовы, с которыми она работает. Одна программа, над которой я работал, получила 10%-ное улучшение производительности благодаря этому.
решение3
Вам нужно установить schedutils
(Linux scheduler utilities). Я использую его на своем Ubuntu Desktop.
СФсвязь
решение4
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-c/50117787#50117787