JEP 391: macOS/AArch64 Port
Порт на macOS/AArch64
| Authors | Anton 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, а другие части можно разрабатывать параллельно.