Table of Contents

Il monitoraggio del carico della CPU nei dispositivi incorporati è un aspetto fondamentale dello sviluppo dei sistemi incorporati che influisce direttamente sulle prestazioni del sistema, sull'affidabilità e sulla longevità. La comprensione del carico del processore in un sistema integrato è importante, ma spesso trascurato, e serve come passo verso l'analisi della capacità del processore di soddisfare le scadenze del sistema.

Comprendere il carico e l'utilizzo della CPU nei sistemi incorporati

Prima di immergersi nelle tecniche di misura, è essenziale capire cosa significa il carico della CPU nel contesto dei sistemi incorporati e perché differisce dagli ambienti di calcolo generali.

Definizione del carico e dell'utilizzo della CPU

Gli esperti in tempo reale incorporati definiscono l'utilizzo del core come il tempo aggregato durante il quale il core esegue il codice dell'applicazione (tempo attivo) diviso per il tempo di osservazione totale. Il carico della CPU è la quantità di tempo che la CPU trascorre nell'elaborazione del codice attivo fino alla quantità di tempo che la CPU spende nello stato di Idle senza un'elaborazione attiva, il che significa semplicemente il tempo che la CPU trascorre nelle attività di elaborazione alla quantità di tempo speso della CPU mentre si sta riposa e non fa nulla.

L'utilizzo della CPU è semplicemente il rapporto di tempo che un processore spende per fare il lavoro reale in un determinato periodo di tempo. Questa metrica fornisce informazioni cruciali su come il sistema incorporato utilizza le sue risorse di elaborazione e se ci sono sufficienti headroom per funzionalità aggiuntive o punte di carico inaspettate.

CPU Load vs. CPU Utilizzo: Terminologia Clarification

Gli ingegneri del mondo UNIX conoscono il termine carico della CPU che si riferisce ad un concetto diverso: qual è il numero medio di attività di esecuzione più attesa in un punto specifico nel tempo, che è utile in scenari in cui un sistema è sovraccaricato. Tuttavia, gli ingegneri software incorporati utilizzano i termini di carico della CPU e l'utilizzo della CPU in modo intercambiabile per significare l'utilizzo della CPU.

Perché CPU Caricamento di monitoraggio Matters

La misurazione accurata del carico della CPU serve molteplici scopi critici nello sviluppo di sistemi incorporati:

  • Analisi della stabilità:[[]] L'importanza del carico della CPU deriva dal fatto che viene utilizzato come fattore per determinare la pianificazione del nostro design, che contribuisce a garantire che tutte le attività possano soddisfare le loro scadenze in varie condizioni operative.
  • Margine di sicurezza:[ Nei sistemi critici di sicurezza c'è un margine per il carico della CPU per i prodotti consegnati, per esempio nel settore Automotive il carico della CPU suggerito è di 65-70 %. Questa camera permette di ottenere punte di carico inaspettate e aggiunte future funzionalità.
  • Il consumo di potenza:[] il carico della CPU ha anche un impatto immediato sul consumo di energia, e può essere un no-go sui sistemi in cui tale punto è critico. L'utilizzo della CPU inferiore spesso si traduce in un consumo energetico ridotto, che è fondamentale per i dispositivi a batteria.
  • Ottimizzazione del sistema:[]] utilizzo della CPU, in combinazione con l'analisi dei tempi, vi dice se i compiti e gli ISR eseguono nel tempo necessario e quanto potenza di elaborazione hanno bisogno per il loro completamento di successo.
  • Selezione di Hardware:[[] Gli ingegneri di sistemi potrebbero pagare più chip di quanto necessiti, o possono essere pericolosamente vicini a sovra-taxing loro processore attuale, così prendendo l'ipotesi fuori dei livelli di utilizzo del processore di misura è essenziale.

Metodi fondamentali per il calcolo del carico della CPU

Esistono diverse tecniche per determinare il carico della CPU in ambienti incorporati, ognuna con i propri vantaggi, limitazioni e casi di utilizzo appropriati. La scelta del metodo dipende dalle capacità hardware, dall'accuratezza richiesta, dai vincoli di misura in testa e dalla fase di sviluppo.

Metodo di monitoraggio delle attività di Idle

Il metodo di monitoraggio delle attività idle è uno dei più comuni e semplici approcci per la misurazione dell'utilizzo della CPU nei sistemi incorporati con un RTOS.

Come funziona il monitoraggio delle attività di Idle

Il tempo di inattività è la quantità di tempo che la CPU non è occupata, e se il Sistema Operativo (OS) ha un compito inattivo il tempo di inattività è semplicemente la quantità di tempo che l'attività di inattività è in esecuzione. In situazioni ideali non caricate, il compito di inattività avrebbe eseguito un numero noto e costante di volte durante qualsiasi periodo di tempo impostato (un secondo, per esempio), e la maggior parte dei sistemi forniscono un tempo-based di interrutti che si può usare per confrontare un freelo

Il modo più semplice di definire l'utilizzo dello 0% è quello di incrementare un contatore nel vostro compito inattivo e vedere quanti contatori di idle si verificano durante un periodo di misura. Se non si sta facendo alcun lavoro (oltre al timer interrotto) allora questo rappresenta il numero massimo di conteggi di idle e l'utilizzo del 0%.

Considerazioni di attuazione

Una volta che si determinano i conteggi massimi di inattività, non è possibile aggiungere codice all'attività di inattività, in quanto ciò cambierebbe i conti massimi di inattività. L'attività inattivo dovrebbe rimanere il più minimo possibile per mantenere la precisione di misura. Inoltre, è meglio allineare il tempo di misura con il più breve tempo di scadenza del progetto; dipende dagli obiettivi della misurazione dell'utilizzo della CPU.

Il calcolo per l'utilizzo della CPU utilizzando questo metodo è semplice:

CPU Utilizzo (%) = 100 - (Conti di lesione / Conti di lesione massima × 100)

Misurazione del tempo di esecuzione

Questo metodo comporta la misurazione diretta del tempo di esecuzione di ogni attività e il calcolo del carico aggregato della CPU in base alle frequenze di attività e ai tempi di esecuzione.

Approccio della Formula Matematica

Il carico totale della CPU è uguale alla somma di (il peggiore tempo di esecuzione del caso di Task × Task), che fornisce un carico massimo teorico della CPU basato su scenari di esecuzione peggiori, particolarmente preziosi durante la fase di progettazione.

Attuazione della misura del tempo di esecuzione

Per misurare il carico della CPU, è necessario misurarlo in una finestra del tempo e questa finestra è normalmente scelta per essere uguale alla finestra del ciclo della cornice principale del programmatore, quindi in ogni attività supportata leggita all'inizio del compito e termina il valore attuale delle zecche timer quindi sottrarre entrambe le letture e salvarle in una variabile globale.

L'implementazione comporta in genere:

  1. Catturare un timestamp all'inizio di ogni compito utilizzando un timer ad alta risoluzione
  2. Catturare un altro timestamp alla fine del compito
  3. Calcolo della differenza per determinare il tempo di esecuzione dell'attività
  4. Accumulare questi valori in tutte le attività
  5. Dividere il tempo di esecuzione totale dalla finestra di misura per ottenere percentuale di utilizzo della CPU

Misurazione basata su controrivestimenti hardware

Molti moderni microcontroller e processori forniscono contatori di prestazioni hardware che possono monitorare varie metriche tra cui cicli di CPU, esecuzione di istruzioni, hits/misses cache, e altro ancora.

Vantaggi dei contatori hardware

  • Oltrevo minimo:[ I contatori hardware operano indipendentemente dall'esecuzione del software, introducendo praticamente nessuna sovraccarica di misura
  • Alta precisione:[] Le misurazioni accurate del ciclo forniscono informazioni dettagliate sul comportamento della CPU
  • Multiple Metrics:[ Oltre l'utilizzo semplice della CPU, i contatori hardware possono monitorare le prestazioni della cache, le previsioni di ramo e altri eventi architettonici
  • Non invadente:[] Le misure non influiscono sul comportamento di temporizzazione del sistema misurato

Approccio di attuazione

L'implementazione del contatore hardware varia per architettura del processore.

  • Configurazione delle unità di monitoraggio delle prestazioni (PMU) per contare eventi specifici
  • Valori di contatore di lettura a intervalli di misura
  • Calcolo dell'utilizzo basato sui contatori dei cicli rispetto al tempo trascorso
  • Utilizzo delle unità DWT (Data Watchpoint and Trace) sui processori ARM Cortex-M

Metodo di contropiede Loop

Un contatore free-running viene incrementato ogni volta attraverso il loop di sfondo, e questo contatore utilizza una variabile che, quando incrementato, è consentito di traboccare. Utilizzando un compito periodico (come un compito di 25ms) per monitorare l'utilizzo della CPU, la maggior parte dei sistemi forniscono un interruzione basata sul tempo che è possibile utilizzare per confrontare il contatore di sfondo-loop ad una costante nota.

Questo metodo funziona stabilendo una frequenza di conteggio base quando il sistema è inattivo, quindi confrontando i tassi di conteggio reali durante l'operazione per determinare quanto tempo viene speso in lavoro produttivo contro i loop di idle.

Metodi di calcolo automatizzati

Il metodo automatizzato calcola, in tempo reale, il tempo medio trascorso nel ciclo di sfondo. Ci sono due vantaggi principali per avere il software calcolare il tempo medio per il ciclo di sfondo per completare, scaricare: È possibile rilevare con precisione la preensione (al posto di fare un'ipotesi dai dati istogram), e rilevare la preemption consente di scartare i dati medi che sono stati spazzati via interrompendo l'elaborazione.

Questo approccio elimina la necessità di caratterizzazione manuale e si adatta automaticamente alle modifiche del codice, rendendolo più mantenibile per i progetti a lungo termine.

RTOS-Specific CPU Load Monitoring

I sistemi operativi in tempo reale forniscono spesso meccanismi integrati e API per il monitoraggio del carico della CPU, rendendo l'implementazione più semplice e standardizzata in tutti i progetti.

Monitoraggio del carico della CPU FreeRTOS

FreeRTOS, una delle piattaforme RTOS più popolari embedded, offre diversi meccanismi per il monitoraggio dell'utilizzo della CPU.

Configurazione statistica runtime

FreeRTOS ha un meccanismo per profilare il tempo di esecuzione delle attività attraverso un gancio in stile macro nel programmatore di attività pre-emptive, e le tracce del gancio quando il contesto di attività cambia, fondamentalmente il punto nel tempo in cui un compito sbloccato con una priorità superiore (o rotonda robin) è programmato per la prossima fetta.

Per attivare le statistiche di runtime in FreeRTOS, è necessario:

  1. Imposta configurazioneGENERATE RUN TIME STATS a 1 in FreeRTOSConfig.h
  2. Definire portCONFIGURE TIMER FOR RUN TIME STATS()] per configurare un timer ad alta risoluzione
  3. Definire portGET RUN TIME COUNTER VALUE()]] per restituire il valore attuale del timer
  4. Usa vTaskGetRunTimeStats()] per recuperare le statistiche formattate

Funzione di gancio di traino

Con l'incremento di un contatore nel gancio di collegamento e il confronto a un massimo noto, è possibile determinare l'utilizzo del sistema generale. Per definizione quando il dispositivo non è in esecuzione si sta consumando i cicli di esecuzione delle attività, quindi è solo necessario monitorare il tempo di inattività.

Statistiche della CPU di Zephyr RTOS

Zephyr RTOS fornisce statistiche di runtime dei thread attraverso i suoi servizi del kernel. Il sistema traccia il tempo di esecuzione per ogni thread e fornisce API per query queste informazioni.

  • Percorso di tempo di esecuzione per-thread
  • Monitoraggio filetto di filetto
  • Configurabile raccolta di statistiche con minimo overhead
  • Integrazione con il sistema di lavoro per la segnalazione periodica

Altre piattaforme RTOS

La maggior parte delle piattaforme RTOS commerciali e open source offrono capacità simili:

  • ThreadX:[] Fornisce il kit del profilo di esecuzione per l'analisi delle prestazioni dettagliate
  • VxWorks:[ Offre strumenti di profilazione completi e funzionalità di visualizzazione del sistema
  • RTEMS:[] Include statistiche di utilizzo della CPU e supporto di profilazione
  • Micrium μC/OS:[ Caratteristiche delle statistiche delle attività integrate e monitoraggio dell'utilizzo della CPU

Tecniche di misura esterna

Oltre ai metodi di misura basati sul software, strumenti e tecniche esterne possono fornire preziose informazioni sull'utilizzo della CPU senza modificare il software incorporato.

Metodo di gioco GPIO

Il metodo di gioco GPIO prevede l'impostazione di un pin GPIO alto quando la CPU è attiva e bassa quando si è inattivo, quindi misura il ciclo di dovere esternamente.

Tecnica multimetro

La tecnica multimetro, che utilizza un multimetro come strumento di misura, consente di determinare l'utilizzo medio del processore e determina l'utilizzo aggregato del processore per l'intera applicazione, piuttosto che le singole attività.

Fase di attuazione:

  1. Configurare un pin GPIO come output
  2. Impostare il pin in alto nella voce di attività inattivo
  3. Impostare il perno basso nell'uscita dell'attività inattivo
  4. Collegare un multimetro in modalità tensione DC al perno
  5. La lettura della tensione (in percentuale di VCC) rappresenta l'utilizzo della CPU

Tuttavia, se l'applicazione fluttua, è considerato scoppio (cioè, l'utilizzo del processore varia notevolmente da un intervallo di tempo a quello successivo), e la tecnica multimetro media applicazioni scoppiate che possono portare a inesattezze lorde.

Tecnica dell'analizzatore oscilloscopio/logico

La tecnica di analisi oscilloscopio/logic opera tenendo traccia graficamente del ciclo di dovere per determinare l'utilizzo aggregato del processore utilizzando un analizzatore di logica o oscilloscopio. Questo metodo fornisce una visibilità più dettagliata nei modelli di utilizzo nel tempo, rendendolo adatto per analizzare i carichi di lavoro e identificare i modelli periodici.

Vantaggi sulla tecnica multimetro:

  • Rappresentanza visiva dei modelli di utilizzo
  • Capacità di catturare picchi e valli transitori
  • Analisi correlata al tempo con altri segnali di sistema
  • Capacità di trigger per catturare eventi specifici

Strumenti di sonda e trace del debito

Le sonde e gli strumenti di traccia di debug moderni offrono sofisticate funzionalità di analisi del carico della CPU senza richiedere la strumentazione del codice.

SEGGER SystemView

SEGGER SystemView fornisce la registrazione in tempo reale e la visualizzazione di eventi RTOS, incluso il carico della CPU, e utilizza le funzionalità di traccia del processore (come ad esempio la trace incorporata di ARM Macrocell) per catturare i dati di esecuzione con un'intrusione minima.

  • Visualizzazione del carico della CPU in tempo reale
  • Analisi del tempo di esecuzione per-task
  • Context switch tracking
  • Analisi interrotta
  • Vista temporale del comportamento del sistema

Percepio Tracealyzer

Tracealyzer offre un'analisi e un tracciamento completo di RTOS, comprese le metriche di carico della CPU dettagliate, supporta più piattaforme RTOS e fornisce informazioni su:

  • Le tendenze di utilizzo della CPU nel tempo
  • Modelli di esecuzione delle attività
  • Analisi del tempo di risposta
  • Statistiche sull'uso delle risorse

Lauterbach TRACE32

I debugger TRACE32 forniscono analisi di profili e prestazioni assistite dall'hardware. Utilizzando le funzionalità di traccia on-chip, possono misurare l'utilizzo della CPU senza sovraccarico del software, rendendole ideali per sistemi cronometrati dove l'intrusione di misura deve essere ridotta al minimo.

Tecniche di analisi del carico della CPU avanzate

Oltre alla misurazione di base dell'utilizzo, le tecniche avanzate forniscono approfondimenti sul comportamento del sistema e sulle caratteristiche delle prestazioni.

Misurazione del carico interrotta

Quando il programma viene eseguito, si interrompe anche e deve essere gestito dal processore e possono verificarsi in qualsiasi momento, nel frattempo un compito semplice è in esecuzione o tra le attività, quindi è necessario tracciare il tempo trascorso nei gestori di interruttori. L'elaborazione interrotta può consumare risorse della CPU significative, e separare il carico di interruttori dal carico di attività fornisce preziose informazioni di ottimizzazione.

Gli approcci di attuazione includono:

  • Impostare una bandiera o sganciare un pin GPIO su ingresso/uscita di interruzione
  • Usare contatori di interruttori nidi per gestire la prelazione interrotta
  • Monitoraggio del tempo di esecuzione per interrotta per analisi dettagliate
  • Calcolo del carico di interruttori aggregati separatamente dal carico di attività

Monitoraggio del carico della CPU multi-Core

Il carico della CPU è calcolato per core (CPU0, CPU1) e l'area madre mostra il valore medio di tutti i core. L'utilizzo per l'intera CPU è quindi la media di tutte le singole utilizzazioni del nucleo. I sistemi multi-core richiedono l'utilizzo del tracciamento per ogni core indipendentemente, fornendo anche metriche di livello del sistema aggregato.

Considerazioni per il monitoraggio multi-core:

  • Per-core idle task tracking
  • Overhead comunicazione intercore
  • Efficienza di bilanciamento del carico
  • Impatto di affinità fondamentale sull'utilizzo
  • Asimmetrica multi-processing (AMP) vs. considerazioni simmetriche multi-processing (SMP)

Analisi dell'istogramma

Osservando l'istogramma del campione, si potrebbe stimare che qualsiasi dato superiore a una certa soglia rappresenta casi in cui l'attività di sfondo è stata interrotta, e utilizzando questa soglia, si scarterebbe tutti i dati sopra di esso allo scopo di calcolare un periodo medio di idle-task.

Vantaggi dell'analisi istogramma:

  • Identificazione dei modelli di tempo di esecuzione
  • Rilevamento di antenne e anomalie
  • Tempo di esecuzione peggiore (WCET) stima
  • Analisi di Jitter per sistemi in tempo reale

Analisi statistica e tendenze

Monitoraggio del carico della CPU a lungo termine con analisi statistica fornisce informazioni sul comportamento del sistema durante i periodi estese:

  • Medi di movimento:[ Smooth out fluttuazioni a breve termine per identificare le tendenze
  • Rilevamento della gente:[ Identificare gli eventi di massima utilizzo e la loro frequenza
  • Analisi dei fattori:[] Comprendere la distribuzione di utilizzo (ad esempio, 95esimo utilizzo del percentile)
  • Analisi delle relazioni:[ Relate il carico della CPU agli eventi esterni o agli stati di sistema

Migliori Pratiche per Accurate Misurazione del carico della CPU

L'implementazione del monitoraggio del carico della CPU richiede in modo efficace l'attenzione a diversi fattori chiave che influiscono sull'accuratezza e sull'utilità della misurazione.

Selezione di Intervalli di Sampling appropriati

Il tempo di misura può essere arbitrario, ma idealmente, è meglio allineare il tempo di misura con il più breve tempo di scadenza del progetto; dipende dagli obiettivi della misurazione dell'utilizzo della CPU.

  • Too Short:[] Può introdurre una misura eccessiva e catturare il rumore piuttosto che le tendenze significative
  • Troppo lungo:[] Può mancare le punte transitorie e non catturare il comportamento dinamico
  • Allineato al sistema:[] I periodi di misurazione corrispondenti ai cicli di sistema (cornice principale, iperperperiodo) forniscono risultati più significativi
  • Application-Specific:[ I termini critici in tempo reale dovrebbero guidare la selezione delle finestre di misura

Minimizzazione della misura sopraelevata

L'atto di misura del carico della CPU consuma risorse della CPU, potenzialmente incidendo sull'attendibilità metrica.

  • Misurazione assisata:[ Contatori hardware e funzionalità di traccia quando disponibili
  • Efficiente strumentazione:[] Utilizzare meccanismi di cattura dei timestamp leggeri
  • Compilazione di Conditional:[ Abilita il codice di misura solo durante le fasi di sviluppo e test
  • Ottimizzati:[] Utilizzare strutture e calcoli dati efficienti per le statistiche di runtime
  • Elaborazione differita:[ Raccogliere rapidamente i dati grezzi, eseguire analisi durante il tempo di inattività o offline

Si potrebbe sostenere che l'atto di calcolo dei conteggi idle è lavoro e che l'utilizzo 0% non è realizzabile con il codice di strumentazione in atto, ma tali preoccupazioni sono trascurabili quando il periodo di misurazione dell'utilizzo della CPU è sufficientemente grande.

Gestione dell'impatto interrottura

Essenzialmente due classi di interruttori possono interrompere il ciclo di sfondo: trigger basati su eventi e trigger basati sul tempo, che sono solitamente istigati da dispositivi, moduli e segnali esterni al microprocessore, e quando si misura il tempo medio di sfondo, si dovrebbe prendere tutti i passaggi possibili per rimuovere la possibilità che questi elementi possono causare un interruzione che allunga artificialmente il tempo attribuito al background di attività.

Migliori pratiche per la gestione interrotta nella misurazione del carico della CPU:

  • Tracciare il tempo di esecuzione interrotto separatamente dall'esecuzione dell'attività
  • Conto per interrompere nidificazione e prelazione
  • Considerare la latenza di interrompere l'analisi in tempo reale
  • Distinguimento tra l'elaborazione interrotta e l'esecuzione di attività interrotta

Calibrazione e Stabilimento Baseline

La misurazione accurata del carico della CPU richiede una corretta calibrazione:

  1. Establish Idle Baseline:[] Misurare il sistema in uno stato di inattività noto per determinare il riferimento di utilizzo del 0%
  2. Verificare carico completo:[ Creare una condizione di carico conosciuta al 100% per convalidare la precisione di misura
  3. Conto per il Codice di Misurazione:[] Comprendere e documentare la testa sopra introdotta dalla strumentazione di misura
  4. Ricalibrazione regolare:[ Ricalibrare dopo modifiche significative del codice o modifiche del livello di ottimizzazione del compilatore

Cross-Verification con metodi multipli

Utilizzando più tecniche di misura fornisce fiducia nei risultati e aiuta a identificare artefatti di misura:

  • Confronta le misurazioni basate sul software con i dati delle tracce hardware
  • Verificare le statistiche RTOS contro la strumentazione manuale
  • Controllo delle attività inattivo con sommazione del tempo di esecuzione
  • Utilizzare misure di attivazione GPIO esterne per convalidare i calcoli interni

Documentazione e Reporting

La documentazione completa garantisce che le misurazioni del carico della CPU rimangano utili durante il ciclo di vita del prodotto:

  • Metodologia di misura:[ Documentare la tecnica specifica utilizzata e la sua configurazione
  • Condizioni di prova:[ Registrare lo stato del sistema, le condizioni di ingresso e i fattori ambientali
  • Valori di base:[] Mantenere i record di dati di calibrazione e misurazioni di riferimento
  • Analisi dei tempi:[] Traccia l'evoluzione del carico della CPU nelle versioni software
  • Definizioni tre:[] Gamma di utilizzo accettabili del documento e margini di sicurezza

Esempi pratici di attuazione

La comprensione dei concetti teorici è importante, ma gli esempi pratici di attuazione aiutano a colmare il divario tra teoria e pratica.

Semplice applicazione del contropiede d'acciaio

Una base di applicazione del contatore per sistemi RTOS bare-metal o semplici:

  1. Definire variabili globali per il calcolo del conteggio e dell'utilizzo del liquido
  2. Esecuzione di un intervallo di tempo periodico (ad esempio, 1 secondo intervallo)
  3. Nel loop di idle, aumentare un contatore di idle continuamente
  4. Nel timer interrompere, catturare il conteggio corrente del lenzuolo, calcolare l'utilizzo e ripristinare il contatore
  5. Conservare o trasmettere il valore di utilizzo per il monitoraggio

Considerazioni chiave:

  • Utilizzare variabili volatili per prevenire l'ottimizzazione del compilatore
  • Maniglia di troppo pieno in modo appropriato
  • Minimizza la lavorazione nel timer interrotto
  • Considerare le operazioni atomiche per sistemi multi-core

Tempo di esecuzione delle attività

Per i sistemi che richiedono dati di utilizzo per-task:

  1. Configurare un timer ad alta risoluzione (microsecondo o risoluzione migliore)
  2. Creare una struttura dati per memorizzare il tempo di esecuzione per-task
  3. All'ingresso del compito, catturare il timestamp corrente
  4. All'uscita del compito, calcolare il tempo trascorso e accumularsi al totale del compito
  5. Calcolo periodico dell'utilizzo percentuale per ogni compito

Questo approccio fornisce informazioni dettagliate su quali attività consumano la maggior parte delle risorse della CPU, consentendo sforzi mirati di ottimizzazione.

FreeRTOS Statistiche Runtime Esempio

L'implementazione del monitoraggio del carico della CPU in FreeRTOS comporta:

  1. Configurare un timer con una risoluzione più alta del tick del sistema
  2. Abilitare le statistiche di runtime in FreeRTOSConfig.h
  3. Implementare le macro di configurazione del timer richieste
  4. Creazione di un'attività di monitoraggio che chiama periodicamente vTaskGetRunTimeStats()
  5. Parsing e visualizzazione o registrazione delle statistiche

Le statistiche di runtime forniscono sia il tempo di esecuzione assoluto che l'utilizzo percentuale per ogni attività, rendendo facile identificare le operazioni ad alta intensità di CPU.

GPIO Toggle per la misurazione esterna

Implementare il metodo di gioco GPIO:

  1. Configurare un pin GPIO come output
  2. Impostare il pin alto all'inizio del compito inattivo
  3. Impostare il pin basso quando si esce dall'attività di inattività
  4. Collegare un oscilloscopio o multimetro per misurare il ciclo di dovere
  5. Calcola l'utilizzo della CPU come (100 - percentuale del ciclo di dovere)

Questo metodo fornisce una verifica indipendente delle misurazioni software-based e può essere particolarmente utile durante le fasi di integrazione e test del sistema.

Pitfalls comune e come evitare di loro

La misurazione del carico della CPU può essere ingannevole e diversi errori comuni possono portare a risultati inesatti o fuorvianti.

Problemi di ottimizzazione dei clienti

Le ottimizzazioni dei clienti possono interferire con il codice di misura:

  • Ottimizzazione del paese:[] I compilatori possono ottimizzare i contatori di inattività se non dichiarati volatili
  • Codice Reordering:[] Il codice di cattura del timestamp può essere riordinato, incidendo sull'accuratezza
  • Effetti inlineanti:[ Funzione inlining può cambiare tempi di esecuzione
  • Loop Unrolling:[] Può influenzare il comportamento di conteggio del loop inattivo

Le soluzioni includono l'utilizzo di qualificanti volatili, barriere di compilazione e la verifica del codice di assemblaggio generato.

Risoluzione del timer e overflow

La risoluzione del timer inadeguato o la gestione improprio del overflow comporta errori di misura:

  • Utilizzare timer con risoluzione sufficiente per l'intervallo di misura
  • Implementare il corretto rilevamento e gestione del overflow
  • Considerare l'utilizzo di contatori a 64 bit o tecniche di estensione overflow
  • Convalida precisione del timer contro riferimento noto

Effetti di intrusione di misura

Il codice di misura in sé influisce sul comportamento del sistema:

  • Effetti della cache dall'esecuzione del codice di misura
  • Cambiamenti di latenza interrotti dovuti alla strumentazione
  • Consumo di larghezza di banda di memoria per lo stoccaggio delle statistiche
  • Inversione prioritaria nelle attività di misura

Minimizza l'intrusione utilizzando metodi assistiti dall'hardware quando possibile e mantenendo il codice di misura il più leggero possibile.

Assunzioni di Baseline non corrette

Assumendo che i valori di base errati portino a errori sistematici:

  • Non fare in modo che l'attività del sistema operativo di sfondo in "idle" stato
  • Non considerando le transizioni dello stato di gestione del potere
  • Ignorando i compiti di manutenzione periodica
  • Affacciato DMA e attività periferica

Stabilire sempre basi attraverso la misurazione reale piuttosto che ipotesi teoriche.

Copertura del test inadeguata

La misurazione del carico della CPU in condizioni limitate fornisce un'immagine incompleta:

  • Test in varie condizioni di input e modelli di dati
  • Includere scenari di caso peggiore e condizioni di stress
  • Considerare i fattori ambientali (temperatura, tensione)
  • Valutare il comportamento a lungo termine, non solo le istantanee a breve termine

Ottimizzazione del carico della CPU nei sistemi incorporati

Una volta misurato con precisione il carico della CPU, il passo successivo è l'ottimizzazione quando l'utilizzo supera le soglie accettabili.

Strategie di ottimizzazione del software

La soluzione principale è aumentare l'efficienza della soluzione software, che riduce l'impatto energetico del sistema, e aumentare o sprecare risorse hardware dovrebbe essere mantenuto come ultima risorsa.

Gli approcci di ottimizzazione del software includono:

  • Ottimizzazione dell'algoritmo:[ Sostituire algoritmi inefficienti con alternative più efficienti
  • Codice Profiling:[] Identificare e ottimizzare i punti caldi che consumano tempo di CPU sproporzionato
  • Ottimizzazione completa:[] Utilizzare bandiere di ottimizzazione appropriate e ottimizzazione guidata dal profilo
  • Selezione struttura dati:[] Scegliere le strutture dati ottimizzate per i modelli di accesso
  • Ottimizzazione cache:[ Migliorare la localizzazione dei dati e ridurre le mancanze della cache
  • Ottimizzazione Interruttiva: Minimizzare il tempo di esecuzione di routine di servizio di interrompere

Approfondimenti architettonici

La divisione del processo da eseguire in cicli multipli, in modo che il tempo di esecuzione delle attività durante ogni ciclo diminuisca e quindi l'utilizzo della CPU diminuisce.

  • Decomposizione di rischio:[ Disporre grandi compiti in unità più piccole e gestibili
  • Regolazione della priorità:[] Ottimizzare le priorità delle attività per ridurre il commutazione del contesto
  • Inviare alla conversione interrotta:[ Sostituire i loop di inquinamento con gli approcci a comando interrotto
  • DMA Utilizzo:[ Offload del movimento dei dati ai controller DMA
  • Accelerazione di Hardware:[] Utilizzare periferiche hardware dedicate per operazioni di calcolo-intensivo

Soluzioni hardware

Quando l'ottimizzazione del software raggiunge i suoi limiti, le soluzioni hardware possono essere necessarie:

  • Aumentare l'orologio della CPU Frequenza in modo che la CPU potrebbe eseguire le attività più velocemente e quindi avere più capacità di tempo per eseguire altre attività e quindi il carico più basso.
  • Utilizzando un processore Multi Core dove le attività potrebbero essere divise tra core.
  • Aggiunta di coprocessori o acceleratori per funzioni specifiche
  • Aggiornamento a una famiglia di processori più potente
  • Implementazione dell'accelerazione basata su FPGA per algoritmi critici

Considerazioni di gestione del potere

ottimizzazione del carico della CPU spesso interseca con la gestione della potenza:

  • Dynamic Tensione e Scala di frequenza (DVFS):[ Regolare la velocità dell'orologio in base al carico
  • Modalità di blocco:[] Inserisci stati di bassa potenza durante i periodi di inattività
  • Cloccare Gating:[ Disattivare orologi alle periferiche non utilizzate
  • Consolidamento del carico di lavoro:[ Trattamento batch per massimizzare il tempo di sonno

Standard di settore e requisiti di sicurezza

Molte industrie hanno requisiti e standard specifici per il carico della CPU nei sistemi incorporati, in particolare per applicazioni critiche alla sicurezza.

Standard automobilistici

Le applicazioni critiche sono fortemente regolate dagli standard del settore, come l'automotive ISO 26262, che dettano il massimo livello di carico della CPU per soddisfare le punte di elaborazione improvvise.

I requisiti ISO 26262 includono:

  • Analisi e margini del carico della CPU documentati
  • Analisi dei tempi di esecuzione dei casi (WCET)
  • margini di sicurezza per aumenti di carico inaspettati
  • Meccanismi di monitoraggio per la verifica del carico di runtime

Standard aerospaziale

DO-178C e relativi standard per applicazioni aerospaziali richiedono:

  • Analisi e verifica dei tempi e delle tempistiche rigorose
  • Margine dimostrata per scenari peggiori
  • Tracciabilità dei requisiti di carico della CPU
  • Verifica indipendente del comportamento dei tempi

Standard di dispositivo medico

IEC 62304 per il software di dispositivi medici richiede:

  • Analisi del rischio, inclusi i guasti di tempo
  • Verifica delle prestazioni in tempo reale
  • Documentazione dell'utilizzo delle risorse
  • Test in condizioni di stress

Automazione industriale

IEC 61508 per la sicurezza funzionale nei sistemi industriali specifica:

  • Requisiti di sicurezza (SIL)
  • Analisi di tempistica per funzioni di sicurezza
  • Monitoraggio delle risorse e rilevamento dei guasti
  • Considerazioni comprovate per i margini di carico della CPU

Strumenti e risorse per l'analisi del carico della CPU

Una varietà di strumenti commerciali e open source supporta la misurazione e l'analisi del carico della CPU nei sistemi incorporati.

Strumenti commerciali

  • SEGGER SystemView:[] Analisi e visualizzazione in tempo reale di RTOS ([https://www.segger.com/products/sviluppo-tools/systemview/]])
  • Percepio Tracealyzer:[ Comprehensive RTOS tracciamento e analisi delle prestazioni
  • Lauterbach TRACE32:[ Debug e profilazione assistiti dall'hardware
  • ARM Development Studio:[] Strumenti di profilazione e ottimizzazione per sistemi basati su ARM
  • Green Hills MULTI:[] Ambiente di sviluppo integrato con analisi delle prestazioni

Strumenti di Open-Source

  • FreeRTOS Runtime Statistics:
  • Zephyr Tracing:[ Tracing del kernel e monitoraggio delle prestazioni
  • LTTng:[] Linux trace toolkit per sistemi Linux incorporati
  • Perfetto:[] Sistema di profilazione e analisi delle tracce
  • Valgrind/Callgrind:[] Profilo di performance per sistemi incorporati basati su Linux

Strumenti hardware

  • Analizzatori logici:[ Cattura modelli di toggle GPIO per la misurazione esterna
  • Oscilloscopi:[ Cicli di misura e relazioni di tempismo
  • JTAG/SWD Debuggers:[ Accesso alle funzionalità di debug e traccia del chip
  • Analizzatori di potenza:[ Correlate il carico della CPU con il consumo di energia

Risorse e Comunità online

  • Embedded.com:[] Articoli e tutorial sulle prestazioni dei sistemi incorporati ([[]https://www.embedded.com]]]
  • FreeRTOS Forums:[] Supporto comunitario per domande relative a RTOS
  • Sistema Overflow:[ Tag di sistemi incorporati per domande tecniche
  • Reddit r/embedded:[] Le discussioni comunitarie sullo sviluppo integrato
  • Sistemi integrati Settimanale:[] Newsletter che copre argomenti embedded

Tendenze future nel monitoraggio dei carichi della CPU

Come i sistemi incorporati continuano ad evolversi, le tecniche di monitoraggio del carico della CPU e i requisiti stanno anche avanzando.

Integrazione di apprendimento della macchina

Gli algoritmi di apprendimento automatico vengono applicati all'analisi del carico della CPU:

  • Previsione del carico predittivo basata su modelli storici
  • Rilevamento di anomalie per identificare il comportamento insolito
  • Raccomandazioni di ottimizzazione automatizzate
  • Attribuzione delle risorse adattiva basata su modelli appresi

Monitoraggio connesso al cloud

I dispositivi incorporati IoT supportano sempre più il monitoraggio basato su cloud:

  • Monitoraggio e diagnostica delle prestazioni remote
  • Analisi e confronto del carico della CPU su larga scala
  • Aggiornamenti di ottimizzazione dell'aria
  • Manutenzione predittiva basata sulle tendenze di utilizzo

Supporto hardware migliorato

I processori moderni incorporano un monitoraggio delle prestazioni più sofisticato:

  • Più completo contatore di prestazioni
  • Capacità di tracciamento inferiori
  • profilazione assistita dall'hardware con minima intrusione
  • Monitoraggio integrato di potenza e prestazioni

Sforzi di standardizzazione

Gli sforzi del settore verso il monitoraggio standardizzato delle prestazioni:

  • API comuni su piattaforme RTOS
  • Formati di traccia standardizzati per l'interoperabilità degli strumenti
  • Migliori pratiche e linee guida a livello industriale
  • Esecuzioni di riferimento Open-source

Conclusioni

Il calcolo e il monitoraggio del carico della CPU sono essenziali per lo sviluppo di sistemi embedded affidabili ed efficienti. Questo articolo presenta diversi modi per capire quanto la CPU attraversoput un'applicazione integrata stia davvero consumando, e puoi usare queste informazioni per verificare la progettazione del software di sistema rispetto a un carico massimo del processore.

Il successo del monitoraggio del carico della CPU richiede attenzione alla precisione di misura, minimizzando la sovraccarico, la corretta calibrazione e i test completi in condizioni realistiche. Avere un elevato carico della CPU non significa una cosa negativa se il tuo design soddisfa tutte le scadenze, ma significa che in futuro se si desidera aggiungere ulteriori processi al sistema, questo può portare a sovraccarico.

Grazie all'implementazione dei metodi e delle migliori pratiche delineate in questa guida, è possibile garantire che i sistemi incorporati funzionino in modo efficiente, soddisfino i requisiti in tempo reale e mantengano margini di prestazioni adeguati durante la loro durata operativa. L'investimento nel corretto monitoraggio del carico della CPU paga dividendi in affidabilità del sistema, opportunità di ottimizzazione e fiducia che il sistema integrato in tutte le condizioni si eseguirà come previsto.