Analyse de variations de performance par comparaison de traces d'exécution
Notice bibliographique
Résumé
Je remercie d'abord mon directeur de recherche, Michel Dagenais, d'avoir cru en moi.Il a réussi à me transmettre sa passion pour Linux et m'a fait sentir à ma place au laboratoire de recherche sur les systèmes répartis ouverts et très disponibles (DORSAL).Il a aussi été très disponible tout au long de ma maîtrise.Je remercie le Conseil de recherches en sciences naturelles et en génie du Canada (CRSNG) de m'avoir accordé une bourse d'études supérieures.Je remercie Francis, Julien et Suchakra de m'avoir donné les pistes nécessaires pour aller jouer dans les entrailles du système d'exploitation Linux.J'ai aussi beaucoup aimé discuter avec eux de mes travaux et écouter leurs précieux conseils.Je remercie Simon et Mathieu, des amis sur lesquels j'ai toujours pu compter depuis le début du baccalauréat.Je remercie Etienne Bergeron de m'avoir encouragé à me dépasser tout en m'amusant.Je remercie Mathieu Desnoyers de m'avoir suggéré des pistes très intéressantes lors de la réalisation de ce projet.J'ai beaucoup aimé que tous les deux me partagent leurs innombrables connaissances.Je remercie mes parents qui m'ont encouragé dans tous les projets que j'ai entrepris dans ma vie.Je remercie mon frère Étienne qui a accepté toutes les demandes que je lui ai faites durant ce projet et avec qui je peux parler de bits.Je remercie Emmanuelle et Élisabeth d'être des sœurs que j'admire.v RÉSUMÉ La performance est un requis très important pour bon nombre d'applications.Malheureusement, plusieurs facteurs affectent cette performance : contention pour l'accès à une ressource, mauvais algorithmes de synchronisation, attente de données en provenance du disque, etc. En raison de la taille du code source de certaines applications et des multiples niveaux d'abstraction entre le code applicatif et le matériel, plusieurs développeurs ne soupçonnent pas l'existence de toutes ces sources de latence.Le traçage est une technique qui consiste à enregistrer des événements qui surviennent dans un système informatique.Un grand nombre de problèmes de performance peuvent être diagnostiqués à partir de l'information contenue dans une trace d'exécution.En raison de leur faible surcoût, les traceurs modernes peuvent être activés en continu sur des systèmes en production pour capturer des problèmes survenant rarement.Des outils spécialisés facilitent la navigation à travers le grand nombre d'événements contenus une trace d'exécution.Malheureusement, même avec ces outils, il peut être difficile de juger si le comportement observé est celui attendu sans une connaissance exhaustive du système analysé.L'objectif de ce travail de recherche est de vérifier si le diagnostic de variations de performance peut être facilité par un algorithme qui identifie automatiquement les différences entre deux groupes de traces d'exécution.L'algorithme doit mettre en évidence les latences présentes dans un groupe d'exécutions anormalement longues, mais pas dans un groupe d'exécutions normales.Un développeur peut alors tenter d'éliminer ces latences.Pour ce faire, nous introduisons d'abord deux nouveaux événements pour le traceur LTTng.L'événement cpu_stack rapporte périodiquement la pile d'appels des fils d'exécution utilisant le processeur.L'événement syscall_stack rapporte la pile d'appels des longs appels système.Ces deux événements nous permettent de déterminer si des latences présentes dans des traces d'exécution différentes ont été causées par le même code applicatif.Le traçage de l'événement syscall_stack a un surcoût moindre que celui du traçage traditionnel des appels système.Nous proposons aussi une nouvelle structure de données appelée enhanced calling context tree (ECCT) pour représenter les latences affectant le temps de complétion d'une tâche.Ces latences peuvent être au niveau du matériel, du système d'exploitation ou du code applicatif.En présence d'interactions entre plusieurs fils d'exécution, nous utilisons un algorithme de calcul du chemin critique pour inclure dans le ECCT les latences introduites par chacun de ces fils.Nous utilisons les ECCTs à la fois pour stocker des métriques de performance de façon compacte et comme entrée de notre algorithme de comparaison.vi Ensuite, nous présentons une interface graphique permettant de visualiser les différences entre des groupes d'exécution.Les groupes à comparer sont définis par l'utilisateur à l'aide de filtres.Les différences sont montrées à l'aide d'un outil de visualisation appelé flame graph différentiels ainsi que d'histogrammes.Les vues sont rafraîchies rapidement lorsque les filtres sont modifiés grâce à un algorithme de map-reduce.L'efficacité de notre solution pour détecter, diagnostiquer et corriger des problèmes de performance majeurs est démontrée grâce à quatre études de cas menées sur des logiciels libres et d'entreprises.Nous mesurons aussi le surcoût du traçage des événements requis par notre analyse sur différents types d'applications et concluons qu'il est toujours entre 0.2% et 9%.Enfin, nous démontrons que notre solution développée pour Linux peut être adaptée pour fonctionner sur les systèmes d'exploitation Windows et Mac OS X. vii
Récupéré en direct depuis OpenAlex et désinversé. Les résumés ne sont pas conservés dans cette base de données : les index inversés représentent 8,6 Go des 9,3 Go de texte de la base, et le serveur dispose de 13 Go libres.
Comment cette classification a été obtenuedéplier
Prédiction machine sur la base complète
Imitation des enseignantsNi prévalence calibrée, ni vérité terrain. Validation humaine à venir. Le volet Gemma est une étiquette directe du modèle pour chaque travail de la base, lue sur la notice réduite au titre. Le volet Codex est un classifieur appris des 10 348 étiquettes directes de Codex et calibré sur les taux pondérés de l'échantillon; les champs sans appui suffisant ne portent aucun appel Codex. Le mode candidate est l'union des deux volets; le consensus est leur intersection. Ces sorties portent le statut machine_predicted_unvalidated et ne sont pas des étiquettes humaines.
Scores du classifieur distillé par catégorie (deux têtes)
| Catégorie | Codex | Gemma |
|---|---|---|
| Métarecherche | 0,002 | 0,016 |
| Méta-épidémiologie (sens strict) | 0,001 | 0,000 |
| Méta-épidémiologie (sens large) | 0,001 | 0,001 |
| Bibliométrie | 0,003 | 0,003 |
| Études des sciences et des technologies | 0,001 | 0,001 |
| Communication savante | 0,002 | 0,002 |
| Science ouverte | 0,001 | 0,001 |
| Intégrité de la recherche | 0,001 | 0,001 |
| Charge utile insuffisante (le modèle a refusé de juger) | 0,002 | 0,001 |
Scores machine (provisoires)
Les deux têtes enseignantes du modèle étudiant, lues sur ce travail. Un score ordonne la base pour la relecture; il n'affirme jamais une catégorie, et le statut de validation accompagne chaque rangée tel quel.
Scores de référence d'un modèle non mature (critères de maturité non atteints, 7 itérations). Un score ordonne; il n'affirme jamais une catégorie.
score_only:v0-immature-baseline · tel quel depuis la passe de notation : score_only signifie que le nombre peut ordonner les travaux, et qu'aucune étiquette de catégorie n'en découleClassification
machine, non validéePrédiction automatique; un appel candidat d’une seule source (Gemma direct ou Codex distillé), pas un consensus.
Le détail, modèle par modèle et score par score, se trouve en fin de page sous « Comment cette classification a été obtenue ».