Как защитить процессор от планировщика Linux (не допускать планирования потоков на этот процессор)?
Можно использоватьsched_setaffinity
закрепить поток на процессоре, увеличив производительность (в некоторых ситуациях)
Со страницы руководства Linux:
Restricting a process to run on a single CPU also avoids the performance cost caused by the cache invalidation that occurs when a process ceases to execute on one CPU and then recommences execution on a different CPU
Кроме того, если я хочу получить ответ в режиме реального времени, я могу изменить политику планировщика для этого потока наSCHED_FIFO
и повысить приоритет до некоторого высокого значения (доsched_get_priority_max
), что означает, что рассматриваемый поток должен всегда опережать любой другой поток, выполняющийся на его процессоре, когда он становится готовым.
Однако в этот момент поток, работающий на процессоре, который поток с реальным временем только что очистил, возможно, изгнал бы большую часть записей кэша уровня 1 потока в реальном времени.
Мои вопросы следующие:
Is it possible to prevent the scheduler from scheduling any threads onto a given cpu? (eg: either hide the cpu completely from the scheduler, or some other way) Are there some threads which absolutely have to be able to run on that cpu? (eg: kernel threads / interrupt threads) If I need to have kernel threads running on that cpu, what is a reasonable maximum priority value to use such that I don't starve out the kernel threads?