Des états
• Pourquoi toute cette excitation autour des états ?
• Le traceur nous donne des évènements ponctuels
• Un état décrit comment se trouvele système pendant un intervallede temps
Un exempleLes statistiques
Temps Évènement
10 open("fichier1.txt") = 3 (descripteur de fichier)
20 read(fd = 3, ...)
30 close(fd = 3)
40 open("fichier2.txt") = 3 (descripteur de fichier)
50 read(fd = 3, ...)
60 close(fd = 3)
Un autre exempleLe control flow view de LTTV
• Indique pour chaque instant que fait le processus:– Exécution, bloqué, en appel système, etc.
Temps
Processus 0
Processus 1
Processus 2
Processus 3
Pourquoi un nouveau système d’état ?LTTV en possède déjà un…
• Plus générique– Celui de LTTV est fait sur mesure pour les
évènements noyaux de LTTng 0.x.
• Pour qu’il puisse être utilisé dans d’autres applications.
Un système d’état tout neufMerci, Alexandre
• Répertoire clés / valeurs– Clés : « attributs »– Valeurs : « états »
• Clés organisées comme un système de fichier– Chaque nœud (interne ou feuille) possède une
valeur• On peut lire et écrire les valeurs
d’états pendant la lecture de latrace.
Gestionnaire d’évènements
• L’utilisateur doit programmer un peu de colle.• Prendre les évènements et générer les
changements d’états correspondants.
Système d’étatsGestionnaire d’évènements
fork() Ajouter entréeNouveau processus
Quark État
0
1
2
3
4
5
6
Quack ? Quark !
processus(nulle)
32(nulle)
45(nulle)
parent17
parent32
exec_name"grep"
exec_name"bash"
… …
0
1 2
3 4 5 6
LégendeAttributQuarkValeur
Lien avec l’historique
• Le système peut enregistrer toutes les modifications des valeurs d’états
• Utilisation optionnelle de la librairie d’intervalles
• Méthodes pour accéder aux valeurs d’états passées
Difficultés
• Définition d’un API assez léger
• Gestion de la mémoire – shared_ptr
• Abstraction du lien avec la librairie d’historique, ne pas avoir de dépendance