more/less TODO

git-svn-id: https://www4.informatik.uni-erlangen.de/i4svn/danceos/trunk/devel/fail@1470 8c4709b5-6ec9-48aa-a5cd-a96041d1645a
This commit is contained in:
hsc
2012-08-02 13:28:26 +00:00
parent 7eca34ad84
commit 5c81421728

View File

@ -6,7 +6,6 @@ Verrückte Ideen
abgeschalteten Interrupts]) abgeschalteten Interrupts])
* lösbar als Callback-"Experimente", die selbst Events auslösen? * lösbar als Callback-"Experimente", die selbst Events auslösen?
* Synthese komplexerer Events * Synthese komplexerer Events
- Events fuer besondere Instruktionen (HLT?)
- Backend-Schnittstelle (z.B. direkte Anbindung an Simulator vs. - Backend-Schnittstelle (z.B. direkte Anbindung an Simulator vs.
GDB-Schnittstelle zu Simulator vs. Anbindung an reale HW) von GDB-Schnittstelle zu Simulator vs. Anbindung an reale HW) von
Backend-Architektur (welche Register gibt es, wie breit ist der Backend-Architektur (welche Register gibt es, wie breit ist der
@ -19,36 +18,39 @@ FailBochs-Bausteine TODO
Wer gerade an was arbeitet, steht in Klammern hinter dem TODO. Wer gerade an was arbeitet, steht in Klammern hinter dem TODO.
Bochs: Bochs:
- Determinismus: Wie kann für Mikroexperimente sichergestellt werden, dass - Bug: Nach save() ist momentan hinterher der Instruction-Pointer eins weiter,
externe Ereignisse (Timer, Eingang von Netzwerkpaketen, ...) reproduzierbar womit nicht unbedingt zu rechnen ist.
zum selben Zeitpunkt eintreffen? (rh) -> Workaround? save() ruft implizit restore() ...
- Interrupts teilweise oder komplett sperren - bei BX_PANIC nicht einfach weitermachen, sondern dem Experiment
- optional: Interrupts auslösen signalisieren, dass der Simulator gepanict hat?
Abstraktionen: Abstraktionen:
- Traces: geeignet kapseln, in einer Sequenz von protobuf-Nachrichten statt
einer großen rausschreiben/laden (rh)
- Endianness? - Endianness?
- Merkmalmodell von Implementierungsdetails trennen (hsc) - Merkmalmodell von Implementierungsdetails trennen (hsc)
-> automatische Konfigurierung anhand Experimentauswahl -> automatische Konfigurierung anhand Experimentauswahl
-> Annotierung von Experimentcode, automatisches Nachladen von Aspekten -> Annotierung von Experimentcode, automatisches Nachladen von Aspekten
- einheitliches Namensschema für Backend-Beeinflussungen (Interrupt-Synthese,
Interrupt-Unterdrückung, Speicher schreiben, Register schreiben, ...) finden
-> "Fehlerinjektion" ist das ja nicht immer
- (Allgemeine) Testfälle / Regression-Tests - (Allgemeine) Testfälle / Regression-Tests
-> Modifikationen an FAIL* sind damit leichter zu verifizieren -> Modifikationen an FAIL* sind damit leichter zu verifizieren
- Abstraktionen für Funktionsparameter und -rückgabewerte
- API zum Übersetzen von Adressen (virtuell [-> linear] -> physikalisch)
-> ggf. nur noch physikalische (oder virtuelle?) Adressen für diverse
Listener?
- SingleBitflipFaultspacePruning kapseln (hsc)
Events: Events/Listener:
- Aktuelle Events sind viel mehr "Interests", die erst bei Auslösung zu - Umstrukturierung des Event-Managements, damit es performanter wird. Dazu
einem "Event" werden (-> semantische Ungenauigkeit) werden Aspekte für die Performanz-Verbesserung pro zeitkritischem Typ
-> benenne Events um ("Interests"?) eingewoben. Dabei soll auf eine "search"-Methode zurückgegriffen werden, mit
-> Erstelle neue Klassenhierarchie, die den "Informationsanteil" der "Events" der in den typspezifischen Containern gesucht werden kann. [...]
repräsentiert. Diese kapseln dann die Informationen in den Events und - Listener-Callback-Funktionalität einführen: von spezifischem Listener
werden zudem intern im Fail*-Framework verwendet (genauer: kommuniziert). ableiten, trigger() überschreiben
Hintergrund: Umstrukturierung des Event-Managements, damit es performanter - Listener alternativ beliebig lange aktiv lassen (statt sie jedes mal neu
wird. Dazu werden Aspekte für die Performanz-Verbesserung pro zeitkritischem Typ registrieren zu müssen, wenn einer gefeuert hat)
eingewoben. Dabei soll auf eine "search"-Methode zurückgegriffen werden, mit - Bug? Wenn z.B. das Tracing-Plugin aktiv ist, ist nicht klar, ob ein
der in den typspezifischen Containern gesucht werden kann. [...] bestimmtes Ereignis zuerst diesem, oder dem laufenden Experiment zugestellt
wird; je nach Reihenfolge sieht der rausgeschriebene Trace anders aus
-> explizites "stell mal alle übrigen Events zu, bevor es mit mir weitergeht"
im SimulatorController?
Parallelisierung: Parallelisierung:
- Momentan landen initial *alle* Parametersätze im Speicher. Sobald das viel - Momentan landen initial *alle* Parametersätze im Speicher. Sobald das viel
@ -86,6 +88,13 @@ Parallelisierung:
* Problem 1: hilft nicht, wenn der Client gerade neu gestartet wurde * Problem 1: hilft nicht, wenn der Client gerade neu gestartet wurde
* Problem 2: wenn das viele Clients tun, landen sehr viele unbearbeitete * Problem 2: wenn das viele Clients tun, landen sehr viele unbearbeitete
Jobs in der Aktiv-Queue auf dem Server Jobs in der Aktiv-Queue auf dem Server
- mehrere Jobs auf einmal übertragen -> weniger Kommunikationsvorgänge
* adaptiv: clientseitig erst nur einen anfordern, Laufzeit messen, die
folgenden Male immer so viele anfordern, dass (geschätzt) z.B. mindestens
60s zwischen zwei Kommunikationsvorgängen liegen (mit oberem Limit für
Anzahl Jobs)
-> dann müsste man sich über die ganzen serverseitigen Engpässe gar keine
Gedanken machen
Implementierungsdetails: Implementierungsdetails:
- einheitliche Fehlerbehandlung - einheitliche Fehlerbehandlung
@ -93,6 +102,8 @@ Implementierungsdetails:
siehe BochsController::save) vereinheitlichen, evtl. zusätzlich via siehe BochsController::save) vereinheitlichen, evtl. zusätzlich via
(Non-)Verbose-Mode(s) (Non-)Verbose-Mode(s)
-> "Ausgabesystem", "Logger" -> "Ausgabesystem", "Logger"
- einfache, Linux-spezifische Wallclock-Zeitmessung ähnlich boost::timer v2
* Start, Ende, einfache Stringkonvertierung/Ausgabe
Effizienz: Effizienz:
- getrennte Queues? - getrennte Queues?
@ -106,11 +117,21 @@ Buildsystem:
(verwendeter Compiler, Installationsverzeichnis, ...), den Rest in einem (verwendeter Compiler, Installationsverzeichnis, ...), den Rest in einem
brauchbaren Konfigurationswerkzeug mit Ausdrucksmöglichkeiten für brauchbaren Konfigurationswerkzeug mit Ausdrucksmöglichkeiten für
Merkmalmodelle, Abhängigkeiten, Mehrfachauswahl etc. (kconfig?) Merkmalmodelle, Abhängigkeiten, Mehrfachauswahl etc. (kconfig?)
* Bochs / OVP sind Alternativen, nicht beide anschaltbar (?) * Bochs / OVP / Gem5 sind Alternativen, nicht beide anschaltbar
-> Cmake-Combo-Box (ggf. noch an anderen Stellen einsetzbar)
http://www.kitware.com/blog/home/post/82
- Hinzufügen eines neuen Experiments konkreter dokumentieren (how-to-build.txt?) - Hinzufügen eines neuen Experiments konkreter dokumentieren (how-to-build.txt?)
- "Aktivieren" von Aspekten muss anders implementiert werden:
* Momentan ist es nicht möglich, dass mehrere Build-Verzeichnisse (mit
Aspekten darin) nebeneinander existieren, da ag++ alle Unterverzeichnisse
von fail/ nach Aspektheadern durchsucht.
-> stattdessen (in Cmake) eine globale Liste von aktiven Aspektheadern
pflegen und diese per ag++-Flag "-a" aktivieren.
-> ggf. instantiate-foo-experiment.ah nicht mehr generieren (hässlicher, und
dann unnötiger Hack)
Dokumentation: Dokumentation:
- Änderungen im Klassendiagramm nachziehen (hsc) - Änderungen im Klassendiagramm nachziehen
Erledigt: Erledigt:
- alle Events mit Zähler versehen, so dass sie erst bei Erreichen der 0 feuern - alle Events mit Zähler versehen, so dass sie erst bei Erreichen der 0 feuern
@ -175,6 +196,22 @@ Erledigt:
- unbeantwortete Jobs am Ende einer Kampagne erneut vergeben (ab) - unbeantwortete Jobs am Ende einer Kampagne erneut vergeben (ab)
- Namespace Confusion: aufräumen (ab) - Namespace Confusion: aufräumen (ab)
- Verzeichnisstruktur umstrukturieren und aufräumen (ab) - Verzeichnisstruktur umstrukturieren und aufräumen (ab)
- Determinismus: Wie kann für Mikroexperimente sichergestellt werden, dass
externe Ereignisse (Timer, Eingang von Netzwerkpaketen, ...) reproduzierbar
zum selben Zeitpunkt eintreffen? (rh)
- Interrupts teilweise oder komplett sperren
- optional: Interrupts auslösen
- Traces: geeignet kapseln, in einer Sequenz von protobuf-Nachrichten statt
einer großen rausschreiben/laden (rh)
- einheitliches Namensschema für Backend-Beeinflussungen (Interrupt-Synthese,
Interrupt-Unterdrückung, Speicher schreiben, Register schreiben, ...) finden
-> "Fehlerinjektion" ist das ja nicht immer
- Aktuelle Events sind viel mehr "Listener", die auf eine ganze Klasse von
Ereignissen warten (semantische Ungenauigkeit)
-> benenne Events um ("Listener")
-> Erstelle neue Klassenhierarchie, die den "Informationsanteil" der "Events"
repräsentiert. Diese kapseln dann die Informationen in den Events und
werden zudem intern im Fail*-Framework verwendet (genauer: kommuniziert).
========================================================================================== ==========================================================================================
Theorie TODO Theorie TODO