Runtime monitoring of time-critical tasks in multi-core systems
Claire Pagetti – ONERA, France Christine Rochange, Univ. of Toulouse, France
Runtime monitoring of time-critical tasks in multi-core systems - - PowerPoint PPT Presentation
Runtime monitoring of time-critical tasks in multi-core systems Claire Pagetti ONERA, France Christine Rochange, Univ. of Toulouse, France Motivation Static analysis provides safe but pessimistic WCET estimates safe WCET estimation
Claire Pagetti – ONERA, France Christine Rochange, Univ. of Toulouse, France
ª worst-case paths ª maximum levels of conflicts to shared resources
ª waste of resources ª schedulability issues
ª ignore pathological conflict situations or assume an amount of conflicts in
ª restrict analysis to frequent input data ranges ª ignore timing anomalies (➛ time composition)
τ3 ¡ τ2 ¡
core 0 cores 1..n
τC ¡ τ1 ¡ DC TC τ3 ¡ τ2 ¡
core 0 cores 1..n
τC ¡ τ1 ¡ DC TC τ3 ¡ τ2 ¡
core 0 cores 1..n
τC ¡ τ1 ¡ DC TC τ3 ¡ hyp: one task per core WCETC(n+1) is pessimistic ➛ schedulability issue
➛ low resource utilisation
WCETC(x) is assumed (unsafe)
to isolation mode is needed to meet the deadline
p(1): remaining WCET in isolation from point p
p(n+1): WCET until next monitoring point (p+1)
p(1) + tsw + NWCETC p(n+1)
p(n+1)
tsw τ3 ¡ τ2 ¡
core 0 cores 1..n
τC ¡ τ1 ¡ DC TC τ3 ¡
RWCETC
p(1)
NWCETC
p(n+1)
OETC
p(n+1)
p p+1
Runtime Control to Increase Task Parallelism in Mixed-Critical Systems, ECRTS 2014.
p(1) = f(offline-computed parameters)
RWCETC
p0(1)
p0 p1 p2 p3 p4
RWCETC
p2(1)
RWCETC
p3(1)
N’0 ¡ N’1 ¡ F ¡ N0 ¡ N9 ¡ #define N 100 int A[N][N]; int main() { lu(); return EXIT SUCCESS; } int lu() { int i, j, k; for (k=0;k<N;k++){ for (j=k+1;j<N;j++)do A[k][j]=A[k][j]/A[k][k]; for (i=k+1;i<N;i++) for (j=k+1;j<N;j++)do A[i][j]-=A[i][k]*A[k][j]; } return EXIT SUCCESS; } C1 ¡ N2 ¡ C2 ¡ N4 ¡ C3 ¡ N8 ¡ N3 ¡ N5 ¡ C3 ¡ N6 ¡ N7 ¡
level Extended CFG
N’0 ¡ N’2 ¡ F ¡ N0 ¡ N9 ¡ C1 ¡ N2 ¡ C2 ¡ N4 ¡ C3 ¡ N8 ¡ N3 ¡ N5 ¡ C4 ¡ N6 ¡ N7 ¡
level point type level w d N’0 1 F
F_ENTRY
1 da N’2
F_EXIT
1 db N0 1 dc C1 1 wa dd N2 2 de C2 2 wb df N3 3 dg N4 2 dh C3 2 wc di N5 3 dj C4 3 wd dk N6 4 dl N7 3 dm N8 2 dn N9 1 do wd de dh
curr_level = 0; last[0] = start; RWCET[0] = WCET;
RWCET[level[p]] = RWCET[level[p] – 1] – d[p]; else if (last[level[p]] == p) RWCET[level[p]] = RWCET[level[p]] – w[p]; else RWCET[level[p]] = RWCET[level[p]-1] – d[p]; last[level[p]] = p; curr_level = level[p]; simplified version (all function calls at the same level)
N’0 ¡ N’1 ¡ F ¡ N0 ¡ N9 ¡ C1 ¡ N2 ¡ C2 ¡ N4 ¡ C3 ¡ N8 ¡ N3 ¡ N5 ¡ C3 ¡ N6 ¡ N7 ¡
1 2 3 4
level Extended CFG