Страница 1 из 1

taskset - аффинити маска

Добавлено: 24 дек 2014, 16:02
Olej
Не очень известная, но очень нужная (временами) утилита - taskset: позволяет диагностировать или разрешить-запретить на скольких и каких процессорах выполнять задание.

Пока SMP было больше экзотикой - это команда не сильно кого интересовала.
А сейчас, когда на каждом столе многоядерный (многопроцессорный) компьютер - это бывает очень даже надо.

Код: Выделить всё

$ cat /proc/cpuinfo | grep processor | wc -l 
4 
$ ps 
  PID TTY          TIME CMD 
 3562 pts/10   00:00:00 bash 
 5070 pts/10   00:00:00 ps 
$ taskset -p 3562 
pid 3562's current affinity mask: f 
Это диагностика.

Этой же командой можно либо изменить процессоры, используемые уже запущенным процессом (по PID), либо запускать команду, сразу указывая на каких процессорах её выполняться.

Поменять разрешённые процессоры для уже выполняющейся команды (актуально для серверов):

Код: Выделить всё

$ taskset -p 3562 -c 1,2
...
Пример запуска программы (не важно в деталях что за программа ... но у неё своих куча опций) на разных наборах допустимых ей процессоров (из 4-х: 0...3)

Код: Выделить всё

$ taskset -c 0 ./tspeed -t4 -n60 -a100 
...
$ taskset -c 0-3 ./tspeed -t4 -n60 -a100 
...
$ taskset -c 0,2 ./tspeed -t4 -n60 -a100
...
P.S. у команды taskset есть маленький дефект командной строки: если записать опцию как -c1 (без пробела, что допустимо по синтаксису командной строки), то считается что это ошибочная опция.