Thèse de doctorat (2025)
Résumé
Parmi les outils existants de détection des conditions de course et des violations de la sûreté spatiale et temporelle de la mémoire de tas, les techniques de vérification dynamique se distinguent par leur précision et leur meilleure capacité de passage à l’échelle par rapport aux approches statiques. Toutefois, malgré ces atouts, les outils dynamiques les plus perfectionnés restent difficilement utilisables dans de nombreux contextes de test réels, en raison de leur forte consommation en mémoire et en ressources de calcul. Cette limitation freine leur adoption dans des environnements contraints en ressources, tels que les systèmes embarqués, et complique les tests effectués sous des charges réalistes. En outre, même les détecteurs les plus répandus présentent souvent des lacunes de détection, ce qui met en lumière la nécessité de développer de nouvelles approches capables d’élargir leur couverture sans alourdir le coût en temps d’exécution ou en mémoire. En conséquence, cette thèse poursuit deux objectifs principaux : concevoir de nouveaux détecteurs dynamiques à faible surcoût pour les conditions de course et les violations de la sûreté de la mémoire de tas, et améliorer la couverture d’un détecteur existant sans accroître le surcoût en temps d’exécution ou en mémoire. Ces objectifs visent à surmonter les principales limites des approches actuelles et ont guidé les trois axes de recherche développés au cours de cette thèse. Le premier axe de recherche a examiné dans quelle mesure les avancées matérielles récentes en matière de traçage d’exécution pouvaient être exploitées pour concevoir un détecteur de conditions de course (data races) à faible surcoût, adapté aux environnements à ressources limitées, tels que les systèmes embarqués, tout en conservant les capacités de détection offertes par les outils existants à fort surcoût. Dans cette optique, nous avons conçu et mis en oeuvre ThreadMonitor (TMon), un détecteur post-mortem de conditions de course destiné aux programmes C et C++ multithreadés utilisant la bibliothèque Pthread. TMon a été spécifiquement développé pour offrir une couverture de détection équivalente à celle de ThreadSanitizer (TSan), tout en réduisant considérablement le surcoût d’exécution. Pour cela, TMon repose sur deux phases principales : une phase de traçage légère et une phase d’analyse post-mortem. Durant la phase de traçage, TMon utilise les paquets ptwrite d’Intel, une fonctionnalité de traçage matériel récemment répandue dans Intel Processor Trace (Intel PT), afin de tracer les mêmes événements que ceux suivis par TSan, avec un très faible impact sur les performances. Grâce à ces paquets, TMon enregistre pour chaque événement exactement les mêmes informations d’exécution que celles collectées par TSan à des vi fins d’analyse. Par la suite, l’analyseur post-mortem de TMon reconstruit la séquence des événements à partir des traces afin de déterminer si l’exécution observée présente des conditions de course. TMon n’induit aucun surcoût direct sur la mémoire de données, introduit un surcoût minimal sur la mémoire d’instructions, et engendre un ralentissement très limité. Nos évaluations expérimentales montrent qu’en moyenne, TMon entraîne un surcoût d’exécution 2 à 6 fois inférieur à celui de TSan, y compris en prenant en compte le coût d’écriture des traces sur disque. Le deuxième axe de recherche a visé à évaluer s’il était possible de réaliser une détection exhaustive des violations temporelles et spatiales d’accès à la mémoire de tas dans les programmes C en combinant la propagation dynamique de métadonnées associées aux pointeurs avec une analyse effectuée à la compilation, tout en limitant le surcoût induit. Dans ce cadre, nous avons développé AddressMonitor (AMon), un outil de vérification à l’exécution qui associe le marquage des pointeurs à une analyse statique et à des transformations réalisées lors de la compilation. Plus précisément, AMon permet de détecter les accès hors limites (outof- bound accesses), les utilisations après libération (use-after-frees), les doubles libérations (double-frees) ainsi que les fuites de mémoire (memory leaks). Il identifie également deux pratiques de programmation à risque liées à la gestion mémoire : le passage d’un pointeur non-base aux fonctions standard de réallocation ou de libération, ainsi que les utilisations potentielles après libération survenant à la suite d’une réallocation. À la compilation, AMon identifie les opérandes pointeurs alloués sur le tas, génère des variantes non marquées, et remplace les pointeurs d’origine en conséquence. À l’exécution, il attribue une valeur de marquage unique à chaque objet alloué, insère cette valeur dans le pointeur, et maintient une table des objets permettant de suivre les informations spatiales, temporelles et de débogage pendant toute l’exécution du programme. Nos évaluations expérimentales montrent qu’AMon présente un meilleur compromis entre surcoût en temps d’exécution et surcoût mémoire que les outils de pointe existants. Son efficacité et sa pertinence pratique ont été confirmées par son intégration réussie dans un système informatique embarqué propriétaire déployé par notre partenaire industriel Ericsson. Le troisième axe de recherche a étudié comment les compromis d’implémentation visant à réduire le surcoût dans les détecteurs dynamiques de conditions de course peuvent engendrer des angles morts de détection non documentés, et si de telles limitations peuvent être atténuées sans augmenter le temps d’exécution ni la consommation mémoire. Nous nous sommes penchés sur TSan, un détecteur de conditions de course de pointe intégré aux chaînes de compilation Clang et GCC. Nous avons analysé son sous-système de mémoire d’ombre — responsable de l’enregistrement et de la vérification de l’historique des accès mémoire — et vii mis en évidence deux angles morts jusqu’alors non documentés : le premier dû à l’éviction aléatoire lors du remplacement des entrées en mémoire d’ombre, le second lié au caractère non atomique de la vérification des courses et de la mise à jour des valeurs d’ombre. Nous avons formalisé les conditions dans lesquelles ces angles morts se manifestent, et proposé des stratégies d’atténuation qui permettent d’améliorer la couverture de détection sans modifier le surcoût initial de l’outil.
Statistiques
Total des téléchargements à partir de PolyPublie
Téléchargements par année
Provenance des téléchargements
