¿Cómo comprobar si el kernel se adelanta a mi proceso y con qué frecuencia?

¿Cómo comprobar si el kernel se adelanta a mi proceso y con qué frecuencia?

Con el fin de perfilar un programa, me gustaría ejecutarlo ininterrumpidamente en una CPU. Para hacer esto utilizo una combinación de tasksety chrt:

# taskset -c 1 chrt -f 99 ./my_program

Ahora mi pregunta es si existe una herramienta que me permita comprobar si y con qué frecuencia el proceso se ve interrumpido por cambios de contexto en el kernel.

Respuesta1

Puedes usarperf; Por ejemplo,

perf stat -e context-switches,cpl_cycles.ring0,cpl_cycles.ring123 your_command

producirá un resumen similar a

 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

lo que muestra que hubo un cambio de contexto (a otro proceso, no al kernel) durante your_commandla ejecución, y la CPU pasó el 54% de su tiempo ejecutando el código del kernel.

Garantizar que un proceso determinado reciba la mayor atención posible de la CPU puede resultar bastante complicado.Documentación de configuración de referencia de Victor Stinnerproporciona una buena visión general de los problemas y de las técnicas para mitigarlos; Su artículo se centra en la evaluación comparativa, pero gran parte de él es aplicable en otras circunstancias.

información relacionada