Table of Contents

Monitorear la carga de CPU en dispositivos integrados es un aspecto fundamental del desarrollo de sistemas integrados que impacta directamente el rendimiento del sistema, la fiabilidad y la longevidad. Comprender la carga del procesador en un sistema integrado es importante, pero a menudo pasado por alto, y sirve como un paso para analizar la capacidad del procesador para cumplir con los plazos del sistema. Ya sea que esté desarrollando dispositivos IoT, sistemas de control automotriz, equipos de automatización industrial o dispositivos médicos, medición de recursos precisos de carga ayudan a optimizar el rendimiento.

Comprensión de carga y utilización de CPU en sistemas embedidos

Antes de sumergirse en técnicas de medición, es esencial entender lo que la carga de CPU significa en el contexto de los sistemas integrados y por qué difiere de los entornos de computación de uso general.

Definición de carga de CPU y utilización

Los expertos en tiempo real incorporado definen la utilización básica como el tiempo agregado durante el cual el núcleo ejecuta código de aplicación (tiempo activo) dividido por el tiempo total de observación. La carga de CPU es la cantidad de tiempo que la CPU gasta en procesar código activo a la cantidad de tiempo que la CPU pasa en estado de ocio sin procesamiento activo, lo que significa simplemente el tiempo que la CPU pasa en tareas de procesamiento a la cantidad de tiempo que la CPU pasa mientras que no está descansando y haciendo nada.

La utilización de CPU es simplemente la proporción de tiempo que un procesador pasa haciendo trabajo real durante un período de tiempo determinado. Esta métrica proporciona información crucial sobre la eficacia de su sistema integrado utiliza sus recursos de procesamiento y si hay suficiente espacio para una funcionalidad adicional o picos de carga inesperados.

CPU Carga vs. CPU Utilización: Clarificación de Terminología

Los ingenieros del mundo UNIX conocen el término carga CPU que se refiere a un concepto diferente: cuál es el número promedio de tareas de ejecución más espera en un punto específico en el tiempo, que es útil en escenarios donde un sistema está sobrecargado. Sin embargo, los ingenieros de software integrados utilizan los términos carga CPU y utilización CPU intercambiablemente para significar utilización de CPU. A lo largo de este artículo, utilizaremos estos términos intercambiablemente al enfocarnos en el contexto de sistemas integrados.

¿Por qué la CPU carga asuntos de monitoreo

La medición precisa de carga de CPU sirve múltiples propósitos críticos en el desarrollo de sistemas integrados:

  • Análisis de la programación: La importancia de la carga de la CPU proviene del hecho de que se utiliza como factor para determinar la programación de nuestro diseño. Esto ayuda a asegurar que todas las tareas puedan cumplir con sus plazos en diversas condiciones de funcionamiento.
  • Margenes de seguridad: En sistemas críticos de seguridad hay un margen para la carga de CPU para productos entregados, por ejemplo en Automotive la carga propuesta de CPU es de 65 a 70%. Este cuarto permite picos de carga inesperados y adiciones futuras.
  • Consumo de potencia: La carga de la CPU también tiene un impacto inmediato en el consumo de energía, y eso puede ser un no-go en los sistemas donde ese punto es crítico. La utilización de la CPU inferior suele traducirse a un consumo de energía reducido, que es crucial para los dispositivos operados por baterías.
  • Optimización del sistema: La utilización de la CPU, en combinación con el análisis de tiempo, le dice si las tareas y los ISR se ejecutan en el marco de tiempo requerido y cuánto poder de procesamiento necesitan para su terminación exitosa.
  • Selección de hardware: Los ingenieros de sistemas podrían estar pagando más chip de lo que necesitan, o pueden estar peligrosamente cerca de sobre-tratar su procesador actual, por lo que es esencial tomar las conjeturas de los niveles de utilización de procesadores de medición.

Métodos fundamentales para calcular la carga de CPU

Existen varias técnicas para determinar la carga de CPU en entornos incrustados, cada una con sus propias ventajas, limitaciones y casos de uso apropiados. La elección del método depende de las capacidades de hardware, la precisión necesaria, las limitaciones de medición y la fase de desarrollo.

Método de supervisión de la tarea de ocio

El método de monitoreo de tareas inactivo es uno de los enfoques más comunes y directos para medir la utilización de la CPU en sistemas incrustados con un RTOS.

Cómo funciona la supervisión de tareas de ocio

El tiempo ocioso es la cantidad de tiempo que la CPU no está ocupada, y si el Sistema Operativo (OS) tiene una tarea inactiva el tiempo ocioso es simplemente la cantidad de tiempo que la tarea inactiva está funcionando. Bajo situaciones ideales no cargadas, la tarea inactiva ejecutaría un número conocido y constante de veces durante cualquier período de tiempo establecido (un segundo, por ejemplo), y la mayoría de los sistemas proporcionan una interrupción basada en el tiempo que puede utilizar para comparar un fondo continuo.

La forma más básica de definir el uso del 0% es al aumentar un contador en su tarea de ocio y ver cuántos conteos de ocio ocurren durante un período de medición. Si no se está haciendo ningún trabajo (además de la interrupción del tiempo) entonces esto representa el número máximo de conteos de ocio y el 0% de utilización.

Consideraciones de la aplicación

Una vez que determine los máximos números de ocio, no se puede añadir código a la tarea de ocio, ya que esto cambiaría los máximos de los inactivos. La tarea de ocio debe permanecer lo más mínima posible para mantener la precisión de medición. Además, es mejor alinear su tiempo de medición con el tiempo de entrega más corto en su proyecto; depende de los objetivos de la medición de utilización de CPU.

El cálculo para la utilización de CPU utilizando este método es sencillo:

CPU Utilización (%) = 100 - (Conteos de ocio / Conteos máximos de ocio × 100)

Ejecución de tareas Medición del tiempo

Este método implica medir directamente el tiempo de ejecución de cada tarea y calcular la carga agregada de CPU basado en frecuencias de tarea y tiempos de ejecución.

Enfoque de la fórmula matemática

La carga total de CPU es igual a la suma de (la frecuencia de Task × la peor duración de la ejecución de casos). Esta fórmula proporciona una carga de CPU máxima teórica basada en escenarios de ejecución de peor caso, que es particularmente valiosa durante la fase de diseño.

Aplicación de medidas de tiempo de ejecución

Para medir la carga de CPU tiene que medirla en una ventana de tiempo y esta ventana es normalmente elegida para ser igual a la ventana de ciclo de marco de mayor de su agenda, entonces en cada tarea soportada leída al comienzo de la tarea y terminar el valor actual de garrapata de tiempo entonces restar ambas lecturas y guardarlas en una variable global. Este enfoque proporciona visibilidad en tiempo real en el consumo real de CPU en lugar de escenarios teóricos peores.

La aplicación suele entrañar:

  1. Capturar un temporizador al principio de cada tarea utilizando un temporizador de alta resolución
  2. Capturar otro sello al final de la tarea
  3. Calculando la diferencia para determinar el tiempo de ejecución de tareas
  4. Acumulación de estos valores en todas las tareas
  5. Dividir el tiempo total de ejecución por la ventana de medición para obtener porcentaje de utilización de CPU

Medición de la contra-Basada de hardware

Muchos microcontroladores modernos y procesadores proporcionan contadores de rendimiento de hardware que pueden rastrear varias métricas, incluyendo ciclos de CPU, ejecución de instrucciones, golpes de caché/miseres, y más. Estos contadores ofrecen mediciones de alta precisión con un mínimo software de sobrecabezamiento.

Ventajas de las contadoras de hardware

  • Minimal Overhead: Los contadores de hardware funcionan independientemente de la ejecución de software, introduciendo prácticamente ninguna medida de sobrecabezamiento
  • Alta Precisión: Las mediciones exactas de ciclo proporcionan información detallada sobre el comportamiento de la CPU
  • Multiple Metrics: Más allá de la utilización sencilla de la CPU, los contadores de hardware pueden rastrear el rendimiento de la caché, las predicciones de ramas y otros eventos arquitectónicos
  • No-Intrusivo: Las mediciones no afectan el comportamiento de tiempo del sistema que se mide

Enfoque de aplicación

La aplicación de los métodos comunes incluyen:

  • Configuración de unidades de vigilancia del desempeño (PMU) para contar eventos específicos
  • Valores de lectura de contadores a intervalos de medición
  • Calculando la utilización basada en los recuentos de ciclos frente al tiempo transcurrido
  • Usando unidades DWT (Data Watchpoint y Trace) en procesadores ARM Cortex-M

Método de la contracarga de fondos

Un contador de gestión libre se aumenta cada vez a través del bucle de fondo, y este contador utiliza una variable que, cuando se aumenta, se permite rebosar. Usando una tarea periódica (como una tarea de 25 ms) para supervisar la utilización de la CPU, la mayoría de los sistemas proporcionan una interrupción basada en el tiempo que puede utilizar para comparar el contador de fondo con una constante conocida.

Este método funciona estableciendo una tasa de cuenta de referencia cuando el sistema está ocioso, y luego comparando las tasas de cuenta reales durante la operación para determinar cuánto tiempo se gasta en trabajo productivo frente a los lazos de ocio.

Métodos de cálculo automatizados

El método automatizado calcula, en tiempo real, el tiempo medio que se gasta en el bucle de fondo. Hay dos ventajas principales para que el software calcula el tiempo promedio para que el bucle de fondo se complete, descargado: Usted puede detectar con precisión la preención (en lugar de hacer una conjetura de los datos de histograma), y la detección de la preención le permite descartar datos promedio que se haya marcado por la interrupción del procesamiento.

Este enfoque elimina la necesidad de caracterización manual y se adapta automáticamente a los cambios de código, lo que hace que sea más sostenible para proyectos a largo plazo.

RTOS-Specific CPU Monitoreo de carga

Los sistemas operativos en tiempo real suelen proporcionar mecanismos incorporados y API para la vigilancia de la carga de la CPU, lo que facilita la implementación y más estandariza en todos los proyectos.

Monitorización de carga de carga de FreeRTOS

FreeRTOS, una de las plataformas RTOS más populares, ofrece varios mecanismos para rastrear la utilización de CPU.

Configuración de estadísticas de tiempo de ejecución

FreeRTOS tiene un mecanismo para perfilar el tiempo de ejecución de tareas a través de un gancho de estilo macro en el programador de tareas pre-eficiente, y las pistas de gancho cuando el contexto de tarea cambia, básicamente el punto en el tiempo cuando una tarea desbloqueada con una prioridad superior (o round robin) está programada para la próxima rebanada.

Para habilitar las estadísticas de tiempo de ejecución en FreeRTOS, usted necesita:

  1. Set configGENERATE RUN TIME STATS] a 1 en FreeRTOSConfig.h
  2. Define portCONFIGURE TIMER FOR RUN TIME STATS()] para configurar un temporizador de alta resolución
  3. Define portGET RUN TIME COUNTER VALUE()] para devolver el valor actual del temporizador
  4. Use vTaskGetRunTimeStats() para recuperar estadísticas formateadas

Función de gancho de cuchilla

La función de ganchos idle proporciona otro mecanismo para el cálculo de carga de CPU. Al aumentar un contador en el gancho de ocio y compararlo con un máximo conocido, puede determinar la utilización general del sistema. Por definición cuando idle no está ejecutando, está consumiendo ciclos de ejecución de tareas, por lo que sólo necesita realizar un seguimiento del tiempo de ocio.

Zephyr RTOS CPU Estadísticas

Zephyr RTOS proporciona estadísticas de tiempo de ejecución de hilos a través de sus servicios de kernel. El sistema rastrea el tiempo de ejecución de cada hilo y proporciona API para que consulta esta información.

  • Seguimiento del tiempo de ejecución por hilo
  • Control de hilos de hielo
  • Reunión de estadísticas configurable con una sobrecarga mínima
  • Integración con el sistema de trabajo para la presentación periódica de informes

Otras plataformas RTOS

La mayoría de las plataformas RTOS comerciales y de código abierto ofrecen capacidades similares:

  • ThreadX: Proporciona un kit de perfil de ejecución para un análisis detallado de rendimiento
  • VxWorks: Ofrece herramientas de perfil integral y capacidades de visualización de sistemas
  • RTEMS: Incluye estadísticas de uso de la CPU y soporte de profiling
  • Micrium μC/OS: Características estadísticas de tareas incorporadas y seguimiento del uso de CPU

Técnicas de medición externa

Además de los métodos de medición basados en software, las herramientas y técnicas externas pueden proporcionar valiosas ideas sobre la utilización de la CPU sin modificar el software integrado.

GPIO Toggle Method

El método GPIO de rebote implica fijar un pin GPIO alto cuando la CPU es activa y baja cuando se mueve, luego midiendo el ciclo de servicio externamente.

Técnica multimÃ3metro

La técnica multimámetro, que utiliza un multimámetro como su instrumento de medición, le permite determinar la utilización promedio del procesador y determina la utilización del procesador agregado para toda la aplicación, en lugar de tareas individuales. Puede utilizar la técnica multimámetro durante las etapas de implementación, integración y pruebas del desarrollo.

Medidas de aplicación:

  1. Configurar un pin GPIO como salida
  2. Pon el pin alto en la entrada de la tarea de ocio
  3. Ponga el pin bajo en la salida de la tarea de ocio
  4. Conectar un multimetro en modo de voltaje DC al pin
  5. La lectura de tensión (como porcentaje de VCC) representa la utilización de CPU

Sin embargo, si la aplicación fluctúa, se considera irrefutable (es decir, la utilización del procesador varía mucho de un intervalo de tiempo a otro), y los promedios de la técnica multimillonaria son aplicaciones que pueden conducir a imprecisiones brutas.

Osciloscopio/Tecnique de Analizador Logico

La técnica del analizador osciloscopio/logic opera mediante un seguimiento gráfico del ciclo de trabajo para determinar la utilización del procesador agregado utilizando un analizador lógico o un osciloscopio. Este método proporciona una visibilidad más detallada en los patrones de utilización con el tiempo, lo que lo hace adecuado para analizar cargas de trabajo ingentes e identificar patrones periódicos.

Ventajas sobre la técnica multimillonaria:

  • Representación visual de las modalidades de utilización
  • Capacidad para capturar picos y valles transitorios
  • Análisis de tiempo-correo con otras señales del sistema
  • Capacidades de desencadenante para capturar eventos específicos

Herramientas de sonda y traza de depuración

Las sondas modernas de depuración y las herramientas de traza ofrecen capacidades sofisticadas de análisis de carga de CPU sin necesidad de instrumentación de código.

SEGGER SystemView

SEGGER SystemView proporciona registro y visualización en tiempo real de eventos RTOS, incluyendo carga CPU. Utiliza las capacidades de traza del procesador (como la Macrocel de traza embedida de ARM) para capturar datos de ejecución con mínima intrusión.

  • Visualización de carga CPU en tiempo real
  • Análisis del tiempo de ejecución de las tareas
  • Seguimiento de interruptores de contexto
  • Análisis interrumpido
  • Vista de tiempo del comportamiento del sistema

Percepio Tracealyzer

Tracealyzer ofrece un análisis y trazado RTOS completos, incluyendo métricas de carga de CPU detalladas. Admite múltiples plataformas RTOS y proporciona información sobre:

  • Tendencias de utilización de la CPU a lo largo del tiempo
  • Patrones de ejecución de tareas
  • Análisis del tiempo de respuesta
  • Estadísticas sobre el uso de los recursos

Lauterbach TRACE32

Los depuradores TRACE32 proporcionan perfiles y análisis de rendimiento asistidos por hardware. Utilizando capacidades de traza en chip, pueden medir la utilización de la CPU sin sobrecabezamiento de software, haciéndolos ideales para sistemas críticos de tiempo donde se debe minimizar la intrusión de medición.

Técnicas avanzadas de análisis de carga de CPU

Más allá de la medición básica de la utilización, las técnicas avanzadas proporcionan una visión más profunda de la conducta del sistema y las características de rendimiento.

Medición de carga interrumpida

Cuando el programa se ejecuta, se interrumpe también y se necesita ser manejado por el procesador y pueden ocurrir en cualquier momento, mientras que una tarea simple se ejecuta o se encuentra entre las tareas, por lo que es necesario rastrear el tiempo que se gasta en los controladores de interrupción. El procesamiento interrumpido puede consumir recursos significativos de CPU, y separar la carga interrumpida de la carga de tarea proporciona valiosas ideas de optimización.

Entre los enfoques de aplicación figuran los siguientes:

  • Configurar una bandera o revolver un pin GPIO en la entrada/salida de interrupción
  • Usando contadores de interrupción anidados para manejar la prevención interrumpida
  • Seguimiento de tiempo de ejecución por interrupción para análisis detallado
  • Calculando la carga interrumpida agregada separadamente de la carga de tarea

Monitoreo de carga de CPU multi-core

La carga de CPU se calcula por núcleo (CPU0, CPU1) y la zona matriz muestra el valor promedio de todos los núcleos. La utilización de toda la CPU es entonces el promedio de todas las aplicaciones básicas individuales. Los sistemas multi-core requieren el seguimiento de cada núcleo de manera independiente, al tiempo que proporcionan métricas globales de nivel de sistema.

Consideraciones para la vigilancia multianual:

  • Seguimiento de tareas en marcha
  • Inter-core communication overhead
  • Equilibración de carga de la eficacia
  • Efectos básicos de afinidad en la utilización
  • Consideraciones de procesamiento múltiple asimétrico (AMP) vs. multiprocesamiento simétrico (SMP)

Análisis de histogramas

Al observar el histograma de muestra, puede estimar que cualquier dato por encima de un determinado umbral representa casos en los que se interrumpió la tarea de fondo y utilizando este umbral, descartaría todos los datos por encima de ella con el fin de calcular un período de prueba de inactividad promedio.

Beneficios del análisis de histograma:

  • Identificación de los patrones de tiempo de ejecución
  • Detección de atípicos y anomalías
  • Estimación del tiempo de ejecución de casos más graves (WCET)
  • Análisis de la máquina para sistemas en tiempo real

Análisis estadístico y tendencias

La monitorización de carga de CPU a largo plazo con análisis estadísticos proporciona información sobre el comportamiento del sistema durante períodos prolongados:

  • Moving Promedios: Disminuye las fluctuaciones a corto plazo para identificar tendencias
  • Detección de pico: Identificar los eventos de máxima utilización y su frecuencia
  • Análisis de porcentaje: Entender la distribución de la utilización (por ejemplo, 95a utilización de percentil)
  • Análisis de la correlación: Relatar la carga de la CPU a eventos externos o estados del sistema

Mejores prácticas para la medición precisa de carga de CPU

Implementar la monitorización de carga de CPU requiere de manera efectiva atención a varios factores clave que impactan la precisión y utilidad de medición.

Selección de las Intervalaciones de muestreo apropiadas

El tiempo de medición puede ser arbitrario, pero idealmente, es mejor alinear su tiempo de medición con el tiempo de plazo más corto en su proyecto; depende de los objetivos de la medición de utilización de CPU. La selección de intervalos de muestreo implica equilibrar varios factores:

  • Too Short: Puede introducir medidas excesivas y captar ruido en lugar de tendencias significativas
  • Tanto tiempo: Puede faltar a los picos transitorios y no captar el comportamiento dinámico
  • Alineados en sistemas: Los períodos de medición coincidentes con los ciclos de sistemas (marco mayor, hiperperperiodo) proporcionan resultados más significativos
  • Application-Specific: Los plazos críticos en tiempo real deben guiar la selección de las ventanas de medición

Minimización de la medición

El acto de medición de la carga de CPU consume recursos de CPU, lo que podría afectar a la medición de la métrica. Las estrategias para minimizar la sobrecarga incluyen:

  • Medición de la serie de hardware: Promedio de contadores de hardware y capacidades de trazado cuando esté disponible
  • Instrumentación eficiente: Usar mecanismos de captura de tempometría ligera
  • Compilación convencional: Permite el código de medición sólo durante las fases de desarrollo y ensayo
  • Algoritmos optimizados: Usa estructuras de datos y cálculos eficientes para estadísticas de tiempo de ejecución
  • Procesamiento diferido: Recopilar datos brutos rápidamente, realizar análisis durante el tiempo ocioso o fuera de línea

Se podría argumentar que el acto de calcular los conteos de ocio es trabajo y que la utilización del 0% no es alcanzable con el código de instrumentación en su lugar, pero esas preocupaciones son insignificantes cuando el período de medición de utilización de la CPU es suficientemente grande.

Manejo de impacto interrumpido

Esencialmente dos clases de interrupciones pueden interrumpir el circuito de fondo: los desencadenantes basados en eventos y los desencadenantes basados en el tiempo, que generalmente son instigados por dispositivos, módulos y señales externas al microprocesador, y al medir el tiempo de fondo promedio, debe tomar todos los pasos posibles para eliminar la posibilidad de que estos elementos puedan causar una interrupción que elimine artificialmente el tiempo atribuido a la tarea de fondo.

Las mejores prácticas para el manejo de interrumpir en la medición de carga de CPU:

  • Seguimiento de la ejecución interrumpida por separado de la ejecución de tareas
  • Cuenta para interrumpir el anidamiento y la preención
  • Considere la posibilidad de interrumpir la latencia en tiempo real
  • Distinguir entre el procesamiento interrumpido y la ejecución de tareas interrumpida

Calibración y Establecimiento Baseline

La medición precisa de carga de CPU requiere una calibración adecuada:

  1. Establezca la Base de referencia de Idle: Medir el sistema en un estado idle conocido para determinar la referencia de utilización del 0%
  2. Verificar Carga completa: Crear una condición conocida de carga 100% para validar la precisión de medición
  3. Contacto del Código de Medición: Entender y documentar la sobrecarga introducida por la instrumentación de medición
  4. Recalibración regional: Recalibrar después de cambios significativos de código o cambios de nivel de optimización de compilador

Verificación transversal con múltiples métodos

Utilizando múltiples técnicas de medición proporciona confianza en los resultados y ayuda a identificar artefactos de medición:

  • Compare las mediciones basadas en software con datos de traza de hardware
  • Verificar estadísticas RTOS contra la instrumentación manual
  • Control de tareas de inactividad cruzada con la suma de tiempo de ejecución
  • Utilice mediciones externas de GPIO para validar cálculos internos

Documentación y presentación de informes

La documentación completa garantiza que las mediciones de carga de CPU sigan siendo útiles durante todo el ciclo de vida del producto:

  • Metodología de Medición: Documentar la técnica específica utilizada y su configuración
  • Condiciones de uso: Registro estado, condiciones de entrada y factores ambientales
  • Valores de línea de base: Mantener registros de datos de calibración y mediciones de referencia
  • Análisis de tendencia: Seguimiento de la evolución de la carga de CPU a través de versiones de software
  • Definiciones de tres puntos: Documento rangos de utilización aceptables y márgenes de seguridad

Ejemplos de la aplicación práctica

Comprender los conceptos teóricos es importante, pero los ejemplos prácticos de implementación ayudan a superar la brecha entre teoría y práctica.

Aplicación sencilla de la contraprestación

Una aplicación básica de contador de inactividad para sistemas RTOS simples o de metal:

  1. Definir variables globales para el cálculo de la cuenta y utilización de inactivos
  2. Ejecute una interrupción periódica del tiempo (por ejemplo, 1 segundo intervalo)
  3. En el bucle de ocio, aumenta un contador de ocio continuamente
  4. En la interrupción del temporizador, capturar el conteo actual de ocio, calcular la utilización y restablecer el contador
  5. Almacenar o transmitir el valor de utilización para la vigilancia

Consideraciones clave:

  • Use variables volátiles para prevenir la optimización del compilador
  • Rebose de contador de mano apropiadamente
  • Minimizar el procesamiento en la interrupción del temporizador
  • Considere operaciones atómicas para sistemas multi-core

Tiempo de ejecución de tareas

Para sistemas que requieren datos de utilización por cada tanque:

  1. Configurar un temporizador de alta resolución (microsecond o mejor resolución)
  2. Crear una estructura de datos para almacenar el tiempo de ejecución por tanque
  3. En la entrada de tareas, capturar el tempo actual
  4. En la salida de tareas, calcula el tiempo transcurrido y acumular para el total de tareas
  5. Calcular periódicamente la utilización porcentual de cada tarea

Este enfoque proporciona información detallada sobre las tareas que consumen la mayor parte de los recursos de la CPU, lo que permite realizar esfuerzos de optimización selectiva.

FreeRTOS Runtime Statistics Ejemplo

Implementar el monitoreo de carga de CPU en FreeRTOS implica:

  1. Configuración de un temporizador con mayor resolución que el sistema de garrapata
  2. Estadísticas de tiempo libre en FreeRTOSConfig.h
  3. Implementación de macros de configuración del temporizador requerido
  4. Crear una tarea de monitoreo que periódicamente llama vTaskGetRunTimeStats()
  5. Parsing y visualización o registro de las estadísticas

Las estadísticas de tiempo de ejecución proporcionan tiempo y utilización porcentual absoluta para cada tarea, lo que facilita la identificación de operaciones de gran intensidad de la CPU.

GPIO Toggle for External Measurement

Implementing the GPIO toggle method:

  1. Configurar un pin GPIO como salida
  2. Poner el pin alto al principio de la tarea de ocio
  3. Ponga el pin bajo al salir de la tarea de ocio
  4. Conectar un osciloscopio o un multimímetro para medir el ciclo de servicio
  5. Cálculo de la utilización de la CPU como (100 - porcentaje del ciclo de derechos)

Este método proporciona una verificación independiente de las mediciones basadas en software y puede ser particularmente útil durante las fases de integración y ensayo del sistema.

Pitfalls comunes y cómo evitarlos

La medición de carga de CPU puede ser engañosamente compleja, y varios errores comunes pueden llevar a resultados inexactos o engañosos.

Cuestiones de Optimización de Compilador

Las optimizaciones de los componentes pueden interferir con el código de medición:

  • Optimización del equipo: Los competidores pueden optimizar los contadores de inactividad si no se declara volátil
  • Reordenamiento del código: El código de captura de la marca puede ser reordenado, afectando la precisión
  • Efectos de inducción: La función de inlineación puede cambiar el tiempo de ejecución
  • Lazo Desarrollando: Puede afectar el bucle de ocio contando comportamiento

Las soluciones incluyen el uso de clasificadores volátiles, barreras de compilador y la verificación del código de montaje generado.

Resolución del temporizador y desbordamiento

La resolución inadecuada del temporizador o el manejo de desbordamiento incorrecto conduce a errores de medición:

  • Use temporizadores con resolución suficiente para el intervalo de medición
  • Implementar la detección y manipulación de la desbordación adecuada
  • Considere utilizar contadores de 64 bits o técnicas de extensión desbordamiento
  • Validar la precisión del temporizador contra la referencia conocida

Efectos de intrusión de medición

El código de medición en sí afecta el comportamiento del sistema:

  • Efectos de caché de la ejecución del código de medición
  • Cambios de latencia interrumpidos debido a la instrumentación
  • Consumo de ancho de banda de memoria para almacenamiento de estadísticas
  • Inversión prioritaria en tareas de medición

Minimiza la intrusión utilizando métodos asistidos por hardware cuando sea posible y manteniendo el código de medición lo más ligero posible.

Incorrect Baseline Assumptions

Suponiendo valores de referencia incorrectos conduce a errores sistemáticos:

  • No contabilizar la actividad de fondo de OS en estado "idle"
  • No considerando las transiciones estatales de gestión de energía
  • Ignorar las tareas de mantenimiento periódicos
  • Aparentar DMA y actividad periférica

Siempre establecer bases de referencia mediante mediciones reales en lugar de hipótesis teóricas.

Cubierta de prueba inadecuada

La medición de la carga de CPU en condiciones limitadas proporciona una imagen incompleta:

  • Prueba bajo diversas condiciones de entrada y patrones de datos
  • Incluir escenarios de peor riesgo y condiciones de estrés
  • Considere factores ambientales (temperatura, voltaje)
  • Evaluar el comportamiento a largo plazo, no sólo instantáneas a corto plazo

Optimización de carga de CPU en sistemas embedidos

Una vez que haya medido con precisión la carga de CPU, el siguiente paso es la optimización cuando la utilización supera los umbrales aceptables.

Estrategias de Optimización del Software

La solución más importante es aumentar la eficiencia de la solución de software, que reduce también el impacto energético del sistema, y aumentar o desperdiciar los recursos de hardware debe mantenerse como último recurso.

Los enfoques de optimización de software incluyen:

  • Optimización del Algorithm: Reemplazar algoritmos ineficientes con alternativas más eficientes
  • Code Profiling: Identificar y optimizar los puntos calientes que consumen tiempo de CPU desproporcionado
  • Optimización de la compilación: Usar banderas de optimización apropiadas y optimización guiada por perfiles
  • Selección de estructura de datos: Elija estructuras de datos optimizadas para patrones de acceso
  • Optimización de la cuchilla: Mejorar la localización de datos y reducir las faltas de caché
  • Optimización interrumpida: Minimizar el tiempo de ejecución de rutina de servicio interrumpido

Abordamientos arquitectónicos

Dividir el procesamiento de la tarea a realizar en múltiples ciclos por lo que el tiempo de ejecución de las tareas durante cada ciclo disminuye y por lo tanto la utilización de la CPU disminuye.

  • Decomposición de la descarga: Rompe grandes tareas en unidades más pequeñas y manejables
  • Ajuste de la prioridad: Optimize task priorities to reduce context switching
  • Polling to Interrupt Conversion: Reemplazar los lazos de votación con enfoques interrumpidos
  • DMA Utilización: Descargar el movimiento de datos a los controladores DMA
  • Aceleración de hardware: Usa periféricos de hardware dedicados para operaciones de gran intensidad de computación

Soluciones de hardware

Cuando la optimización del software alcanza sus límites, es posible que sean necesarias soluciones de hardware:

  • Aumentar la frecuencia del reloj de la CPU para que la CPU pueda ejecutar tareas más rápido y así tener más capacidad de tiempo para ejecutar otras tareas y tan baja carga.
  • Utilizando un procesador Multi Core donde las tareas podrían dividirse entre núcleos.
  • Añadiendo coprocesadores o aceleradores para funciones específicas
  • Actualización a una familia procesadora más poderosa
  • Implementación de aceleración basada en FPGA para algoritmos críticos

Consideraciones de la gestión de las facultades

La optimización de carga de CPU a menudo intersecta con la gestión de energía:

  • Escalada de tensión y frecuencias dinamicas (DVFS): Ajuste la velocidad del reloj basado en la carga
  • Modos de agua: Ingrese estados de baja potencia durante períodos de ocio
  • Cierre de la ventana: Los relojes desactivados para los periféricos no utilizados
  • Consolidación de carga: Procesamiento de lotes para maximizar el tiempo de sueño

Normas de la industria y requisitos de seguridad

Muchas industrias tienen requisitos y estándares específicos en materia de carga de CPU en sistemas integrados, especialmente para aplicaciones de seguridad crítica.

Normas Automotrices

Las aplicaciones críticas están fuertemente reguladas por estándares industriales, como la ISO 26262, automotriz que dictan el nivel máximo de carga de CPU para abastecer a picos de procesamiento repentino. Por ejemplo, en Automotive la carga de CPU sugerida es de 65 a 70%.

Los requisitos ISO 26262 incluyen:

  • Análisis y márgenes de carga de CPU documentados
  • Análisis del tiempo de ejecución peor (WCET)
  • Margenes de seguridad para aumentos de carga inesperados
  • Mecanismos de vigilancia para la verificación de la carga de tiempo fijo

Normas aeroespaciales

DO-178C y estándares relacionados para aplicaciones aeroespaciales requieren:

  • Análisis y verificación del calendario riguroso
  • Margen demostrada para escenarios de peor de los casos
  • Trazabilidad de los requisitos de carga de CPU
  • Verificación independiente del comportamiento de la sincronización

Normas de dispositivo médico

IEC 62304 para el software de dispositivos médicos requiere:

  • Análisis de riesgos, incluidos los fallos de tiempo
  • Verificación de rendimiento en tiempo real
  • Documentación de la utilización de los recursos
  • Pruebas en condiciones de estrés

Automatización industrial

IEC 61508 para la seguridad funcional en los sistemas industriales especifica:

  • Necesidades de nivel de integridad de seguridad (SIL)
  • Análisis de la hora para funciones de seguridad
  • Vigilancia de los recursos y detección de fallas
  • Consideraciones comprobadas en uso para márgenes de carga de CPU

Herramientas y recursos para el análisis de carga de CPU

Una variedad de herramientas comerciales y de código abierto admiten la medición y análisis de carga de CPU en sistemas integrados.

Herramientas comerciales

  • SEGGER SystemView:] Análisis y visualización en tiempo real de RTOS (] https://www.segger.com/products/development-tools/systemview/)
  • Percepio Tracealyzer: Análisis completo de la localización y el rendimiento de los RTOS
  • Lauterbach TRACE32: Depuración y perfiles con ayuda de hardware
  • ARM Development Studio: Herramientas de optimización y de procesamiento para sistemas basados en ARM
  • Gran colina MULTI: Ambiente de desarrollo integrado con análisis de rendimiento

Herramientas de código abierto

  • Estadísticas de tiempo de ejecución de FreeRTOS: Seguimiento de tiempo de ejecución de tareas integrado
  • Zephyr Tracing: Localización de los núcleos y monitoreo de rendimiento
  • LTTng: Linux trace toolkit for embedded Linux systems
  • Perfetto: Profilación y análisis de trazas del sistema
  • Valgrind/Callgrind: Profilización de rendimiento para sistemas integrados basados en Linux

Herramientas de hardware

  • Analizadores Logicos: Capturar patrones de rebosado GPIO para mediciones externas
  • Osciloscopios: Ciclos de obligaciones de medición y relaciones de tiempo
  • JTAG/SWD Debuggers: Acceso a capacidades de depuración y trazado en chips
  • Analizadores de potencia: Correlaciona la carga de CPU con consumo de energía

Recursos y Comunidades en línea

  • Embedded.com: Artículos y tutoriales sobre el desempeño de los sistemas integrados (] https://www.embedded.com)
  • Foros de FreeRTOS: Apoyo comunitario a las preguntas relacionadas con RTOS
  • Regreso de los pisos: Etiquetas de los sistemas embedded para preguntas técnicas
  • Reddit r/embedded: Debates comunitarios sobre el desarrollo integrado
  • Sistemas embedded Weekly: Newsletter que cubre temas incrustados

Tendencias futuras en la vigilancia de carga de la CPU

A medida que los sistemas integrados siguen evolucionando, también están avanzando las técnicas y los requisitos de monitoreo de carga de la CPU.

Integración de aprendizaje automático

Los algoritmos de aprendizaje automático se aplican al análisis de carga de CPU:

  • Predicción de carga predictiva basada en patrones históricos
  • Detección de anomalías para identificar comportamiento inusual
  • Recomendaciones de optimización automatizadas
  • Adaptación de recursos basada en patrones aprendidos

Vigilancia con necesidades en la nube

Los dispositivos integrados habilitados para IoT apoyan cada vez más el monitoreo basado en la nube:

  • Monitoreo y diagnóstico de rendimiento remoto
  • Análisis y comparación de carga de CPU en toda la flota
  • Actualizaciones de optimización de aire
  • Mantenimiento predictivo basado en las tendencias de utilización

Apoyo mejorado a los hardware

Los procesadores modernos incorporan un monitoreo de rendimiento más sofisticado:

  • Más conjuntos de contadores de rendimiento completo
  • Capacidades de trazado de cabeza baja
  • Perfil con ayuda de hardware con mínima intrusión
  • Supervisión integrada de la potencia y el desempeño

Actividades de normalización

Los esfuerzos de la industria para la vigilancia normalizada del desempeño:

  • API comunes en plataformas RTOS
  • Formatos de traza estandarizados para la interoperabilidad de herramientas
  • Prácticas y directrices óptimas para toda la industria
  • Implementaciones de referencia de código abierto

Conclusión

Es esencial calcular y monitorizar la carga de CPU para desarrollar sistemas integrados fiables y eficientes. Este artículo presenta varias maneras de discernir cuánto la CPU realiza una aplicación integrada realmente consume, y puede utilizar esta información para verificar el diseño del software del sistema frente a una carga de procesador máximo. Si elige monitoreo de tareas inactivas, medición del tiempo de ejecución, contadores de hardware o técnicas de medición externas, la clave es seleccionar métodos adecuados para sus requisitos y limitaciones específicos.

El éxito en la monitorización de carga de CPU requiere atención a la exactitud de la medición, minimizando la sobrecarga, calibración adecuada y pruebas integrales en condiciones realistas. Tener una carga de CPU alta no significa nada malo si su diseño cumple con todos sus plazos, pero significa que en el futuro si desea añadir nuevos procesos al sistema esto puede llevar a sobrecargar. Mantener márgenes de seguridad adecuados asegura que su sistema puede manejar condiciones inesperadas y mejoras futuras.

A medida que los sistemas integrados se vuelven más complejos y las aplicaciones de seguridad crítica proliferan, la supervisión robusta de la carga de CPU se vuelve cada vez más importante. Al implementar los métodos y mejores prácticas descritos en esta guía, puede garantizar que sus sistemas integrados funcionen eficientemente, cumplan con los requisitos en tiempo real y mantengan unos márgenes de rendimiento adecuados durante toda su vida útil.