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

JEP 391: macOS/AArch64 Port

Порт на macOS/AArch64

AuthorsAnton Kozlov, Vladimir Kempik
ОтветственныйVladimir Kempik
ТипFeature
ОбластьJDK
СтатусClosed / Delivered
Выпуск17
Компонентhotspot / runtime
Обсуждениеaarch64 dash port dash dev at openjdk dot java dot net
ТрудоёмкостьM
ДлительностьM
Зависит отJEP 388: Windows/AArch64 Port
РецензентыAndrew Haley, Vladimir Kozlov
ОдобренVladimir Kozlov
Создан2020/08/07 07:08
Обновлён2024/07/04 16:43
Задача8251280

Аннотация

Портировать JDK на macOS/AArch64.

Что не является целью

  • Реализация всех необязательных компонентов (например, интринсиков компилятора) не является целью, даже если они реализованы в других портах на AArch64.

  • Поддержка политики защиты памяти write-xor-execute (W^X) для целевых платформ, отличных от macOS/AArch64, не является целью.

Мотивация

Apple объявила о долгосрочном плане перевести линейку компьютеров Macintosh с x64 на AArch64. Поэтому мы ожидаем широкого спроса на порт JDK на macOS/AArch64.

Хотя сборку JDK для macOS/x64 можно будет запускать на системах на базе AArch64 с помощью встроенного в macOS транслятора Rosetta 2, трансляция почти наверняка приведёт к существенному снижению производительности.

Описание

Порт на AArch64 уже существует для Linux (JEP 237), и ведётся работа над портом на AArch64 для Windows (JEP 388). Мы рассчитываем повторно использовать существующий код для AArch64 из этих портов с помощью условной компиляции — как обычно делается в портах JDK, — чтобы учесть различия в низкоуровневых соглашениях, таких как двоичный интерфейс приложений (ABI) и набор зарезервированных регистров процессора.

macOS/AArch64 запрещает сегментам памяти быть одновременно исполняемыми и доступными для записи; эта политика известна как write-xor-execute (W^X). HotSpot VM постоянно создаёт и изменяет исполняемый код, поэтому в рамках этого JEP в HotSpot будет реализована поддержка W^X для macOS/AArch64.

Тестирование

Тестирование будет включать, помимо прочего, тестирование совместимости с помощью TCK, регрессионное тестирование с помощью jtreg и проверку на приложениях. Среда выполнения будет включать платформы для разработчиков, предоставляемые Apple, а также потребительское оборудование, как только оно станет доступно.

Риски и допущения

  • Изменения для macOS/AArch64 могут нарушить работу существующих портов на Linux/AArch64, Windows/AArch64 и macOS/x64. Этот риск будет снижен за счёт обширного тестирования перед интеграцией.

  • Мы рассчитываем реализовать новое соглашение ABI с помощью сравнительно небольших изменений в общем коде для AArch64. Мы ожидаем, что объём кода, специфичного для macOS, будет небольшим.

  • Мы ожидаем, что порты на macOS/AArch64 и Windows/AArch64 будут в некоторых отношениях схожи, что позволит использовать часть кода в обоих портах и ещё больше сократить объём кода для AArch64, специфичного для macOS.

  • Мы предполагаем, что новая версия macOS не будет существенно отличаться от предыдущих версий, поэтому объём изменений кода, необходимых для новой версии, будет небольшим.

  • Мы ожидаем, что поддержке политики W^X помогут службы операционной системы, например системный вызов pthread_jit_write_protect_np. Если нет, мы разработаем альтернативные подходы. Первая реализация будет нацелена на корректность, с возможным снижением производительности в нечастых случаях, таких как деоптимизации.

Зависимости

Порт на macOS/AArch64 и порт на Windows/AArch64 (JEP 388), вероятно, будут иметь общий код. Некоторые части этого JEP будут зависеть от интеграции JEP 388, а другие части можно разрабатывать параллельно.