Découvrir le projet OpenJDK pour AArch64
Contexte
Dans le prochain JDK, nous avons la JEP 388 qui annonce la disponibilité d’un nouveau portage sur l’architecture Windows / AArch64. Nous avions déjà un portage sur Linux sur AArch64. Mais concrêtement, c’est quoi cette architecture, cela permet de faire tourner quoi ?.
Architecture AArch64, c’est quoi ?
Nous sommes familiers avec les signes des architectures Intel : x86 ou amd64.
Actuellement, les architectures ARM se développent fortement. Ceux sont des systèmes sur une puce (SoC en anglais pour "System on a Chip"). Ils sont notamment très utilisés dans le monde de l’embarqué (comme les Raspberry Pi par exemple) ou la téléphonie. Il offre l’avantage d’avoir une faible consommation d’énergie. C’est qui est très important dans ce monde là, par exemple, l’autonomie du téléphone en sera rallongée.
(Raspberry Pi modèle A+, source Wikipedia Commons)
La particularité technique principale est que l’architecture est de type RISC. L’objectif est d’avoir un jeu d’instructions simple et réduit. A l’inverse, les processeurs Intel sont de type CISC avec un jeu d’instructions complexes.
Le seconde particularité est que la société ARM ne fabrique pas ces processeurs. Elle vend des licences à d’autres sociétés qui fabriquent les processeurs. Par conséquent, plusieurs sociétés concurrentes exploitent les processeurs ARM dans leur système (SoC). Dans le monde du mobile, nous retrouvons Qualcomm par exemple.
Dans le temps, il y a eu plusieurs versions, celle qui nous intéressent à ce jour c’est ARMv8 qui est une architecture 64 bits. Ce qui correspond à notre fameux AArch64. En effet, les précédentes versions sont des architectures 32bits.
Il est à noter qu’à ce jour, les processeurs équipant les Raspberry PI sont uniquement des processeurs 32bits.
Coté centre de calcul, ce type d’architecture intéresse aussi les fournisseurs de services et les hébergeurs afin de réduire leurs factures d’électricités. Dans ce sens, AWS a annoncé fin 2019 qu’il allait miser sur l’architecture ARM 64bits avec leurs processeurs Graviton 2. Ils sont déclinés dans les instances M6g, C6g et R6g.
(Liste de instances AWS en choississant le processeur AWS Graviton)
Plus récemment, en juin 2020, Apple annonce la transition des processeurs Intel vers Apple silicon avec la puce M1 pour les mac. C’est une puce conçue par Apple en utilisant l’architecture ARM. Cela leur permet de se passer des processeurs Intel. Ils ont déjà de l’expérience sur ce sujet car ils conçoivent les puces pour leurs iPhone, iPad, Apple Watch. En revanche, la fabrication reste sous-traitée à des prestataires.
Ce changement d’architecture va permettre aux utilisateurs de Mac Big Sur d’exécuter des applications iPadOS et iOS.
Portage Linux / AArch64
La version binaire pour les plateformes Linux sous Architectures AArch64 est disponible par le projet OpenJDK depuis la version 15 du JDK.
Cependant, l’aventure a commencé bien plus tôt en 2011. Je vous conseille ce billet How Red Hat ported OpenJDK to 64-bit Arm: A community history
Pour en faire la synthèse, la particularité au début était qu’il n’existait pas de processeur physique. Ils ont été obligé de développer d’abord un simulateur pour faire tourner le portage de la JVM.
En 2014, Red Hat commence à fournir des premières versions à des partenaires.
En 2015, le portage AArch64 fait partie intégrant du projet OpenJDK. Oracle encourage l’initiative et les aides pour le processus d’intégration.
En parallèle, Oracle avait son propre portage des architectures ARM 32 bits et 64 bits.
En 2019, La JEP 340: One AArch64 Port, Not Two est mise en oeuvre afin d’avoir une et une seule implémentation pour les architectures 64 bits. L’objectif est d’éviter la duplication de code et de recentrer les efforts sur un portage unique. Cela est a été réalisé dans le JDK 12.
En 2020, Oracle annonce dans ce billet le support des architectures ARM 64 bits pour OpenJDK et Oracle JDK.
Ce qui permet d’expliquer pourquoi les binaires sont disponibles depuis le JDK 15.
D’autres JEPs ont été consacrées à l’amélioration des performance sous AArch64, comme par exemple la JEP 315 : Improve Aarch64 Intrinsics qui a été inclus dans le JDK 11. Le but était d’améliorer les performances des fonctions sin
, cos
et log
de la classe java.lang.Math
en prenant en compte les spécificités de cette architecture.
Portage Windows / AArch64
De son côté, Microsoft propose une version de Windows 10 fonctionnant sous de tel processeur. Le travail de l’équipe Java de Microsoft a été de porté le JDK Windows sous cette architecture. Le travail a été piloté par Monica Beckwith avec son équipe et des partenaires.
En juin 2020, Monica annonce sur la liste de diffusion hotspot-runtime-dev, les avancés de son équipe sur l’extension du support de AArch64 à Windows.
Comme l’indique la fiche JDK-8248238 Implementation: JEP 388: Windows AArch64 Support, leur travail a été intégré dans le build 19 du JDK 16.
De son coté, Bruno Borges réalise un billet pour annoncer l’arrivée du support OpenJDK sur Windows / ARM.
Portage macOS / AArch64
Comme nous l’avons évoqué dans la section Architecture AArch64. Apple commence à développer ces propres processeurs pour Mac. Pour en savoir plus, je vous conseille cet article de 01net.com
Le défi de la transition vers une nouvelle architecture est effectivement d’avoir un ensemble de logiciels disponible. Au début, le catalogue est forcément réduit par rapport à l’ancienne architecture.
La JEP 391: macOS/AArch64 Port est ouverte dans ce sens. A ce jour, il n’a pas de version du JDK cible.
Bientôt disponible au sein du projet OpenJDK. Cela reste à une histoire à suivre!
Maj 04/03/2021, Bien que la JEP 391 n’a pas de version cible, le portage macOS serait bientôt disponible. En effet, suite au retour d’un membre de l’équipe, le travail principal a été fait et il resterait seulement des détails.
En attendant, des éditeurs comme Azul Systems proposer d’ores et déjà des JDK pour ce type de cible macOS / AArch64.
(Voici leur page de téléchargement pour Zulu.)
Références
-
(en) How Red Hat ported OpenJDK to 64-bit Arm: A community history
-
(en) Billet de l’annonce du support OpenJDK for Windows 10 sur ARM
-
(en) Message de Monica Beckwith sur liste de diffusion OpenJDK
-
(en) Billet Oracle annonçant le support de ARM 64bit on OpenJDK et Oracke JDK
-
Apple passe ses MacBook Air, MacBook Pro 13" et son Mac mini à ARM, avec l’Apple Silicon M1
Moteur de recherche
"Eduquer, ce n'est pas remplir des vases mais c'est d'allumer des feux." - Michel Montaigne
Billets récents
- Eclipse plante systématiquement sous Debian (et autres distribution Linux)
- JEP 463, Implicitly Declared Classes and Instance Main Methods (Second Preview)
- Debian - Montée de version de Debian 11 (Bullseye) à Debian 12 (Bookworm)
- JEP 451, Prepare to Disallow the Dynamic Loading of Agents
- JEP 444, Virtual Threads