Engineering Instrumentation for Runtime Verification and Monitoring
Ingénierie de l'instrumentation pour la vérification de l'exécution
Résumé
In this thesis, our primary focus is on online monitoring and concurrent programs. We identify three key challenges in applying runtime verification to these areas: ensuring the accuracy of trace collection, effectively guiding the instrumentation process, and assessing the validity of the collected traces. These challenges often render existing monitoring frameworks inadequate in various scenarios. To address the first two challenges mentioned above, this thesis introduces BISM, a bytecode-level instrumentation framework designed for JVM languages. BISM provides high-level abstractions suitable for different types of users within the domain of runtime verification and fulfills the following expressiveness capabilities.First, BISM allows the extraction of events at the bytecode level accommodating the monitoring of properties specified over events with various granularity levels. Second, BISM is designed to support writing static analyzers within the instrumentation specification. This enables guiding the instrumentation process to consider property and program semantics in order to optimize instrumentation. Third, BISM provides advanced users with the flexibility of unrestricted code modification. This feature is essential for deploying inline monitors or enforcing certain properties such as a sequential order of concurrent events.Building on the capabilities of the instrumentation framework, we introduce a novel method for residual runtime verification of parametric properties. This approach minimizes instrumentation points by integrating both property semantics and program behavior and applies to a broad range of safety and co-safety properties. Notably, this method is designed to be independent of external static analysis frameworks and can be performed fully within the instrumentation process, allowing for modular and adaptable integration into various runtime verification scenarios.For concurrent programs, we focus on the online monitoring of general behavioral properties. We highlight the shortcomings of using linear traces for capturing the behavior of concurrent programs and propose that a trace must satisfy two critical properties—soundness and faithfulness—to provide an accurate representation. To meet these criteria, we introduce a trace-collection methodology that employs a real-time vector clock algorithm to establish event causality in a non-intrusive manner. This algorithm can run off the program's critical path, minimizing the impact on the execution. Additionally, we present new criteria for assessing the validity of collected traces in concurrent programs, addressing the third challenge mentioned above. We redefine the concept of trace monitorability based on automata-based formalisms. Our refined definition integrates a causal dependence relation extracted from a given property to identify non-permutable events within a trace. This allows us to evaluate whether a trace contains sufficient order information to yield a sound monitoring verdict. We also develop and implement an opportunistic monitoring framework that leverages existing synchronization points to synchronize thread local monitors with a global monitor. This framework allows for the monitoring of global properties without the need for additional synchronization mechanisms that could disrupt program execution.Our contributions are evaluated through extensive experiments on various benchmarks, and synthetic and real-world applications from the literature. We also utilize BISM in the broader context of dynamic analysis, particularly in log analysis, testing coverage, and profiling. Collectively, these contributions enhance the reliability and efficiency of runtime monitoring for concurrent programs. We substantiate our theoretical claims with implemented solutions, providing practical tools for the advancement of the field.
La vérification à l'exécution est une technique de vérification dynamique cruciale pour le raisonnement formel sur les exécutions de programmes, applicable tant au développement d'applications qu'en ligne dans des environnements de production. L'instrumentation joue un rôle crucial pour garantir que les moniteurs reçoivent des traces précises qui abstraient les informations nécessaires du programme en exécution. Sinon, l'intégrité du processus de surveillance est compromise, rendant les résultats peu fiables.Cette thèse se focalise sur la surveillance à l'exécution et les programmes concurrents, en abordant trois défis principaux : la capture des traces correctes, le guidage efficace de l'instrumentation, et l'évaluation de la validité des traces collectées. Pour répondre à ces défis, nous introduisons BISM, un cadre d'instrumentation au niveau du bytecode pour les langages JVM, offrant des abstractions de haut niveau pour divers utilisateurs dans le domaine de la vérification à l'exécution.BISM permet l'extraction d'événements au niveau du bytecode, accommodant la surveillance de propriétés spécifiées avec divers niveaux de granularité. BISM permet également d'écrire des analyses statiques en spécifiant l'instrumentation. Il offre aux utilisateurs avancés la possibilité de modifier de manière non restreinte et flexible le code existant. Ces dernières caractéristiques sont essentielles pour déployer des moniteurs en ligne ou imposer certaines propriétés comme un ordre séquentiel d'événements concurrents.Nous introduisons aussi une méthode nouvelle pour la vérification à l'exécution résiduelle de propriétés paramétriques, réduisant les points d'instrumentation et applicable à des propriétés de sécurité. Pour les programmes concurrents, nous mettons en évidence les limites de l'utilisation de traces linéaires et introduisons une méthodologie de collecte de traces utilisant un algorithme d'horloge vectorielle en temps réel, minimisant l'impact sur l'exécution. Cette méthode intègre une relation de dépendance causale, permettant d'évaluer la validité des traces dans les programmes concurrents pour un verdict de surveillance fiable.Nos contributions sont évaluées à travers des expériences sur divers benchmarks et applications, utilisant BISM dans un contexte plus large d'analyse dynamique, y compris l'analyse de logs, la couverture des tests, et le profilage. Ces travaux améliorent la fiabilité et l'efficacité de cette surveillance pour les programmes concurrents, fournissant des outils pratiques pour l'avancement du domaine.
Origine | Version validée par le jury (STAR) |
---|