JEP 297: Unified arm32/arm64 Port
Единый порт для arm32/arm64
| Автор | Edward Nevill |
| Ответственный | Ed Nevill |
| Тип | Feature |
| Область | Implementation |
| Статус | Closed / Delivered |
| Выпуск | 9 |
| Компонент | hotspot / compiler |
| Обсуждение | aarch32 dash port dash dev at openjdk dot java dot net |
| Трудоёмкость | M |
| Длительность | S |
| Рецензенты | Bob Vandette, Mikael Vidstedt, Vladimir Kozlov |
| Одобрен | Mikael Vidstedt, Vladimir Kozlov |
| Создан | 2016/10/23 21:57 |
| Обновлён | 2026/06/03 22:42 |
| Задача | 8168503 |
Аннотация
Интегрировать в JDK единый порт HotSpot для arm32 и arm64, переданный компанией Oracle.
Мотивация
Основная мотивация — обеспечить поддержку arm32/aarch32 в JDK. Хотя поддержку arm32/aarch32 уже пытались реализовать, сегодня единственный сопровождаемый вариант в JDK — порт Zero. Вклад Oracle обеспечивает полную поддержку C1 и C2 для ARM, так что эта архитектура получает такой же уровень поддержки, как остальные.
Порт также поддерживает arm64/aarch64, но это менее важная причина, поскольку в JDK уже есть отдельный порт только для aarch64.
Описание
Вклад Oracle обеспечивает поддержку C1 и C2 как для arm32, так и для arm64. Код слит с деревом JDK 9 в отдельном репозитории в разделе проекта aarch32.
О намерении Oracle открыть исходный код порта для ARM было объявлено в рассылке aarch32 23 августа 2016 г., и с тех пор в рассылке aarch32 было несколько обсуждений. Чтобы посмотреть эти обсуждения, перейдите по ссылкам ниже.
На открытом созвоне в пятницу, 21 октября 2016 г., было решено добиваться включения этого порта в JDK. Официальный протокол не вёлся, но заметки со встречи были опубликованы в рассылке aarch32.
Webrev вклада Oracle доступен по адресу http://cr.openjdk.java.net/~bobv/arm3264/webrev, а объединённое дерево jdk9 — по адресу http://hg.openjdk.java.net/aarch32-port/jdk9-arm3264.
Из объединённого дерева можно собрать виртуальную машину minimal, client или server для arm32 или arm64. Из этого дерева можно также собрать существующий порт aarch64.
Есть дополнительный параметр, специфичный для ARM, — --with-cpu-port. С его помощью можно выбрать новую сборку для aarch64 --with-cpu-port=arm64 или существующую сборку для aarch64 --with-cpu-port=aarch64. Если параметр не указан, по умолчанию используется существующая сборка для aarch64.
Предполагается, что сборкой по умолчанию для aarch64 останется существующая сборка для aarch64.
Тестирование
Порт прошёл внутреннее тестирование в Oracle, поскольку он входит в проприетарную виртуальную машину Oracle. Поэтому он протестирован с помощью JPRT и других внутренних тестов.
Дерево JDK 9 в проекте aarch32 протестировано с помощью jtreg в различных конфигурациях, включая hard/soft FP, сборки release/debug и сборки client/server. В объединённом исходном коде нашлось несколько проблем, и они исправлены.
Риски
Изменения в общем коде сведены к минимуму. Переданный порт использует #ifdefs совместно с портом aarch64. Кроме того, #ifdefs для ARM уже есть в общем коде. Поэтому изменения в общем коде ограничиваются изменениями в сборке и одним #ifdef в libproc.h.
Поскольку исходный код взят из закрытого порта внутри Oracle, в Oracle он хорошо известен, и это значительно снижает риски, связанные с его слиянием с JDK.
Существует риск, что у тех, кто собирает JDK, возникнет путаница из-за того, что портов для aarch64 будет два: существующий порт aarch64 и единый порт arm32/arm64.