UNIVERSITÀ POLITECNICA DELLE MARCHE FACOLTÀ DI INGEGNERIA Corso di Laurea Specialistica in Ingegneria Elettronica Porting su architettura ARM Marvell 88F6281 ed analisi comparativa delle patch real-time RTAI e Xenomai per il kernel Linux Tesi di laurea di Francesco LUCCONI Relatore Prof. Aldo Franco DRAGONI Correlatori Prof. Massimo CONTI Ing. Massimiliano PIRANI Anno Accademico 2009/2010
Esigenza di controllo di sistemi con stringenti vincoli temporali Utilizzo di GNU/Linux Semplice portabilità Elevato numero di piattaforme hardware supportate Elevato numero di device drivers Soluzione applicabile e replicabile rapidamente su diverse piattaforme Collaborazione con Spes s.c.p.a. per SO real-time su piattaforma embedded per controllo ambientale
Indagine sulla portabilità e sulle performance delle patch real-time al kernel Linux delle patch considerate della timeliness delle patch considerate
Definizione di sistema a tempo reale Real-time = Predicibilità temporale Real-time Rapidità di esecuzione Correttezza dei risultati Valore del risultato Rispetto dei vincoli temporali
Linux non è un sistema operativo real-time Aspetti problematici: Task senza vincoli temporali Latenze di interrupt impredicibili Esecuzione delle ISR incontrollabili Problemi di scheduling legati ai context switch
Linux non è un sistema operativo real-time Linux per il real-time? Riferimento per piattaforme embedded Disponibilità di drivers per periferiche e dispositivi Modularità, stabilità, robustezza
Sono presenti due approcci: Dual kernel (RTAI, Xenomai) Mono kernel (RT PREEMPT)
due kernel - un hardware
Descrizione hardware piattaforma Marvell : CPU Feroceon @ 1.2 GHz, con set di istruzioni ARMv5te Porta USB ed Ethernet 2 canali TDM, interfaccie SDIO, NAND flash, SPI, TWSI e UART
Il microcontrollore presenta due timer general purpose ed un watchdog: Timer a 32 bit Decremento ad ogni fronte di salita del clock Modalità di lavoro auto-mode/one-shot Codice sorgente kernel Linux: TIMER 0 free-running TIMER 1 clock-event-device
Porting di Supporto per assente. Introduzione del supporto creando una patch. Kernel Linux 2.6.33.7 Xenomai 2.5.5.2
Porting di Patch specifiche per board Marvell e per pipeline Adeos Riconfigurazione software per adattamento ad Adeos Cross-compilazione del Kernel Linux Cross-compilazione modulo utente Xenomai
Porting di Porting per board funzioni implementate per gestione timing su Adeos ipipe: Acquisizione e acknowledge interrupt dei timer Impostazione ad elevata risoluzione Acquisizione e settaggio dei valori dei timer
Porting di RTAI su Supporto per assente anche per RTAI Linux 2.6.33.7 RTAI 3.8.1 Ulteriori problematiche: Architettura RTAI architettura Xenomai Scarso supporto per ARM Difficile adattamento al kernel 2.6.33.7 Procedura analoga a Xenomai
Porting di RTAI su Creazione della patch RTAI rispetto al kernel 2.6.33.7: Impostazioni dispatcher interrupt Funzioni di attivazione/disattivazione interrupt annidati Scheduling task-set real-time Adattamento del modulo utente RTAI per board : Customizzazione del modulo su hardware board Studio dei registri di sistema (, CPU) Revisione di funzioni ottimizzate in assembly
patch real-time API Supporto HW Xenomai RTAI RT PREEMPT Nativa RTDM POSIX RTDM POSIX 1003.1b VxWorks psos+ VRTX µitron x86 ARM PPC Blackfin NIOS II Sviluppo (ARM) 2.6.33.7 Interrupt Dispatcher IRQ Modello task Periodico, aperiodico x86 ARM PPC 2.6.20 Dispatcher IRQ, gestione diretta Periodico, aperiodico all 2.6.33.7 ISR Aperiodico
eseguiti per verifica prestazioni real-time async handler gtod latency pthread kill latency sched jitter sched latency
async handler test1 test2 test3 min [ns] 11 11 10 max [ns] 78 76 75 avg [ns] 16,8155 16,7881 16,7883 σ [ns] 1,1847 1,2217 1,2303 Tabella: Risultati del test async handler per RT PREEMPT test1 test2 test3 min [ns] 9 9 9 max [ns] 65 64 62 avg [ns] 9,1724 9,1354 9,3396 σ [ns] 0,3833 0,3454 0,4757 Tabella: Risultati del test async handler per Xenomai
gtod latency test1 test2 test3 min [ns] 470 440 474 max [ns] 15805 16076 19560 avg [ns] 506,8832 508,0424 507,2231 σ [ns] 73,7063 77,0647 75,1585 Tabella: Risultati del test gtod latency per RT PREEMPT test1 test2 test3 min [ns] 850 865 865 max [ns] 15790 15460 18960 avg [ns] 854,3176 897,5952 897,8467 σ [ns] 119,1611 125,6247 125,2727 Tabella: Risultati del test gtod latency per Xenomai
pthread kill latency test1 test2 test3 min [ns] 16 16 16 max [ns] 31 31 30 avg [ns] 18,2357 18,1562 18,1886 σ [ns] 1,028 1,0215 0,9926 failures 39 32 34 Tabella: Risultati del test pthread kill latency per RT PREEMPT test1 test2 test3 min [ns] 14 14 14 max [ns] 37 40 36 avg [ns] 16,0993 16,0846 15,99 σ [ns] 1,174 1,1528 1,1114 failures 21 41 48 Tabella: Risultati del test pthread kill latency per Xenomai
sched jitter test1 test2 test3 max [ms] 100,027321 100,023338 97,455437 Tabella: Risultati del test sched jitter per RT PREEMPT test1 test2 test3 max [ms] 102,348434 102,359306 102,352394 Tabella: Risultati del test sched jitter per Xenomai
sched latency test1 test2 test3 start [ns] 25 17 15 min [ns] 11 11 11 max [ns] 31 29 31 avg [ns] 16 15 15 σ 1,5363 1,2544 1,5631 Tabella: Risultati del test sched latency per RT PREEMPT test1 test2 test3 start [ns] 5 5 5 min [ns] 0 0 0 max [ns] 13 14 15 avg [ns] 5 5 5 σ 1,9292 1,5402 1,6167 Tabella: Risultati del test sched latency per Xenomai
Conclusioni e sviluppi futuri Necessità di modifiche a Linux per aumentare predicibilità RTAI non adatto a contesti embedded Xenomai: performance ed affidabilità Scelta: Xenomai Sviluppi futuri: Estensione testsuite software per RTOS Sviluppo testsuite hardware per RTOS
Grazie per l attenzione