Upload
benedicto-rota
View
220
Download
0
Embed Size (px)
Citation preview
1
Herramienta para el modelado y análisis de planificabilidad de aplicaciones RT-Java sobre RT-Linux
Máster en ComputaciónDirector de TFM: José María Drake Moyano
José María Martínez Lanza
2
Tabla de contenidos
Introducción Herramienta RTLinuxNodeModelEstimator Módulo TimeMntr Herramienta RTCode4TimeMntr Aplicación BURTA Conclusiones y trabajo futuro
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
Aplicaciones RT-Java
Industria y JAVAEspecificación RTSJAplicaciones en RT-Java
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
InstrumentedJava class
Java project
Applicationreal-time model
Applicationconfiguration data
Instrumentationcode generator
MASTTool box
Emulated environment
Embedded processor
Executes
Executes
Schedulabilityanalysis
Instrumentation
6
Patrones de diseño de TR
Patrón Protected
obj:ProtectedClass client1 client2 client3
«synchronized» oper1()
«protected» «active» «active» «active»obj.lockPClass.lock
used
free «synchronized» oper1()
«synchronized» oper2()
«staticSynchronized» staticOper()
blocked
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
mutexPeriodic activation
deadline
8
Patrones de diseño de TR
Respuesta periódica con requisito temporal final
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
Patrones de diseño de TR
Respuesta a un evento del entorno con requisito temporal final
Environment Handler Task
«entry»awaitEvent()
«postWaiting»initHandling()«executorTask»task()
«entry»awaitEvent()
return
event
awaiting
«eventHandler» «rtTaskJob»
11
Patrones de diseño de TR
Respuestas con requisitos temporales intermedios
act_1 act_3act_2
rt-thread1
timer
Other rt-responses
mutex1Periodic activation
deadline2deadline1 rt-thread2
mutex2
act_1 act_3act_2
rt-thread1
Other rt-responses
mutex1
deadline2deadline1 rt-thread2
mutex2
enviroment
Event occurrency
12
Patrones de diseño de TR
Respuestas con requisitos temporales intermedios
obj:Synchr server Client1 Client2
«entry» await()
«protected» «active» «active» «active»obj.lock
used
free
«postWaiting»process()
«synchronized» oper2()
«trigger»active()
blocked
«trigger»change()
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
Patrones de diseño de TR
Respuesta con jitter acotado de entrada y salida
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
Patrones de diseño de TR
Respuesta que se comunica con un sistema de no tiempo real
obj:Bridge RTClient NRTClient
«waitFreeSynchronized» freeWaitPut()
«waitFreeProtected» «active» «active»obj.lock
used
free
«synchronized»blockingGet()
return
blocked
return
returnreturn
«synchronized»blockingPut()
«waitFreeSynchronized» freeWaitGet()
«waitFreeSynchronized» freeWaitPut()
no blocking
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
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
Parámetros y estrategia
Rango de prioridadesCambios de contexto entre threadsUso de CPU del no-rt timerResolución del rt timer
20
Parámetros y estrategia
Rango de prioridadesCambios de contexto entre threadsUso de CPU del no-rt timerResolución del rt timer
21
Parámetros y estrategia
Rango de prioridadesCambios de contexto entre threads
Suspensión temporal
Uso de CPU del no-rt timerResolución del rt timer
hThread
lThread
Context switch
suspension clock activation
Texec Tsusp
Tsusp
Timed context switch
22
Parámetros y estrategia
Rango de prioridadesCambios de contexto entre threads
Suspensión en un objeto protegido
Uso de CPU del no-rt timerResolución del rt timer
hThread
lThread
Context switch
wait()Texec
Tsusp
Context switch time
notify()
23
Parámetros y estrategia
Rango de prioridadesCambios de contexto entre threads
Cambio cruzado de prioridad
Uso de CPU del no-rt timerResolución del rt timer
hThread
lThread
Context switch
Context switch time
hThread.priority
lThread.priority
24
Parámetros y estrategia
Rango de prioridadesCambios de contexto entre threads
Suspensión en un mutex
Uso de CPU del no-rt timerResolución del rt timer
hThread
lThread
Context switch
Context switch time
unlockunlock unlock locklocklock lockunlock
hThread locked lThread locked
highPrty
lowPrty
25
Parámetros y estrategia
Rango de prioridadesCambios de contexto entre threadsUso de CPU del no-rt timer
Resolución del rt timer
1 ms
t1 t2 t3 t4t5
1)
2)
3)
primer ms
26
Parámetros y estrategia
Rango de prioridadesCambios de contexto entre threadsUso de CPU del no-rt timerResolución del rt timer
27
Programa de medida
Estructura del programa
Modelo MAST2Informe de texto
28
Programa de medida
Estructura del programaModelo MAST2
Informe de texto
<mast_mdl:MAST_MODEL Model_Name="RTLinuxNode" Model_Date="2013-04-03T23:05:18" ...">
...<mast_mdl:Fixed_Priority_Policy
Min_Priority="11" Max_Priority="58" Worst_Context_Switch="28.96E-6" Avg_Context_Switch="9.036E-6" Best_Context_Switch="8.171E-6"/>
</mast_mdl:Primary_Scheduler></mast_mdl:MAST_MODEL>
29
Programa de medida
Estructura del programaModelo MAST2Informe 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
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
Estrategia y anotaciones
Invocaciones durante los ciclos de ejecuciónAnotaciones estilo JAVADOC y a partir de los
estereotipos de los patrones: (/* *@OORT_.... */)
/** * @OORT_protected */
Clase Protected {
Constructor(){
…
}
/** * @OORT_synchronized */
synchronized(){
…
}
}
32
Programa de medida
Clase principal y listas de elementosTimeMntr
ThreadMntr ProtectedOperMntr MutexMntr
name:String
mutex
name:Stringwcet:doubleacet:doublebcet:doubletype:ProtectedOperTypejidSet:set(long)
name:Stringjid:longwcet:doubleacet:doublebcet:doublepriority:intoperList:list(ProtectedOperMntr)isSegment:boolean
thread protectedOper mutex
«enum»
ProtectedOperType
SYNCHRONIZEDTRIGGERENTRYSYNCHRONIZER_ENTRYPOSTWAITINGSTATIC_SYNCHRONIZEDSTATIC_TRIGGERSTATIC_ENTRYSTATIC_SYNCHRONIZER_ENTRYSTATIC_POSTWAITING
entryentry
nextSegment 0..1
0..1
Atributo en cursiva es generado por el algoritmo de creación del modelo
0..1
1
* * *
trigger
callEntry
0..1
0..1
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
Instrumentación de código
Patrones ejecutoresimport TimeMntr.*;
/* * @OORT_eventHandler // @OORT_periodicExecutor */Clase Executor {
private int monitores;Constructor(){
…}
public void run(){createThreadMnrt();recordThrProcessInstant();while(!interrupted()){
…recordThrProcessInstant();
}
}
}
35
Instrumentación de código
Patrones protegidosimport TimeMntr.*;
/** * @OORT_protected // @OORT_eventSource // @OORT_synchronizer */Clase Protected {
private int monitores;Constructor(){
…createProtectedResource();createProtectedOperMntr();
}
/** * @OORT_eventTrigger */eventTrigger(){
recordOperProcessInstant();…notify();…recordOperProcessInstant();
}}
36
Instrumentación de código
MainImport TimeMntr.*;
/** * @OORT_main */Clase Main {
private static TimeMntr mntr;Main(){
new NoHeapRealTimeThread().run(){mntr = new TimeMntr();… .start() / .close() …mntr.stopRecordingData();mntr.createMastModel();
}}
}
37
Estrategias de herramienta
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
Especificación y diseño lógico
DAQRT-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
Diseño de MetrologyUpdating
Clock:MetrologyExecutor :Metrology [*]:Waveform [*]:Metrology
Data:Perturbogram
:PerturbographExecutor :Perturbograph ms:MssgStreamer
:time out update()
update()
updateStatisticData()
finalized()
awaitPerturbogram()
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
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
Generación del modelo
Modelo obtenido con TimeMntr<!-- "Perturbograph.PerturbographExecutor_1e51060" Executor model-->
<mast_mdl:Thread Name="Perturbograph.PerturbographExecutor_1e51060.thread" Scheduler="platformNode.sheduler">
<mast_mdl:Fixed_Priority_Params Priority="41"/>
</mast_mdl:Thread>
<mast_mdl:Enclosing_Operation Name="Perturbograph.PerturbographExecutor_1e51060.response"
Worst_Case_Execution_Time="977.920241E-3"
Avg_Case_Execution_Time="975.023895E-3"
Best_Case_Execution_Time="861.168964E-3">
<mast_mdl:Operation Name="Perturbogram_9ed927.awaitPerturborgram"/>
<mast_mdl:Operation Name="Perturbogram_9ed927.marshall"/></mast_mdl:Enclosing_Operation>
43
Generación del modelo
Modelo obtenido con TimeMntr<!-- "Metrology.MetrologyExecutor_1a679b7" Executor model-->
<mast_mdl:Thread Name="Metrology.MetrologyExecutor_1a679b7.thread" Scheduler="platformNode.sheduler">
<mast_mdl:Fixed_Priority_Params Priority="47"/>
</mast_mdl:Thread>
<mast_mdl:Regular_End_To_End_Flow Name="Metrology.MetrologyExecutor_1a679b7.e2ef">
<mast_mdl:Periodic_Event Name="trigger" Period="0E0"/>
<mast_mdl:Internal_Event Name="end">
<mast_mdl:Hard_Global_Deadline Referenced_Event="trigger" Deadline="0E0"/>
</mast_mdl:Internal_Event>
<mast_mdl:Internal_Event Name="internalEvent0"/>
<mast_mdl:Step Input_Event="trigger" Output_Event="internalEvent0"
Step_Schedulable_Resource="Metrology.MetrologyExecutor_1a679b7.thread"
Step_Operation="Metrology.MetrologyExecutor_1a679b7.response"
Hold_Schedulable_Resource="NO"/>
<mast_mdl:Step Input_Event="internalEvent0" Output_Event="end"
Step_Schedulable_Resource="Perturbograph.PerturbographExecutor_1e51060.thread"
Step_Operation="Perturbograph.PerturbographExecutor_1e51060.response"
Hold_Schedulable_Resource="NO"/>
</mast_mdl:Regular_End_To_End_Flow>
44
Tabla de contenidos
Introducción Herramienta RTLinuxNodeModelEstimator Módulo TimeMntr Herramienta RTCode4TimeMntr Aplicación BURTA Conclusiones y trabajo futuro
45
Conclusiones y trabajo futuro
Resultados satisfactoriosAplicaciones 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
Gracias por su atención, ¿preguntas?