
In questo articolo verranno descritti i concetti base della tecnologia long-term trace, le funzionalità e l'opportunità per i progettisti di avere a disposizione uno strumento di debug per ARM con trace praticamenete illimitato
ARM ETMv3
Tracing significa registrare informazioni dettagliate su un programma durante la sua esecuzione sul core. Questa informazione è di solito generata da una logica di trace on-chip. Per i core ARM questa logica è conosciuta come Embedded Trace Macrocell o ETM. L'ultima versione di questo elemento logico, l'ETMv3, si trova nella maggior parte dei core ARM11 e Cortex. Dal momento che la funzionalità del trace logico on-chip è alla base della funzionalità del trace, cominciamo con una breve introduzione su di essa.
L'ETMv3 genera un log trace orientato al pacchetto. Le seguenti informazioni possono essere generate a livello di programma runtime e raccolte nei pacchetti di trace:
- Pacchetti di Program flow: contiene informazioni sulle istruzioni del programma eseguito dal core - in particolare gli indirizzi di destinazione dei jump così come il numero di istruzioni eseguite tra due jump.
- Pacchetti di Data flow: contiene gli indirizzi di memoria letti/scritti dal programma così come i valori dei relativi dati.
- Pacchetti di Context-ID: contiene un processo/task ID nell'evento che il sistema operativo ha in esecuzione.
I pacchetti di trace sono disponibili in uscita dal logic trace on-chip tramite la porta trace. La porta trace per l'ETMv3 è costituita da 8 o 16 pin per i pacchetti di trace più due pin per i segnali di controllo. Per ridurre al minimo la larghezza di banda per l'uscita dei pacchetti, l'ETMv3 comprime i pacchetti di trace. Per esempio, tutti gli indirizzi vengono accorciati da uno speciale algoritmo. Tuttavia, se il volume di dati è superiore alla larghezza di banda massima della porta trace, il buffer FIFO andrà in overflow e qualche pacchetto di trace può essere perso. Comprimere soltanto le informazioni di analisi quindi non è sufficiente a prevenire l'overflow del FIFO.
Parliamo ora della programmabilità dell'ETMv3. Per ridurre il numero di pacchetti di trace, si possono semplicemente definire le informazioni di trace che si desiderano generare e quindi presentarle in uscita. Per esempio, nessuna informazione sul flusso di dati è necessaria per le funzioni di profiling di TRACE32. Questo è molto utile perche sono proprio questi pacchetti ad intasare la porta di trace.
Il tracing classico è attualmente composto di due fasi che si svolgono consecutivamente:
1. La registrazione
Considerando che gli ARM di ultima generazione arrivano fino a frequenze di 1 GHz, la vera sfida è riuscire a registrare tutti i pacchetti di trace!
Gli strumenti di trace parallelo di Lauterbach per l'ETMv3, supportano la registrazione dei pacchetti ad una frequenza fino a 275MHz DDR e possono quindi gestire la velocità di trasmissione dei seguenti dati:
-
8.8 GBit/s con 16 pin per i pacchetti di trace
4.4 GBit/s con 8 pins per i pacchetti di trace
Gli strumenti di trace seriale di Lauterbach per l'ETMv3, supportano la registrazione dei pacchetti con un data-rates fino a 20GHz.
2. L'analisi
Per analizzare la sezione di programma registrata, è necessario trasferire i pacchetti di trace dalla memoria trace all'host, decomprimere e poi valutarli. Dal momento che i pacchetti di trace per il flusso del programma non contengono il codice del programma, questo deve essere aggiunto prima dell'analisi. Sono utilizzati quindi i seguenti dati:
-
Il codice del programma letto dal software TRACE32 dalla memoria del sistema "target" tramite l'interfaccia JTAG.
-
Le informazioni sul debug ed i simboli caricati dall'utente per il software TRACE32.
Se grandi volumi di dati devono essere rapidamente registrati, trasferiti e analizzati in long-term tracing, le seguenti condizioni devono essere soddisfatte:
1. Fast Host
Al fine di poter analizzare i pacchetti di trace sull'host durante il runtime del programma, è necessario avere un computer veloce DualCore. In questo caso, un core riceve i pacchetti di trace, mentre il secondo core valuta i pacchetti.
2. Fast Trace Tool
Lo strumento di trace deve campionare i pacchetti di trace senza perdite verso una porta di trace veloce. Per il long-term tracing, è necessario un trasferimento ad alta velocità dei pacchetti di trace verso l'host. A tal fine, lo strumento TRACE32 fornisce un'interfaccia Gbit Ethernet. Se lo strumento di trace è collegato peer-to-peer all'host, possono essere raggiunti più di 500 MBit/s.
Compact Data Format
Dal momento che la velocità di trasmissione massima per l'host è limitata, è importante mantenere il volume di dati il più compatto possibile. Il volume dei dati può essere influenzato in due modi:
1. Programmazione ottimale dell'ETMv3
Si può direttamente influenzare la velocità di trasmissione dati alla porta trace programmando l'ETMv3 in modo che i pacchetti di trace vengano generati solo per l'analisi delle informazioni rilevanti. I pacchetti del flusso dati che rappresentano un carico elevato per la porta trace di solito non sono necessari per il profiling e il code coverage.
2. Compact buffering
Il firmware dello strumento TRACE32 è stato migliorato in modo che la densità ottimale dei pacchetti nella memoria di trace fornita da TRACE32 si ottiene con un uscita di soli 8 pin.
Con long-term tracing, Lauterbach ha fatto un passo importante verso una tecnologia di trace che permette un'analisi quasi illimitata del programma in esecuzione.
