• Keine Ergebnisse gefunden

Verlässliche Echtzeitsysteme

N/A
N/A
Protected

Academic year: 2022

Aktie "Verlässliche Echtzeitsysteme"

Copied!
28
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Verlässliche Echtzeitsysteme

Übungen zur Vorlesung Statische Stackbedarfsanalyse

Phillip Raffeck, Florian Schmaus, Simon Schuster

Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl Informatik 4 (Verteilte Systeme und Betriebssysteme)

https://www4.cs.fau.de

Sommersemester 2020

Raffeck, Schmaus, Schuster VEZS (SS20) 1 – 24

(2)

Statische Stackbedarfsanalyse Vorgehensweise

1 /* O b j e c t i v e f u n c t i o n */

2 max : +16 m d 5 _ o r i g _ i n i t +64 m d 5 _ u p d a t e \ 3 +64 m d 5 _ f i n a l +16 m d 5 _ m e m s e t \ 4 +208 m d 5 _ t r a n s f o r m +16 m d 5 _ e n c o d e ...;

5 6

7 /* C o n s t r a i n t s */

8 + main = 1;

9 + m d 5 _ i n i t + m d 5 _ m a i n <= + main ; 10 ...

Beispiel: md5-Summe 1 Vorgehen

1. Callgraph bestimmen

2. Stackbedarf einzelner Funktionen ( gcc -fstack-usage )

3. ILP

2

aufstellen (Nebenbedingungen aus 1., Kosten aus 2. verwenden) 4. ILP z.B. mittels lp_solve ; maximaler Stackbedarf

1

https://github.com/tacle/tacle-bench/

2Integer Linear Program (dt. ganzzahliges lineares Programm)

Raffeck, Schmaus, Schuster VEZS (SS20) Worst-Case Stack Usage 2 – 24

(3)

Optimierungsziel

Jeder Stapelrahmen einer Funktion f hat eine Größe size

Jede Funktion kann auf einem Pfad ein- oder mehrfach (Rekursion), insgesamt n-fach auf dem Stapel vorkommen

Gesucht: Fluss durch den Aufrufgraphen, welcher Stapelbedarf maximiert Dabei müssen Flussbedingungen eingehalten werden

Aufruferbeziehung Alternativen ...

Optimierungsziel

max X

Funktion f

size f · n f

In lp_solve -Syntax:

max : +64 n_f1 +48 n_f2 +42 n_f3 ;

Raffeck, Schmaus, Schuster VEZS (SS20) Worst-Case Stack Usage - ILP 3 – 24

(4)

Flussbedingung: Initialer Aufruf

Semantik

Der initiale Aufruf erfolgt maximal (wahlweise auch genau) ein mal

Formalisierung

n main1

lp_solve -Syntax

n_main <= 1;

main

Raffeck, Schmaus, Schuster VEZS (SS20) Worst-Case Stack Usage - ILP 4 – 24

(5)

Flussbedingung: Mehrere Vorgänger

Semantik

Jede Funktion kann nur so oft ausgeführt werden, wie sie von den Vorgängern aus aufgerufen wird Formalisierung

Sei f a b die Anzahl der Aufrufe von b durch a:

n callee ≤ X

p ∈ Aufrufer(callee)

f p callee callee

f g h

lp_solve -Syntax

n_caller <= + f_f_callee + f_g_callee + f_h_callee ;

Raffeck, Schmaus, Schuster VEZS (SS20) Worst-Case Stack Usage - ILP 5 – 24

(6)

Flussbedingung: Immer nur ein Nachfolger pro Funktion

Semantik

Jede Funktionsinkarnation ruft gleichzeitig jeweils maximal eine weitere Funktion auf

Formalisierung

Sei f a b die Anzahl der Aufrufe von b durch a:

X

c ∈ Aufgerufene(caller)

f caller cn caller

caller

f g h

lp_solve -Syntax

+ f_caller_f + f_caller_g + f_caller_h <= n_caller ;

Raffeck, Schmaus, Schuster VEZS (SS20) Worst-Case Stack Usage - ILP 6 – 24

(7)

Flussbedingung: Rekursion

Semantik

Rekursive Funktionen können pro Aufruf von außen bis zu ihrer maximalen Rekursionstiefe (d) oft ausgeführt werden.

Formalisierung

f recd rec · f in

n recf in + f rec

lp_solve -Syntax

f_rec <= +42 f_in ; n_rec <= f_in + f_rec ;

rec f

rec

f

in

Raffeck, Schmaus, Schuster VEZS (SS20) Worst-Case Stack Usage - ILP 7 – 24

(8)

Beispiel

Problemformulierung in lpsolve:

max : +40 n _ m a i n +20 n_f +60 n_g ; n _ m a i n <= 1;

+ f _ m a i n _ f + f _ m a i n _ g <= n _ m a i n ; n_f <= + f _ m a i n _ f ;

+ f _f_ g <= n_f ;

n_g <= + f _f_ g + f _ m a i n _ g ;

Ausgabe von lp_solve :

Va lue of o b j e c t i v e f u n c t i o n : 1 2 0 . 0 0 0 0 0 0 0 0 A c t u a l v a l u e s of the v a r i a b l e s :

n _ m a i n 1

n_f 1

n_g 1

f _ m a i n _ f 1

f _ m a i n _ g 0

f_ f_g 1

main: 40 bytes

f: 20 bytes

g: 60 bytes

Raffeck, Schmaus, Schuster VEZS (SS20) Worst-Case Stack Usage - ILP 8 – 24

(9)

Beispiel

Problemformulierung in lpsolve:

max : +40 n _ m a i n +20 n_f +60 n_g ; n _ m a i n <= 1;

+ f _ m a i n _ f + f _ m a i n _ g <= n _ m a i n ; n_f <= + f _ m a i n _ f ;

+ f _f_ g <= n_f ;

n_g <= + f _f_ g + f _ m a i n _ g ; Ausgabe von lp_solve :

Va lue of o b j e c t i v e f u n c t i o n : 1 2 0 . 0 0 0 0 0 0 0 0 A c t u a l v a l u e s of the v a r i a b l e s :

n _ m a i n 1

n_f 1

n_g 1

f _ m a i n _ f 1

f _ m a i n _ g 0

f_ f_g 1

main: 40 bytes

f: 20 bytes

g: 60 bytes

Raffeck, Schmaus, Schuster VEZS (SS20) Worst-Case Stack Usage - ILP 8 – 24

(10)

LP-Solve Fallstricke: Infeasible model

$ l p _ s o l v e i n f e a s i b l e . lp This p r o b l e m is i n f e a s i b l e

Infeasible Models

Logischer Widerspruch in Nebenbedingungen

Leider bietet lp_solve selbst direkt keine Hilfestellung zur Lokalisation.

Die Entwickler empfehlen das Einführen von “slack”-Variablen: 3 max : x + y ;

x + 1 <= x ; y > y + 1;

x <= 20;

y <= 20;

max: x + y -1000 e_1 -1000 e_2;

x + 1 - e_1 <= x;

y + e_2 > y + 1;

x <= 20;

y <= 20;

x: 20

y: 20

e_1: 1 e_2: 1

3

http://lpsolve.sourceforge.net/5.5/Infeasible.htm

Raffeck, Schmaus, Schuster VEZS (SS20) lp_solve 9 – 24

(11)

LP-Solve Fallstricke: Unbounded model

$ l p _ s o l v e u n b o u n d e d . lp This p r o b l e m is u n b o u n d e d

Unbounded Models

Eine oder mehrere der Variablen sind nach oben unbeschränkt

Durch künstliche Beschränkung aller Variablen im System (auf einen sehr großen Wert) lassen sich unbeschränkte Variablen detektieren:

max : x + y + z ; z <= y + 1;

y <= 20;

max: x + y + z;

z <= y + 1;

y <= 20;

x <= 5000;

y <= 5000;

z <= 5000;

x: 5000

y: 20

z: 21

Raffeck, Schmaus, Schuster VEZS (SS20) lp_solve 10 – 24

(12)

LP-Solve Fallstricke: Syntax

lp_solve ist auf die Lösung linearer Gleichungssysteme ausgelegt Es ist dementsprechend nicht möglich, zwei Variablen zu multiplizieren

a * b ⇒ Syntaxfehler max : a b ⇒ optimiert a + b

Lösung in VEZS für Konstanten (Stapelrahmengrößen): C-Präprozessor:

# d e f i n e s _ m a i n 40

# d e f i n e s_f 20

# d e f i n e s_g 60

max : + s _ m a i n n _ m a i n + s_f n_f + s_g n_g ;

; stackusage / lp_solvepp

Raffeck, Schmaus, Schuster VEZS (SS20) lp_solve 11 – 24

(13)

Statische Stackbedarfsanalyse

Statische Code-Analyse mit a 3 Tool-Suite 1. aiT: WCET-Analyse

2. Stack-Analyzer: Stackbedarf 3. ...

Installiert im CIP-Pool

/proj/i4ezs/tools/a3_x86/bin/a3x86

Raffeck, Schmaus, Schuster VEZS (SS20) AbsInt Stack Analyzer 12 – 24

(14)

a 3 Analyzer – Lizenzserver

Zugangsdaten

Benutzer/Passwort wie bei RÜ-Helpdesk

Raffeck, Schmaus, Schuster VEZS (SS20) AbsInt Stack Analyzer – a3Analyzer 13 – 24

(15)

a 3 Analyzer – Lizenzserver

Zugangsdaten

Benutzer/Passwort wie bei RÜ-Helpdesk

Raffeck, Schmaus, Schuster VEZS (SS20) AbsInt Stack Analyzer – a3Analyzer 13 – 24

(16)

a 3 Analyzer – Neues Projekt Anlegen

Raffeck, Schmaus, Schuster VEZS (SS20) AbsInt Stack Analyzer – a3Analyzer 14 – 24

(17)

a 3 Analyzer – Executable Angeben

Raffeck, Schmaus, Schuster VEZS (SS20) AbsInt Stack Analyzer – a3Analyzer 15 – 24

(18)

a 3 Analyzer – Hardware Auswählen

Raffeck, Schmaus, Schuster VEZS (SS20) AbsInt Stack Analyzer – a3Analyzer 16 – 24

(19)

a 3 Analyzer – Stack-Analyse Selektieren

Raffeck, Schmaus, Schuster VEZS (SS20) AbsInt Stack Analyzer – a3Analyzer 17 – 24

(20)

a 3 Analyzer – Funktion Auswählen

Raffeck, Schmaus, Schuster VEZS (SS20) AbsInt Stack Analyzer – a3Analyzer 18 – 24

(21)

a 3 Analyzer – Stack-Analyse Starten

Raffeck, Schmaus, Schuster VEZS (SS20) AbsInt Stack Analyzer – a3Analyzer 19 – 24

(22)

a 3 Analyzer – Analyseoutput

Raffeck, Schmaus, Schuster VEZS (SS20) AbsInt Stack Analyzer – a3Analyzer 20 – 24

(23)

a 3 Analyzer – Analyseoutput

⇒ Warnung zu ELF ignorieren

Raffeck, Schmaus, Schuster VEZS (SS20) AbsInt Stack Analyzer – a3Analyzer 20 – 24

(24)

a 3 Analyzer – Callgraph

Raffeck, Schmaus, Schuster VEZS (SS20) AbsInt Stack Analyzer – a3Analyzer 21 – 24

(25)

a 3 Analyzer – Annotationstemplate kopieren

Raffeck, Schmaus, Schuster VEZS (SS20) AbsInt Stack Analyzer – a3Analyzer 22 – 24

(26)

a 3 Analyzer – Annotationstemplate kopieren

Ais-Notationen

Auch als C-Kommentar verwendbar

// ai: routine "h" recursion bound : 0 .. 42;

Raffeck, Schmaus, Schuster VEZS (SS20) AbsInt Stack Analyzer – a3Analyzer 22 – 24

(27)

a 3 Analyzer – Kommentar-Parsing Aktivieren

Raffeck, Schmaus, Schuster VEZS (SS20) AbsInt Stack Analyzer – a3Analyzer 23 – 24

(28)

Aufgabenstellung

Existierende Implementierung: Array-Datenstruktur Vorgegebene Funktionen: Sortieren, Maximumssuche, ...

Aufgaben

1. Dynamische Analyse 1.1 Thread erstellen 1.2 Stack initialisieren

1.3 Programm (mit Eingabedaten) ausführen 1.4 Stackverbrauch messen

2. Statische Analyse

2.1 ILP aus Aufrufgraph aufstellen 2.2 Mittels lp_solve lösen 2.3 Analyse mittels a

3

Stack-Analyzer

Raffeck, Schmaus, Schuster VEZS (SS20) Aufgabenstellung 24 – 24

Referenzen

ÄHNLICHE DOKUMENTE

❚ Mit anderen Worten: Das Ergebnis von odd(2) wird nicht weiter verrechnet, sondern direkt als Wert von even(3) zurückgegeben (Tail-Call).. ❚ Die lokalen Variablen für even(3)

ist wieder proportional zur Anzahl der Vergleiche *left &lt; *right ( das muss man aber nicht sofort sehen). Alle Vergleiche werden von der Funktion

Das Problem kann in zwei Teilprobleme aufgeteilt werden. Das erste Teilproblem besteht darin, die Ordnung der Hilbert-Kurve einzulesen und eine Folge von

Zudem ist das operative Handling mit creos xeno.protect einfach, weil die Membran beidseitig verwendet werden kann und sich dank ihrer hohen Festigkeit gut in Form

Zudem ist das operative Handling mit creos xeno.protect einfach, weil die Membran beidseitig verwendet werden kann und sich dank ihrer hohen Festigkeit gut in Form

kann zwar nicht erwarten, daß nun plötz- lich mehr telefoniert wird, wenn die Telefonwertkarte gekoppelt i t mit ande- ren Funktionen, aber die PTT partizipiert an jeder

Bei der Suche nach einem Lösungsalgorithmus für irgendein Problem ist es immer zweckmä- ßig, sich zuerst einmal zu fragen, ob es nicht eine einfache rekursive Lösung gibt.. Unabhängig

Die Libelle liebt ihre blauen Augen.. Lilli ist