1 1 Herramienta para el modelado y análisis de planificabilidad de aplicaciones RT-Java sobre RT-Linux Máster en Computación Director de TFM: José María Drake Moyano José María Martínez Lanza
2 2 Tabla de contenidos Introducción Herramienta RTLinuxNodeModelEstimator Módulo TimeMntr Herramienta RTCode4TimeMntr Aplicación BURTA Conclusiones y trabajo futuro
3 3 Tabla de contenidos Introducción Aplicaciones RT-Java Objetivos Patrones de diseño de aplicaciones de tiempo real Estructura de modelos de planificabilidad Herramienta RTLinuxNodeModelEstimator Módulo TimeMntr Herramienta RTCode4TimeMntr Aplicación BURTA Conclusiones y trabajo futuro
4 4 Aplicaciones RT-Java Industria y JAVA Especificación RTSJ Aplicaciones en RT-Java
5 5 Objetivos Herramienta para la evaluación del modelo de plataforma. Herramienta para la evaluación del modelo lógico y reactivo de aplicación RT-Java. Test Java project Annotated Java code class Instrumented Java class Java project Application real-time model Application configuration data Instrumentation code generator MAST Tool box Emulated environment Embedded processor Executes Schedulability analysis Instrumentation
6 6 Patrones de diseño de TR Patrón Protected obj:ProtectedClass client1 client2 client3 «synchronized» oper1() «protected» «active» obj.lock PClass.lock used free «synchronized» oper1() «synchronized» oper2() «staticSynchronized» staticOper() blocked
7 7 Patrones de diseño de TR Respuesta periódica con requisito temporal final act_1 act_3act_2 rt-thread timer Other rt-responses mutex Periodic activation deadline
8 8 Patrones de diseño de TR Respuesta periódica con requisito temporal final
9 9 Patrones de diseño de TR Respuesta a un evento del entorno con requisito temporal final act_1 act_3act_2 rt-thread Other rt-responses mutex deadline enviroment Event occurrency
10 10 Patrones de diseño de TR Respuesta a un evento del entorno con requisito temporal final Environment HandlerTask «entry»awaitEvent() «postWaiting»initHandling() «executorTask»task() «entry»awaitEvent() return event awaiting «eventHandler» «rtTaskJob»
11 11 Patrones de diseño de TR Respuestas con requisitos temporales intermedios act_1 act_3act_2 rt-thread1 timer Other rt-responses mutex1 Periodic activation deadline2 deadline1rt-thread2 mutex2 act_1 act_3act_2 rt-thread1 Other rt-responses mutex1 deadline2 deadline1rt-thread2 mutex2 enviroment Event occurrency
12 12 Patrones de diseño de TR Respuestas con requisitos temporales intermedios obj:Synchr server Client1 Client2 «entry» await() «protected» «active» obj.lock used free «postWaiting»process() «synchronized» oper2() «trigger»active() blocked «trigger»change()
13 13 Patrones de diseño de TR Respuesta con jitter acotado de entrada y salida act_1 act_3act_2 rt-thread timer Other rt-responses mutex Periodic activation fBoundedJitter sBoundedJitter sPriority bPriority fPriority offset
14 14 Patrones de diseño de TR Respuesta con jitter acotado de entrada y salida
15 15 Patrones de diseño de TR Respuesta que se comunica con un sistema de no tiempo real act_1 act_3act_2 rt-thread timer No real-time subsystem waitFreeMutex Periodic activation deadline
16 16 Patrones de diseño de TR Respuesta que se comunica con un sistema de no tiempo real obj:BridgeRTClient NRTClient «waitFreeSynchronized» freeWaitPut() «waitFreeProtected» «active» obj.lock used free «synchronized»blockingGet() return blocked return «synchronized»blockingPut() «waitFreeSynchronized» freeWaitGet() «waitFreeSynchronized» freeWaitPut() no blocking
17 17 Modelos de planificabilidad Modelo de plataforma: RTSJ en Linux: Planificador y relojes. Modelo lógico: Elementos de modelado. Modelo reactivo: Respuestas Modelo plataforma Modelo reactivo Modelo lógico
18 18 Tabla de contenidos Introducción Herramienta RTLinuxNodeModelEstimator Parámetros de plataforma y estrategia de medida Programa de medida Módulo TimeMntr Herramienta RTCode4TimeMntr Aplicación BURTA Conclusiones y trabajo futuro
19 19 Parámetros y estrategia Rango de prioridades Cambios de contexto entre threads Uso de CPU del no-rt timer Resolución del rt timer
20 20 Parámetros y estrategia Rango de prioridades Cambios de contexto entre threads Uso de CPU del no-rt timer Resolución del rt timer
21 21 Parámetros y estrategia Rango de prioridades Cambios de contexto entre threads Suspensión temporal Uso de CPU del no-rt timer Resolución del rt timer hThread lThread Context switch suspensionclock activation T exec T susp Timed context switch
22 22 Parámetros y estrategia Rango de prioridades Cambios de contexto entre threads Suspensión en un objeto protegido Uso de CPU del no-rt timer Resolución del rt timer hThread lThread Context switch wait() T exec T susp Context switch time notify()
23 23 Parámetros y estrategia Rango de prioridades Cambios de contexto entre threads Cambio cruzado de prioridad Uso de CPU del no-rt timer Resolución del rt timer hThread lThread Context switch Context switch time hThread.priority lThread.priority
24 24 Parámetros y estrategia Rango de prioridades Cambios de contexto entre threads Suspensión en un mutex Uso de CPU del no-rt timer Resolución del rt timer
25 25 Parámetros y estrategia Rango de prioridades Cambios de contexto entre threads Uso de CPU del no-rt timer Resolución del rt timer 1 ms t1t1 t2t2 t3t3 t4t4 t5t5 1) 2) 3) primer ms
26 26 Parámetros y estrategia Rango de prioridades Cambios de contexto entre threads Uso de CPU del no-rt timer Resolución del rt timer
27 27 Programa de medida Estructura del programa Modelo MAST2 Informe de texto
28 28 Programa de medida Estructura del programa Modelo MAST2 Informe de texto ...
29 29 Programa de medida Estructura del programa Modelo MAST2 Informe de texto *************** RTLinuxModelEstimator application results report **************** *** Priority Range Probe ******************************************************** Highest Real-time priority = 58 Lowest Real-time priority = 11 ********************************************************************************* *** Timed Suspension Context Switch Probe *************************************** Number of context switches = 5772 Maximum context switch time = 28.96E-6 Minimum context switch time = 10.82E-6 Average context switch time = 12.76E-6 *********************************************************************************
30 30 Tabla de contenidos Introducción Herramienta RTLinuxNodeModelEstimator Módulo TimeMntr Estrategia de herramienta y definición de anotaciones Programa de medida Herramienta RTCode4TimeMntr Aplicación BURTA Conclusiones y trabajo futuro
31 31 Estrategia y anotaciones Invocaciones durante los ciclos de ejecución Anotaciones estilo JAVADOC y a partir de los estereotipos de los patrones: (/* *@OORT_.... */) /** * @OORT_protected */ Clase Protected { Constructor(){ … } /** * @OORT_synchronized */ synchronized(){ … }
32 32 Programa de medida Clase principal y listas de elementos TimeMntr ThreadMntr ProtectedOperMntr MutexMntr name:String mutex name:String wcet:double acet:double bcet:double type:ProtectedOperType jidSet:set(long) name:String jid:long wcet:double acet:double bcet:double priority:int operList:list(ProtectedOperMntr) isSegment:boolean thread protectedOper mutex «enum» ProtectedOperType SYNCHRONIZED TRIGGER ENTRY SYNCHRONIZER_ENTRY POSTWAITING STATIC_SYNCHRONIZED STATIC_TRIGGER STATIC_ENTRY STATIC_SYNCHRONIZER_ENTRY STATIC_POSTWAITING entry nextSegment 0..1 Atributo en cursiva es generado por el algoritmo de creación del modelo 0..1 1 *** trigger callEntry 0..1
33 33 Tabla de contenidos Introducción Herramienta RTLinuxNodeModelEstimator Módulo TimeMntr Herramienta RTCode4TimeMntr Instrumentación del código de la aplicación de tiempo real Estrategias de herramienta Aplicación BURTA Conclusiones y trabajo futuro
34 34 Instrumentación de código Patrones ejecutores import TimeMntr.*; /* * @OORT_eventHandler // @OORT_periodicExecutor */ Clase Executor { private int monitores; Constructor(){ … } public void run(){ createThreadMnrt(); recordThrProcessInstant(); while(!interrupted()){ … recordThrProcessInstant(); }
35 35 Instrumentación de código Patrones protegidos import TimeMntr.*; /** * @OORT_protected // @OORT_eventSource // @OORT_synchronizer */ Clase Protected { private int monitores; Constructor(){ … createProtectedResource(); createProtectedOperMntr(); } /** * @OORT_eventTrigger */ eventTrigger(){ recordOperProcessInstant(); … notify(); … recordOperProcessInstant(); }
36 36 Instrumentación de código Main Import TimeMntr.*; /** * @OORT_main */ Clase Main { private static TimeMntr mntr; Main(){ new NoHeapRealTimeThread().run(){ mntr = new TimeMntr(); ….start() /.close() … mntr.stopRecordingData(); mntr.createMastModel(); }
37 37 Estrategias de herramienta
38 38 Tabla de contenidos Introducción Herramienta RTLinuxNodeModelEstimator Módulo TimeMntr Herramienta RTCode4TimeMntr Aplicación BURTA Especificación y diseño lógico de la aplicación Diseño de la respuesta MetrologyUpdating Generación del modelo de planificabilidad Conclusiones y trabajo futuro
39 39 Especificación y diseño lógico DAQ RT-Driver HalfMemorInterr. Real-time Susbsystem No real-time Subsystem Sampler Connection monitor Perturbograph Metrology Processor Publisher Perturbation event Message stream Waveform Metrology Data Perturbogram Switch Configuration
40 40 Diseño de MetrologyUpdating Clock :Metrology Executor :Metrology [*]:Waveform [*]:Metrology Data :Perturbogram :Perturbograph Executor :Perturbograph ms:MssgStreamer :time out update() updateStatisticData() finalized() awaitPerturbogram() submit() submitPerturbogram() return awaitP… deadline= 0.2 s Periodic{ period 0.2 s} For all Waveform instances For all MetrologyData instances If ms.lock is free marshal() Or addPreData() or addPostdata()
41 41 Generación del modelo Clase instrumentada por RTCode4TimeMntr /* *@OORT_eventHandler */ private class PerturbographExecutor extends NoHeapRealtimeThread{ private Perturbogram target; private Perturbograph task; private int peSrc; public PerturbographExecutor(…) { super(…); } public void run(){ peSrc = tTimeMntr.createThreadMntr(TimeMntr.toString(this)); PerturbogramData pData = new PerturbogramData(); TimeMntr.recordTheadTime(peSrc); while(!interrupted()){ target.awaitPerturbogram(pData); task.submit(pData); TimeMntr.recordTheadTime(peSrc); }
42 42 Generación del modelo Modelo obtenido con TimeMntr
43 43 Generación del modelo Modelo obtenido con TimeMntr
44 44 Tabla de contenidos Introducción Herramienta RTLinuxNodeModelEstimator Módulo TimeMntr Herramienta RTCode4TimeMntr Aplicación BURTA Conclusiones y trabajo futuro
45 45 Conclusiones y trabajo futuro Resultados satisfactorios Aplicaciones funcionales RTNodeModelEstimator: Tiempos de acceso a drivers de tiempo real RTCode4TimeMntr: Optimización del código y nuevos algoritmos TimeMntr: Implementación de “merge” y “fork” para threads
46 46 Gracias por su atención, ¿preguntas?