4 juillet 2024

BOLT : optimisation binaire pour les méta-applications à grande échelle

BOLT by Meta optimise les binaires après la compilation, améliorant ainsi les performances et l'efficacité du processeur. Utilisé à grande échelle, y compris dans des projets comme HHVM.

Outil d'optimisation et de mise en page binaire BOLT

Introduction

Dans les environnements informatiques hautes performances comme ceux de Meta (anciennement Facebook), la taille et l'efficacité du code source sont essentielles. Les processeurs modernes souffrent souvent d'un « manque d'instructions » en raison de la taille des fichiers binaires, ce qui ralentit l'accès aux instructions nécessaires. Meta a développé BOLT (Binary Optimization and Layout Tool) pour résoudre ce problème. Pour plus de détails, vous pouvez consulter l'article sur la méta-ingénierie.

Qu'est-ce que BOLT

BOLT est un outil d'optimisation binaire conçu pour améliorer l'efficacité du cache d'instructions du processeur en réorganisant les instructions en code binaire. Il est compatible avec n'importe quel compilateur, y compris GCC et Clang, et prend en charge les bibliothèques tierces sans nécessiter d'accès au code source.

Fonctionnement du BOULON

Le fonctionnement de BOLT repose sur la reconstruction du graphe de flux de contrôle du code et la réorganisation des fonctions en fonction des profils d'exécution collectés. Ce processus comprend plusieurs étapes :

  1. Compatibilité: BOLT fonctionne avec n’importe quel code de compilateur et d’assembleur, permettant une large applicabilité.
  2. Profilage : Utilisez le profilage basé sur des exemples à l'aide de l'outil de performance Linux pour collecter des données d'exécution de code.
  3. Optimisation de la mise en page : Réorganisez le placement du code dans et entre les fonctions pour optimiser l’accès au processeur.

Différences et avantages par rapport aux compilateurs standards tels que GCC

Les compilateurs standard tels que GCC optimisent le code au moment de la compilation, en utilisant des informations limitées sur les performances réelles au moment de l'exécution. BOLT se distingue par les caractéristiques suivantes :

  1. Optimisation post-construction : BOLT fonctionne sur du code binaire post-compilé, permettant des optimisations basées sur le comportement réel du code lors de l'exécution. Cette technique permet d'appliquer des améliorations qui ne seraient pas possibles lors de la phase de compilation initiale.
  2. Profilage dynamique : Utilisez les données de profilage collectées lors de l'exécution pour identifier les goulots d'étranglement et optimiser la disposition du code en fonction de l'utilisation réelle. Cette approche garantit que les optimisations sont basées sur des données empiriques, améliorant ainsi l'efficacité des modifications que vous apportez.
  3. Réorganisation du Code : BOLT réorganise les instructions de code pour améliorer l'efficacité du cache d'instructions, réduisant ainsi les échecs de cache et améliorant les performances. Ce processus comprend la réorganisation des fonctions et la fusion des blocs de code pour réduire le temps d'accès aux instructions.
  4. Élimination du code en double : Réduit la taille binaire en éliminant le code en double et redondant. Cette technique optimise non seulement la mémoire utilisée, mais améliore également l'efficacité du cache, rendant les applications plus rapides et moins gourmandes en ressources.

Impact sur les performances

La mise en œuvre initiale de BOLT a montré une amélioration de 3 % des performances de HHVM (HipHop Virtual Machine), un environnement d'exécution pour PHP et Hacking développé par Meta pour améliorer l'efficacité et l'évolutivité du code PHP. Avec d'autres optimisations, l'augmentation peut aller jusqu'à 8 % pour HHVM et aller de 2 % à 15 % pour les autres services, selon l'architecture du CPU. Ces améliorations sont obtenues grâce à diverses techniques d'optimisation spécifiques, notamment :

  • Macro-fusion : BOLT empêche la régression des performances causée par un mauvais alignement des instructions. Cette technique combine plusieurs instructions simples en une seule macro-instruction, réduisant ainsi les cycles CPU nécessaires à l'exécution du code.
  • Placement de la table de saut : Améliorez la disposition des tables de sauts en optimisant leur emplacement en mémoire. Cela réduit le temps de saut entre les instructions, améliorant ainsi la vitesse d'exécution des fonctions conditionnelles et des cas de commutation.
  • Pliage de code identique : Éliminez le code en double en fusionnant des sections de code identiques. Cette technique réduit la taille du binaire, améliorant ainsi l'efficacité du cache d'instructions et réduisant la consommation de mémoire.
  • Optimisation PLT et élimination constante de la charge : Optimisations spécifiques au profil d’application pour améliorer l’efficacité globale. L'optimisation PLT optimise les appels de fonctions de bibliothèque en réduisant la surcharge de la table de liaison de procédure, tandis que l'élimination de la charge constante élimine les chargements redondants de valeurs constantes, simplifiant ainsi le flux d'exécution et améliorant les performances.

Avantages du BOULON

L'optimisation binaire avec BOLT apporte plusieurs avantages significatifs :

  • Amélioration du cache d'instructions : En réorganisant le code, BOLT améliore l'efficacité du cache d'instructions, réduisant les échecs de cache et améliorant les performances. Ce processus implique de déplacer les instructions les plus fréquemment utilisées pour garantir qu'elles soient facilement accessibles depuis le cache, minimisant ainsi les temps de latence.
  • Réduction du temps d'exécution : Les optimisations apportées par BOLT réduisent le temps d'exécution global des applications, rendant les systèmes plus réactifs. La réorganisation du code permet une exécution plus linéaire et plus rapide, éliminant les instructions redondantes et améliorant le flux d'exécution.
  • Optimisation des fonctions critiques : BOLT analyse et réorganise les fonctions critiques les plus fréquemment exécutées, en s'assurant qu'elles sont positionnées pour minimiser le temps de saut entre les instructions. Cette approche est particulièrement utile pour les applications complexes comportant de nombreux appels de fonctions.
  • Élimination du code en double : Réduit la taille binaire en éliminant le code en double et redondant. Cela améliore non seulement l'efficacité du cache, mais réduit également la mémoire requise par l'application, améliorant ainsi l'évolutivité.
  • Adaptabilité à différents compilateurs et langages : BOLT peut être utilisé avec un large éventail de compilateurs et de langages de programmation, offrant ainsi une flexibilité aux développeurs. Il est compatible avec GCC, Clang et prend en charge les bibliothèques tierces sans nécessiter d'accès au code source, ce qui en fait une solution polyvalente pour différentes plateformes.
  • Profilage basé sur une exécution réelle : Il utilise les données de profilage collectées lors de l'exécution réelle de l'application, permettant des optimisations basées sur la manière dont le code est réellement utilisé, plutôt que sur des hypothèses théoriques. Cela conduit à des améliorations de performances plus concrètes et ciblées.
  • Évolutivité des optimisations : Les techniques d'optimisation de BOLT sont évolutives et peuvent être appliquées à des projets de toute taille, des petits logiciels aux grandes applications d'entreprise, améliorant ainsi les performances à grande échelle.
  • Amélioration continue: Les optimisations BOLT ne sont pas statiques ; le système peut être surveillé en permanence et adapté pour de nouvelles optimisations à mesure que les conditions d'exécution changent ou que les applications sont mises à jour, garantissant ainsi des performances élevées et constantes.

Études de cas et applications

L'adoption de BOLT s'est avérée particulièrement efficace dans diverses études de cas, notamment :

  • HHVM : BOLT a amélioré les performances de HHVM, un environnement d'exécution PHP et Hack développé par Meta, de 3 % initialement, avec des améliorations supplémentaires allant jusqu'à 8 % avec des optimisations ultérieures. Ces augmentations de performances ont été obtenues grâce à une meilleure organisation du code et à des temps d’accès aux instructions réduits.
  • Grands services Web : D'autres services Meta ont vu leurs performances augmenter de 2 à 15 %, démontrant l'efficacité de BOLT dans divers contextes informatiques à grande échelle. Les optimisations ont permis de réduire les temps de réponse et d'améliorer l'efficacité globale des systèmes, rendant les applications plus réactives et évolutives.

Implémentation de BOULON

La mise en œuvre de BOLT nécessite une série d'étapes impliquant le profilage, l'analyse et la réorganisation du code. Un flux de travail typique pour l’utilisation de BOLT est présenté ci-dessous :

  • Collection de profils d'exécution : Utilisez l'outil de performances Linux pour collecter des données détaillées sur l'exécution du code, notamment les temps d'exécution, les taux d'appels de fonctions et les goulots d'étranglement. Ce processus nécessite d'exécuter des applications dans des environnements de production ou simulés pour obtenir des données réalistes et significatives.
  • Analyse des codes : Analysez les profils d'exécution pour identifier les zones du code qui nécessitent une optimisation, en évaluant l'efficacité des structures de données et des algorithmes actuels utilisés. Cela inclut l’identification des fonctions les plus fréquemment appelées et des sections de code les plus gourmandes en ressources.
  • Optimisation et réorganisation : Appliquez les techniques d'optimisation BOLT pour réorganiser les instructions de code, améliorer l'efficacité du cache d'instructions et réduire les temps d'accès aux instructions. Cela inclut la réorganisation des fonctions pour réduire les sauts inutiles, la fusion des blocs de code communs pour réduire la duplication et l'élimination des redondances. BOLT peut également réorganiser les données et les structures de contrôle pour améliorer la localisation du cache.
  • Évaluation des performances: Mesurez les performances post-optimisation pour évaluer l’efficacité de vos modifications. Utilisez des références et des tests de charge standardisés pour comparer les performances avant et après l'optimisation, garantissant ainsi que les améliorations sont significatives et durables. Il est essentiel de surveiller en permanence les performances pour identifier d’éventuelles régressions ou nouvelles opportunités d’optimisation.

Défis et considérations

Bien que BOLT offre de nombreux avantages, il existe certains défis et considérations à garder à l'esprit lors de la mise en œuvre :

  • Compatibilité des codes : Il est important de s'assurer que BOLT est compatible avec le code source existant et les bibliothèques tierces. Cela peut nécessiter des modifications dans le processus de construction et la gestion des dépendances pour garantir une intégration fluide.
  • Profilage précis : La collecte précise des profils d’exécution est cruciale pour réaliser des optimisations efficaces. Utilisez des outils de profilage avancés pour collecter des données détaillées représentatives de l’utilisation réelle des applications. Cela permet d’identifier les véritables goulots d’étranglement et les opportunités d’optimisation les plus pertinentes.
  • Contrôle continu: Les performances doivent être surveillées en permanence pour garantir que les optimisations restent efficaces dans le temps. Mettez en place un système de surveillance qui vérifie régulièrement les performances des applications et signale toute régression ou anomalie. Cela vous permet d’intervenir rapidement pour maintenir les bénéfices obtenus avec BOLT et de vous adapter aux changements de charge de travail ou d’environnement d’exécution.

L'avenir de BOLT

Meta continue d'améliorer BOLT, dans le but d'étendre ses avantages à de plus en plus de projets et d'applications. La collaboration avec la communauté open source est un élément clé pour l'avenir de BOLT, permettant aux développeurs d'apporter de nouvelles idées et améliorations.

Conclusions

BOLT représente une avancée significative dans l'optimisation binaire pour les applications à grande échelle. En réduisant les temps d'exécution et en améliorant l'efficacité du processeur, BOLT contribue à améliorer les performances des applications, les rendant plus réactives et efficaces. L'adoption d'outils comme BOLT est essentielle pour ceux qui travaillent avec de grandes plates-formes et services Web, offrant un avantage concurrentiel significatif en termes de performances et d'évolutivité.

Vous avez des doutes ? Vous ne savez pas par où commencer ? Contactez-nous !

Nous avons toutes les réponses à vos questions pour vous aider à faire le bon choix.

Discute avec nous

Discutez directement avec notre support avant-vente.

0256569681

Contactez-nous par téléphone pendant les heures de bureau 9h30 - 19h30

Contactez-nous en ligne

Ouvrez une demande directement dans l'espace contact.

INFORMATIONS

Managed Server Srl est un acteur italien leader dans la fourniture de solutions système GNU/Linux avancées orientées vers la haute performance. Avec un modèle d'abonnement peu coûteux et prévisible, nous garantissons que nos clients ont accès à des technologies avancées en matière d'hébergement, de serveurs dédiés et de services cloud. En plus de cela, nous proposons des conseils système sur les systèmes Linux et une maintenance spécialisée en SGBD, sécurité informatique, Cloud et bien plus encore. Nous nous distinguons par notre expertise dans l'hébergement de CMS Open Source de premier plan tels que WordPress, WooCommerce, Drupal, Prestashop, Joomla, OpenCart et Magento, soutenus par un service d'assistance et de conseil de haut niveau adapté aux administrations publiques, aux PME et à toutes tailles.

Red Hat, Inc. détient les droits de Red Hat®, RHEL®, RedHat Linux® et CentOS® ; AlmaLinux™ est une marque commerciale d'AlmaLinux OS Foundation ; Rocky Linux® est une marque déposée de la Rocky Linux Foundation ; SUSE® est une marque déposée de SUSE LLC ; Canonical Ltd. détient les droits sur Ubuntu® ; Software in the Public Interest, Inc. détient les droits sur Debian® ; Linus Torvalds détient les droits sur Linux® ; FreeBSD® est une marque déposée de The FreeBSD Foundation ; NetBSD® est une marque déposée de la Fondation NetBSD ; OpenBSD® est une marque déposée de Theo de Raadt. Oracle Corporation détient les droits sur Oracle®, MySQL® et MyRocks® ; Percona® est une marque déposée de Percona LLC ; MariaDB® est une marque déposée de MariaDB Corporation Ab ; REDIS® est une marque déposée de Redis Labs Ltd. F5 Networks, Inc. détient les droits sur NGINX® et NGINX Plus® ; Varnish® est une marque déposée de Varnish Software AB. Adobe Inc. détient les droits sur Magento® ; PrestaShop® est une marque déposée de PrestaShop SA ; OpenCart® est une marque déposée d'OpenCart Limited. Automattic Inc. détient les droits sur WordPress®, WooCommerce® et JetPack® ; Open Source Matters, Inc. détient les droits sur Joomla® ; Dries Buytaert détient les droits sur Drupal®. Amazon Web Services, Inc. détient les droits sur AWS® ; Google LLC détient les droits sur Google Cloud™ et Chrome™ ; Microsoft Corporation détient les droits sur Microsoft®, Azure® et Internet Explorer® ; La Fondation Mozilla détient les droits sur Firefox®. Apache® est une marque déposée de The Apache Software Foundation ; PHP® est une marque déposée du groupe PHP. CloudFlare® est une marque déposée de Cloudflare, Inc. ; NETSCOUT® est une marque déposée de NETSCOUT Systems Inc. ; ElasticSearch®, LogStash® et Kibana® sont des marques déposées d'Elastic NV. Hetzner Online GmbH détient les droits sur Hetzner® ; OVHcloud est une marque déposée d'OVH Groupe SAS ; cPanel®, LLC détient les droits sur cPanel® ; Plesk® est une marque déposée de Plesk International GmbH ; Facebook, Inc. détient les droits sur Facebook®. Ce site n'est affilié, sponsorisé ou autrement associé à aucune des entités mentionnées ci-dessus et ne représente en aucune manière aucune de ces entités. Tous les droits sur les marques et noms de produits mentionnés sont la propriété de leurs titulaires respectifs des droits d'auteur. Toutes les autres marques mentionnées appartiennent à leurs titulaires. MANAGED SERVER® est une marque déposée au niveau européen par MANAGED SERVER SRL, Via Enzo Ferrari, 9, 62012 Civitanova Marche (MC), Italie.

Retour en haut de page