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

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, но мы надеемся, что в ближайшем будущем оно станет широко доступным.