Le mois dernier, l’équipe de Microsoft a annoncé avoir effectué des améliorations de performance dans .Net Core et particulièrement dans .Net Core 2.0, la seconde version de l’implémentation modulaire du Framework .Net permettant de créer des applications et des services web capables de tourner à la fois sur Windows, Linux et Mac.
Les performances étant chères à l’équipe de Microsoft ainsi qu’aux développeurs utilisant cette spécification .Net, Microsoft vient d’annoncer à nouveau l’intégration d’un nouvel outil d’optimisation dans .Net Core 2.0. Cette fois, l’équipe s’est appesantie sur un point particulier, l’optimisation guidée par les profils ou en anglais (PGO pour profile-guided optimization).
Microsoft présente PGO comme « ;une technologie de compilation native utilisée par le compilateur C++ pour générer un meilleur code optimisé. Il se compose d’un processus de compilation en deux étapes : un cycle de formation qui enregistre des informations sur l’exécution et une étape de construction optimisée qui renvoie les résultats de la formation pour générer un meilleur code. Historiquement, le bénéfice le plus important dans la performance est l’amélioration de la disposition du code dans l’image pour avoir un meilleur emplacement de l’ensemble des références et du fonctionnement. ;»
L’optimisation PGO fonctionne depuis des années sur Windows dans le Framework .Net. À partir de la version 1.1 de .Net Core, les développeurs ont rendu cette technologie disponible et compatible avec applications Windows x64. À terme, l’objectif est d’offrir ces mêmes optimisations sur les autres plateformes. Et à ce sujet, il est annoncé que lorsque .Net Core 2.0 qui est actuellement au stade de préversion sortira en version stable les mêmes optimisations seront possibles avec les applications Windows x86 et Linux x64.
À noter que la PGO s’opère de manière transparente en interne sur les différents composants du runtime et du compilateur JIT, ce qui signifie que les utilisateurs de .Net Core n’ont rien à faire pour tirer profit des optimisations délivrées par cette technologie. Toutes les applications managées bénéficient automatiquement des avantages de performance liés à l’optimisation du fonctionnement et de l’exécution du code.
Les avantages offerts par la PGO étant variables, Daniel Podder et Bertrand Le Roy expliquent que dans cette version, ils ont « ;appliqué ces optimisations aux parties natives de l’exécution, en fonction des données de profil des applications .NET typiques. ;» Mais dans les prochaines versions, ils prévoient « ;d’appliquer des optimisations semblables aux composants managés de la pile de .Net Core. ;»
La pratique étant plus expressive que les mots, l’équipe de Microsoft a effectué des tests de comparaison du temps de démarrage des applications Windows et Linux avec .Net Core 2.0 dotée de PGO et .net Core 2.0 sans PGO. Après exécution des applications, l’on constate que les applications exécutées avec PGO démarrent plus rapidement que celles sans PGO. Toutefois, les gains de performance ne sont pas les mêmes selon que l’on se trouve sur Windows x86, Windows x64 ou Linux x64. Sur Linux, l’optimisation du code n’est pas aussi importante que sur Windows, mais des améliorations sont prévues dans les versions à venir.
Pour parvenir à ces optimisations PGO avec Linux x64, les choses ne furent pas aussi évidentes comme ce fut le cas avec les applications Windows x86. L’écosystème Linux est tellement fragmenté (différentes distributions, différentes chaînes de compilation sur chaque distribution) qu’il est difficile de mettre en œuvre des optimisations PGO intéressantes et qui prennent en compte chacune des chaînes de compilation sur chaque distribution Linux. Pour résoudre le problème et permettre aux applications Linux de bénéficier des optimisations offertes par PGO, Podder et Le Roy expliquent que l’équipe de Microsoft s’est lancée dans la conception d’une « ;version unique de Linux ;» qu’elle a ensuite transformée en installateurs natifs et en archives Tar. Cela a permis d’appliquer des « ;optimisations PGO à toutes les distributions Linux qui consomment ces bits communs tout en réduisant la complexité ;» de l’implémentation.
En considérant les améliorations de performance obtenues déjà avec la réécriture des composants de la bibliothèque de base et du runtime et ensuite avec l’implémentation de PGO dans .Net Core 2.0, Microsoft conclut en affirmant qu’elle est engagée « ;à poursuivre cette tendance et à faire de .Net l’environnement de développement général le plus rapide possible. PGO fait partie intégrante de cette stratégie ;».
Source : Microsoft
Et vous ?
Avez-vous testé PGO ? Comment la trouvez-vous ?
Voir aussi
La feuille de route de .NET Core 2.0 et .NET Standard 2.0 dévoilée, que nous réservent les prochaines implémentations majeures ?
Microsoft annonce des améliorations de performance dans .Net Core 2.0 après une réécriture des composants du runtime et des bibliothèques de base
Microsoft intègre la compilation native PGO dans .Net Core 2.0
Afin de permettre aux applications Linux x64 et Windows x86 de s'exécuter plus vite
Microsoft intègre la compilation native PGO dans .Net Core 2.0
Afin de permettre aux applications Linux x64 et Windows x86 de s'exécuter plus vite
Le , par Olivier Famien
Une erreur dans cette actualité ? Signalez-nous-la !