
Con el fin de perfilar un programa, me gustaría ejecutarlo ininterrumpidamente en una CPU. Para hacer esto utilizo una combinación de taskset
y 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_command
la 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.