Допустим, у меня есть четырехъядерный процессор и четыре идентичных процесса, каждый с десятью потоками. Можно ли в Linux сказать, что Процесс A разрешен только для запуска на ЦП 0, Процесс B разрешен для работы только на CPU 1 и т. Д.?
Допустим, у меня есть четырехъядерный процессор и четыре идентичных процесса, каждый с десятью потоками. Можно ли в Linux сказать, что Процесс A разрешен только для запуска на ЦП 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): 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
вы всегда можете оптимизировать свой сервер по мере необходимости