JEP 388: Windows/AArch64 Port
Порт JDK для Windows/AArch64
| Authors | Monica Beckwith, Ludovic Henry, Bernhard Urban-Forster |
| Ответственный | Vladimir Kozlov |
| Тип | Feature |
| Область | Implementation |
| Статус | Closed / Delivered |
| Выпуск | 16 |
| Компонент | hotspot / runtime |
| Обсуждение | aarch64 dash port dash dev at openjdk dot java dot net |
| Трудоёмкость | M |
| Длительность | S |
| Блокирует | JEP 391: macOS/AArch64 Port |
| Рецензенты | Vladimir Kozlov |
| Одобрен | Mark Reinhold, Vladimir Kozlov |
| Создан | 2020/06/29 19:13 |
| Обновлён | 2024/07/26 14:26 |
| Задача | 8248496 |
Аннотация
Перенести JDK на Windows/AArch64.
Мотивация
С выходом нового потребительского и серверного оборудования AArch64 (ARM64) платформа Windows/AArch64 стала важной из-за спроса со стороны конечных пользователей.
Описание
Мы перенесли JDK на Windows/AArch64, расширив работу, ранее проделанную для порта на Linux/AArch64 (JEP 237). Порт включает шаблонный интерпретатор, JIT-компиляторы C1 и C2, а также сборщики мусора (Serial, Parallel, G1, Z и Shenandoah). Он поддерживает операционные системы Windows 10 и Windows Server 2016.
Этот JEP посвящён не самой работе по переносу, которая в основном завершена, а интеграции порта в основной репозиторий JDK.
Сейчас у нас чуть больше десятка наборов изменений. Изменения в общем коде мы свели к минимуму. Наши изменения распространяют поддержку модели памяти AArch64 на Windows, устраняют ряд проблем MSVC, добавляют поддержку LLP64 в порт AArch64 и реализуют определение возможностей процессора в Windows. Мы также изменили скрипты сборки, чтобы лучше поддерживать кросс-компиляцию и набор инструментов Windows.
Собственно код новой платформы занимает 15 (+4) файлов и 1222 строки (+322).
Двоичные сборки Early Access (ранний доступ) доступны здесь.
Тестирование
Мы провели тщательное функциональное и регрессионное тестирование, а также тестирование производительности на тестовых системах AArch64, включая Ampere eMAG1, Marvell ThunderX2 (как с включённым, так и с выключенным SMT) и Surface Pro X. Наши наборы тестов включают JTReg, JCStress, jmh-jdk-microbenchmarks, приложения и апплеты JFC (demo/jfc), SPECJBB2005, SPECJBB2015, SPEC SERT, SPECJVM2008, DaCapo и несколько небольших бенчмарков. Две из тестовых матриц подробно задокументированы: JTReg и SPECJBB2015.
Помимо систем AArch64, мы также протестировали наши патчи на системах x64 (Intel Skylake). Наше тестовое покрытие включает Linux/AArch64, Windows/AArch64, Windows/x64 и, только в части функционального тестирования, Linux/x64.
У нас есть надёжная CI для функциональных тестов, и мы продолжим прогонять наши патчи через CI по мере внесения дальнейших изменений.
Риски и допущения
-
Мы внесли изменения в общий код бэкенда Linux/AArch64, чтобы расширить LP64 (64-битные long int и указатели) и учесть long-long int и указатели (LLP64), которые требуются 64-битной платформе Windows.
-
Как упоминалось выше, мы также изменили общий код в Windows.
-
Нам нужно переработать использование регистра x18, который в Windows/AArch64 служит для Windows Thread Environment Block (TEB). Мы работаем вместе с Lead проекта AArch64 Port, чтобы найти изящное решение.