.NET 7 Preview 3 : des applications plus rapides avec l'AOT Natif

Par:
fredericmazue

jeu, 14/04/2022 - 14:45

La plate-forme .NET 7 s'appuie sur la base établie par .NET 6, qui comprend un ensemble unifié de bibliothèques de base, d'exécution et de SDK, une expérience de développement simplifiée et une productivité accrue des développeurs, selon Redmond, qui vient d'annoncer la disponibilité de .NET 7 Preview 3. Cette mouture promet notamment des applications plus rapides et plus légères avec l'AOT natif.

La compilation anticipée (AOT) fait référence à un ensemble de technologies qui génèrent du code au moment de la construction de l'application, plutôt qu'au moment de l'exécution. AOT n'est pas nouveau pour .NET. Native AOT apporte une pré-compilation native complète aux scénarios client et serveur de bureau .NET. L'AOT natif ne remplace pas ces technologies existantes, mais offre plutôt un nouvel ensemble de fonctionnalités qui débloque de nouveaux facteurs de forme.

Les assemblages .NET compilés par AOT existants contiennent des structures de données spécifiques à la plate-forme et du code natif pour précharger le travail généralement effectué au moment de l'exécution. La précompilation de ces artefacts permet de gagner du temps au démarrage (par exemple, ReadyToRun) et permet d'accéder à des plateformes sans JIT (par exemple, iOS). Si les artefacts précompilés ne sont pas présents, .NET revient au JIT ou à l'interprétation (selon la plate-forme).

L'AOT natif est similaire aux technologies AOT existantes de .NET, mais il ne produit que des artefacts natifs. En fait, le runtime AOT natif ne sait pas comment lire les formats de fichiers d'assemblage .NET - tout est natif de la plate-forme. L'analyse du format de fichier exécutable est entièrement gérée par le système d'exploitation sous-jacent.

Le principal avantage de Native AOT réside dans le temps de démarrage, l'utilisation de la mémoire, l'accès à des plates-formes restreintes (pas de JIT autorisé) et la taille réduite du disque, souligne Microsoft.

Par ailleurs .NET 7 continue de faire évoluer la prise en charge de la spécification OpenTelemetry native du cloud. L'aperçu 3 ajoute la prise en charge des mises à jour de spécification #988 et #1708 qui rendent l'état de trace modifiable pour les échantillonneurs.

Enfin on notera les améliorations du temps de démarrage avec Write-Xor-Execute activé. Les performances continuent d'être un objectif majeur pour .NET 7 assure Microsoft. Le runtime #65738 PR a réimplémenté les stubs de précodage et de comptage d'appels (stubs d'aide à la compilation à plusieurs niveaux) pour réduire considérablement le nombre de modifications post-création du code exécutable dans le runtime. Cela a entraîné une amélioration de 10 à 15 % du temps de démarrage, selon Microsoft.

En prime, ce changement a également entraîné des améliorations des performances en régime permanent (jusqu'à 8 %) dans certains microbenchmarks et certains benchmarks ASPNet, même sans Write-Xor-Execute activé toujours selon Microsoft qui précise que, cependant, il y a aussi quelques régressions résultant de ce changement (sans Write-Xor-Execute activé) qui seront traitées dans les prochaines versions de prévisualisation. Celles-ci ont été observées dans les benchmarks Orchard et Fortunes sur les processeurs Intel uniquement.