Найти в Дзене

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

По умолчанию процессы в Linux используют все ядра процессора, но иногда необходимо освободить 0 ядро, которое обычно больше всего загружено или назначить некоторые процессы только на второй CPU и т.д., в этом случае поможет taskset. Переключимся на root пользователя: sudo -i Узнаем ID процесса mc или любого другого нужного процесса: pidof mc Результат у меня был 249, посмотрим каким ядрам назначен этот процесс: taskset -pc 249 Мой вывод содержал все ядра: pid 249's current affinity list: 0-11 Укажем ядра или процессоры которые хотим задействовать под данный процесс: root@U0LC3:~# taskset -pc 10-11 249
pid 249's current affinity list: 0-11
pid 249's new affinity list: 10,11 Если с указанным именем запущено несколько процессов, то можно использовать скрипт (на примере процесс mc): (for thread in $(ps -T -C mc | awk '{print $2}' | grep -E '[0-9]'); do /usr/bin/taskset -pc $thread; done) Bывод в моём случае был следующий: pid 249's current affinity list: 10,11
pid 307's current affinity l

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

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

sudo -i

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

pidof mc

Результат у меня был 249, посмотрим каким ядрам назначен этот процесс:

taskset -pc 249

Мой вывод содержал все ядра:

pid 249's current affinity list: 0-11

Укажем ядра или процессоры которые хотим задействовать под данный процесс:

root@U0LC3:~# taskset -pc 10-11 249
pid 249's current affinity list: 0-11
pid 249's new affinity list: 10,11

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

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

Bывод в моём случае был следующий:

pid 249's current affinity list: 10,11
pid 307's current affinity list: 0-11
pid 323's current affinity list: 0-11

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

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

Вывод соответственно:

pid 249's current affinity list: 10,11
pid 249's new affinity list: 10,11
pid 307's current affinity list: 0-11
pid 307's new affinity list: 10,11
pid 323's current affinity list: 0-11
pid 323's new affinity list: 10,11

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

Подписывайтесь на мой канал и ставьте лайки!