Можно ли ограничить процесс Linux, чтобы он мог работать только на определенном ядре на определенной машине?

10

Допустим, у меня есть четырехъядерный процессор и четыре идентичных процесса, каждый с десятью потоками. Можно ли в Linux сказать, что Процесс A разрешен только для запуска на ЦП 0, Процесс B разрешен для работы только на CPU 1 и т. Д.?

Майк
источник

Ответы:

16
taskset <affinity mask> -p <process>

т.е.

taskset 1 -p 12345

настроить процесс 12345 на использование только процессора / ядра 1

Битовая маска может быть списком (т. Е. 1,3,4 для использования ядер 1, 3 и 4 в системе с ядром 4+) или битовой маской в ​​шестнадцатеричном виде (0x0000000D - 1,3,4, 0x00000001 только для ядра 1)

tasksetобычно в пакете под названием shedutils.

Редактировать: почти забыл ... Если вы хотите установить соответствие новой команды вместо изменения ее для существующего процесса, используйте:

taskset <mask> <program> [<arg1>]...[<argN>]
Дэвид Спиллетт
источник
1

набор задач (util-linux 2.13-pre7): taskset [параметры] [маска | список процессоров] [pid | cmd [args ...]] установить или получить сходство процесса

-p, --pid работают с существующим заданным pid -c, --cpu-list display и указывают cpus в формате списка -h, --help отображать эту справку -v, --version выводит информацию о версии

По умолчанию запускается новая команда: taskset 03 sshd -b 1024 Вы можете получить маску существующей задачи: taskset -p 700 или установить ее: taskset -p 03 700 Формат списка использует разделенный запятыми список вместо mask: taskset -pc 0,3,7-11 700 Диапазоны в формате списка могут принимать аргумент шага: например, 0-31: 2 эквивалентно маске 0x55555555

вы всегда можете оптимизировать свой сервер по мере необходимости

Раджу
источник