Pelo que entendi, um processo em tempo real significa que o processo obterá a CPU assim que precisar. O kernel é responsável por essa tarefa com seu mecanismo de agendamento interno.
Por outro lado, a afinidade de processo significa que o processo terá uma CPU dedicada para si mesmo e não será gerenciado pelo agendador do kernel. Então, se entendi corretamente, é ainda melhor do que ser um processo em tempo real. É como programar para um Arduino, mas apenas com uma CPU muito mais rápida. Além disso, no meu entendimento para afinidade de processo, precisamos de pelo menos uma CPU dual core e devemos deixar pelo menos uma CPU para o próprio sistema operacional. Então, com a ajuda da afinidade de processo, um programa que foi escrito para um Arduino pode ser portado para uma placa Linux como o Raspberry Pi Zero 2 W (que tem uma CPU quad-core) e teria todos os benefícios de um microcontrolador apenas com uma CPU mais rápida.
Meu entendimento está correto?
Acho que você está misturando dois conceitos que têm significados diferentes do que você descreveu. Eles têm fluxos de trabalho de uso diferentes. Tudo se resume ao que você realmente precisa
Em tempo real
O tempo real , no Linux, presumo, é projetado para fornecer comportamento previsível e determinístico para qualquer aplicativo sensível ao tempo.
Nos processos comuns do Linux, estão usando um agendador que tem diferentes prioridades e compartilhamento de tempo. Eles podem ser influenciados, por exemplo
nice
. O Linux em tempo real garante que as tarefas críticas de tempo recebam atenção imediata e sejam executadas dentro de certas restrições de tempo.Afinidade da CPU
A afinidade do processador na verdade vincula um processo a um(s) processador(es) específico(s). É por isso que também é chamado de CPU pinning.
Imagine ter uma máquina com 128 processadores. Por que você gostaria de fixar um processo em um determinado processador? O principal motivo para a afinidade da CPU é evitar falhas de cache, o que causa problemas de latência. Com 128 processadores, isso pode ser um problema real que pode tornar a tarefa que você estaria fazendo mais lenta.
Responder
Para responder à sua pergunta, a afinidade do processador é para otimizar o desempenho do cache , o que melhora a latência, mas não garante nenhum comportamento determinístico para aplicativos de tempo crítico. Por outro lado, o kernel em tempo real deve garantir um comportamento determinístico.
Depende de que tipo de aplicação estamos falando. Se você precisa que ela se comporte de forma determinística , ou seja, que você sempre terá uma resposta dentro de um certo período de tempo, então use a implementação Linux em tempo real .
Se você precisar evitar perdas de cache, você pode tentar a afinidade da CPU .