Monitoring et mise au point d'applications de haute performance réparties en infonuagique hétérogène
Le projet, intitulé "Monitoring et mise au point d'applications de haute performance réparties en infonuagique hétérogène" est divisé en 4 volets qui sont détaillés sur cette page. Les pistes 1, 2 et 4 sont sous la supervision du professeur Michel Dagenais, alors que la piste 3 est sous la supervision du professeur Daniel Aloise. Un co-encadrement, par Michel Dagenais et Daniel Aloise, sera fait pour les étudiants travaillant sur des problématiques transversales:
- Volet 1: Applications réparties dans l'infonuagique, le réseau 5G et la périphérie
- Volet 2: Co-processeurs multi-coeurs hétérogènes
- Volet 3: Apprentissage machine et outils d'analyse de performance
- Volet 4: Une nouvelle architecture pour l'intégration des outils
Introduction
L'infrastructure de calcul et de communication évolue très rapidement et devient de plus en plus plus sophistiquée. Des exemples de nouvelles applications incluent l'informatique mobile avec les réseaux 5G, les voitures autonomes, les robots et assistants numériques intelligents, et l'apprentissage machine. Ceci devient possible grâce à plusieurs avancées technologiques, tant matérielles que logicielles, comme les unités centrales de traitement avec des dizaines de coeurs, les coprocesseurs pour le graphisme et les calculs scientifiques (GPGPU) avec des milliers de coeurs, les réseaux 5G à haute vitesse et faible latence, et les infrastructures infonuagiques qui exécutent un grand nombre de requêtes en parallèle.
En conséquence, une simple requête, comme faire une recherche sur la Toile ou afficher une image d'un vidéo, peut impliquer un grand nombre de coeurs en parallèle, possiblement sur plusieurs serveurs. Plus encore, la même opération, quelques secondes plus tard, pourrait être servie de manière différente, par d'autres coeurs et noeuds physiques, dans l'infonuagique. Ainsi, comprendre la performance de telles opérations devient extrêmement difficile, et les outils disponibles présentent de nombreuses lacunes.
Dans le cadre de ce projet, les outils pour le traçage, profilage, débogage et monitoring de systèmes répartis seront étendus pour efficacement extraire l'information de toutes les unités, à tous les niveaux, du matériel jusqu'aux applications. Le projet se concentre plus spécifiquement sur les applications infonuagiques, connectant l'Internet des Objets à travers les réseaux 5G, l'utilisation des processeurs hétérogènes de type GPGPU pour les applications de haute performance, les applications d'apprentissage machine, et les architectures modulaires pour les environnements intégrés de développement. Ceci permettra aux concepteurs et opérateurs, de systèmes répartis de haute performance, d'avoir les outils en main pour rapidement analyser la performance de ces systèmes, automatiquement ou manuellement isoler les problèmes, et optimiser leurs opérations.
Volet 1: Applications réparties dans l'infonuagique, le réseau 5G et la périphérie
Dans ce volet, nous proposons une nouvelle architecture et de nouveaux algorithmes pour efficacement surveiller et analyser la performance d'applications réparties, (avec de nombreux noeuds dans le nuage, en périphérie et dans l'Internet des objets, avec la virtualisation, l'orchestration de conteneurs, les micro-services et les intergiciels orientés messages).
Nous passons en revue le domaine de l'orcherstration du nuage et des conteneurs, comme dans Kubernetes et OpenStack, et les outils associés pour le monitoring, le profilage, le traçage et le débogage. Avec le feedback d'équipes chez Ericsson, Ciena et EfficiOS, nous proposons un schéma complet pour l'instrumentation et l'extraction d'information d'exécution sur la création et l'ordonnancement des machines virtuelles et conteneurs. Il en découle un environnement complet, proposé pour l'analyse et la visualisation de ces systèmes.
Nous étudions la littérature sur les environnements infonuagiques, d'Internet des objets, de noeuds périphériques et de réseautique 5G. Nous concevons une organisation en couches, avec du traitement et de l'agrégation de données à chaque niveau, avant d'envoyer l'information au niveau plus haut. L'étude s'intéresse aussi au domaine du traitement de données en flux (e.g. Apache Spark) afin de paralléliser efficacement l'analyse de données de trace. Nous proposons et prototypons ensuite une organisation hiérarchique efficace pour monitorer et déboguer de très gros systèmes infonuagiques.
Nous examinons aussi les micro-services dans l'infonuagique en commençant par étudier la littérature sur les micro-services et les outils de monitoring associés (e.g. OpenTracing). Plusieurs nouveaux systèmes réseautiques et télécom en industrie sont basés sur les micro-services, et fournissent des cas d'utilisation et des requis importants. Nous proposons une organisation efficace pour instrumenter les micro-services, et pour analyser et visualiser l'information combinée. Nous examinons les intergiciels de messagerie utilisés en infonuagique comme AMQP et ZeroMQ. Ces intergiciels sont communément utilisés pour les systèmes d'analyse financière, et dans les nouveaux environnements de développement intégrés modulaires. Nous passons en revue la littérature sur les systèmes de messagerie et les outils de monitoring associés. Nous prototypons différentes stratégies d'instrumentation et d'analyse pour les micro-services basés sur ZeroMQ.
Volet 2: Co-processeurs multi-coeurs hétérogènes
Dans ce volet, nous proposons de nouveaux algorithmes et techniques pour efficacement monitorer et analyser la performance de systèmes utilisant des co-processeurs hétérogènes. Les nouveaux processeurs graphiques (GPU) de haute performance, avec mémoire virtuelle partagée et queues au niveau usager (incluant les les co-processeurs parallèles pour le traitement de signal et le routage des paquets) sont particulièrement ciblés.
Nous passons en revue le domaine des co-processeurs graphiques et les outils associés de traçage et profilage. Ce domaine s'est ouvert à des développements intéressants avec l'initiative GPU Open de AMD, qui fournit toute la chaine d'outils pour programmer les GPU en code source libre. Nous étudions l'architecture de ces nouveaux GPU de haute performance pour voir comment ils peuvent être profilés et tracés à l'aide du support logiciel et matériel disponible. Nous proposons alors de nouveaux algorithmes pour instrumenter les programmes sur GPU, extraire les données de traçage et profilage des GPU, et analyser et visualiser cette information. Nous nous attardons à quelques défis spécifiques, comme la bande passante limitée pour extraire les données de traçage venant de milliers de coeurs, et le calcul des goulots d'étranglement, parfois appelés "roofline model". Les analyses et vues proposées seront présentées à des experts pour rétro-action.
Nous étudions la littérature sur les débogueurs, analysons le nouvel agent ROCm pour le débogage, examinons les applications typiques exécutées sur GPU et leurs besoins en débogage, et discutons avec les dévelopeurs d'applications de calcul de haute performance et d'apprentissage machine. Nous étudions le fonctionnement interne de GDB, les interactions entre le débogueur et l'interface usager de l'environnement de développement, et les facilités de débogage offertes par les nouveaux GPU. Nous proposons des extensions aux outils existants de débogage pour couvrir les concepts importants de la programmation sur GPU, comme les opérations vectorielles, les groupes de threads et l'hyperthreading. Nous proposons une architecture efficace pour la chaîne d'outils de débogage, et des algorithmes efficaces afin de se connecter à l'agent de débogage ROCm, GDB et l'interface graphique de Theia.
Nous étudions le domaine de la virtualisation des GPU, la gestion des systèmes infonuagiques, le support à l'exécution pour les conteneurs, les gestionnaires de tâches pour les grappes de calcul de haute performance, le tout dans le contexte de supporter les grandes applications parallèles. Nous proposons une architecture efficace et flexible pour exécuter les applications parallèles de haute performance (e.g. basées sur MPI, OpenMP, HIP et OpenCL) sur un système infonuagique. Nous étudions les différentes composantes de réseautique, des librairies de communication à la virtualisation de réseau, et jusqu'au support matériel pour la réseautique, et examinons les outils d'analyse de performance et de débogage associés. Nous proposons différentes stratégies d'instrumentation, analyses spécialisées et vues, pour aider à comprendre le routage et la latence des paquets.
Volet 3: Apprentissage machine et outils d'analyse de performance
Dans ce volet, deux voies complémentaires de recherche sont poursuivies. La première concerne le développement de modèles d'apprentissage machine pour extraire la connaissance à partir de traces d'exécution. Les traces sont un excellent moyen pour détecter, classifier et mettre en lumière les causes d'anomalies dans les systèmes complexes. La seconde s'intéresse à l'analyse de la performance des applications d'apprentissage machine qui utilisent les co-processeurs GPU et les cadriciels comme TensorFlow.
Nous travaillons à améliorer la détection d'anomalies à l'aide de traces d'exécution au niveau du noyau du système d'exploitation. En raison de la ressemblance entre les traces et la langue naturelle, les dernières techniques pour le traitement de la langue naturelle (NLP), comme le mécanisme d'auto-attention, sont examinés. Ceci permet le traitement de séquences de longueur variable, sans avoir à utiliser des connexions récurrentes, et permet de mesurer l'importance de chaque entrée. L'emphase est mise sur la détection d'anomalies dans les micro-services. L'objectif est d'identifier automatiquement le code source fautif, basé sur l'historique de développement et sur les traces système. Nous investigons aussi les traces des événements de communication.
Nous travaillons sur l'exploration automatique de l'exécution, en injectant dynamiquement des points de trace, en utilisant l'apprentissage machine. L'idée est de choisir un ensemble minimal d'appels système à instrumenter, permettant de détecter les anomalies avant qu'elles ne portent à conséquence. Un objectif de recherche est d'activer des sous-ensembles d'événements, dépendant de probabilité prévue d'une anomalie. En activant plus d'événements, nous obtenons une meilleure prédiction, mais le surcoût d'exécution est plus grand. Nous examinons plusieurs modèles et cadriciels populaires pour l'apprentissage machine. Nous investigons quels modèles sont meilleurs pour différents environnements de calcul, basé sur une analyse fine de la performance.
Nous travaillons sur des modèles d'apprentissage machine pour l'analyse de traces et la détection d'anomalies, utilisant un ensemble minimal d'appels systèmes, et étendons la méthodologie à la détection hâtive. Nous travaillons aussi à la création d'une banque de jeux de données. Nous prenons en compte les contraintes importantes associées au grand volume de données créées par le traçage. Nous établissons les caractéristiques des applications d'apprentissage machine que nous devons tracer, et fournissons des suggestions pour la parallélisation efficace des applications d'apprentissage machine, par exemple sur GPU.
Volet 4: Une nouvelle architecture pour l'intégration des outils
Nous proposons une nouvelle architecture, pour les environnements intégrés de développement de logiciel (IDE), afin de gérer la complexité accrue des plates-formes matérielles et logicielles.
Nous passons en revue la littérature des IDE existants comme CDT, Che et Theia du projet Eclipse, et Visual Studio Code. Nous focalisons sur les interactions efficaces entre les différentes composantes de l'IDE: l'interface utilisateur (e.g. Electron), les serveurs de langage (e.g. clangd), les débogueurs (e.g. GDB), l'analyse de trace (e.g. Trace Compass) et le profilage. Nous étudions aussi les outils complémentaires qui peuvent intéragir avec l'IDE, incluant les outils d'intégration continue et les tableaux de bord comme Kibana. Nous modélisons la performance de Theia et des IDE similaires afin de détecter les goulots d'étranglement et proposer des améliorations algorithmiques et architecturales. Les alternatves proposées sont prototypées, discutées et évaluées avec l'aide d'équipes de développement chez Ericsson, Ciena, AMD et EfficiOS. Nous examinons le problème d'ajuster dynamiquement le niveau de détail pour les outils de traçage, profilage et débogage, dans le contexte de ressources limitées sur certaines plates-formes embarquées, ou sur des systèmes avec des milliers de coeurs.
Nous examinons la littérature sur les techniques d'instrumentation dynamique, et sur la sélection statique ou dynamique de quelle fonction ou section de code doit être instrumentée pour des fins de traçage, débogage de mémoire, ou d'autres tâches de validation à l'exécution. Nous proposons et prototypons différentes analyses et stratégies pour optimiser la sélection des points d'instrumentation. Les méthodes proposées sont prototypées et leur efficacité validée à l'aide de cas idustriels réels.
Nous étudions l'état de l'art concernant l'analyse de performance des applications en temps réel, dans le contaxte des réseaux 5G à faible latence et de l'informatique de périphérie. Nous développons de nouvelles analyses et visualisations pour faire ressortir les portions des systèmes qui limitent la performance, affectent le chemin critique, et par conséquent la performance en temps réel des applications étudiées. Nous passons en revue la littérature sur les outils spécialisés de débogage et les librairies de vérification de programmes à l'éxécution. Nous étudions les différents outils utilisés en industrie pour les fins de débogage et de validation, particulièrement pour la validation des accès en mémoire dans les systèmes embarqués. Nous proposons de nouveaux algorithmes et une nouvelle architecture, pour les outils interactif de vérification d'exécution, basée sur Theia et GDB.