TRACE32: lo strumento più completo per il trace di un sistema Linux

51
www.lauterbach.com TRACE32: lo strumento più completo per il trace di un sistema Linux Un sistema linux è costituito da diverse componenti software molto diverse tra loro. Lo scorso anno abbiamo mostrato come un sistema professionale Lauterbach TRACE32 consenta il debug di ogni componente di un sistema linux in modo semplice e immediato. In questa presentazione mostreremo come il program trace e il system trace consentano di abbattere i tempi di debugging di un sistema linux, anche multicore, e di analizzarne dettagliatamente il comportamento run-time e le performance. Maurizio Menegotto Lauterbach Italia

description

TRACE32: lo strumento più completo per il trace di un sistema Linux. - PowerPoint PPT Presentation

Transcript of TRACE32: lo strumento più completo per il trace di un sistema Linux

Page 1: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

www.lauterbach.com

TRACE32: lo strumento più completo per il trace di un sistema Linux

Un sistema linux è costituito da diverse componenti software molto diverse tra loro. Lo scorso anno abbiamo mostrato come un sistema professionale Lauterbach TRACE32 consenta il debug di ogni componente di un sistema linux in modo semplice e immediato.In questa presentazione mostreremo come il program trace e il system trace consentano di abbattere i tempi di debugging di un sistema linux, anche multicore, e di analizzarne dettagliatamente il comportamento run-time e le performance.

Maurizio MenegottoLauterbach Italia

Page 2: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

www.lauterbach.com

TRACE32: lo strumento più completo per il trace di un sistema Linux

Un sistema linux è costituito da diverse componenti software molto diverse tra loro. Lo scorso anno abbiamo mostrato come un sistema professionale Lauterbach TRACE32 consenta il debug di ogni componente di un sistema linux in modo semplice e immediato.In questa presentazione mostreremo come il program trace e il system trace consentano di abbattere i tempi di debugging di un sistema linux, anche multicore, e di analizzarne dettagliatamente il comportamento run-time e le performance.

Maurizio MenegottoLauterbach Italia

Page 3: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

▪ 3 /51 ▪

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

Better Embedded 2013

TRACE32: lo strumento più completo per il debug di un sistema Linux TRACE

2014

L’anno scorso, qui al Better Embedded, ho mostrato come un debugger professionale Lauterbach consenta in modo facile e immediato il debug di ogni componente di un sistema Linux.

Per chi si fosse perso questa presentazione, abbiamo tenuto in seguito un webinar di grande successo. Slides e video del webinar sono disponibili qui:

www.lauterbach.com/tut-i_linux.html

Oggi parliamo di TRACE di un sistema Linux

Page 4: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

▪ 4 / 51 ▪

Agenda

Linux «trace assisted» debugging Che cosa è il Trace? Program Trace con linux (ETM) System Trace con linux (STM) Posso usare il Trace sul mio target? Q&A

Page 5: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

▪ 5 /51 ▪

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

Un sistema professionale Lauterbach TRACE32 consente il debug e il trace per molte diverse architetture.

«trace assisted» debugging

Per «trace assisted» debugging si intende l’integrazione della funzionalità di trace nel debugger in modo che il trace stesso sia immediatamente disponibile, presentato in formato simbolico, utile a velocizzare il debug.

Embedded System

Ethernetor USB

CPU

PowerTrace II system

JTAG

JTA

GTR

AC

E TRACE

Trace

Debug

TRACE32Powerview

Page 6: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

▪ 6 /51 ▪

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

threads

uboot

Linuxkernelmodulesdrivers

shared libs

Linux System

Ethernetor USB

TRACE32 Powerview

JTAG

process

xloaderJT

AG

CPU

Trace assisted debugging: debug via JTAG + Trace via ETM E’ possibile tracciare tutte le componenti di un

sistema Linux, nella stessa sessione di debug Con il Trace si può osservare il comportamento

del sistema running, in modo non intrusivo Non è necessario eseguire alcun monitor o

agente o modificare il kernel: il program trace è generato automaticamente dalla CPU

threads

process

shared libs

TRA

CE TRACE

Linux «trace assisted» debugging, una soluzione unica

PowerTrace II system

Page 7: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

▪ 7 / 51 ▪

Agenda

Linux «trace assisted» debugging Che cosa è il Trace? Program Trace con linux System Trace con linux Posso usare il Trace sul mio target? Q&A

TEMPO

Page 8: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

▪ 8 /51 ▪

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

Cosa è il Trace?

Per “trace” si intende un sistema per la registrazione della sequenza di istruzioni eseguite e dei dati letti/scritti da una CPU, senza doverla fermare.

Debugging

Scattare fotografie

Real-Time Tracing

Fare un video

Page 9: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

▪ 9 /51 ▪

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

Perchè serve usare il trace?

• I SoC moderni sono sistemi molto complessi ad alto parallelismo

• L’ottimizzazione e la qualità del software sono necessari per assicurare il successo di un prodotto

• I meccanismi di debug e trace tradizionali implementati nei sistemi operativi moderni sono invasivi

• Il tempo speso in sviluppo e debug del software costa.Il trace consente di risparmiare molto tempo

Page 10: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

▪ 10 /51 ▪

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

Il trace è una scelta importante

Il trace è: Lo strumento che permette di “vedere”

cosa accade realmente durante l’esecuzione della vostra applicazione

Il trace va considerato come: Lo strumento per abbattere i tempi di

sviluppo e la miglior garanzia di scoprire

e risolvere rapidamente i problemi

Page 11: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

▪ 11 /51 ▪

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

Trace: metodi a confrontoI metodi per ottenere il trace differiscono a seconda se richiedono trace hardware aggiuntivo oppure se sono inclusi nel jtag debugger stesso senza ulteriore hardware.

Lauterbach supporta molti diversi metodi:

1. Bus Trace2. Flow Trace (program)3. System Trace (data)4. Software Trace (logger)5. Snooper Trace (campionato)6. Advanced Register Trace (step)

Questi metodi consentono program-trace e data-tracein modo non intrusivo

Page 12: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

▪ 12 /51 ▪

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

ARM CoreSight Trace

Le componenti più interessantiper il real-time trace sono:

• ETM Embedded Trace Macrocell (*)che realizza il Program Flow Trace

• STM System Trace Macrocellche realizza il System Trace

(*) Nei Cortex-A9 e superiori ETMsi chiama PTM Program Trace Macrocell

Nei chip ARM/Cortex le risorse debug e trace dell’intero system-on-chip sono realizzate dalla cella ARM CoreSight. CoreSight è una collezione di componenti hardware definita da ARM, che possono essere implementati nel design di un chip.

Page 13: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

▪ 13 /51 ▪

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

Trace PortsIl trace viene automaticamente generato dalla cella ETM mentre la cpu è running, l’operazione non è intrusiva per la CPU.

La trasmissione avviene attraverso una trace-port (TPIU) che può essere parallela o seriale ad alta velocità.

Per catturare e decodificare il trace-flow in tempo reale serve un probe hardware sofisticato, con tecnologia «autofocus».

Page 14: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

▪ 14 /51 ▪

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

Trace Recording

PowerTrace II Trace Storage (up to 4 Gbyte)

TRACE32 PowerView Trace Analysis

ARM/Cortex chip con debug-porte trace-port

Ethernetor USB

Ogni messaggio trace viene marcato con timestamp e registrato nella memoria del PowerTrace. Il trace può essere immediatamente ricostruito e analizzato dal debugger PowerView.

JTA

GTR

AC

E

ARM/Cortex chip

• Tecnica assolutamente NON intrusiva • Non richiede instrumentazione software• Permette velocità elevatissime• Richiede pochi pin dedicati

COREETM TraceGeneration

Debug PortTrace Probe ETM

JTAG Cable

Trace FlowRecording

Page 15: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

▪ 15 /51 ▪

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

Con PowerView il Real-Time Trace si usa per:

Analizzare le performance del codiceAnalizzare eventi esterni

2) Ottimizzazione con misure temporali

Dimostrare il rispetto dei requisiti real-timeVerificare il code coverage

3) QualificazioneISO26262

1) Trace-based DebuggingDebug rapido senza fermare la CPUTrovare bugs che appaiono solo in real-time

Page 16: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

▪ 16 /51 ▪

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

1) Trace-based Debugging

Istruzioni eseguite

Istruzioni non eseguite

Data read/write

Tempo relativo

Il trace è sempre attivo, ogni esecuzione in run o step viene registrata ed è visibile per comprendere cosa è accaduto: con il trace si evita di perdere tempo procedendo per tentativi con i breakpoint.

Con il trace ci si può semplicemente fermare DOPO che il problema è accaduto e tornando indietro nel trace (= nel tempo) si può osservare il comportamento del programma nel punto in cui ha sbagliato:

TEMPO

Page 17: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

▪ 17 /51 ▪

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

2) Ottimizzazione

Functions tree analysis

Task/module/function runtime chart

Task/module/function runtime statistic

PowerView è ricco di comandi specifici per analizzare e misurare il programma eseguito.

Page 18: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

▪ 18 /51 ▪

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

3) Qualificazione

Function coverage

ISO26262DO-178

Un «hardware based trace tool» è lo strumento ideale (ranking #1) per ottenere il Code Coverage in modo veloce e immediato.

Statement & conditions coverage

ISO26262

Coverage Export

Page 19: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

▪ 19 / 51 ▪

Agenda

Linux «trace assisted» debugging Che cosa è il Trace? Program Trace con linux System Trace con linux Posso usare il Trace sul mio target? Q&A

Page 20: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

▪ 20 /51 ▪

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

Program trace con LinuxNel precedente seminario sul debugging linux, sono state eseguite le varie fasi di boot di un sistema linux, fermandoci in break per mostrare il debug di ogni componente.

Useremo una tecnica simile per mostrare, grazie al trace, cosa accade «durante» ogni fase del boot, fino al completo avvio del sistema Linux.

Page 21: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

▪ 21 /51 ▪

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

Program trace con LinuxIl target di prova è una PandaBoard, basata su TI OMAP4430. E’ un chip dual-core Cortex-A9 @ 1Ghz, ricco di risorse CoreSight e debug port JTAG, trace port PTM e system trace port STM.

Target: PandaBoardTI OMAP4430 dual Cortex-A9 @ 1GhzKernel SMP Linux 2.6.x e Linux 3.x

Lauterbach Debug & Trace adaptersMIPI60, Mictor38, MIPI34

Tool: PowerTrace II systemMulticore JTAG debugger Cortex-A/RTrace Probe ETM Autofocus II2GB Trace Storage

ComputerMwindows, Linux o MacOS-XTRACE32 PowerView Debugger

Page 22: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

▪ 22 /51 ▪

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

Program trace con LinuxIl target è una PandaBoard, basata su TI OMAP4430. E’ un chip dual-core Cortex-A9 @ 1Ghz, dotato di risorse CoreSight complete e debug port, trace port e system trace port.

Target: PandaBoardTI OMAP4430 dual Cortex-A9 @ 1GhzKernel SMP Linux 2.6.x e Linux 3.x

Tool: PowerTrace II systemMulticore JTAG debugger Cortex-A/RTrace Probe ETM Autofocus II2GB Trace Storage

ComputerMwindows, Linux o MacOS-XTRACE32 PowerView Debugger

Ethernet 10/100/Gigabitor USB

Page 23: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

▪ 23 /51 ▪

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

Debug & Trace delle componenti linuxPer il “trace” di un sistema Linux serve la stessa configurazione utilizzata per il “debug”: si caricano i simboli del kernel (vmlinux), si attiva il supporto MMU e l’Address Extension, si configura la “Linux Awareness” (linux.t32).

TRACE32 consente l’accesso il debug e il trace di qualsiasi componente:

Debug & Trace the kernel

Debug & Trace kernel modules

Debug & Trace processes/threads

Debug & Trace libraries

Automatically loading and unloadingsymbols for kernel modules,processes and libraries

Display kernel information (file systems, kernel log, device tree…)Linux Awareness

menu

Page 24: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

▪ 24 /51 ▪

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

WARNING: STARTING LIVE DEMO…

…FASTEN YOUR SEAT BELT !

Page 25: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

▪ 25 /51 ▪

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

Tracing linux components: boot entry Terminal emulatorintegrato in TRACE32

Tipicamente un bootloder configura l’hardware per l’esecuzione del sistema operativo.L’immagine del kernel Linux (uImage) viene caricata in RAM dal bootloader (uboot) oppure anche dal debugger stesso.La sessione di debug e trace parte da qui:0x80008000 ENTRY __init_begin:

Page 26: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

▪ 26 /51 ▪

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

Tracing linux: _init_begin: start_kernel()

Il kernel parte a indirizzi fisici a 0x80008000, tra le prime inizializzazioni configura l’MMU alla label __turn_mmu_on attivando così la traslazione in indirizzi logici a 0xC0000000.Da __mmap_switched in poi il sistema funziona a indirizzi logici.

La sequenza iniziale fino a start_kernel() è registrata nel trace buffer e può essere analizzata.

Trace.List

Trace.Chart T32 DEMO

Page 27: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

▪ 27 /51 ▪

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

Tracing linux: start_kernel() cpu_idle() [1/3]

Da start_kernel() inizia la lunga sequenza delle inizializzazioni del sistema che dopo aver attivato il primo processo (swapper) e i suoi 4 threads terminerà con cpu_idle()

Il sistema è ora multitasking, come distinguere il trace prodotto dal kernel rispetto al trace prodotto dai vari processi o threads?

E’ necessario un metodo per individuare nel trace lo spaceid e/o il pid di ogni nuovo processo o thread

Page 28: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

▪ 28 /51 ▪

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

Tracing linux: start_kernel() cpu_idle() [2/3]: ContextID

La trasmissione via ETM di un nuovo ContextID è causata dalla operazione di scrittura, nel registro p15, di un nuovo spaceid: operazione che il kernel esegue ad ogni switch verso un nuovo processo o thread.

ETM ha il registro «ContextID» dedicato a questo. Configurandolo ETM trasmette anche messaggi «owner»: ContextID

Page 29: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

▪ 29 /51 ▪

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

Space-id = 0x0000 : kernel thread Space-id = 0x02F4 : user process PID 0x02F4

I messaggi «owner» consentono a PowerView di identificare lo switch verso ogni nuovo processo e thread, ricavandone space-id e PID In Linux, lo space-id di un processo è il PID del main thread

Il kernel e tutti i suoi threads hanno per convenzione space-id = zero

TRACE32 usa l’identificatore space-id per distinguere tra diversi processi estendendo lo spazio di indirizzamento.

L’Address Extension viene abilitata dal comando SYS.Option MMUSPACES ON

T32 DEMO

Tracing linux: … cpu_idle() [3/3]: address extension

Page 30: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

▪ 30 /51 ▪

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

Tracing linux : cpu_idle() secondary_start_kernel() [1/2]

Fino a ora il kernel ha eseguito con un solo core (core0), la prossima operazione rilevante per il trace è l’attivazione del secondo core (core1) che esegue a partire da secondary_switched: secondary_start_kernel().

E’ necessario un metodo per distinguere il trace prodotto dai diversi cores che eseguono in parallelo, e un modo per visualizzarlo in PowerView…

Page 31: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

▪ 31 /51 ▪

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

Tracing linux : cpu_idle() secondary_start_kernel() [2/2]Il core number è codificato negli ETM trace messages stessi.

Core 0

Core 1

Con un sistema multicore SMP, PowerView mostra automaticamente il core number per ogni linea del trace.list o trace.chart.

Ad ogni core viene anche assegnato un colore di sfondo.

T32 DEMO

Core 0

Core 0

Core 1

Core 1Core 0

Page 32: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

▪ 32 /51 ▪

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

Tracing linux : GO till boot complete…Con un RUN di circa 3 secondi Linux completa il boot fino all’avvio della shell (proc sh)

Grazie al trace l’intero processo di boot può essere completamente analizzato e misurato.

T32 DEMO

Page 33: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

▪ 33 /51 ▪

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

Tracing linux : trace processi utente [1/3]

1

2

Non appena il processo viene avviato il debugger ne carica i simboli e si ferma in break al main()

33

Come per il debug del kernel, anche per il debug di un processo è necessario caricarne i simboli. Questo si può fare in modo automatico con uno script, oppure interattivo con il menu «Process Debugging»:

Page 34: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

▪ 34 /51 ▪

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

Tracing linux : trace processi utente [2/3]

Trace della sequenza di attivazione di un processo, fino al suo entry point main(), in questo esempio in esecuzione con PID 0x286 (646) su core 1.

Page 35: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

▪ 35 /51 ▪

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

Tracing linux : trace processi utente [3/3]Trace del funzionamento di un processo running, evidenziato con trace filter e symbols group.

hide kernel

“sieve” procfunctions

trace filter proc “sieve”

T32 DEMO

“sieve” procfunction nesting

Page 36: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

▪ 36 / 51 ▪

Agenda

Linux «trace assisted» debugging Che cosa è il Trace? Program Trace con linux System Trace con linux Posso usare il Trace sul mio target? Q&A

Page 37: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

▪ 37 /51 ▪

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

Cosa è il System Trace?

Tutti gli sviluppatori sanno bene cosa significa inserire nel programma delle printf() per avere un diagnostico runtime.

System Trace: è l’applicazione stessa che trasmette le informazioni necessarie a far comprendere cosa accade durante il runtime: un trace «di sistema».

I principali problemi di questoapproccio sono:

• Necessità di usare risorse preziose (porta seriale o ethernet o logfile)• Scarsa velocità di trasmissione e alta latenza (la stampa è differita)• Notevole intrusione run-time• Nessun parallelismo• Nessun time stamp

Page 38: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

▪ 38 /51 ▪

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

System Trace by ARM: CoreSight STML’idea del «System Trace» è valida, il problema principale è il canale di trasmissione. Per questo motivo ARM ha definito un modulo dedicato in CoreSight: STM «System Trace Macrocell».

• STM è un componente CoreSight che implementa un canale di trasmissione diretto a bassa latenza e elevata velocità, dedicato all’implementazione di tecniche di debug «printf style»

• E’ una soluzione scalabile che consente a sistemi multi-core e multi-tasking di accedere ad STM senza preoccuparsi degli altri core o processi: STM supporta 65536 canali indipendenti (65536 8/16/32 bit hw data trace write registers!)

• I dati STM vengono immediatamente trasmessi all’esterno attraverso una trace port dedicata o attraverso la stessa off-chip trace port usata per il program trace (simultaneamente)

Page 39: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

▪ 39 /51 ▪

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

I dati trasmessi dal System Trace vengono registrati e possono essere mostrati in PowerView in diversi modi, interpretati, esportati su file o pipe.

System Trace: utilizzo base

Stringwrite

Address Log

Data Write8/16/32 bit

Core Number Channel Number T32 DEMO

Page 40: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

▪ 40 /51 ▪

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

Il kernel Linux integra una architettura software per il trace di eventi di sistema. Le informazioni vengono raccolte da «tracepoint», che sono punti di instrumentazione predefiniti nel kernel, e salvate su file o trasmesse all’esterno con i metodi tradizionali.

Tracing Linux kernel events

Come per la «printf», l’idea è valida, il problema è il canale di trasmissione (file, rete): è troppo intrusivo, altera il funzionamento del sistema stesso, non è disponibile in molti dispositivi embedded.

Page 41: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

▪ 41 /51 ▪

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

Grazie alla collaborazione con Michael Trimarchi di Amarula Solutions, possiamo presentare in anteprima un sistema «Linux Tracer» via STM:

Tracing Linux kernel events via STM [1/2]

Linux System Tracer via STM:

• Utilizza l’architettura software Linux Kernel Tracing• Aggiunge nuovi tracepoints• Trasmette i dati immediatamente via STM• Utilizza messaggi di dimensione massima 8x 32 bit words (per evento)• Usa un canale STM per ogni core per aumentare il parallelismo• E’ portabile su diversi SoC con modifiche limitate al kernel Linux

Page 42: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

▪ 42 /51 ▪

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

Tracing Linux kernel events via STM [2/2]

L’attuale implementazione effettua il trace STM di questi kernel events:

Process/Thread Creation Process/Thread Switch Process/Thread Deletion Process Rename Thread State Change Interrupt Exception Entry/Exit ISR Entry/Exit ASID Assign

I tracepoints nel sorgente del kernel forniscono un hook per chiamare una funzione (probe), che può essere fornita runtime.

Un tracepoint in stato «OFF» non ha effetto.

Un tracepoint in stato «ON» chiama la funzione fornita ogni volta che viene eseguito.

Page 43: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

▪ 43 /51 ▪

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

Tracing Linux kernel events via STM: demoL’esecuzione di un tracepoint, in questo caso un Process Switch, causa l’immediata trasmissione dell’evento via STM

T32 DEMO

PowerView mostrasia i dati «raw» che i dati interpretati

Page 44: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

▪ 44 /51 ▪

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

Tracing Linux kernel events via STM: next stepQuesta implementazione del sistema Linux STM Trace è realizzata su un sistema di riferimento dual-core Cortex-A9 OMAP4xxx, con kernel Linux 3.12

E’ una piattaforma largamente utilizzata, compatibile con OMAP5, compatibile STM, supportata nel linux kernel mainline

Lo sviluppo di questa soluzione è in corso e procede su due fronti:

1) Kernel source:• Aggiornamento sul nuovo linux kernel (3.16?) e sulla nuova

implementazione Coresight• Esportazione di più tracepoint events• Rilascio nel linux kernel Mainline

2) PowerView debugger:• Visualizzazione grafica dei kernel events• Sincronizzazione eventi System Trace con Program Trace

Page 45: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

▪ 45 / 51 ▪

Agenda

Linux «trace assisted» debugging Che cosa è il Trace? Program Trace con linux System Trace con linux Posso usare il Trace sul mio target? Q&A

CPU

Page 46: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

▪ 46 /51 ▪

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

Cosa è necessario prevedere per avere il trace sul mio target?

Scegliere una CPU con trace• Oggi ce ne sono moltissime• Il trace può essere off-chip o on-chip

CPUcon

TRACE

Prevedere un connettore per il trace• Se on-onchip è sufficiente la debug-port (es. JTAG)• Se off-chip è necessario aggiungere la trace-port (es. ETM)• ETM e STM possono essere su connettori separati (MIPI)

Scegliere un trace tool adeguato in funzione di:• Tipo e dimensione della trace-port• Velocità massima del trace-clock• Tipo e durata del trace desiderato

Page 47: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

▪ 47 /51 ▪

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

Alcuni esempi

Solo System TraceSTM Trace-port 4 bitTrace-clock max 200Mhz

PowerDebugCombiprobe

Solo Program TraceTrace-port ETM 4..32 bit Trace-clock fino a 300Mhz

PowerTraceProbe ETM AF-II

Program Trace + System TraceTrace-port ETM 4..32 bitTrace-port STM 4 bitTrace-clock a oltre 600Mhz

PowerTrace IIProbe ETM AF-IICombiprobe

Page 48: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

▪ 48 /51 ▪

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

Per approfondire:

Web Training Linux (training manual)

www.lauterbach.com/pdf/training_rtos_linux.pdf

RTOS Debugger for Linux (manual)www.lauterbach.com/doc/rtoslinux.pdf

TRACE32 Startup Script (repository)www.lauterbach.com/scripts.html

Flyer (in italiano)

Debug & Trace for ARM

Overview dei Prodotti

Linux FlyerAdvanced Debugging and Tracing toolsfor ARM architectures and Linux kernels

Page 49: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

▪ 49 / 51 ▪

Agenda

Linux debugging: problems & solution Che cosa è il Trace? Program Trace con linux System Trace con linux Posso usare il Trace sul mio target? Q&A

Page 50: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

▪ 50 /51 ▪

TRACE32: lo strumento più completo per il trace di un sistema Linux ▪ Better Embedded 2014 ▪ www.lauterbach.com

NO

SI Risposte...DOMANDE?

Q&A…Linux? Kernel?Target? CPU?

Connector?

FINE

Debug? Trace?PowerTrace?

JTAG?

CPU

Page 51: TRACE32: lo  strumento più completo  per  il  trace di un  sistema  Linux

www.lauterbach.com

Maurizio Menegotto, [email protected]

Per informazioni:

tel: 02-45490282web: www.lauterbach.itemail: [email protected]

Grazie per aver partecipato al seminarioTRACE32: lo strumento più completo

per il trace di un sistema Linux

Linux Events Tracer via STM by

Michael Trimarchi, Amarula [email protected]