У меня процессор Intel E5620. я использовал cat /proc/[pid]/stat
чтобы определить, на каком процессоре последний раз выполнялся процесс (39-е поле). Как я могу гарантировать, что процесс посвящен процессору (у меня есть 8 доступных) или еще лучше, как я могу выделить процесс для ядра (у меня 4)?
Основываясь на вашем комментарии к ответу MikeyB, вы пытаетесь решить это неправильно ИМХО -
Обе numactl
и taskset
заблокируют ваш процесс для процессора, но они не будут держать Другой обрабатывает этот процессор.
Если на этом процессоре работает кто-то другой, когда это нужно вашему процессу, вам придется подождать.
Лучшее решение - настроить свой процесс » nice
значение чего-то, что заставит его агрессивно захватить процессор (что-то вроде -20), и если этого все еще недостаточно, установите свой процесс на realtime priority
используя rtprioи позвольте планировщику делать то, что он должен делать, чтобы ваш процесс всегда имел циклы ЦП, когда он их запрашивает.
Попытка перехитрить планировщик, как указал MikeyB, обычно плохая идея. Позвольте ему делать то, для чего он предназначен, и ПРАВИЛЬНО попросите циклы процессора (nice
ценности и rtprio
).
numactl
позволяет привязать процесс к ядру или физическому процессору, а также принудительно применять политику выделения памяти.
Обычно в этом нет необходимости. Перестаньте пытаться перехитрить планировщик.
Если он у вас установлен, вы можете использовать набор задач команда например
taskset -c 2 -p 2345
для запуска процесса 2345 на ЦП 2
читать man taskset
- в нем есть все необходимое
Чтобы привязать PID процесса 12345 к первому процессору, попробуйте следующее:
# taskset -p 0x00000001 12345