Como verificar se/com que frequência meu processo é interrompido pelo kernel?

Como verificar se/com que frequência meu processo é interrompido pelo kernel?

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 tasksete 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_commandexecuçã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.

informação relacionada