Points de trace rapides et efficaces par injection adaptative de sauts en x86

Anas Balboul

Mémoire de maîtrise (2020)

Accéder à ce document
Disponible
Libre accès au texte intégral dans PolyPublie
Texte Texte • 720kB •

Résumé

Le traçage est une technique efficace pour analyser la performance des systèmes complexes et parallèles. Il permet d'enregistrer les évènements du programme client dans une trace lorsqu'ils sont déclenchés par des points de trace. Dans les systèmes à fils d'exécution multiples, les évènements peuvent être déclenchés simultanément et apparaissent donc dans un ordre indéfini. Un point de trace avec un grand surcoût d'exécution peut changer l'ordre dans lequel les évènements apparaissent dans la trace. En conséquence, de grands problèmes de performance peuvent être masqués dans la trace. La plupart des techniques d'instrumentation existantes, soit sont trop intrusives pour le programme client (l'arrêtent complètement pour insérer l'instrumentation), soit ajoutent un grand surcoût d'exécution. Dans ce mémoire, nous présentons un point de trace rapide en x86 nommé NOProbe. Il utilise différentes stratégies d'instrumentation rapide dans le but d'augmenter l'efficacité. Pour l'une de ces stratégies, nous exploitons les rembourrages de NOP insérés par les compilateurs pour optimiser l'alignement du code. Pour exploiter le maximum possible de rembourrages sans affecter la performance, deux algorithmes sont proposés. Le premier est un algorithme glouton qui met l'accent sur la performance, ce qui le rend un choix intéressant pour l'instrumentation en lot. Le deuxième est localement optimal et sacrifie un peu de performance pour plus d'optimalité. Pour limiter l'intrusion durant l'insertion du point de trace. Un algorithme de modification de code simultané et adapté à l'espace utilisateur, nommé Lock and Load, a été présenté. Sans arrêter le programme client et durant l'exécution, NOProbe se sert de l'algorithme Lock and Load pour insérer dynamiquement l'instrumentation. L'algorithme peut modifier le code d'un bloc de base tout entier. D'abord, la première instruction du bloc est remplacée par une instruction d'interruption logicielle pour le verrouiller. Ensuite, les fils d'exécution à l'intérieur sont redirigés en dehors du bloc avant de le modifier. Finalement, avant de déverrouiller la zone modifiée, tous les coeurs des CPU qui roulent les fils d'exécution du processus client sont sérialisés. Notre solution offre un surcoût d'exécution très bas. Le coût d'insertion est 6 fois moins important que celui de Uprobe lorsque le nombre de fils d'exécution du programme instrumenté est inférieur à 16. Il est beaucoup moins important comparé a Dyninst. Malgré le fait que le coût d'insertion ne s'adapte pas bien au nombre de fils d'exécution dans le pire cas, notre technique surpasse en moyenne les autres techniques d'insertion dynamique.

Programme:
Génie informatique
Directeurs ou directrices:
Adresse URL de PolyPublie:
Université/École:
Polytechnique Montréal
OAI:
oai:publications.polymtl.ca:5271
ORCID
Date du dépôt:
20 oct. 2020 12:09
Dernière modification:
14 oct. 2026 10:44
Citer en APA 7:
Balboul, A. (2020). Points de trace rapides et efficaces par injection adaptative de sauts en x86 [Mémoire de maîtrise, Polytechnique Montréal]. PolyPublie. https://publications.polymtl.ca/5271/

Statistiques

Total des téléchargements à partir de PolyPublie

Téléchargements par année

Provenance des téléchargements

Actions réservées au personnel

Afficher document
Afficher document