Назад | Перейти на главную страницу

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

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

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>]

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

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

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

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