Можно использовать sched_setaffinity
для привязки потока к процессору, увеличивая производительность (в некоторых ситуациях)
На странице руководства linux:
Ограничение процесса запуска на одном CPU также позволяет избежать стоимости, вызванной недействительностью кеша, которая возникает, когда процесс перестает выполняться на одном CPU, а затем возобновляет выполнение другой процессор
Кроме того, если я хочу получить более оперативный ответ, я могу изменить политику планировщика для этого потока на SCHED_FIFO
и увеличить приоритет до некоторого высокого значения (до sched_get_priority_max
), что означает рассматриваемый поток всегда должен предугадывать любой другой поток, выполняющийся на его процессоре, когда он будет готов.
Однако на данный момент поток, выполняющийся на процессоре, который только что запрограммированный поток в реальном времени, возможно, вытеснил большую часть записей кэша уровня 1-го уровня в реальном времени.
Мои вопросы таковы:
- Можно ли запретить планировщику планировать любые потоки на данный процессор? (например: либо полностью скрыть процессор из планировщика, либо каким-либо другим способом)
- Есть ли какие-то потоки, которые обязательно должны работать на этом процессоре? (например: потоки ядра/потоки прерываний)
- Если мне нужно иметь потоки ядра, запущенные на этом процессоре, то какое разумное значение максимального приоритета использовать, чтобы я не голодал из потоков ядра?