JEP 422: Linux/RISC-V Port
Порт на Linux/RISC-V
| Автор | fyang |
| Ответственный | Fei Yang |
| Тип | Feature |
| Область | Implementation |
| Статус | Closed / Delivered |
| Выпуск | 19 |
| Компонент | hotspot / other |
| Обсуждение | riscv dash port dash dev at openjdk dot java dot net |
| Трудоёмкость | L |
| Длительность | S |
| Рецензенты | Aleksey Shipilev |
| Одобрен | Vladimir Kozlov |
| Создан | 2021/11/08 08:11 |
| Обновлён | 2024/06/06 15:39 |
| Задача | 8276797 |
Аннотация
Перенести JDK на Linux/RISC-V.
Мотивация
RISC-V — свободная архитектура набора команд (ISA) типа RISC с открытым исходным кодом. Изначально её разработали в Калифорнийском университете в Беркли, а сейчас её развивают совместно при поддержке RISC-V International. Её уже поддерживает широкий набор инструментальных средств для разных языков. RISC-V-оборудование становится всё доступнее, поэтому порт JDK был бы полезен.
Описание
На самом деле RISC-V ISA — это семейство родственных ISA, в котором сейчас четыре базовых ISA. Каждую базовую ISA можно дополнить одним или несколькими стандартными расширениями.
Порт на Linux/RISC-V будет поддерживать только конфигурацию RISC-V RV64GV. Это 64-разрядная ISA общего назначения, в которую входят векторные инструкции. В будущем мы можем рассмотреть поддержку других конфигураций RISC-V, например 32-разрядной конфигурации общего назначения (RV32G).
Порт будет поддерживать следующие подсистемы HotSpot:
- шаблонный интерпретатор;
- JIT-компилятор C1 (клиентский);
- JIT-компилятор C2 (серверный);
- все сборщики мусора, которые сейчас есть в основной ветке, включая ZGC и Shenandoah.
Этот JEP посвящён не самому переносу, который почти завершён, а интеграции порта в основной репозиторий JDK.
Сейчас у нас есть ряд тривиальных изменений в общей части JDK. В основном это #ifdef, которые подключают соответствующие платформозависимые файлы. Есть несколько изменений другого рода, но и они защищены #ifdef RISCV. Поэтому риск для других платформ невелик.
Также есть изменения в системе сборки JDK: в неё добавлены нужные определения для порядка байтов, размера машинного слова и так далее. Они тоже не должны влиять на другие платформы.
Текущий diff между основной веткой JDK и проектом порта RISC-V можно получить так:
$ git clone https://github.com/openjdk/riscv-port riscv-port
$ cd riscv-port
$ git diff master..riscv-port
Автоматически сгенерированный webrev для этой разницы доступен здесь.
Тестирование
Порт проходит тесты jtreg уровней 1–4 и тесты jcstress на отладочной плате HiFive Unmatched. Мы также регулярно запускаем бенчмарки SPECjbb и SPECjvm.
Huawei Technologies, Alibaba и Red Hat регулярно собирают и тестируют этот порт на Linux/RISC-V, а также на платформах, которые JDK поддерживает сейчас, чтобы не допустить регрессий, ломающих существующие платформы.
Huawei Technologies обязуется полностью поддерживать (то есть регулярно обновлять, улучшать и тестировать) код, добавленный в рамках этой работы.
Риски и допущения
Для этой работы возможны сложности с доступностью оборудования RISC-V, но мы надеемся, что в ближайшем будущем оно станет широко доступным.