Как ограничить число используемых процессоров (ядер) программе

процессоры linuxПро параллельный архиватор, который работает с использованием сразу нескольких процессоров (ядер), мы уже как-то говорили. А вот если задача противоположная? Если есть приложение, и надо умерить его аппетиты в процессорах?

Сразу оговорюсь, что речь идёт о немногих приложениях, умеющих работать в несколько потоков на нескольких ядрах. Вроде того же параллельного архиватора. Хотя, справедливости ради, надо сказать, что он сам легко настраивается в плане использования процессоров. А вот “отсадить” на одно ядро кодирование видео, дабы не мешало жизни других приложений — дело жизненно необходимое.

На выручку приходит команда taskset. Обычно она входит в состав дистрибутива Linux, но если нет, то поискать её можно по ключевому слову schedutils. После установки начинаем “шаманить”. Для этого необходимо знать pid процесса, который занимает ядра. Для примера пусть это будет 3477.

Вначале отдаём команду на просмотр использования ядер:

# taskset -p 3477
pid 3477's current affinity mask: 1

Замечу, что процессоры отображаются по бинарной маске. То есть первый — это 1, второй — это 10 в двоичной системе и 2 в десятичной, третий — 4 (100 в двоичной). А первый, второй и третий — будет 7 (111).

# taskset -p 07 3477
pid 3477's current affinity mask: 1
pid 3477's new affinity mask: 7

Но чтобы не заморачиваться с двоичным устным счётом, можно использовать ключ -c и писать номера процессоров через запятую и/или тире:

# taskset -pc 1,4,5-7 3477

Только не забывайте, что в этом случае процессоры нумеруются, уже начиная с нуля 😉

Run a program on one CPU core in Linux.

Добавить комментарий

Ваш адрес email не будет опубликован.