Допустим, у меня есть четырехъядерный процессор и четыре идентичных процесса, каждый с десятью потоками. Можно ли в 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
вы всегда можете оптимизировать свой сервер по мере необходимости