
Com a finalidade de criar o perfil de um programa, gostaria de executá-lo ininterruptamente em uma CPU. Para fazer isso eu uso uma combinação de taskset
e chrt
:
# taskset -c 1 chrt -f 99 ./my_program
Agora, minha pergunta é se existe uma ferramenta que me permite verificar se/com que frequência o processo é interrompido por mudanças de contexto no kernel.
Responder1
Você pode usarperf
; por exemplo,
perf stat -e context-switches,cpl_cycles.ring0,cpl_cycles.ring123 your_command
produzirá um resumo semelhante ao
Performance counter stats for 'your_command':
1 context-switches
11,890,096 cpl_cycles.ring0
9,980,265 cpl_cycles.ring123
0.011218937 seconds time elapsed
0.007533000 seconds user
0.003766000 seconds sys
o que mostra que houve uma mudança de contexto (para outro processo, não para o kernel) durante a your_command
execução de e a CPU gastou 54% do seu tempo executando o código do kernel.
Garantir que um determinado processo receba o máximo de atenção possível da CPU pode ser bastante complicado.Documentação de configuração de benchmark de Victor Stinnerfornece uma boa visão geral dos problemas e técnicas para mitigá-los; seu artigo está focado em benchmarking, mas grande parte dele é aplicável em outras circunstâncias.