openjdk.ruOpenJDK на русском

JEP 388: Windows/AArch64 Port

Порт JDK для Windows/AArch64

AuthorsMonica 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, чтобы найти изящное решение.