Eu li que o Linux tem um agendador O(1), mas isso não me diz realmente quanto tempo uma mudança de contexto leva aproximadamente. Alguém tem alguns números atuais?
Eu sei que depende de muitos fatores como tipo de CPU, frequência, conectividade DRAM, caches e outros, mas eu ficaria feliz em saber a ordem de magnitude em mili, micro, nano segundos ou o número aproximado de ciclos de processador necessários para antecipar um processo, decidir pela execução do próximo processo e realmente fazê-lo funcionar.
O agendador padrão no Linux não foi o agendador O(1) nos últimos dez anos, é o Agendador Completamente Justo , que é O(log n) no número de tarefas na fila de execução. Você teria que comparar cenários específicos nos quais está interessado, em seus sistemas e cargas de trabalho específicos; pode-se encontrar benchmarks na Internet, com valores tipicamente da ordem de 0,5-2 µs por troca de contexto , mesmo quando se alterna para tarefas não agendadas anteriormente na CPU.
Como você mencionou, a sobrecarga variará muito dependendo das circunstâncias, incluindo código e presença de dados nos vários caches. Hoje em dia, a sobrecarga também varia dependendo da versão e configuração do kernel, em particular dependendo de quais contramedidas de segurança estão ativas e quão bem elas são suportadas pela CPU. Um artigo recente fornece números relativos para este último, com variações de –14% a +98% em comparação com uma linha de base 4.0.