como proteger um cpu do agendador linux (evitar o agendamento de threads para esse cpu)?
É possível usarsched_setaffinity
para fixar um thread para uma cpu, aumentando o desempenho (em algumas situações)
Na página do manual do linux:
Restringir um processo para ser executado em uma única CPU também evita o custo de desempenho causado pela invalidação de cache que ocorre quando um processo deixa de ser executado em uma CPU e, em seguida, recomeça a execução em uma CPU diferente
Além disso, se eu desejar uma resposta mais em tempo real, posso alterar a diretiva do agendador desse segmento paraSCHED_FIFO
, e até a prioridade para algum valor alto (atésched_get_priority_max
), o que significa que o encadeamento em questão deve sempre antecipar qualquer outro encadeamento em execução em sua cpu quando estiver pronto.
No entanto, neste ponto, o encadeamento em execução na CPU, que o encadeamento em tempo real acabou de esvaziar, provavelmente terá despejado muitas das entradas de cache de nível 1 do encadeamento em tempo real.
Minhas perguntas são as seguintes:
É possível evitar que o agendador agende quaisquer threads em uma determinada cpu? (por exemplo: ou esconda a cpu completamente do agendador, ou de alguma outra forma)Existem alguns tópicos que absolutamente tem que ser capaz de rodar nessa cpu? (por exemplo: threads do kernel / threads de interrupção)Se eu precisar ter threads de kernel rodando naquela cpu, qual é o valor máximo de uma prioridade razoável para usar de tal forma que eu não privarei os threads do kernel?