Управление и контроль аффинити маской процесса (битовой маской тех процессоров в SMP, которые позволено задействовать процессу).
Ещё лет 5 назад эта команда мало кого интересовала, на сегодня она актуальна, потому как на каждом рабочем столе стоит компьютер с несколькими ядрами.
Команда
taskset:
Код: Выделить всё
bash-4.2$ taskset
Usage: taskset [options] [mask | cpu-list] [pid|cmd [args...]]
Options:
-a, --all-tasks operate on all the tasks (threads) for a given pid
-p, --pid operate on existing given pid
-c, --cpu-list display and specify cpus in list format
-h, --help display this help
-V, --version output version information
...
Вот проверка аффинити маски процесса и как она выглядит (а заодно как быстро проверить сколько у вас процессоров):
Код: Выделить всё
[Olej@modules affinity]$ cat /proc/cpuinfo | grep processor | wc -l
4
[Olej@modules affinity]$ uname -a
Linux modules.localdomain 3.15.4-200.fc20.x86_64 #1 SMP Mon Jul 7 14:24:41 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
[Olej@modules affinity]$ ps
PID TTY TIME CMD
3562 pts/10 00:00:00 bash
5070 pts/10 00:00:00 ps
[Olej@modules affinity]$ taskset -p 3562
pid 3562's current affinity mask: f
Код: Выделить всё
-bash-4.2$ cat /proc/cpuinfo | grep processor | wc -l
2
bash-4.2$ uname -a
Linux notebook.localdomain 3.14.8-200.fc20.i686 #1 SMP Mon Jun 16 22:36:56 UTC 2014 i686 i686 i386 GNU/Linux
-bash-4.2$ ps
PID TTY TIME CMD
2139 pts/1 00:00:00 bash
2234 pts/1 00:00:00 ps
-bash-4.2$ taskset -p 2139
pid 2139's current affinity mask: 3
Как легко видеть, это получено на разных процессорах.
Вот как можно одну и ту же задачу (многопоточную ... что за задача не важно) не только
на указанном числе процессоров (1, 2, 3, 4), но и выборочно указать
на каких процессорах разрешить выполнение задачи:
Код: Выделить всё
olej@atom:~/2014-WORK/GlobalLogic/BOOK.Tools.org/examples.others.DRAFT/affinity$ taskset -c 0-3 ./tspeed -t4 -n60 -a100
threads number = 4, repeat slices in thread 15 times : full time was 02 sec. 208 msec.
olej@atom:~/2014-WORK/GlobalLogic/BOOK.Tools.org/examples.others.DRAFT/affinity$ taskset -c 0 ./tspeed -t4 -n60 -a100
threads number = 4, repeat slices in thread 15 times : full time was 05 sec. 963 msec.
olej@atom:~/2014-WORK/GlobalLogic/BOOK.Tools.org/examples.others.DRAFT/affinity$ taskset -c 1 ./tspeed -t4 -n60 -a100
threads number = 4, repeat slices in thread 15 times : full time was 05 sec. 950 msec.
olej@atom:~/2014-WORK/GlobalLogic/BOOK.Tools.org/examples.others.DRAFT/affinity$ taskset -c 2 ./tspeed -t4 -n60 -a100
threads number = 4, repeat slices in thread 15 times : full time was 05 sec. 939 msec.
olej@atom:~/2014-WORK/GlobalLogic/BOOK.Tools.org/examples.others.DRAFT/affinity$ taskset -c 3 ./tspeed -t4 -n60 -a100
threads number = 4, repeat slices in thread 15 times : full time was 05 sec. 970 msec.
olej@atom:~/2014-WORK/GlobalLogic/BOOK.Tools.org/examples.others.DRAFT/affinity$ taskset -c 0-1 ./tspeed -t4 -n60 -a100
threads number = 4, repeat slices in thread 15 times : full time was 02 sec. 967 msec.
olej@atom:~/2014-WORK/GlobalLogic/BOOK.Tools.org/examples.others.DRAFT/affinity$ taskset -c 0,2 ./tspeed -t4 -n60 -a100
threads number = 4, repeat slices in thread 15 times : full time was 04 sec. 405 msec.
olej@atom:~/2014-WORK/GlobalLogic/BOOK.Tools.org/examples.others.DRAFT/affinity$ taskset -c 0,1 ./tspeed -t4 -n60 -a100
threads number = 4, repeat slices in thread 15 times : full time was 02 sec. 987 msec.
olej@atom:~/2014-WORK/GlobalLogic/BOOK.Tools.org/examples.others.DRAFT/affinity$ taskset -c 0,3 ./tspeed -t4 -n60 -a100
threads number = 4, repeat slices in thread 15 times : full time was 02 sec. 956 msec.
Точно так же, как этой командой можно
запускать новый процесс, также можно
изменить разрешение на использование процессоров для уже ранее выполняющегося процесса по его PID (здесь похоже на chrt).