EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ......

75
EDFOMAI Daniele Bellavista, Luca Mella, Luca Ricci University of Bologna, Scuola di Ingegneria ed Architettura Laurea Magistrale in Ingegneria Informatica Corso di Sistemi e Tecnologie per l’Automazione LM Anno Accademico: 2012/2013 {daniele.bellavista,luca.mella,luca.ricci14}@studio.unibo.it 7/12/2012 (University of Bologna) 7/12/2012 1 / 74

Transcript of EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ......

Page 1: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

EDFOMAI

Daniele Bellavista, Luca Mella, Luca Ricci

University of Bologna, Scuola di Ingegneria ed ArchitetturaLaurea Magistrale in Ingegneria Informatica

Corso di Sistemi e Tecnologie per l’Automazione LMAnno Accademico: 2012/2013

{daniele.bellavista,luca.mella,luca.ricci14}@studio.unibo.it

7/12/2012

(University of Bologna) 7/12/2012 1 / 74

Page 2: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Outline I

1 ArchitetturaI-PipeRT-NucleusSkinRTDM SkinReal-Time Tasks

2 Esempi su Xenomai

3 EDFOMAIPercorso di lavoroDescrizioneInterfacciaUnder the Hood

DeviceHookEDF ServiceDeadline MissLogs

(University of Bologna) 7/12/2012 2 / 74

Page 3: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Outline II

4 Esempi di implementazione su EDFOMAI

5 Mapping SFC in Xenomai

6 References

(University of Bologna) 7/12/2012 3 / 74

Page 4: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Architettura di Xenomai

(University of Bologna) 7/12/2012 4 / 74

Page 5: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Architettura: I-Pipe I

La pipeline di interrupt e una astrazione software per la gestione degliinterrupt trap implementata da Adeos (Adaptive DomainEnvironment for Operating Systems).

Adeos gestisce una pipeline di domini ai quali e possibile associaredegli interrupt handler, gestendo in questo modo l’ordine di temporaledi ricezione degli interrupt.

Adeos permette di stallare un interrupt in un certo dominioimpedendo l’attraversamento della pipeline.

(University of Bologna) 7/12/2012 5 / 74

Page 6: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Architettura: I-Pipe II

Xenomai utilizza una pipeline a 3 domini: Il primo dominio (primarydomain) e per RTOS Core, il terzo (secondary domain) per il kernelLinux.

Grazie a questa separazione, Xenomai riceve gli interrupt prima delkernel in modo da avere una priorita maggiore di esecuzione.

Il secondo dominio, chiamato Interrupt Shield serve per stallare glieventi diretti al kernel, evitando che Task RT subiscano preemptionnon volute.

(University of Bologna) 7/12/2012 6 / 74

Page 7: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Architettura: I-Pipe III

(University of Bologna) 7/12/2012 7 / 74

Page 8: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Architettura: RTOS Core (RT-Nucleus) I

RT-Nucleus e il nano-kernel di Xenomai che fornisce:

Supporto multithreading: priorita e priority inerithance, possibilita dilimitare il wait su una risorsa, round-robin schedulingper task con la medesima priorita.

Supporto sincronizzazione: fornisce un semplice oggetto xnsynch, chesupporta priortiy inversion, attese time-bounded eforcible deletion.

Gestione del timing e del clock: il Nucleus si interfaccia con il timerhardware e permette la gestione oneshot (hardwareriprogrammato ad ogni tick) o periodic (utile se sidispone di un Programmable Interrupt Timer).

Supporto per l’allocazione della memoria: gestione basilare di unoheap real-time.

(University of Bologna) 7/12/2012 8 / 74

Page 9: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Architettura: Native Skin I

Le Skin sono moduli linux che forniscono interfacce di piu alto livelloscritte in vari standard (nativo, POSIX, VxWorks, RTAI, . . . )

Le API definiscono 6 categorie di syscall utilizzabii in kernel space,user space o in entrambi:

Gestione Task: API che permettono la gestione dei task e della loroschedulazione.

Servizi Timing: API per accedere ai servizi di timing di basso livello.Inoltre forniscono gli Alarm, ovvero watchdog per usogenerale.

Servizi Sincronizzazione: semafori, mutex, condition variable e eventflag group.

Comunicazione: comunicazione inter-task sincrona a messaggi, codedi messaggi, memoria heap condivisa e messagge pipeper lo scambio di dati con processi Linux.

(University of Bologna) 7/12/2012 9 / 74

Page 10: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Architettura: Native Skin II

Gestione dispositivi I/O: le API forniscono semplici meccanismi pergestire interrupt e I/O. Una gestione piu avanzatarichiete l’utilizzo dell’interfaccia RTDM (Real-TimeDriver Model).

Registri: i registri sono componenti che permettono di indicizzarestrutture dati per poter essere riferite da qualunquespazio di esecuzione.

(University of Bologna) 7/12/2012 10 / 74

Page 11: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Architettura: Skin RTDM I

Real-Time Driver Model e un livello di astrazione che permette di unificarele interfacce per lo sviluppo di driver. In Xenomai e implementata comeuna skin.

(University of Bologna) 7/12/2012 11 / 74

Page 12: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Architettura: Skin RTDM II

Uniforma la creazione di device definendo dei device profile. Ognunodi essi ha come proprieta:

Caratteristica: device named (open()/close()) o protocol(socket()/close()).

Operazioni: insieme delle operazioni supportate (eg: read(), write(),ioctl(), send msg(),. . . ), specificando il contesto diinvocazione (rt o non rt) e il significato del valore diritorno.

Tipi di dato e costanti: definizione di tutte le strutture e datinecessari per il device (eg: le sock addr per le socket).

Permette di registare device con un unica interfaccia e assegnarli uncontesto: real-time o non real-time.

(University of Bologna) 7/12/2012 12 / 74

Page 13: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Xenomai Real Time Task I

I task realtime non sono associati ai processi Linux, ma sono gestitiindipendentemente e possono essere in esecuzione su due differentiexecution mode:

Primary mode (dominio Xenomai)

I task risiedono in user-space e sono schedulati da Xenomai, dunque si hauna protezione della memoria e una latency estremamente bassa, poiche loscheduler di Xenomai non e legato alle attivita del kernel Linux.

(University of Bologna) 7/12/2012 13 / 74

Page 14: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Xenomai Real Time Task II

Secondary mode (dominio Linux)

I task hanno accesso a tutte le syscall di Linux ma al prezzo di risentire delnon-determinismo introdotto dallo scheduler del kernel.

Il problema si risolve abilitando l’interrupt shield, bloccando in questomodo la preemption del task fintanto che e in stato di running:l’intero kernel linux eredita la sua priorita.

Questa soluzione soffre di priority inversion: tutti i thread in primaryche aspettano un interrupt rimangono bloccati.

Si risolve creando interrupt con RTDM che sono diretti per il dominioAdeos Xenomai.

(University of Bologna) 7/12/2012 14 / 74

Page 15: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Xenomai Real Time Task III

(University of Bologna) 7/12/2012 15 / 74

Page 16: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Esempi di implementazione su Xenomai I

Esempio di due task one-shot che utilizzano due semafori.

1 s t a t i c RT TASK t1 , t2 ; RT SEM semGlobal1 , semGloba l2 ;2 i n t g l o b a l = 0 ;3 i n t main ( i n t argc , c h a r ∗ a r g v [ ] ) {4 // I n i t t he p r o c e s s non−r t output b u f f e r5 r t p r i n t a u t o i n i t ( 1 ) ;6 // D i s a b l e l i n u x on−demand p a g i n g scheme7 m l o c k a l l (MCL CURRENT |MCL FUTURE) ;8 r t s e m c r e a t e (& semGlobal1 , ” semaphore1 ” , 1 , S FIFO ) ;9 r t s e m c r e a t e (& semGlobal2 , ” semaphore2 ” , 0 , S FIFO ) ;

10 r t t a s k c r e a t e (&t1 , ” taskOne ” , 0 , 1 0 , 0 ) ;11 r t t a s k c r e a t e (&t2 , ” taskTwo ” , 0 , 1 0 , 0 ) ;12 r t t a s k s t a r t (&t1 ,& taskOne , NULL) ;13 r t t a s k s t a r t (&t2 ,& taskTwo , NULL) ; }

(University of Bologna) 7/12/2012 16 / 74

Page 17: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Esempi di implementazione su Xenomai II

Tasck incrementatore:

1 v o i d taskOne ( v o i d ∗ ar g ) {2 i n t i ;3 f o r ( i =0; i<ITER ; i ++){4 r t s e m p (& semGlobal1 , 0 ) ;5 r t p r i n t f ( ” I ’m taskOne and g l o b a l = %d . . . \ n” ,6 ++g l o b a l ) ;7 r t s e m v (& semGloba l2 ) ;8 }9 }

(University of Bologna) 7/12/2012 17 / 74

Page 18: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Esempi di implementazione su Xenomai III

Task decrementatore:

1 v o i d taskTwo ( v o i d ∗ ar g ) {2 i n t i ;3 f o r ( i =0; i<ITER ; i ++){4 r t s e m p (& semGlobal2 , 0 ) ;5 r t p r i n t f ( ” I ’m taskTwo and g l o b a l = %d−−−\n” ,6 −−g l o b a l ) ;7 r t s e m v (& semGloba l1 ) ;8 }9 }

(University of Bologna) 7/12/2012 18 / 74

Page 19: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Esempi di implementazione su Xenomai IV

Esempio di tre task periodici.

1 RT TASK demo task ; RT SEM s ;2 i n t main ( i n t argc , c h a r ∗ a r g v [ ] ) {3 c h a r s t r [ 1 0 ] ; i n t p e r i o d s [ 3 ] ; i n t i ;4 r t p r i n t a u t o i n i t ( 1 ) ;5 m l o c k a l l (MCL CURRENT |MCL FUTURE) ;6 r t p r i n t f ( ” [ Main ] : s t a r t t a s k \n” ) ;7 f o r ( i =0; i <3; i ++){8 s p r i n t f ( s t r , ”Task−%d” , i ) ;9 p e r i o d s [ i ]= i +1;

10 r t t a s k c r e a t e (&demo task , s t r ,10 ,50+ i , 0 ) ;11 r t t a s k s t a r t (&demo task ,&demo,& p e r i o d s [ i ] ) ;12 }13 r t p r i n t f ( ” end program by CTRL−C\n” ) ; pause ( ) ;14 }

(University of Bologna) 7/12/2012 19 / 74

Page 20: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Esempi di implementazione su Xenomai V

1

2 v o i d demo ( v o i d ∗ ar g ) {3 RTIME p = 1 e9 ; RT TASK INFO c u r t a s k i n f o ;4 i n t r e t v a l = r t t a s k i n q u i r e ( r t t a s k s e l f ( ) ,5 &c u r t a s k i n f o ) ; // i n q u i r e c u r r e n t t a s k6 r e t v a l = ∗ ( i n t ∗) a rg ; p ∗= r e t v a l ;7 r t t a s k s e t p e r i o d i c (NULL ,TM NOW, p∗ r e t v a l ) ;8 w h i l e ( 1 ) {9 r t t i m e r s p i n ( p /2) ; // Busy Wait

10 r t p r i n t f ( ”[% s ] %d s p e r i o d i c \n” ,11 c u r t a s k i n f o . name , r e t v a l ) ;12 r t t a s k w a i t p e r i o d (NULL) ;13 }14 }

(University of Bologna) 7/12/2012 20 / 74

Page 21: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

EDFOMAI

Il Progetto

Lo scopo del progetto e quello di implementare un meccanismo chepermetta lo scheduling EDF su Xenomai.

Successivamente, l’implementazione e da testare sviluppando appositiesempi.

Abbiamo chiamato il progetto EDFOMAI

Sorgenti

https://github.com/dbellavista/edfomai/

(University of Bologna) 7/12/2012 21 / 74

Page 22: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

EDFOMAI - Percorso di lavoro: Setup ambiente I

Problemi iniziali

Avendo bisogno dei sorgenti del kernel e di xenomai per poterimplementare driver, abbiamo provato ad installare l’ultima versionedi Xenomai su Debian 6.

Adeos non supporta il kernel stabile di Debian 6, quindi abbiamodovuto installare una versione successiva.

Dopo numerevoli tentativi abbiamo abbandonato l’idea: nonriuscivamo a far funzionare il sistema.

L’unica macchina che funzionasse era una virtual machine trovata sulweb con installato Debian 4 e Xenomai 2.4 (ora e stabile la 2.6).

La virtual machine non possedeva gli header e i sorgenti di xenomai edel kernel e non siamo riusciti ad installarli.

(University of Bologna) 7/12/2012 22 / 74

Page 23: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

EDFOMAI - Percorso di lavoro: Setup ambiente II

Soluzione

Abbiamo scelto di installare una ubuntu-12.04.1, dove la patch adeos,xenomai ed alcuni utili script sono disponibili direttamente dairepository (Xenomai v2.5.6)

In seguito sono stati scaricati e patchati i sorgenti di linux 2.6.35.7.

Infine abbiamo compilato il kernel patchato e pacchettizzato siabinanari che headers in comodi e riutilizzabili .deb

(University of Bologna) 7/12/2012 23 / 74

Page 24: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

EDFOMAI - Implementazione di EDF su Xenomai I

EDF scheduling e Xenomai

Xenomai non ha il concetto di deadline associato ad un task:implementazione banale di EDF e dunque impossibile.

La strada seguita in[Santos et.all,2009] e stata quella di modificaredirettamente Nucleus per implementare direttamente API e strutturedati necessarie.

Visto il tempo e gli strumenti a disposizione e l’impossibilita dicompilare il nucleus abbiamo ritenuto necessario utilizzare unapproccio piu versatile:

EDFOMAI e un layer logico costruito sopra la skin nativa.I task RT utilizzano EDFOMAI per inizializzazione, configurazione edattesa.

(University of Bologna) 7/12/2012 24 / 74

Page 25: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

EDFOMAI - Implementazione di EDF su Xenomai II

Figura: Modello del sistema con EDFOMAI(University of Bologna) 7/12/2012 25 / 74

Page 26: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

EDFOMAI - Interfaccia I

(University of Bologna) 7/12/2012 26 / 74

Page 27: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

EDFOMAI - Strutture dati I

Deadline

Il concetto di DeadLine e stato aggiunto creando una struttura dati chemantiene il riferimento ad un RT TASK con al suo interno campi utili peril ricalcolo della priorita. Inoltre e stato predisposto spazio sufficiente perospitare una struttura RT TASK INFO, che contiene utili informazionicome la priorita corrente.Insieme al concetto di DeadLine e previsto un meccanismo di MissDeadLine: l’utente specifica un handler che e richiamato in caso dimancata terminazione del task entro la deadline prefissata.

(University of Bologna) 7/12/2012 27 / 74

Page 28: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

EDFOMAI - Strutture dati II

1 t y p e d e f s t r u c t r t d e a d l i n e t a s k {2 u n s i g n e d l o n g d e a d l i n e ;3 u n s i g n e d l o n g remain ;4 u n s i g n e d l o n g r e l a t i v e d e a d l i n e ;5 RT TASK ∗ t a s k ;6 RT TASK INFO t a s k i n f o ; } RT DEADLINE TASK ;

Tempi ed unita di misura

Da notare che a seconda che il timer di sistema sia programmato inoneshot o periodic mode, la deadline e espressa in nanosecondi o jiffies.. . . Quindi attenzione a come compilate Xenomai!

(University of Bologna) 7/12/2012 28 / 74

Page 29: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

EDFOMAI - API Utente I

Avvio di un task specificando la deadline.

1 i n t e d f t a s k s t a r t (2 RT TASK ∗ task ,3 u n s i g n e d l o n g d e a d l i n e ,4 v o i d (∗ p r o c e d u r e ) ( v o i d ∗ ar g ) , v o i d ∗ ar g ) ;

(University of Bologna) 7/12/2012 29 / 74

Page 30: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

EDFOMAI - API Utente II

(University of Bologna) 7/12/2012 30 / 74

Page 31: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

EDFOMAI - API Utente III

Attesa fino al prossimo periodo

1 e d f t a s k w a i t p e r i o d ( u n s i g n e d l o n g ∗ o v e r r u n s )

(University of Bologna) 7/12/2012 31 / 74

Page 32: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

EDFOMAI - API Utente IV

(University of Bologna) 7/12/2012 32 / 74

Page 33: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

EDFOMAI - Under the Hood I

Kernel space. . .

Per fornire il supporto EDF ed agire sullo scheduling senza modificareNucleus, e stato necessario implementare un modulo/driver, capace dilavorare al livello del kernel Xenomai.

(University of Bologna) 7/12/2012 33 / 74

Page 34: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

EDFOMAI - Under the Hood II

Il modulo kernel deve reagire agli eventi di schedulazione, quindi vieneregistrato un hook allo scheduler (rt task add hook).

Le strutture rt deadline task sono memorizzate all’interno di unaHASHMAP per consentire un tempo di accesso O(1).

Un task di servizio (EDF Service) viene creato per servire le richiestedi ricalcolo priorita.

Il calcolo della priorita ha complessita O(N).

La priorita viene ricalcolata ad ogni

creazione di taskswitch di contestoset/reset di deadlinecancellazione di task

La comunicazione con driver gestita attraverso delle write sul device:il modulo legge un EDFMessage ed aggiorna le strutture dati.

(University of Bologna) 7/12/2012 34 / 74

Page 35: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

EDFOMAI - Under the Hood III

Le corse critiche per strutture dati fra il modulo ed il task sono gestiteda un rtdm mutex.

Gli RT TASK vengono recuperati grazie al registro(xnregistry bind,xnregistry fetch), attraverso API utilizzabili solo alivello Kernel

E’previsto il supporto alle notifiche di deadline-miss attraversoRT QUEUE accessibili anche in user-space.

(University of Bologna) 7/12/2012 35 / 74

Page 36: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

EDFOMAI - Under the Hood: Problematiche I

La procedura registrata sull’hook deve accedere a strutture daticondivise per aggiornarne lo stato, ma non puo usare dei lock, poichee eseguito nel contesto di un interrupt (non preemptable).

Dunque e necessario usare un task di servizio (EDF Service), cheattenda appositi rtdm event e che si preoccupi dell’accesso allestrutture.

La presenza del task/servizio e inoltre motivata dalla noncompatibilita nella alterazione delle politiche di scheduling all’internodi un hook dello scheduler stesso (rt task set priority puo causarerescheduling).

Quindi, quando l’hook e richiamato l’event e segnalato e EDF Servicericalcola le priorita in base alle deadline.

(University of Bologna) 7/12/2012 36 / 74

Page 37: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

EDFOMAI - Under the Hood: Driver I

Il device virtuale e un named device non realtime gestito a stream,descritto dal seguente profilo:

1 s t a t i c s t r u c t r t d m d e v i c e d e v i c e = {2 . s t r u c t v e r s i o n = RTDM DEVICE STRUCT VER ,3 . d e v i c e f l a g s = RTDM NAMED DEVICE,4 . c o n t e x t s i z e = s i z e o f ( c o n t e x t t ) ,5 . d e v i c e n a m e = DEVICE NAME ,6 . o p e n n r t = e d f r t d m o p e n n r t ,7 . ops = {8 . c l o s e n r t = e d f r t d m c l o s e n r t ,9 . r e a d n r t = e d f r t d m r e a d n r t ,

10 . w r i t e n r t = e d f r t d m w r i t e n r t ,11 } ,12 . d e v i c e c l a s s = RTDM CLASS EXPERIMENTAL ,13 . d e v i c e s u b c l a s s = SOME SUB CLASS ,14 . p r o f i l e v e r s i o n = 1 ,

(University of Bologna) 7/12/2012 37 / 74

Page 38: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

EDFOMAI - Under the Hood: Driver II

15 . d r i v e r n a m e = ”EDFOMAI” ,16 . d r i v e r v e r s i o n = RTDM DRIVER VER ( 0 , 0 , 1) ,17 . p e r i p h e r a l n a m e = ”EDFOMAI−SCHED−SVC” ,18 . p r o v i d e r n a m e = ” Luca M e l l a ” ,19 . proc name = d e v i c e . dev ice name ,20 } ;

(University of Bologna) 7/12/2012 38 / 74

Page 39: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

EDFOMAI - Under the Hood: Driver III

Una scrittura sul device di un EDFMessage comporta l’acquisizionedel lock sulla struttura dati dei task e l’esecuzione di una funzione sudi essi:

1 s t a t i c s s i z e t e d f r t d m w r i t e n r t (2 s t r u c t r t d m d e v c o n t e x t ∗ c o n t e x t ,3 r t d m u s e r i n f o t ∗ u s e r i n f o ,4 c o n s t v o i d ∗buf , s i z e t nbyte ) {5 . . .6 s w i t c h ( message−>command ) {7 c a s e CREATE TASK :8 m t x a c q u i r e ( ) ;9 r t d t a s k c r e a t e ( task , message−>d e a d l i n e ) ;

10 m t x r e l e a s e ( ) ;11 b r e a k ;12 . . . } . . . }

(University of Bologna) 7/12/2012 39 / 74

Page 40: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

EDFOMAI - Under the Hood: Hook I

L’Hook e creato all’avvio del device driver ed attaccato agli eventi discheduling.

Quando lo scheduler effettua un cambio di contesto o un nuovo taske inserito, l’hook e richiamato.

Al suo interno, l’hook segnala l’evento, svegliando il task EDF Service.

1 v o i d e d f s t a r t s w i t c h h o o k ( v o i d ∗ c o o k i e ) {2 RT TASK ∗ t a s k ;3 t a s k=T DESC( c o o k i e ) ;4 r t d m e v e n t s i g n a l (& e d f e v e n t ) ;5 }

(University of Bologna) 7/12/2012 40 / 74

Page 41: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

EDFOMAI - Under the Hood: EDF Service I

Alla creazione, EDF Service si mette in attesa dell’event creato dalmodulo.

L’event e segnalato dall’hook al verificarsi di eventi di scheduling.

Al risveglio, EDF Service esegue il calcolo dinamico della priorita.

NOTA: e importante che EDF Service abbia priorita maggiore dei taskdi cui ricalcola la priorita.

1 v o i d e d f s e r v i c e ( v o i d ∗ ar g ) {2 i n t r e t ;3 f o r ( ; ; ) { r t d m e v e n t w a i t (& e d f e v e n t ) ;4 r e t= m t x a c q u i r e ( ) ;5 i f ( r e t ) c o n t i n u e ;6 r t d t a s k r e c a l c u l a t e p r i o ( ) ;7 r e t= m t x r e l e a s e ( ) ;8 r t d m e v e n t c l e a r (& e d f e v e n t ) ;}}

(University of Bologna) 7/12/2012 41 / 74

Page 42: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

EDFOMAI - Under the Hood: Deadline Miss Managment I

Supporto Attuale

Ogni volta che viene ricalcolata la priorita, viene controllato lo statodella deadline.

Se un task non ha rispettato la sua deadline il modulo Edfomai(deadline missed) invia tempestivamente la notifica nella RT QUEUE“EDF-DMISSED-Q”

Lato utente occorre prima “bindare” la coda di messaggi(rt queue bind) ed in seguito attendere la ricezione delle notifiche dideadline miss (rt queue read).

La priorita del task con deadline-miss rimane alta.

(University of Bologna) 7/12/2012 42 / 74

Page 43: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

EDFOMAI - Under the Hood: Deadline Miss Managment II

Under Development. . .

Creazione di un watchdog per ogni task (RT ALARM) che se nonresettato notifica immediatamente la deadline-miss.

Il watchdog viene resettato prima che il task esegua una wait period,e riattivato al risveglio.

Questo approccio puo diminuire i tempi di reazione ad unadeadline-miss, nel caso precedente potrebbero esserci latenze nonpredicibili.

API di supporto per deadline-miss monitoring.

(University of Bologna) 7/12/2012 43 / 74

Page 44: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

EDFOMAI - Under the Hood: Logs I

1 Edfomai : [ @d t c r e a t e ] c r e a t i n g d ta sk (T1) wi th d e a d l i n e 2000002 . . .3 Edfomai : [ @d t c r e a t e ] c r e a t i n g d ta sk (T2) wi th d e a d l i n e 3500004 . . .5 Edfomai : [ @d t c r e a t e ] c r e a t i n g d ta sk (T3) wi th d e a d l i n e 2500006 Edfomai : [ @ r e c a l c p r i o ] r e c a l c u l a t i n g p r i o r i t i e s o f 3 t a s k s7 Edfomai : [ @ r e c a l c p r i o ] t a s k (T1) oldP (50) newP(50) remain (103435) maxRem(300060) minRem

=(103435)8 Edfomai : [ @ r e c a l c p r i o ] t a s k (T2) oldP (0) newP (0) remain (300060) maxRem(300060) minRem

=(103435)9 Edfomai : [ @ r e c a l c p r i o ] t a s k (T3) oldP (25) newP(16) remain (241003) maxRem(300060) minRem

=(103435)10 . . .

Listing 1: Edfomai logs (dmesg), aggiustamento priorita

(University of Bologna) 7/12/2012 44 / 74

Page 45: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

EDFOMAI - Under the Hood: Logs II

1 . . .2 Edfomai : [ @ r e s e t d e a d l i n e ] r e s e t t i n g d e a d l i n e o f t a s k T13 Edfomai : [ @ r e c a l c p r i o ] r e c a l c u l a t i n g p r i o r i t i e s o f 3 t a s k s4 Edfomai : [ @ r e c a l c p r i o ] t a s k (T1) oldP (50) newP (0) remain (1998352) maxRem(1998352) minRem

=(390050)5 Edfomai : [ @ r e c a l c p r i o ] t a s k (T2) oldP (0) newP(20) remain (1373517) maxRem(1998352) minRem

=(390050)6 Edfomai : [ @ r e c a l c p r i o ] t a s k (T3) oldP (25) newP(50) remain (390050) maxRem(1998352) minRem

=(390050)7 Edfomai : [ @wr i t e ] s e r v i n g r e q u e s t f o r t a s k (T3)8 Edfomai : [ @wr i t e ] t a s k r e s e t d e a d l i n e (T3)9 Edfomai : [ @ r e s e t d e a d l i n e ] r e s e t t i n g d e a d l i n e o f t a s k T3

10 Edfomai : [ @ r e c a l c p r i o ] r e c a l c u l a t i n g p r i o r i t i e s o f 3 t a s k s11 Edfomai : [ @ r e c a l c p r i o ] t a s k (T1) oldP (0 ) newP(32) remain (1470917) maxRem(2498349) minRem

=(846082)12 Edfomai : [ @ r e c a l c p r i o ] t a s k (T2) oldP (20) newP(50) remain (846082) maxRem(2498349) minRem

=(846082)13 Edfomai : [ @ r e c a l c p r i o ] t a s k (T3) oldP (50) newP (0) remain (2498349) maxRem(2498349) minRem

=(846082)14 . . .

Listing 2: Edfomai logs (dmesg), deadline reset

(University of Bologna) 7/12/2012 45 / 74

Page 46: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Esempi di implementazione su EDFOMAI I

Semplice esempio di implementazione di un task periodico su edfomai.

1 RT TASK demo task ;2 i n t main ( i n t argn , c h a r ∗∗ a r g v ) {3 c h a r s t r [ 1 0 ] ;4 u n s i g n e d l o n g p e r i o d s [ 3 ] [ 3 ] ;5 i n t i ; r t p r i n t a u t o i n i t ( 1 ) ;6 m l o c k a l l (MCL CURRENT |MCL FUTURE) ;7 e d f i n i t ( ) ;8 // [ p e r i o d , t imeUsed , d e a d l i n e ]9 p e r i o d s [ 0 ] [ 0 ] = 8 ; p e r i o d s [ 0 ] [ 1 ] = 2 ; p e r i o d s [ 0 ] [ 2 ] = 8 ;

10 p e r i o d s [ 1 ] [ 0 ] = 1 6 ; p e r i o d s [ 1 ] [ 1 ] = 3 ; p e r i o d s [ 1 ] [ 2 ] = 1 6 ;11 p e r i o d s [ 2 ] [ 0 ] = 1 2 ; p e r i o d s [ 2 ] [ 1 ] = 5 ; p e r i o d s [ 2 ] [ 2 ] = 1 2 ;12 r t p r i n t f ( ” [ Main ] : s t a r t t a s k \n” ) ;13 f o r ( i =0; i <3; i ++){14 s p r i n t f ( s t r , ”Task−%d” , i ) ;15 p e r i o d s [ i ]= i +1;16 r t t a s k c r e a t e (&demo task , s t r , 1 0 , 5 0 , 0 ) ;

(University of Bologna) 7/12/2012 46 / 74

Page 47: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Esempi di implementazione su EDFOMAI II

17 e d f t a s k s t a r t (&demo task , p e r i o d s [ 2 ] ,18 &demo , p e r i o d s [ i ] ) ;19 }20 r t p r i n t f ( ” end program by CTRL−C\n” ) ;21 pause ( ) ;22 }

(University of Bologna) 7/12/2012 47 / 74

Page 48: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Esempi di implementazione su EDFOMAI III

1 v o i d demo ( v o i d ∗ ar g ) {2 RT TASK INFO c u r t a s k i n f o ;3 u n s i g n e d l o n g ∗ params ; i n t i ;4 i n t r e t v a l=r t t a s k i n q u i r e ( r t t a s k s e l f ( ) ,& c u r t a s k i n f o ) ;5 i f ( r e t v a l <0){6 r t p r i n t f ( ” i n q u i r i n g e r r o r %d:% s \n” ,7 −r e t v a l , s t r e r r o r (− r e t v a l ) ) ;}8 params = ( i n t ∗) a rg ; RTIME p = 1 e8 ; // 0 . 1 s9 r t t a s k s e t p e r i o d i c (NULL ,TM NOW, params [ 0 ] ∗ p ) ;

10 w h i l e ( 1 ) {11 r t p r i n t f ( ”[% s ] %d s p e r i o d i c \n” ,12 c u r t a s k i n f o . name , r e t v a l ) ;13 r t t i m e r s p i n ( param [ 1 ] ∗ p ) ;14 r t t a s k w a i t p e r i o d (NULL) ;15 }}

(University of Bologna) 7/12/2012 48 / 74

Page 49: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Esempi di implementazione su EDFOMAI IV

Esempio di implementazione di un Mars Rover, composto da 4 taskperiodici sensor, processing, actuator e communicator con diversa priorita,periodo e deadline.La funzione main() inizializza e fa partire il sistema.

1 RTIME t ;2 RT TASK task , spawner ;3 RT SEM sens ingDone , p r o c e s s i n g D o n e , exLock ;4 s h o r t s t o p p e d = 0 ;5 i n t s h a r e d R e s o r u c e , s h a r e d = 0 ;6 u n s i g n e d l o n g param [ 4 ] [ 3 ] ;7

8 i n t main ( i n t argn , c h a r ∗∗ a r g v ) {9 i n i t e d f o m a i ( ) ;

10 r t p r i n t f ( ” i n i t i a l i z e d .\ n” ) ;11 r t p r i n t f ( ” s t a r t i n g up . . . \ n” ) ;12 s t a r t u p ( ) ;13 r t p r i n t f ( ” w a i t i n g C t r l+C\n” ) ;

(University of Bologna) 7/12/2012 49 / 74

Page 50: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Esempi di implementazione su EDFOMAI V

14 w a i t f o r c t r l c ( ) ;15 r t p r i n t f ( ” c l o s i n g . . . \ n” ) ;16 c l e a n u p ( ) ;17 r e t u r n 0 ;18 }

(University of Bologna) 7/12/2012 50 / 74

Page 51: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Esempi di implementazione su EDFOMAI VI

Questa funzione inizializza il sistema Xenomai ed EDFOMAI.

1 v o i d i n i t e d f o m a i ( ) {2 r t p r i n t a u t o i n i t ( 1 ) ;3 // Avo ids memory swapping f o r t h i s program4 m l o c k a l l (MCL CURRENT |MCL FUTURE) ;5 // I n i t i a l i z e e d f6 i f ( e d f i n i t ( ) ) e x i t ( 1 ) ;7 }

(University of Bologna) 7/12/2012 51 / 74

Page 52: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Esempi di implementazione su EDFOMAI VII

Questa funzione inizializza e fa partire i task.

1 v o i d s t a r t u p ( ) {2 // [ p e r i o d , busy , d e a d l i n e3 params [ 0 ] [ 0 ] = 1 1 ; params [ 0 ] [ 1 ] = 2 ; params [ 0 ] [ 2 ] = 3 ;4 params [ 1 ] [ 0 ] = 1 1 ; params [ 1 ] [ 1 ] = 3 ; params [ 1 ] [ 2 ] = 7 ;5 params [ 2 ] [ 0 ] = 1 1 ; params [ 2 ] [ 1 ] = 2 ; params [ 2 ] [ 2 ] = 1 0 ;6 params [ 3 ] [ 0 ] = 6 6 ; params [ 3 ] [ 1 ] = 6 ; params [ 3 ] [ 2 ] = 6 5 ;7 t = t i m e U n i t ;8 r t s e m c r e a t e (& sens ingDone ,9 ” sensorSem ” , 0 , S PRIO ) ;

10 r t s e m c r e a t e (& p r o c e s s i n g D o n e ,11 ” pr oces so rS em ” , 0 , S PRIO ) ;12 r t s e m c r e a t e (&exLock , ” s h a r e d R e s o u r c e ” , 1 , S PRIO ) ;13 r t t a s k c r e a t e (& task , ” s e n s o r ” , 0 , 90 , 0) ;14 e d f t a s k s t a r t (& task , params [ 0 ] [ 2 ] ∗ t , &sense ,15 params [ 0 ] ) ;16 r t t a s k c r e a t e (& task , ” p r o c e s s o r ” , 0 , 89 , 0) ;

(University of Bologna) 7/12/2012 52 / 74

Page 53: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Esempi di implementazione su EDFOMAI VIII

17 e d f t a s k s t a r t (& task , params [ 1 ] [ 2 ] ∗ t , &p r o c e s s ,18 params [ 1 ] ) ;19 r t t a s k c r e a t e (& task , ” a c t u a t o r ” , 0 , 88 , 0) ;20 e d f t a s k s t a r t (& task , params [ 2 ] [ 2 ] ∗ t , &act ,21 params [ 2 ] ) ;22 r t t a s k c r e a t e (& task , ” c o m u n i c a t o r ” , 0 , 87 , 0) ;23 e d f t a s k s t a r t (& task , params [ 3 ] [ 2 ] ∗ t , &comunicate ,

params [ 3 ] ) ;24 }

(University of Bologna) 7/12/2012 53 / 74

Page 54: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Esempi di implementazione su EDFOMAI IX

Funzione del task actuator.

1 v o i d a c t ( v o i d ∗ ar g ) {2 i n t i , r e s ;3 u n s i g n e d l o n g ∗ param = ( u n s i g n e d l o n g ∗) a r g s ;4 RT TASK INFO c u r t a s k i n f o ;5 r t t a s k i n q u i r e ( r t t a s k s e l f ( ) , &c u r t a s k i n f o ) ;6 r t t a s k s e t p e r i o d i c (NULL ,TM NOW, param [ 0 ] ∗ t ) ;7 r t p r i n t f ( ”[% s ] s t a r t e d \n” , c u r t a s k i n f o . name ) ;8 w h i l e ( ! s t o p p e d ) {9 r t s e m p (& p r o c e s s i n g D o n e ) ;

10 r t s e m p (& exLock ) ;11 r e s=s h a r e d R e s o u r c e ;12 r t s e m v (& exLock ) ;13 f o r ( i =0 ; i < param [ 1 ] ; i ++){14 r t t i m e r s p i n ( t ) ;15 r t p r i n t ( ”[% s ] e x e c u t i n g \n” , c u r t a s k i n f o . name )

;

(University of Bologna) 7/12/2012 54 / 74

Page 55: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Esempi di implementazione su EDFOMAI X

16 }17 s h a r e d=r e s ;18 r t t a s k w a i t p e r i o d (NULL) ;19 }20 }

(University of Bologna) 7/12/2012 55 / 74

Page 56: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Esempi di implementazione su EDFOMAI XI

Funzione del task processing.

1 v o i d p r o c e s s ( v o i d ∗ ar g ) {2 i n t i , r e s ;3 u n s i g n e d l o n g ∗ param = ( u n s i g n e d l o n g ∗) a r g s ;4 RT TASK INFO c u r t a s k i n f o ;5 r t t a s k i n q u i r e ( r t t a s k s e l f ( ) ,& c u r t a s k i n f o ) ;6 r t t a s k s e t p e r i o d i c (NULL ,TM NOW, param [ 0 ] ∗ t ) ;7 r t p r i n t f ( ”[% s ] s t a r t e d \n” , c u r t a s k i n f o . name ) ;8 w h i l e ( ! s t o p p e d ) {9 r t s e m p (& se ns in gD one ) ;

10 f o r ( i =0 ; i < param [ 1 ] ; i ++){11 r t t i m e r s p i n ( t ) ;12 r t p r i n t ( ”[% s ] e x e c u t i n g \n” , c u r t a s k i n f o . name )

;13 }14 r t s e m p (& exLock ) ;15 s h a r e d R e s o u r c e +=1;

(University of Bologna) 7/12/2012 56 / 74

Page 57: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Esempi di implementazione su EDFOMAI XII

16 r t s e m v (& exLock ) ;17 r t s e m v (& p r o c e s s i n g D o n e ) ;18 r t t a s k w a i t p e r i o d (NULL) ;19 }20 }

(University of Bologna) 7/12/2012 57 / 74

Page 58: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Esempi di implementazione su EDFOMAI XIII

Funzione del task sensing.

1 v o i d s e n s e ( v o i d ∗ ar g ) {2 i n t i , r e s ;3 u n s i g n e d l o n g ∗ param = ( u n s i g n e d l o n g ∗) a r g s ;4 RT TASK INFO c u r t a s k i n f o ;5 r t t a s k i n q u i r e ( r t t a s k s e l f ( ) ,& c u r t a s k i n f o ) ;6 r t t a s k s e t p e r i o d i c (NULL ,TM NOW, param [ 0 ] ∗ t ) ;7 r t p r i n t f ( ”[% s ] s t a r t e d \n” , c u r t a s k i n f o . name ) ;8 w h i l e ( ! s t o p p e d ) {9 f o r ( i =0 ; i < param [ 1 ] ; i ++){

10 r t t i m e r s p i n ( t ) ;11 r t p r i n t ( ”[% s ] e x e c u t i n g \n” , c u r t a s k i n f o . name )

;12 }13 r t s e m p (& exLock ) ;14 s h a r e d R e s o u r c e=s h a r e d ;15 r t s e m v (& exLock ) ;

(University of Bologna) 7/12/2012 58 / 74

Page 59: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Esempi di implementazione su EDFOMAI XIV

16 r t s e m v (& s ens in gD on e ) ;17 r t t a s k w a i t p e r i o d (NULL) ;18 }19 }

(University of Bologna) 7/12/2012 59 / 74

Page 60: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Esempi di implementazione su EDFOMAI XV

Funzione del task communicator.

1 v o i d comunicate ( v o i d ∗ ar g ) {2 i n t r e s ;3 u n s i g n e d l o n g ∗ param = ( u n s i g n e d l o n g ∗) a r g s ;4 r t t a s k s e t p e r i o d i c (NULL ,TM NOW, param [ 0 ] ∗ t ) ;5 w h i l e ( ! s t o p p e d ) {6 r t s e m p (& exLock ) ;7 r e s = s h a r e d R e s o u r c e ;8 r t s e m v (& exLock ) ;9 r t p r i n t f ( ” [ c o m u n i c a t o r ] s e n d i n g : %d” , r e s ) ;

10 r t t i m e r s p i n ( param [ 1 ] ∗ t ) ;11 r t p r i n t f ( ” [ c o m u n i c a t o r ] s e n t : %d” , r e s ) ;12 r t t a s k w a i t p e r i o d (NULL) ;13 }14 }

(University of Bologna) 7/12/2012 60 / 74

Page 61: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Esempi di implementazione su EDFOMAI XVI

DMESG log

1 [ 23636 . 091589 ] Edfomai : [ @d t r c a l c p ] t a s k ( p r o c e s s o r ) oldP (50) newP(42) remain (69995311)maxRem(390904685) minRem=(0)

2 [ 23636 . 091609 ] Edfomai : [ @d t r c a l c p ] t a s k ( a c t u a t o r ) oldP (49) newP(43) remain (61369634)maxRem(390904685) minRem=(0)

3 [ 23636 . 091618 ] Edfomai : [ @d t r c a l c p ] t a s k ( comun icato r ) oldP (50) newP(44) remain(390904685) maxRem(390904685) minRem=(0)

4 [ 23636 . 141612 ] Edfomai : [ @wr i t e ] s e r v i n g r e q u e s t f o r t a s k ( s e n s o r )5 [ 23636 . 141621 ] Edfomai : [ @wr i t e ] t a s k r e s e t d e a d l i n e ( s e n s o r )6 [ 23636 . 141626 ] Edfomai : [ @ d t r e s e t d l i n e ] r e s e t t i n g d e a d l i n e o f t a s k ( s e n s o r )7 [ 23636 . 141633 ] Edfomai : [ @d t r c a l c p ] r e c a l c u l a t i n g p r i o r i t i e s o f 4 t a s k s8 [ 23636 . 141641 ] Edfomai : [ @d t r c a l c p ] #t a s k s (4 ) #missed (0 )9 [ 23636 . 141645 ] Edfomai : [ @d t r c a l c p ] t a s k ( s e n s o r ) oldP (50) newP(48) remain (29993227)

maxRem(340714671) minRem=(11179620)10 [ 23636 . 141692 ] Edfomai : [ @d t r c a l c p ] t a s k ( p r o c e s s o r ) oldP (42) newP(49) remain (19805297)

maxRem(340714671) minRem=(11179620)11 [ 23636 . 141697 ] Edfomai : [ @d t r c a l c p ] t a s k ( a c t u a t o r ) oldP (43) newP(50) remain (11179620)

maxRem(340714671) minRem=(11179620)12 [ 23636 . 141702 ] Edfomai : [ @d t r c a l c p ] t a s k ( comun icato r ) oldP (44) newP(40) remain

(340714671) maxRem(340714671) minRem=(11179620)13 [ 23636 . 161884 ] Edfomai : [ @wr i t e ] s e r v i n g r e q u e s t f o r t a s k ( s e n s o r )14 [ 23636 . 161887 ] Edfomai : [ @wr i t e ] s t opp i ng watchdog o f t a s k ( s e n s o r )15 [ 23636 . 161889 ] Edfomai : [ @dt stopwdg ] s t opp i ng watchdog o f t a s k ( s e n s o r )16 [ 23636 . 161901 ] Edfomai : [ @wr i t e ] s e r v i n g r e q u e s t f o r t a s k ( a c t u a t o r )17 [ 23636 . 161904 ] Edfomai : [ @wr i t e ] s t opp i ng watchdog o f t a s k ( a c t u a t o r )18 [ 23636 . 161906 ] Edfomai : [ @dt stopwdg ] s t opp i ng watchdog o f t a s k ( a c t u a t o r )19 [ 23636 . 161925 ] Edfomai : [ @wr i t e ] s e r v i n g r e q u e s t f o r t a s k ( a c t u a t o r )20 [ 23636 . 161927 ] Edfomai : [ @wr i t e ] t a s k r e s e t d e a d l i n e ( a c t u a t o r )21 [ 23636 . 161929 ] Edfomai : [ @ d t r e s e t d l i n e ] r e s e t t i n g d e a d l i n e o f t a s k ( a c t u a t o r )

(University of Bologna) 7/12/2012 61 / 74

Page 62: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Esempi di implementazione su EDFOMAI XVII

22 [ 23636 . 161931 ] Edfomai : [ @d t r c a l c p ] r e c a l c u l a t i n g p r i o r i t i e s o f 4 t a s k s23 [ 23636 . 161933 ] Edfomai : [ @d t r c a l c p ] #t a s k s (4 ) #missed (1 )24 [ 23636 . 161935 ] Edfomai : [ @d t r c a l c p ] t a s k ( s e n s o r ) oldP (50) newP(49) remain (9814105)

maxRem(320535549) minRem=(0)25 [ 23636 . 161959 ] Edfomai : [ @d t r c a l c p ] t a s k ( p r o c e s s o r ) has mis sed h i s d e a d l i n e

(University of Bologna) 7/12/2012 62 / 74

Page 63: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Proposta di mapping SFC in Xenomai I

Proposal

Parte finale del progetto, non implementato.

Il framework deve offire metodi e strutture dati per implementare undiagramma SFC su Xenomai.

Idee principali:

Il framework offre un ciclo di scansione: lettura degli input,aggiornamento dello stato, scrittura degli output.

Ogni azione e un task a cui e associato un Qualificatore.

La struttura che unisce due stati e detta Struttura di Collegamento.

(University of Bologna) 7/12/2012 63 / 74

Page 64: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Proposta di mapping SFC in Xenomai II

Ciclo di campionamento

Dopo aver inizializzato i data structure il framework inizia il main loop:

1 Lettura dei sensori e memorizzazione in memoria condivisa

2 Attivazione degli step sulla base del modello SFC

3 Attesa del tempo di scansione

4 Attivazione degli attuatori

(University of Bologna) 7/12/2012 64 / 74

Page 65: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Proposta di mapping SFC in Xenomai III

(University of Bologna) 7/12/2012 65 / 74

Page 66: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Proposta di mapping SFC in Xenomai IV

Modello di uno step

Uno step e composto da una struttura di collegamento, che lo collega allostep sucessivo, e un set di azioni, che sono composte a loro volta da unqualificatore e dalla procedura che esegue.

(University of Bologna) 7/12/2012 66 / 74

Page 67: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Proposta di mapping SFC in Xenomai V

Strutture di collegamento

Sono strutture che collegano gli step predecessori con i successori.

Condizione: abilita lo step successore solo se il predecessore e attivo e lacondizione e soddisfatta

SceltaAlternativa: abilita uno step successore solo se il predecessore eattivo e la condizione relativa al successore e soddisfatta

Parallelismo: abilita gli step successori se il predecessore e attivo e lacondizione e soddisfatta

Convergenza: abilita lo step successore solo se uno dei predecessori eattivo e la relativa condizione e soddisfatta

Sincronizzazione: abilita lo step successore solo se tutti i predecessori sonoattivi e la condizione e soddisfatta

(University of Bologna) 7/12/2012 67 / 74

Page 68: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Proposta di mapping SFC in Xenomai VI

(University of Bologna) 7/12/2012 68 / 74

Page 69: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Proposta di mapping SFC in Xenomai VII

(University of Bologna) 7/12/2012 69 / 74

Page 70: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Proposta di mapping SFC in Xenomai VIII

(University of Bologna) 7/12/2012 70 / 74

Page 71: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Proposta di mapping SFC in Xenomai IX

Azioni

Le azioni sono mappate in task xenomai e sono abilitate all’attivazionedello step che le contiene.In base al qualificatore il framework prevede una differente mappaturadella procedura eseguita dall’azione.

(University of Bologna) 7/12/2012 71 / 74

Page 72: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Proposta di mapping SFC in Xenomai X

Qualificatori di azioni

Non Stored: task periodico che termina con la disattivazione dello step.

Pulsed: task one-shot eseguito all’abilitarsi di uno step.

Set: task periodico.

Reset: termina il task periodico a cui e riferito.

Time Limited: al task e affiancato un altro che aspetta per il tempodesignato prima di terminarlo.

Time Delayed: task che inizia con una wait real-time, interrotto se lo statosi disattiva.

Stored Delayed: task Set che inizia con una wait real-time.

Delayed Stored: task Set che inizia con una wait real-time, interrotto se lostato si disattiva.

Stored Time-Limited: task Set a cui e affiancato un altro che aspetta peril tempo designato prima di terminarlo.

(University of Bologna) 7/12/2012 72 / 74

Page 73: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

References I

Adaptive Domain Enviroment for Operaring SystemsKarim Yaghmour

Xenomai APIsXenomai.org, http://www.xenomai.org/documentation/xenomai-2.5/html/api/index.html

Native API TourXenomai.org, http://www.xenomai.org/documentation/branches/v2.4.x/pdf/Native-API-Tour-rev-C.pdf

Life with AdeosXenomai.org, http://www.xenomai.org/documentation/xenomai-2.3/pdf/Life-with-Adeos-rev-B.pdf

(University of Bologna) 7/12/2012 73 / 74

Page 74: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

References II

Xenomai - Implementing a RTOS emulation framework onGNU/LinuxPhilippe Gerum, 2004

The Real-Time Driver Model and First ApplicationsJ. Kiszka, University of Hannover

Hard Real Time Linux using Xenomai on Intel R© Multi-CoreProcessorsAmarpreet Singh Ugal, Intel Corporation, 2009

Implementacao da polıtica EDF no XenomaiJose Augusto Santos , George Lima, Universidade Federal da Bahia(UFBA), 2009

Xenamai Lab CourseRobot LAB, http://www.cs.ru.nl/lab/xenomai

(University of Bologna) 7/12/2012 74 / 74

Page 75: EDFOMAI -  · Comunicazione:comunicazione inter-task sincrona a messaggi, code di messaggi, ... L’unica macchina che funzionasse era una virtual machine trovata sul

Domande

?

(University of Bologna) 7/12/2012 75 / 74