c++ c embedded arm bare-metal

c++ - Medición del uso de la CPU en el sistema de metal desnudo del brazo



embedded arm (3)

Estoy trabajando en una placa de evaluación ARM cortex M4 , es una aplicación bare metal sin ningún sistema operativo corriendo sobre ella.

Ahora quiero medir CPU uso de la CPU de un proceso / algoritmo determinado, ¿cuál sería la mejor manera de hacerlo?

¿Debo implementar un sistema operativo para medir el uso de la CPU que tiene la funcionalidad para dicha demanda?


En primer lugar, la implementación de un sistema operativo no será práctica ni siquiera posible con el único fin de medir el rendimiento. Por lo tanto, un enfoque posible es mantener una variable de conteo que registre el número de tics ocurridos hasta esa duración. E incremente esa variable en una interrupción del temporizador.


Implementar un sistema operativo para medir el tiempo de inactividad de una CPU parece un poco sobredimensionado para mí. Por lo que sé, el Cortex-M4 incluye una unidad de depuración (DWT) que le permite tomar una instantánea de un contador de ciclos . Pero lo más fácil sería enganchar un pin a un osciloscopio y alternar entre entrar y salir de su algoritmo.


La pregunta casi se responde a sí misma. ¿Qué hace su aplicación bare metal cuando no está en ese proceso / algoritmo? Mida uno o el otro, o ambos. Si tiene una aplicación bare metal que no consume completamente la CPU en este algoritmo, entonces ya tiene un sistema operativo en la medida en que esté administrando el tiempo de esta aplicación / función. Puede usar una cantidad de métodos de un contador simple en un bucle relativo a un temporizador para ver cuántos conteos por bucle cuando el algoritmo obtiene segmentos de tiempo vs no. Puede simplemente medir el tiempo del algoritmo, etc.

Supongo que cuando dices CPU te refieres a todo el sistema, ya que tu rendimiento depende mucho de tu código y de lo que está hablando. Si se ejecuta desde flash en un córtex-m4 dependiendo de la velocidad del reloj, puede que esté grabando ciclos de procesador esperando instrucciones o datos (y puede obtener muy fácilmente la noción incorrecta de rendimiento del procesador para un algoritmo cuando no es el algoritmo que quema relojes). Las cachés enmascaran / manipulan ese rendimiento y pueden afectar enormemente el rendimiento si no eres cuidadoso y estás al tanto de lo que están haciendo. Al ser una pregunta de C ++, su compilador juega un papel importante en el rendimiento, así como en su código de curso, puede hacer que el código se ejecute varias veces más rápido o más lento con cambios mínimos en la línea de comando o el código.

Si el algoritmo es parte de un isr, entonces el procesador se va a dormir, de lo contrario, puede usar el pin gpio y el alcance techinique para tener una idea de la relación entre correr y dormir.