Taskset — привязка процесса к ядрам CPU

По умолчанию процессы используют все ядра процессора, но иногда необходимо освободить 0 ядро, которое обычно больше всего загружено или назначить некоторые процессы только на второй CPU и т.д., в этом случае поможет taskset.




Переключимся на root пользователя:




sudo -i




Просмотр краткой справки по taskset:




taskset -h




Узнаем ID процесса bird или любого другого нужного процесса:




pidof bird




Посмотрим каким ядрам назначен этот процесс:




taskset -pc 744

taskset -p -c 744




Можно указать все в одной команде:




taskset -cp `pidof bird`




Например у меня отобразилось, что на все ядра:




pid 744’s current affinity list: 0-27




Посмотрим сколько ядер имеет процессор и сколько есть процессоров:




lscpu | grep -i numa




Например у меня отобразилось:




NUMA node(s): 2
NUMA node0 CPU(s): 0-13
NUMA node1 CPU(s): 14-27




В моем случае второй процессор загружен на 10% меньше чем первый, поэтому я привязал процесс к ядрам второго процессора:




taskset -pc 14-27 `pidof bird`




Или укажем на все кроме 0:




taskset -pc 1-27 `pidof bird`




В ответ у меня отобразилось:




pid 17092’s current affinity list: 0-27
pid 17092’s new affinity list: 14-27




Проверим:




taskset -pc `pidof bird`




Если с указанным именем запущено несколько процессов, то можно использовать скрипт (на примере процесс ixnfo_com):




(for thread in $(ps -T -C ixnfo_com | awk '{print $2}' | grep -E '[0-9]'); do /usr/bin/taskset -pc $thread; done)




Например у меня отобразилось:




pid 2455's current affinity list: 0-27

pid 2458's current affinity list: 0-27

pid 2459's current affinity list: 0-27

pid 2460's current affinity list: 0-27

pid 2461's current affinity list: 0-27

pid 2463's current affinity list: 0-27




Теперь привяжем все эти процессы к нужным ядрам:




(for thread in $(ps -T -C ixnfo_com | awk '{print $2}' | grep -E '[0-9]'); do /usr/bin/taskset -pc 14-27 $thread; done)




Чтобы изменения не сбросились после перезапуска операционной системы, укажем команду например в файле /etc/rc.local.




Источник: https://ixnfo.com/taskset.html



2023-02-16T01:55:10
Утилиты командной строки