1 / 51

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

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

gafna
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. TRACE32: lo strumentopiù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

  2. TRACE32: lo strumentopiù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

  3. Better Embedded 2013 2014 TRACE32: lo strumento più completo per il debug di un sistema Linux TRACE 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 webinardi 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

  4. Agenda • Linux «traceassisted»debugging • Checosa è il Trace? • ProgramTrace conlinux (ETM) • System Trace conlinux (STM) • Possousareil Trace sul miotarget? • Q&A

  5. «trace assisted» debugging Un sistema professionale Lauterbach TRACE32 consente il debug e il trace per molte diverse architetture. 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. Trace Debug EmbeddedSystem JTAG JTAG CPU Ethernetor USB TRACE TRACE TRACE32 Powerview PowerTrace II system

  6. Linux «trace assisted» debugging, una soluzione unica • Trace assisted debugging: debug via JTAG + Trace via ETM • E’ possibiletracciaretutte le componentidi unsistema Linux, nellastessasessione di debug • Con il Trace sipuòosservareilcomportamentodel sistema running, in modo non intrusivo • Non è necessarioeseguirealcun monitor o agente o modificareil kernel: ilprogram trace è generatoautomaticamentedalla CPU Linux System sharedlibs sharedlibs process process threads threads Linux kernel modules drivers Ethernetor USB JTAG JTAG uboot CPU TRACE TRACE xloader TRACE32 Powerview PowerTrace II system

  7. Agenda • Linux «traceassisted»debugging • Checosa è il Trace? • ProgramTrace conlinux • System Trace conlinux • Possousareil Trace sul miotarget? • Q&A TEMPO

  8. 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 Real-Time Tracing Scattare fotografie Fare un video

  9. Perchèserveusareiltrace? • I SoC moderni sono sistemi molto complessi ad alto parallelismo • I meccanismi di debug e trace tradizionali implementati nei sistemi operativi moderni sono invasivi • L’ottimizzazione e la qualità del software sono necessari per assicurare il successo di un prodotto • Il tempo speso in sviluppo e debug del software costa.Il trace consente di risparmiare molto tempo

  10. Il trace è unasceltaimportante 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

  11. Trace: metodi a confronto I 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: • Bus Trace • Flow Trace (program) • System Trace (data) • Software Trace (logger) • Snooper Trace (campionato) • Advanced Register Trace (step) Questi metodi consentono program-trace e data-trace in modo non intrusivo

  12. ARM CoreSight Trace 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. Le componenti più interessanti per il real-time trace sono: • ETMEmbedded Trace Macrocell(*)che realizza il Program Flow Trace • STM System Trace Macrocellche realizza il System Trace • (*) Nei Cortex-A9 e superiori ETM • si chiama PTMProgram Trace Macrocell

  13. Trace Ports Il 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».

  14. Trace Recording Ogni messaggio trace viene marcato con timestampe registrato nella memoria del PowerTrace. Il trace può essere immediatamente ricostruito e analizzato dal debuggerPowerView. • Tecnica assolutamente NON intrusiva • Non richiede instrumentazione software • Permette velocità elevatissime • Richiede pochi pin dedicati ARM/Cortex chip JTAG Cable Debug Port JTAG Ethernetor USB Trace Probe ETM CORE ETM Trace Generation TRACE Recording Trace Flow TRACE32 PowerView Trace Analysis ARM/Cortex chip con debug-porte trace-port PowerTrace II Trace Storage (up to 4 Gbyte)

  15. Con PowerViewil Real-Time Trace siusa per: 1) Trace-based Debugging Debug rapidosenzafermare la CPU Trovare bugs cheappaiono solo in real-time 2) Ottimizzazionecon misuretemporali Analizzare le performance del codice Analizzareeventiesterni 3) Qualificazione ISO Dimostrareilrispettodeirequisiti real-time Verificareil code coverage 26262

  16. 1) Trace-based Debugging • 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: Istruzionieseguite Istruzioni non eseguite TEMPO Data read/write Tempo relativo

  17. 2) Ottimizzazione PowerView è ricco di comandi specifici per analizzare e misurare il programma eseguito. Functionstreeanalysis Task/module/functionruntime chart Task/module/functionruntimestatistic

  18. 3) Qualificazione Coverage Export Un «hardware based trace tool» è lo strumento ideale (ranking #1) per ottenere il Code Coverage in modo veloce e immediato. ISO 26262 ISO26262 DO-178 Functioncoverage Statement & conditionscoverage

  19. Agenda • Linux «traceassisted»debugging • Checosa è il Trace? • ProgramTrace conlinux • System Trace conlinux • Possousareil Trace sul miotarget? • Q&A

  20. Programtracecon Linux Nel precedente seminario sul debugginglinux, 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.

  21. Programtracecon Linux Il target di prova è una PandaBoard, basata su TI OMAP4430. E’ un chip dual-core Cortex-A9 @ 1Ghz, ricco di risorse CoreSight e debugport JTAG, trace port PTM e system trace portSTM. Lauterbach Debug & Trace adapters MIPI60, Mictor38, MIPI34 Tool: PowerTrace II system Multicore JTAG debugger Cortex-A/R Trace Probe ETM Autofocus II 2GB Trace Storage Computer Mwindows, Linux o MacOS-X TRACE32 PowerView Debugger Target: PandaBoard TI OMAP4430 dual Cortex-A9 @ 1Ghz Kernel SMP Linux 2.6.x e Linux 3.x

  22. Programtracecon Linux Il target è una PandaBoard, basata su TI OMAP4430. E’ un chip dual-core Cortex-A9 @ 1Ghz, dotato di risorse CoreSight complete e debugport, trace port e system trace port. Ethernet 10/100/Gigabit or USB Tool: PowerTrace II system Multicore JTAG debugger Cortex-A/R Trace Probe ETM Autofocus II 2GB Trace Storage Computer Mwindows, Linux o MacOS-X TRACE32 PowerView Debugger Target: PandaBoard TI OMAP4430 dual Cortex-A9 @ 1Ghz Kernel SMP Linux 2.6.x e Linux 3.x

  23. Debug & Trace delle componenti linux Per il “trace” di un sistema Linux serve la stessaconfigurazioneutilizzata per il “debug”: sicaricanoisimboli del kernel (vmlinux), siattivailsupporto MMU e l’Address Extension, siconfigura la “Linux Awareness” (linux.t32). TRACE32 consentel’accessoil debug e il trace di qualsiasicomponente: • Debug& Trace the kernel • Debug & Trace kernelmodules • Debug& Trace processes/threads • Debug & Trace libraries • Automaticallyloading and unloadingsymbols for kernelmodules,processes and libraries • Display kernel information (file systems, kernel log, devicetree…) Linux Awareness menu

  24. WARNING: STARTING LIVE DEMO… …FASTEN YOUR SEAT BELT !

  25. Tracing linux components: boot entry Terminal emulatorintegrato in TRACE32 Tipicamente un bootloderconfigura 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:

  26. Tracinglinux: _init_begin:  start_kernel() Trace.List 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. T32 DEMO Trace.Chart

  27. Tracinglinux: 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

  28. Tracinglinux: 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

  29. Tracinglinux: … cpu_idle() [3/3]: addressextension 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 è ilPID del main thread • Il kernel e tuttiisuoi threads hanno per convenzione space-id = zero • TRACE32 usal’identificatore space-id per distingueretradiversiprocessiestendendo lo spazio di indirizzamento. • L’AddressExtension vieneabilitata dal comandoSYS.OptionMMUSPACES ON T32 DEMO Space-id = 0x02F4 : user process PID 0x02F4 Space-id = 0x0000 : kernel thread

  30. Tracinglinux: 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…

  31. Tracinglinux: cpu_idle()  secondary_start_kernel() [2/2] Il core numberè codificato negli ETM trace messagesstessi. 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. Core 0 Core 1 Core 0 Core 1 Core 0 Core 1 T32 DEMO Core 0

  32. Tracinglinux: GO tillboot complete… Con un RUN di circa 3 secondi Linux completa il boot fino all’avvio della shell(procsh) Grazie al trace l’intero processo di boot può essere completamente analizzato e misurato. T32 DEMO

  33. Tracinglinux: trace processi utente [1/3] 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»: 3 3 2 1 Non appenailprocessovieneavviatoil debugger ne caricaisimboli e siferma in break al main()

  34. Tracinglinux: trace processi utente [2/3] Trace della sequenza di attivazione di un processo, fino al suo entry pointmain(), in questo esempio in esecuzione con PID 0x286 (646) su core 1.

  35. Tracinglinux: trace processi utente [3/3] “sieve” proc function nesting Trace del funzionamento di un processo running, evidenziato con trace filter e symbolsgroup. trace filter proc “sieve” hide kernel “sieve” proc functions T32 DEMO

  36. Agenda • Linux «traceassisted»debugging • Checosa è il Trace? • Program Trace conlinux • System Trace conlinux • Possousareil Trace sul miotarget? • Q&A

  37. Cosa è il System Trace? System Trace: è l’applicazione stessa che trasmette le informazioni necessarie a far comprendere cosa accade durante il runtime: un trace «di sistema». Tutti gli sviluppatori sanno bene cosa significa inserire nel programma delle printf() per avere un diagnostico runtime. • 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

  38. System Trace by ARM: CoreSight STM L’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)

  39. System Trace: utilizzo base I dati trasmessi dal System Trace vengono registrati e possono essere mostrati in PowerView in diversi modi, interpretati, esportati su fileo pipe. String write Address Log Data Write 8/16/32 bit Core Number Channel Number T32 DEMO

  40. Tracing Linux kernel events 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. 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.

  41. Tracing Linux kernel events via STM [1/2] Grazie alla collaborazione con Michael Trimarchi di Amarula Solutions, possiamo presentare in anteprima un sistema «Linux Tracer» via STM: • Linux System Tracer via STM: • Utilizza l’architettura software Linux KernelTracing • 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

  42. Tracing Linux kernel events via STM [2/2] 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. • 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

  43. Tracing Linux kernel events via STM: demo L’esecuzione di un tracepoint, in questo caso un Process Switch, causa l’immediata trasmissione dell’evento via STM PowerViewmostrasia i dati «raw» che i dati interpretati T32 DEMO

  44. Tracing Linux kernel events via STM: next step Questa 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 sulnuovolinux kernel (3.16?) e sullanuovaimplementazioneCoresight • Esportazione di piùtracepoint events • Rilascionellinux kernel Mainline • 2) PowerView debugger: • Visualizzazionegraficadei kernel events • Sincronizzazioneeventi System Trace con Program Trace

  45. Agenda • Linux «traceassisted»debugging • Checosa è il Trace? • ProgramTrace conlinux • System Trace conlinux • Possousareil Trace sul miotarget? • Q&A CPU

  46. 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 CPU con 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

  47. Alcuni esempi Solo System TraceSTM Trace-port 4 bit Trace-clock max200Mhz PowerDebug Combiprobe Solo Program Trace Trace-portETM 4..32 bit Trace-clock fino a 300Mhz PowerTrace Probe ETM AF-II Program Trace + System Trace Trace-port ETM 4..32 bit Trace-port STM 4 bit Trace-clock a oltre 600Mhz PowerTraceII Probe ETM AF-II Combiprobe

  48. Per approfondire: • Flyer (in italiano) • Debug & Trace for ARM • OverviewdeiProdotti • Linux FlyerAdvanced Debugging andTracingtoolsfor ARM architecturesand Linux kernels • Web • Training Linux (trainingmanual)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

  49. Agenda • Linux debugging: problems & solution • Checosa è il Trace? • ProgramTrace conlinux • System Trace conlinux • Possousareil Trace sul miotarget? • Q&A

  50. Linux? Kernel?Target? CPU? Connector? Debug? Trace? PowerTrace? JTAG? Q&A… CPU SI Risposte... DOMANDE? NO FINE

More Related