Isso depende muito do tipo de aplicativo que você executa. Se você possui aplicativos que são syscalls WRT muito acionados, pode esperar ver grandes quantidades de alternância de contexto. Se a maioria de seus aplicativos ficar inativa e acordar apenas quando houver coisas acontecendo em um soquete, você poderá esperar taxas baixas de troca de contexto.
Chamadas do sistema
As chamadas do sistema causam alternâncias de contexto por sua própria natureza. Quando um processo faz uma chamada de sistema, basicamente diz ao kernel para assumir o seu ponto atual no tempo e na memória para fazer coisas que o processo não tem o privilégio de fazer e retornar ao mesmo local quando terminar.
Quando analisamos a definição do syscall write (2) do Linux, isso fica muito claro:
NOME
write - grava em um descritor de arquivo
SINOPSE
#incluir
ssize_t write (int fd, const void * buf, size_t count);
DESCRIÇÃO
write () escreve até contar bytes do buffer apontado para o arquivo
referido pelo descritor de arquivo fd. [..]
VALOR DE RETORNO
Em caso de sucesso, o número de bytes gravados é retornado (zero indica
nada foi escrito). Em caso de erro, -1 é retornado e errno é definido
adequadamente.
[..]
Isso basicamente diz ao kernel para assumir a operação do processo, mover para count
bytes, começando pelo endereço de memória apontado por *buf
para o descritor fd
de arquivo do processo atual e, em seguida, retorne ao processo e diga a ele como foi.
Um bom exemplo para mostrar isso é o servidor de jogos dedicado para jogos baseados em Valve Source, hlds . http://nopaste.narf.at/f1b22dbc9 mostra um segundo de syscalls feitos por uma única instância de um servidor de jogo que não tinha jogadores. Esse processo leva cerca de 3% do tempo de CPU em um Xeon X3220 (2.4Ghz), apenas para lhe dar uma idéia de quão caro isso é.
Multitarefa
Outra fonte de alternância de contexto pode ser processos que não fazem syscalls, mas precisam ser movidos de uma determinada CPU para abrir espaço para outros processos.
Uma boa maneira de visualizar isso é cpuburn . O cpuburn não realiza nenhum syscalls, apenas itera sobre a própria memória, portanto não deve causar nenhuma alternância de contexto.
Pegue uma máquina inativa, inicie o vmstat e execute um burnMMX (ou qualquer teste diferente do pacote cpuburn) para cada núcleo de CPU que o sistema possui. Você deve ter uma utilização completa do sistema até então, mas quase nenhuma alternância de contexto aumentada. Em seguida, tente iniciar mais alguns processos. Você verá que a taxa de alternância de contexto aumenta à medida que os processos começam a competir pelos núcleos da CPU. A quantidade de alternância depende da relação processos / núcleo e da resolução multitarefa do seu kernel.
Leitura adicional
O linfo.org tem uma boa descrição sobre o que são comutadores de contexto e chamadas de sistema . A Wikipedia possui informações genéricas e uma boa coleção de links nas chamadas do sistema.