Table of Contents

Monitorar a carga de CPU em dispositivos embarcados é um aspecto fundamental do desenvolvimento de sistemas embarcados que impacta diretamente o desempenho do sistema, confiabilidade e longevidade. Compreender a carga de processador em um sistema incorporado é importante, mas muitas vezes negligenciado, e serve como um passo para analisar a capacidade do seu processador de atender aos prazos do sistema. Se você está desenvolvendo dispositivos de IoT, sistemas de controle automotivo, equipamentos de automação industrial ou dispositivos médicos, medição precisa da carga de CPU ajuda a identificar gargalos de desempenho, otimizar o uso de recursos e garantir que seu sistema atenda aos requisitos em tempo real.

Compreendendo a carga e a utilização da CPU em sistemas incorporados

Antes de mergulhar em técnicas de medição, é essencial entender o que a carga da CPU significa no contexto de sistemas embarcados e por que difere de ambientes de computação de propósito geral.

Definir Carga e Utilização da CPU

Especialistas incorporados em tempo real definem a utilização do núcleo como o tempo agregado durante o qual o núcleo executa o código de aplicação (tempo ativo) dividido pelo tempo total de observação. A carga da CPU é a quantidade de tempo que a CPU gasta no processamento do código ativo para a quantidade de tempo que a CPU gasta no estado inativo sem processamento ativo, o que significa simplesmente o tempo que a CPU gasta no processamento de tarefas para a quantidade de tempo que a CPU gasta enquanto descansa e não faz nada.

A utilização da CPU é simplesmente a razão de tempo que um processador gasta fazendo trabalho real em um determinado período de tempo. Esta métrica fornece insights cruciais sobre a eficiência do seu sistema incorporado em usar seus recursos de processamento e se há espaço suficiente para funcionalidades adicionais ou picos de carga inesperados.

Carga da CPU vs. Utilização da CPU: Clarificação Terminológica

Engenheiros do mundo UNIX estão familiarizados com o termo carga de CPU que se refere a um conceito diferente: qual é o número médio de tarefas de execução mais de espera em um ponto específico no tempo, que é útil em cenários onde um sistema é sobrecarregado. No entanto, engenheiros de software incorporados usam os termos carga de CPU e utilização de CPU de forma intercambiável para significar utilização de CPU. Ao longo deste artigo, usaremos esses termos intercambiavelmente enquanto focamos no contexto de sistemas incorporados.

Por que a CPU Importa o Monitoramento de Carga

Medição precisa da carga de CPU serve para vários propósitos críticos no desenvolvimento de sistemas incorporados:

  • Análise de Escalonabilidade: A importância da carga da CPU vem do fato de que ela é usada como um fator para determinar a schedulability de nosso projeto. Isto ajuda a garantir que todas as tarefas possam cumprir seus prazos em várias condições operacionais.
  • Margens de segurança: Em sistemas críticos de segurança há uma margem para a carga de CPU para produtos entregues, por exemplo, no Automotive a carga de CPU sugerida é de 65 a 70%. Esta sala de cabeça permite picos de carga inesperados e futuras adições de recursos.
  • Consumo de energia: A carga da CPU também tem um impacto imediato no consumo de energia, e isso pode ser um desinteressante nos sistemas onde esse ponto é crítico.Uso de CPU mais baixo muitas vezes se traduz em consumo de energia reduzido, o que é crucial para dispositivos operados por bateria.
  • Otimização do sistema: Utilização da CPU, em combinação com análise de tempo, diz-lhe se as tarefas e ISRs executar no prazo necessário e quanta potência de processamento que eles precisam para a sua conclusão bem sucedida.
  • Hardware Selection:] Os engenheiros de sistemas podem estar pagando por mais chip do que precisam, ou podem estar perigosamente perto de sobrecarregar seu processador atual, então tirar o adivinhação dos níveis de utilização do processador de medição é essencial.

Métodos fundamentais para calcular a carga da CPU

Existem várias técnicas para determinar a carga da CPU em ambientes embarcados, cada um com suas próprias vantagens, limitações e casos de uso apropriados. A escolha do método depende das capacidades de hardware, precisão necessária, restrições de medição e fase de desenvolvimento.

Método de Monitoramento de Tarefas Idle

O método de monitoramento de tarefas ociosas é uma das abordagens mais comuns e diretas para medir a utilização de CPU em sistemas embarcados com RTOS.

Como funciona o monitoramento de tarefas ociosas

O tempo de inatividade é o tempo em que a CPU não está ocupada, e se o Sistema Operacional (OS) tiver uma tarefa de inatividade, o tempo de inatividade é simplesmente o tempo em que a tarefa inativa está sendo executada. Sob situações ideais não carregadas, a tarefa inativa executaria um número conhecido e constante de vezes durante qualquer período de tempo definido (um segundo, por exemplo), e a maioria dos sistemas fornecerá uma interrupção baseada no tempo que você pode usar para comparar um contador de loop de background- running livre com esta constante conhecida.

A forma mais básica de definir a utilização de 0% é incrementando um contador na sua tarefa ociosa e vendo quantas contagens ociosas ocorrem durante um período de medição. Se não estiver a ser feito nenhum trabalho (além da interrupção do temporizador), então isto representa o número máximo de contagens ociosas e a utilização de 0%.

Considerações sobre a implementação

Uma vez que você determinar as contagens máximas de inatividade, nenhum código pode ser adicionado à tarefa ociosa, pois isso alteraria as contagens máximas de inatividade. A tarefa ociosa deve permanecer o mínimo possível para manter a precisão de medição. Além disso, é melhor alinhar seu tempo de medição com o menor tempo de prazo no seu projeto; depende dos objetivos da medição de utilização da CPU.

O cálculo para utilização da CPU usando este método é simples:

Utilização de CPU (%) = 100 - (Contagens inativas / Contagens máximas de marcha lenta sem carga × 100)[

Medição do Tempo de Execução da Tarefa

Este método envolve medir diretamente o tempo de execução de cada tarefa e calcular a carga global de CPU com base em frequências de tarefa e tempos de execução.

Abordagem de Fórmula Matemática

A carga total da CPU é igual à soma da (frequência da tarefa × tempo de execução do pior caso). Esta fórmula fornece uma carga máxima teórica da CPU baseada em cenários de execução do pior caso, que é particularmente valiosa durante a fase de projeto.

Implementação da Medição em Tempo de Execução

Para medir a carga da CPU, você terá de a medir numa janela de tempo e esta janela é normalmente escolhida para ser igual à janela do ciclo de quadros principal do seu escalonador, depois em todas as tarefas suportadas, lidas no início da tarefa e termina o valor actual do temporizador, subtraindo as duas leituras e salvando- as numa variável global. Esta abordagem fornece visibilidade em tempo real para o consumo real de CPU, em vez de cenários teóricos piores.

A implementação envolve tipicamente:

  1. Capturar uma marca temporal no início de cada tarefa usando um temporizador de alta resolução
  2. Capturando outra hora no final da tarefa
  3. Calculando a diferença para determinar o tempo de execução da tarefa
  4. Acumular estes valores em todas as tarefas
  5. Dividindo o tempo total de execução pela janela de medição para obter a porcentagem de utilização da CPU

Medição Contra-Base de Hardware

Muitos microcontroladores e processadores modernos fornecem contadores de desempenho de hardware que podem rastrear várias métricas, incluindo ciclos de CPU, execução de instruções, hits/faltas de cache e muito mais. Esses contadores oferecem medições de alta precisão com o mínimo de sobrecarga de software.

Vantagens dos Contadores de Hardware

  • Overhead mínimo: Os contadores de hardware operam independentemente da execução do software, introduzindo praticamente nenhuma sobrecarga de medição
  • Alta Precisão: Medições precisas em ciclos fornecem informações detalhadas sobre o comportamento da CPU
  • Múltiplos Métricos: Além da simples utilização da CPU, os contadores de hardware podem rastrear o desempenho do cache, as previsões de ramificações e outros eventos arquitetônicos
  • Não-intrusivo: As medições não afectam o comportamento de temporização do sistema a ser medido

Método de aplicação

A implementação do contador de hardware varia de acordo com a arquitetura do processador. As abordagens comuns incluem:

  • Configurar unidades de monitoramento de desempenho (PMUs) para contar eventos específicos
  • Valores de contadores de leitura a intervalos de medição
  • Cálculo da utilização com base na contagem de ciclos versus tempo decorrido
  • Usando unidades DWT (Data Watchpoint and Trace) em processadores ARM Cortex-M

Método de contador de loop de fundo

Um contador de execução livre é incrementado cada vez através do loop de fundo, e este contador usa uma variável que, quando incrementado, é permitido transbordar. Usando uma tarefa periódica (como uma tarefa de período de 25ms) para monitorar a utilização da CPU, a maioria dos sistemas fornecem uma interrupção baseada no tempo que você pode usar para comparar o contador de circuito de fundo com uma constante conhecida.

Este método funciona estabelecendo uma taxa de contagem de base quando o sistema está ocioso, em seguida, comparando taxas de contagem reais durante a operação para determinar quanto tempo é gasto em trabalho produtivo versus loops ociosos.

Métodos de Cálculo Automatizados

O método automatizado calcula, em tempo real, o tempo médio gasto no loop de fundo. Existem duas principais vantagens em ter o software a calcular o tempo médio para o loop de fundo completar, descarregar: Você pode detectar com precisão a preempção (em vez de fazer uma suposição a partir de dados de histograma), e detectar a preempção permite descartar dados médios que foram desviados por interrupção do processamento.

Essa abordagem elimina a necessidade de caracterização manual e se adapta automaticamente às alterações de código, tornando-o mais mantendível para projetos de longo prazo.

Monitoramento de carga de CPU específico RTOS

Os Sistemas Operacionais em Tempo Real frequentemente fornecem mecanismos e APIs integrados para monitoramento de carga da CPU, tornando a implementação mais fácil e padronizada em projetos.

Monitoramento de Carga da CPU FreeRTOS

O FreeRTOS, uma das plataformas RTOS mais populares incorporadas, oferece vários mecanismos para o rastreamento da utilização da CPU.

Configuração das Estatísticas em Tempo de Execução

O FreeRTOS tem um mecanismo para traçar o tempo de execução da tarefa através de um gancho de estilo macro no escalonador de tarefas preemptivo, e o gancho rastreia quando o contexto da tarefa muda, basicamente o ponto no tempo em que uma tarefa desbloqueada com uma prioridade maior (ou redonda) é agendada para a próxima fatia.

Para ativar estatísticas de execução no FreeRTOS, você precisa:

  1. Definir [[FLT: 0]]configGENERATE RUN TIME STATS para 1 no FreeRTOSConfig.h
  2. Defina portCONFIGURE TIMER FOR RUN TIME STATS() para configurar um temporizador de alta resolução
  3. Defina portGET RUN TIME COUNTER VALUE () para retornar o valor atual do temporizador
  4. Use vTaskGetRunTimeStats() para recuperar estatísticas formatadas

Função de Gancho Inativo

A função de gancho inactivo fornece outro mecanismo para o cálculo da carga da CPU. Ao aumentar um contador na gancho inactivo e compará- lo a um máximo conhecido, você poderá determinar a utilização geral do sistema. Por definição, quando não estiver a correr, você irá consumir ciclos de execução de tarefas, pelo que só terá de seguir o tempo inactivo.

Estatísticas de CPU RTOS do Zephyr

O Zephyr RTOS fornece estatísticas de execução de thread através dos seus serviços do kernel. O sistema rastreia o tempo de execução de cada thread e fornece APIs para consultar esta informação. As principais funcionalidades incluem:

  • Por- fio de seguimento do tempo de execução
  • Monitorização de roscas ociosas
  • Estatísticas configuráveis que recolhem com uma sobrecarga mínima
  • Integração com a fila de trabalho do sistema para relatórios periódicos

Outras plataformas RTOS

A maioria das plataformas RTOS comerciais e de código aberto oferecem capacidades semelhantes:

  • ThreadX: Fornece kit de perfil de execução para análise detalhada do desempenho
  • VxWorks: Oferece ferramentas de perfil abrangentes e capacidades de visualização de sistema
  • RTEMS: Inclui estatísticas de utilização da CPU e suporte a perfis
  • Micrium μC/OS: Funcionalidades estatísticas de tarefas incorporadas e acompanhamento de utilização da CPU

Técnicas de Medição Externa

Além de métodos de medição baseados em software, ferramentas e técnicas externas podem fornecer informações valiosas sobre a utilização da CPU sem modificar o software incorporado.

Método de Alternação GPIO

O método GPIO alterne envolve definir um pino GPIO elevado quando a CPU está ativa e baixa quando ocioso, então medindo o ciclo de dever externamente.

Técnica de multímetros

A técnica multimétrica, que usa um multímetro como instrumento de medição, permite determinar a utilização média do processador e determina a utilização agregada do processador para toda a aplicação, em vez de tarefas individuais. Você pode usar a técnica multímetro durante as etapas de implementação, integração e teste do desenvolvimento.

Fases de execução:

  1. Configurar um pino GPIO como saída
  2. Definir o pino em cima na entrada de tarefa ociosa
  3. Definir o pino baixo na saída da tarefa inativa
  4. Ligar um multímetro em modo de tensão DC ao pino
  5. A leitura de tensão (como uma porcentagem de VCC) representa a utilização da CPU

No entanto, se a aplicação flutua, é considerada como arrojada (isto é, a utilização do processador varia muito de um intervalo de tempo para o outro), e a técnica multimétrica média de aplicações de ruptura que pode levar a imprecisões brutas.

Técnica de Osciloscópio/Analizador Lógico

A técnica de osciloscópio/analisador lógico opera graficamente mantendo o controle do ciclo de trabalho para determinar a utilização de processador agregado utilizando um analisador lógico ou osciloscópio. Este método fornece visibilidade mais detalhada sobre os padrões de utilização ao longo do tempo, tornando-o adequado para analisar cargas de trabalho descontroladas e identificar padrões periódicos.

Vantagens sobre a técnica multimúltimetro:

  • Representação visual dos padrões de utilização
  • Capacidade de capturar picos e vales transitórios
  • Análises relacionadas com o tempo com outros sinais do sistema
  • Capacidades de gatilho para capturar eventos específicos

Ferramentas de Depuração e Análise

Sondas de depuração modernas e ferramentas de rastreamento oferecem recursos sofisticados de análise de carga de CPU sem exigir instrumentação de código.

Vista do Sistema SEGGER

O SEGGER SystemView fornece gravação e visualização em tempo real de eventos RTOS, incluindo carga de CPU. Ele usa os recursos de rastreamento do processador (como Macrocell Trace Incorporado do ARM) para capturar dados de execução com o mínimo de intrusão. As características incluem:

  • Visualização de carga em tempo real da CPU
  • Análise de tempo de execução por tarefa
  • Rastreamento de comutadores de contexto
  • Análise de interrupção
  • Visão temporal do comportamento do sistema

Percepio Tracealyzer

O Tracealyzer oferece um rastreamento e análise abrangentes de RTOS, incluindo métricas detalhadas de carga de CPU. Ele suporta várias plataformas RTOS e fornece insights sobre:

  • Tendências de utilização da CPU ao longo do tempo
  • Padrões de execução de tarefas
  • Análise do tempo de resposta
  • Estatísticas de utilização dos recursos

Lauterbach TRACE32

Os depuradores TRACE32 fornecem perfis e análises de desempenho assistidos por hardware. Usando recursos de rastreamento on-chip, eles podem medir a utilização da CPU sem sobrecarga de software, tornando-os ideais para sistemas críticos de tempo onde a intrusão de medição deve ser minimizada.

Técnicas avançadas de análise de carga da CPU

Além da medição básica de utilização, as técnicas avançadas fornecem informações mais profundas sobre o comportamento do sistema e características de desempenho.

Medição de carga interrompida

Quando o programa é executado, as interrupções também ocorrem e precisam ser manuseadas pelo processador e podem ocorrer a qualquer momento, enquanto isso, uma tarefa simples está sendo executada ou entre as tarefas, então o rastreamento do tempo gasto nos manipuladores de interrupção é necessário. O processamento interrompido pode consumir recursos de CPU significativos, e separar a carga de interrupção da carga de tarefa fornece insights valiosos de otimização.

As abordagens de implementação incluem:

  • Ajustar uma bandeira ou alternar um pino GPIO ao interromper a entrada/saída
  • Usando contadores de interrupção aninhados para lidar com a preempção de interrupção
  • Tempo de execução por interrupção para análise detalhada
  • Calculando carga de interrupção agregada separadamente da carga de tarefa

Monitoramento de Carga Multi- Cores da CPU

A carga da CPU é calculada por núcleo (CPU0, CPU1) e a área-mãe mostra o valor médio de todos os núcleos. A utilização para toda a CPU é então a média de todas as utilizações individuais do núcleo. Os sistemas multi-core requerem a utilização do rastreamento para cada núcleo independentemente, enquanto também fornecem métricas agregadas de nível de sistema.

Considerações para o acompanhamento multi-núcleo:

  • Monitoramento de tarefas ociosas por núcleo
  • Overhead de comunicação inter-core
  • Eficácia do equilíbrio de carga
  • Impacto da afinidade na utilização
  • Considerações assimétricas sobre o multiprocessamento (AMP) vs. multiprocessamento simétrico (SMP)

Análise do histograma

Olhando para o histograma da amostra, você poderá estimar que quaisquer dados acima de um determinado limiar representam instâncias onde a tarefa de fundo foi interrompida, e usando este limiar, você irá descartar todos os dados acima dele para fins de calcular um período médio de tarefas ociosas. A análise do histograma ajuda a identificar distribuições de tempo de execução e detectar anomalias.

Benefícios da análise histográfica:

  • Identificação dos padrões de tempo de execução
  • Detecção de outliers e anomalias
  • Estimativa do tempo de execução no pior dos casos (WCET)
  • Análise de Jitter para sistemas em tempo real

Análise estatística e tendências

O monitoramento de carga de CPU a longo prazo com análise estatística fornece insights sobre o comportamento do sistema ao longo de períodos prolongados:

  • Médias de movimento: Flutuações de curto prazo para identificar tendências
  • Detecção de Peak: Identificar os eventos máximos de utilização e a sua frequência
  • Análise de Percentil:] Compreender a distribuição de utilização (p. ex., utilização do percentil 95)
  • Análise de Correlação: Relacionar carga de CPU a eventos externos ou estados do sistema

Melhores práticas para medição precisa de carga de CPU

A implementação do monitoramento de carga de CPU requer atenção a vários fatores-chave que impactam a precisão e utilidade da medição.

Selecionando Intervalos de Amostragem Apropriados

O tempo de medição pode ser arbitrário, mas idealmente, é melhor alinhar seu tempo de medição com o menor tempo de duração do seu projeto; depende dos objetivos da medição de utilização da CPU. A seleção do intervalo de amostragem envolve equilibrar vários fatores:

  • Muito curto: Pode introduzir sobrecarga de medição excessiva e captar ruído em vez de tendências significativas
  • Muito longo: Pode perder picos transitórios e não conseguir capturar o comportamento dinâmico
  • Alinhado ao sistema: Os períodos de medição correspondentes aos ciclos do sistema (quadro principal, hiperperíodo) fornecem resultados mais significativos
  • Aplicação-Específica: Os prazos críticos em tempo real devem orientar a seleção da janela de medição

Minimizar a Medição Overhead

O ato de medir a carga da CPU consome recursos da CPU, potencialmente afetando a medida da mesma métrica. As estratégias para minimizar sobrecarga incluem:

  • Medição assistida por hardware: Contadores de alavanca de hardware e capacidades de rastreamento quando disponível
  • Instrumentação eficiente: Utilizar mecanismos de captura de temporizadores leves
  • Compilação Condicional: Activar o código de medição apenas durante as fases de desenvolvimento e ensaio
  • Algoritmos otimizados: Use estruturas de dados eficientes e cálculos para estatísticas de tempo de execução
  • Deferido Processamento: Colete dados brutos rapidamente, realize análises durante o tempo ocioso ou offline

Pode-se argumentar que o ato de calcular contagens ociosas é trabalho e que 0% de utilização não é alcançável com o código de instrumentação no local, mas tais preocupações são insignificantes quando o período de medição de utilização da CPU é suficientemente grande.

Manusear o Impacto de Interrupção

Essencialmente, duas classes de interrupções podem interromper o loop de fundo: gatilhos baseados em eventos e gatilhos baseados em tempo, que são geralmente instigados por dispositivos, módulos e sinais externos ao microprocessador, e quando você medir o tempo médio de fundo, você deve tomar todas as medidas possíveis para remover a chance de que esses itens possam causar uma interrupção que alongasse artificialmente o tempo atribuído à tarefa de fundo.

Melhores práticas para interromper o manuseio na medição de carga da CPU:

  • Acompanhar o tempo de execução da interrupção separadamente da execução da tarefa
  • Conta para interromper a aninhamento e a preempção
  • Considere interromper a latência na análise em tempo real
  • Distinção entre interromper o processamento e execução de tarefas desencadeadas por interrupção

Calibração e Estabelecimento de Base

A medição precisa da carga de CPU requer calibração adequada:

  1. Estabelecer o valor inicial inativo: Medir o sistema num estado inactivo conhecido para determinar a referência de utilização de 0%
  2. Verificar Carga Completa: Criar uma condição de carga de 100% conhecida para validar a precisão de medição
  3. Conta para o código de medição: Compreender e documentar as despesas gerais introduzidas por instrumentação de medição
  4. Recalibração Regular: Recalibrar após alterações significativas de código ou mudanças de nível de otimização do compilador

Verificação cruzada com vários métodos

Usar técnicas de medição múltiplas proporciona confiança nos resultados e ajuda a identificar artefatos de medição:

  • Compare as medições baseadas em software com dados de rastreamento de hardware
  • Verificar estatísticas RTOS contra instrumentação manual
  • Verificação cruzada do monitoramento da tarefa inativa com somatório de tempo de execução
  • Usar medições externas com a opção GPIO para validar cálculos internos

Documentação e relatórios

Documentação abrangente garante que as medições de carga da CPU permaneçam úteis durante todo o ciclo de vida do produto:

  • Metodologia de medição: Documentar a técnica específica utilizada e a sua configuração
  • Condições de ensaio: Estado do sistema de registo, condições de entrada e factores ambientais
  • Valores de base: Manter registos de dados de calibração e medições de referência
  • Análise de tendência: Acompanhe a evolução da carga da CPU através de versões de software
  • Limiar Definições: Intervalos de utilização aceitáveis para documentos e margens de segurança

Exemplos de Implementação Prática

Compreender conceitos teóricos é importante, mas exemplos práticos de implementação ajudam a preencher o fosso entre teoria e prática.

Implementação de contra-correspondências simples

Uma implementação básica de contador ocioso para sistemas de RTOS simples ou de metais nus:

  1. Defina variáveis globais para cálculo de contagem e utilização ociosos
  2. Aplicar uma interrupção periódica do temporizador (por exemplo, 1 segundo intervalo)
  3. No loop ocioso, incremente um contador ocioso continuamente
  4. Na interrupção do temporizador, capturar a contagem de inatividade atual, calcular a utilização e redefinir o contador
  5. Armazenar ou transmitir o valor de utilização para monitorização

Considerações-chave:

  • Usar variáveis voláteis para evitar a otimização do compilador
  • Contador de alças transbordar apropriadamente
  • Minimizar o processamento na interrupção do temporizador
  • Considere operações atômicas para sistemas multi-core

Rastreamento do Tempo de Execução da Tarefa

Para sistemas que exigem dados de utilização por tarefa:

  1. Configurar um temporizador de alta resolução (microsegundo ou melhor resolução)
  2. Criar uma estrutura de dados para armazenar o tempo de execução por tarefa
  3. Na entrada da tarefa, capture a data atual
  4. Na saída da tarefa, calcular o tempo decorrido e acumular para total da tarefa
  5. Calcular periodicamente a percentagem de utilização para cada tarefa

Esta abordagem fornece informações detalhadas sobre quais tarefas consomem mais recursos de CPU, permitindo esforços de otimização direcionados.

Exemplo de Estatísticas de Execução do FreeRTOS

A implementação do monitoramento de carga da CPU no FreeRTOS envolve:

  1. Configurar um temporizador com resolução mais elevada do que a marcação do sistema
  2. Ativando estatísticas de execução no FreeRTOSConfig.h
  3. A implementação das macros de configuração do temporizador necessárias
  4. Criando uma tarefa de monitoramento que periodicamente chama vTaskGetRunTimeStats()
  5. Processando e exibindo ou registrando as estatísticas

As estatísticas de execução fornecem tempo de execução absoluto e utilização percentual para cada tarefa, facilitando a identificação de operações intensivas em CPU.

Comutador GPIO para Medição Externa

A implementação do método de comutar GPIO:

  1. Configurar um pino GPIO como saída
  2. Definir o pino no início da tarefa ociosa
  3. Definir o pino baixo ao sair da tarefa ociosa
  4. Ligar um osciloscópio ou um multímetro para medir o ciclo de serviço
  5. Calcular a utilização da CPU como (percentagem de ciclo de serviço)

Este método fornece verificação independente de medições baseadas em software e pode ser particularmente útil durante as fases de integração e teste do sistema.

Pistas comuns e como evitá - las

A medição da carga da CPU pode ser enganosamente complexa, e vários erros comuns podem levar a resultados imprecisos ou enganosos.

Problemas de otimização do compilador

Otimizações de compiladores podem interferir com o código de medição:

  • Otimização de contador: Os compiladores podem otimizar os contadores ociosos se não forem declarados voláteis
  • Reordenação de código: O código de captura de datapasta pode ser reordenado, afetando a precisão
  • Efeitos de Inlining: A função de inlining pode alterar o tempo de execução
  • Desrolling de laço: Pode afetar o comportamento de contagem de loops inativos

As soluções incluem o uso de qualificadores voláteis, barreiras de compilador e verificação de código de montagem gerado.

Resolução do temporizador e sobrefluxo

Resolução inadequada do temporizador ou manipulação inadequada do excesso leva a erros de medição:

  • Usar temporizadores com resolução suficiente para o intervalo de medição
  • Implementar a detecção e o manuseamento adequados de transbordamento
  • Considere usar contadores de 64 bits ou técnicas de extensão de transbordamento
  • Validar a precisão do temporizador contra a referência conhecida

Efeitos de Intrusão de Medição

O código de medição em si afeta o comportamento do sistema:

  • Efeitos de cache da execução do código de medição
  • Alterações da latência da interrupção devido à instrumentação
  • Consumo de largura de banda de memória para armazenamento de estatísticas
  • Inversão prioritária nas tarefas de medição

Minimize a intrusão usando métodos assistidos por hardware quando possível e mantendo o código de medição o mais leve possível.

Assunto de base incorreto

Assumir valores basais incorretos leva a erros sistemáticos:

  • Falha em contabilizar a atividade do sistema operacional em estado "indevido"
  • Não considerando transições de estado de gestão de energia
  • Ignorar tarefas de manutenção periódica
  • DMA com vista para o exterior e atividade periférica

Estabelecer sempre as bases de dados através de medições reais e não de pressupostos teóricos.

Cobertura inadequada de testes

Medir a carga da CPU em condições limitadas fornece uma imagem incompleta:

  • Teste em várias condições de entrada e padrões de dados
  • Incluir cenários piores e condições de stress
  • Considere fatores ambientais (temperatura, tensão)
  • Avaliar o comportamento a longo prazo, não apenas instantâneos de curto prazo

Otimizando a carga da CPU em sistemas incorporados

Uma vez que você tenha medido a carga da CPU com precisão, o próximo passo é a otimização quando a utilização exceder os limiares aceitáveis.

Estratégias de otimização de software

A solução principal é aumentar a eficiência da solução de software, o que reduz o impacto energético do sistema também, e aumentar ou desperdiçar recursos de hardware deve ser mantido como último recurso.

As abordagens de otimização de software incluem:

  • Otimização de algoritmos: Substituir algoritmos ineficientes por alternativas mais eficientes
  • Profissão de código: Identificar e otimizar pontos quentes consumindo tempo de CPU desproporcional
  • Otimização do compilador:Use sinalizadores de otimização adequados e otimização guiada por perfil
  • Selecção da Estrutura de Dados: Escolha estruturas de dados otimizadas para padrões de acesso
  • Otimização do cache: Melhorar a localização dos dados e reduzir as falhas de cache
  • Otimização de interrupção: Minimizar o tempo de execução de rotina do serviço de interrupção

Abordagens Arquitetônicas

O processamento da tarefa a ser feito em múltiplos ciclos, de modo que o tempo de execução das tarefas durante cada ciclo diminui e assim a utilização da CPU diminui. Estratégias arquitetônicas adicionais incluem:

  • Descomposição da tarefa: Quebra grandes tarefas em unidades menores e mais gerenciáveis
  • Ajuste de Prioridade: Otimizar as prioridades de tarefas para reduzir a mudança de contexto
  • Polling to Interrupt Conversion: Substituir as voltas de votação por abordagens orientadas por interrupções
  • Utilização de DMA: Movimento de transferência de dados para controladores DMA
  • Aceleração de hardware:Use periféricos de hardware dedicados para operações com computação intensiva

Soluções de Hardware

Quando a otimização de software atinge seus limites, soluções de hardware podem ser necessárias:

  • Aumentar a frequência do relógio da CPU para que a CPU possa executar tarefas mais rapidamente e assim ter mais capacidade de tempo para executar outras tarefas e assim menor carga.
  • Usando um processador Multi Core onde as tarefas poderiam ser divididas entre núcleos.
  • Adição de coprocessadores ou aceleradores para funções específicas
  • Atualizando para uma família de processadores mais poderosa
  • Implementação de aceleração baseada em FPGA para algoritmos críticos

Considerações sobre a gestão de energia

Otimização de carga de CPU muitas vezes se intersecta com o gerenciamento de energia:

  • Tempestade dinâmica e escala de frequência (DVFS):] Ajustar a velocidade do clock com base na carga
  • Modos de sono: Digite estados de baixa potência durante períodos de inatividade
  • Clock Gating: Desactivar relógios para periféricos não utilizados
  • Consolidação de carga de trabalho: Processamento em lote para maximizar o tempo de sono

Normas da indústria e requisitos de segurança

Muitas indústrias têm requisitos e padrões específicos em relação à carga de CPU em sistemas embarcados, particularmente para aplicações críticas à segurança.

Normas Automotivas

Aplicações críticas são fortemente reguladas por padrões da indústria, como a ISO 26262, automotiva que dita o nível máximo de carga de CPU para atender a picos de processamento súbito. Por exemplo, no Automotive a carga de CPU sugerida é de 65 a 70%.

Os requisitos da norma ISO 26262 incluem:

  • Análise de carga e margens de CPU documentadas
  • Análise do tempo de execução do pior caso (WCET)
  • Margens de segurança para aumentos inesperados de carga
  • Mecanismos de monitorização da verificação da carga em tempo de execução

Normas Aeroespaciais

DO-178C e normas relacionadas para aplicações aeroespaciais exigem:

  • Análise e verificação de temporização rígidas
  • Margem demonstrada para cenários piores
  • Rastreabilidade dos requisitos de carga da CPU
  • Verificação independente do comportamento de temporização

Padrões de Dispositivos Médicos

IEC 62304 para software de dispositivos médicos requer:

  • Análise de risco, incluindo falhas de calendário
  • Verificação do desempenho em tempo real
  • Documentação da utilização dos recursos
  • Ensaio em condições de stress

Automação Industrial

IEC 61508 para segurança funcional em sistemas industriais especifica:

  • Requisitos de nível de integridade de segurança (SIL)
  • Análise de calendário para funções de segurança
  • Monitoramento de recursos e detecção de falhas
  • Considerações comprovadas em uso para as margens de carga da CPU

Ferramentas e recursos para análise de carga da CPU

Uma variedade de ferramentas comerciais e de código aberto suportam medição e análise de carga de CPU em sistemas embarcados.

Ferramentas comerciais

  • SistemaSEGGERView: Análise e visualização RTOS em tempo real (https://www.segger.com/products/desenvolvimento-tools/systemview/)
  • Percepio Tracealyzer: Análise abrangente do RTOS e análise do desempenho
  • [[FLT: 0]]Lauterbach TRACE32: Depuração e perfil assistidos por hardware
  • ARM Development Studio: Ferramentas de análise e otimização para sistemas baseados em ARM
  • Green Hills MULTI: Ambiente de desenvolvimento integrado com análise de desempenho

Ferramentas de Código Aberto

  • [[FLT: 0]]FreeRTOS Runtime Statistics: Tempo de execução de tarefas incorporado
  • Zephyr Tracing: Rastreamento do Kernel e monitorização do desempenho
  • LTTng: Linux trace toolkit para sistemas Linux incorporados
  • Perfetto: Análise de perfil e traçado do sistema
  • Valgrind/Callgrind: Perfil de desempenho para sistemas embarcados baseados em Linux

Ferramentas de Hardware

  • [[FLT: 0]]Analizadores lógicos: Capture padrões de alternância GPIO para medição externa
  • Osciloscópios: Medir os ciclos de serviço e as relações de tempo
  • JTAG/SWD Depuradores: Capacidades de depuração e rastreamento de acesso on-chip
  • Analizadores de energia:Correlacionar carga de CPU com consumo de energia

Recursos e Comunidades em linha

  • Embedded.com: Artigos e tutoriais sobre o desempenho dos sistemas incorporados (https://www.embedded.com])
  • Fórum FreeRTOS: Apoio comunitário às questões relacionadas com os RTOS
  • Stack Overflow: Tag de sistemas incorporados para questões técnicas
  • Reddit r/embedded: Debates comunitários sobre desenvolvimento integrado
  • Sistemas incorporados Semanalmente: Boletim informativo que cobre tópicos incorporados

Tendências futuras no monitoramento de carga da CPU

À medida que os sistemas incorporados continuam evoluindo, técnicas e requisitos de monitoramento de carga da CPU também estão avançando.

Integração de Aprendizagem de Máquina

Algoritmos de aprendizado de máquina estão sendo aplicados para análise de carga de CPU:

  • Previsão de carga preditiva baseada em padrões históricos
  • Detecção de anomalias para identificar comportamento incomum
  • Recomendações de otimização automatizadas
  • Atribuição de recursos adaptativos baseada em padrões aprendidos

Monitoramento conectado em nuvem

Dispositivos incorporados habilitados para IoT suportam cada vez mais monitoramento baseado em nuvem:

  • Monitoramento e diagnóstico de desempenho remoto
  • Análise e comparação de carga de CPU de toda a frota
  • Atualizações de otimização por ar
  • Manutenção preditiva baseada nas tendências de utilização

Suporte de Hardware Melhorado

Os processadores modernos estão incorporando monitoramento de desempenho mais sofisticado:

  • Conjuntos de contador de desempenho mais abrangentes
  • Capacidades de rastreio de cabeça baixa
  • Perfil assistido por hardware com intrusão mínima
  • Monitorização integrada de potência e desempenho

Esforços de padronização

Esforços da indústria para o monitoramento padronizado do desempenho:

  • APIs comuns em plataformas RTOS
  • Formatos de traçado padronizados para interoperabilidade da ferramenta
  • Melhores práticas e orientações para a indústria
  • Implementação de referência de código aberto

Conclusão

Cálculo e monitoramento precisos de carga da CPU é essencial para o desenvolvimento de sistemas incorporados confiáveis e eficientes. Este artigo apresenta várias maneiras de discernir o quanto a transferência de CPU de uma aplicação incorporada está realmente consumindo, e você pode usar esta informação para verificar o design do software do sistema versus uma carga máxima do processador. Se você escolher monitoramento de tarefas ociosas, medição de tempo de execução, contadores de hardware ou técnicas de medição externas, a chave é selecionar métodos apropriados para seus requisitos e restrições específicas.

O sucesso no monitoramento de carga da CPU requer atenção à precisão de medição, minimizando sobrecarga, calibração adequada e testes abrangentes em condições realistas. Ter uma carga de CPU alta não significa nada de ruim se seu projeto cumprir todos os prazos, mas significa que no futuro, se você quiser adicionar mais processos ao sistema, isso pode levar a sobrecarga. Manter margens de segurança apropriadas garante que seu sistema possa lidar com condições inesperadas e melhorias futuras.

À medida que os sistemas embarcados se tornam mais complexos e aplicações críticas à segurança proliferam, o monitoramento robusto da carga da CPU torna-se cada vez mais importante. Ao implementar os métodos e as melhores práticas descritos neste guia, você pode garantir que seus sistemas embarcados funcionem de forma eficiente, atendam aos requisitos em tempo real e mantenham margens de desempenho adequadas ao longo de sua vida operacional.O investimento em monitoramento adequado da carga da CPU paga dividendos em confiabilidade do sistema, oportunidades de otimização e confiança que seu sistema incorporado irá funcionar como pretendido em todas as condições.