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:
91
doc/todo.txt
91
doc/todo.txt
@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user