[Kos-dev] Quelques idées
d2
kos-dev@enix.org
29 Apr 2003 15:02:37 +0200
Hello,
>>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni@enix.org> writes:
Thomas> * Est-il possible d'utiliser un truc genre Valgrind [1]
Thomas> pour KOS ? Je me fais souvent avoir par des données non
Thomas> initialisées, et je pense que ça serait une bonne idée
Thomas> d'avoir un truc qui peut vérifier ça de manière
Thomas> systématique. Je ne sais pas comment ça peut marcher, peut
Thomas> être en plugin pour bochs ?
Utiliser une machine virtuelle pour detecter les acces aux variables
non initialisees dans une machine virtuelle ? Mouf, c'est un peu de
l'empilage violent je trouve. Vaudrait mieux inserer un plugin pour
bochs qui se contente de rajouter une bitmap des adresses physiques,
par defaut toutes positionnees a 0 (non ecrites), puis de
court-circuiter les acces memoire (doit bien y avoir un mem.cc) pour
mettre le bitmap a jour a chaque write, et verifier que le bit
correspondant est a 1 a chaque read (c'est ce que fait valgrind, mais
lui le fait au niveau du bit, pas de l'octet).
Thomas> à chaque retour de fonction (avant le 'ret'). A chaque
Thomas> fois, on récupère le compteur de cycles, et hop à partir
Thomas> de là, on peut faire quelque chose de précis. Quelqu'un
Thomas> a-t-il une idée pourquoi ce n'est pas fait comme ça ?
Thomas> Y-a-t-il un obstacle technique pour implémenter ma
Thomas> proposition ?
gcc -finstrument-functions
Thomas> * Avoir un truc pour détecter les fuites de mémoire :
Thomas> l'OS est petit pour l'instant, ça serait intéressant de
Thomas> pouvoir tester si des scénarios du type : construction
Thomas> team construction thread desctruction thread destruction
Thomas> team engendrent des fuites mémoires.
Tu veux parler des slab ? Car a priori pour les demandes de pages
physiques y'a pas de pb (mappees en VM => on a la liste => on sait
quoi desallouer a la fin de la team). Le principe est toujours le meme
(maintenir une liste ou une hash des objets alloues/supprimes), la
difficulte est que maintenir cette liste necessite des appels a de
l'alloc/liberation (danger oeuf/poule). Faudrait voir, mais ca peut
peut-etre se faire plus simplement en associant a chaque objet du slab
un identifiant (pas un pointeur ! il faut que ca soit persistant apres
la mort du team) vers le team proprietaire (suffirait de parcourir les
slabs pour recuperer les objets qui correspondent a des teams morts) =>
pas de mecanisme parallele (tout integre dans slab).
Bonne journee,
--
d2