Тип работы:
Предмет:
Язык работы:


Сохранение и восстановление переносимого образа JVM для OpenJDK CRaC

Работа №156912

Тип работы

Бакалаврская работа

Предмет

программирование

Объем работы34
Год сдачи2024
Стоимость4750 руб.
ПУБЛИКУЕТСЯ ВПЕРВЫЕ
Просмотрено
23
Не подходит работа?

Узнай цену на написание


Введение 4
1. Постановка задачи 6
2. Обзор 7
2.1. Проект CRaC 7
2.2. Виртуальная машина HotSpot и её runtime-состояние . . 10
2.3. Форматы хранения состояния HotSpot 15
3. Описание подхода 19
3.1. Создание образа 19
3.2. Восстановление из образа 20
4. Описание реализации 23
4.1. Обработка классов 23
4.2. Обработка объектов 25
4.3. Обработка потоков исполнения 26
4.4. Адаптация Java-кода OpenJDK 27
5. Апробация 29
5.1. Цель 29
5.2. Условия проведения 29
5.3. Результаты 31
Заключение 32
Список литературы 33


В наши дни платформа Java очень популярна при разработке распределённых информационных систем. В данной области широкое применение нашли такие Java-технологии, как Spring [37], Quarkus [36] и
Micronaut [29] — для создания микросервисов и веб-приложений, Apache
Tomcat [5], Eclipse Jetty [13] и WildFly [39] — в качестве веб-серверов,
Apache Kafka [4] — как брокер сообщений, и многие другие.
Для распределённых систем особенно важны быстрота запуска приложения и скорость его работы в короткие промежутки времени: вопервых, из-за широкого применения горизонтального масштабирования, когда расширение пропускной способности системы достигается
за счёт запуска новых экземпляров входящих в её состав приложений,
во-вторых, из-за популярности платформ бессерверных вычислений (к
примеру, AWS Lambda [1]), где приложение запускается в ответ на
поступающие запросы, а оплата осуществляется за время его активной работы. Однако указанные характеристики не являются сильной
стороной Java-платформы. Как показано в [11, 19], для начала исполнения кода программы и достижения пиковой производительности JVM
требуется заметное время, уходящее на загрузку кода [27, глава 5], а
также его проверку и JIT-компиляцию [18, 15]. Кроме того, популярные
на платформе сетевые фреймворки могут тратить ощутимое время на
инициализацию [40], тем самым также отдаляя запуск основной части
программы.
Одним из возможных решений данной проблемы является проект
CRaC (Coordinated Restore at Checkpoint, [31]), входящий в OpenJDK [30]
и направленный на разработку механизма сохранения состояния JVM
(checkpoint) и последующего его восстановления (restore) в том числе
на другой машине. После восстановления JVM продолжает исполнение программы с места остановки, используя уже загруженный и JITскомпилированный код, что позволяет запускать программы на JVM
заметно быстрее и сразу достигать пиковой производительности [10].
Однако на данный момент проект CRaC в полной мере реализован
4лишь для семейства операционных систем Linux и сохраняет состояние
используемой в OpenJDK виртуальной машины HotSpot [32] в виде
образа Linux-процесса. Создать такой образ и восстановить состояние из
него возможно лишь на машинах с достаточно близкой конфигурацией:
требуется совпадение архитектуры, версий операционной системы и
системных библиотек, а также настроек системы — всё это усложняет
развёртывание, так как для каждой целевой конфигурации потребуется
создать отдельный образ, а такие частые изменения, как обновление
системных библиотек, с большой вероятностью будут приводить к необходимости его пересоздания. Помимо этого, для применения такого образа
требуется наличие особых прав, широкое предоставление которых несёт
риски с точки зрения безопасности.
Чтобы решить проблему зависимости образа виртуальной машины
HotSpot, создаваемого текущей реализацией проекта CRaC, от низкоуровневых деталей, предлагается разработать механизм сохранения
и восстановления состояния HotSpot в терминах платформонезависимой спецификации Java. При таком подходе создаваемый образ будет
переносим между различными операционными системами и архитектурами процессора: платформозависимые фрагменты состояния HotSpot,
в частности, генерируемый при JIT-компиляции машинный код, в него
не войдут. Данная работа посвящена проработке фундаментальных
аспектов указанного подхода и созданию его первичной реализации —
вопросы производительности и оптимальности находятся вне её рамок.


Возникли сложности?

Нужна помощь преподавателя?

Помощь в написании работ!


В ходе данной работы были получены следующие результаты.
1. Выполнен обзор предметной области: проекта CRaC и виртуальной
машины HotSpot. Выделены основные части, формирующие состояние HotSpot во время её работы — это информация о классах,
объектах и потоках исполнения приложения, работающего под
управлением HotSpot.
2. Механизм сохранения и восстановления состояния HotSpot спроектирован в виде компонента виртуальной машины с применением
уже доступных в её кодовой базе средств записи на диск состояний
объектов и воссоздания фрагментов стека вызовов.
3. Создана реализация механизма для двух основных поддерживаемых OpenJDK архитектур: x86-64 и AArch64 — предложенный
подход обобщается и на остальные архитектуры.
4. Проведена апробация реализованного механизма для приложения
на основе веб-сервера Eclipse Jetty: состояние приложения было
успешно перенесено с платформы Ubuntu/AArch64 на платформу
Alpine Linux/x86-64.



[1] AWS Lambda - Run code without thinking about servers or clus¬ters.— URL: https://aws.amazon.com/lambda (дата обращения: 12 декабря 2023 г.).
[2] Adams George, Borges Bruno. JEP 449: Deprecate the Windows 32-bit x86 Port for Removal. — 2023. — URL: https://openjdk.Org/jeps/4 49 (дата обращения: 22 апреля 2024 г.).
[3] Ansel Jason, Arya Kapil, Cooperman Gene. DMTCP: Transparent checkpointing for cluster computations and the desktop // 2009 IEEE In-ternational Symposium on Parallel & Distributed Processing. — 2009. — P. 1-12.
[4] Apache Kafka. — URL: https://kafka.apache.org (дата обращения: 22 октября 2023 г.).
[5] Apache Tomcat.— URL: https://tomcat.apache.org (дата обращения: 22 октября 2023 г.).
[6] Bursie Magnus Ihse. Supported Build Platforms - OpenJDK Wiki. — URL: https://wiki.openjdk.org/display/Build/Supported+Bui ld+Platforms (дата обращения: 19 апреля 2024 г.).
[7] Oracle and/or its affiliates. — CDS and AppCDS in Hotspot. — URL: ht tps://dev.java/learn/jvm/cds-appcds (дата обращения: 8 апреля 2024 г.).
[8] CRIU.— URL: https://criu.org (дата обращения: 20 октября 2023 г.).
[9] CRaC - Coordinated Restore at Checkpoint (CRaC) - Slash start-up and warm up times - Azul. — URL: https://www.azul.com/product s/components/crac (дата обращения: 2 декабря 2023 г.).
[10] CRaC/docs.— URL: https://github.com/CRaC/docs (дата обращения: 22 октября 2023 г.).
[11] Don’t Get Caught in the Cold, Warm-up Your JVM: Understand and Eliminate JVM Warm-up Overhead in Data-Parallel Systems / David Lion, Adrian Chiu, Hailong Sun et al. // 12th USENIX Sympo¬sium on Operating Systems Design and Implementation (OSDI 16).— 2016. — P. 383-400.
[12] Duell Jason. The Design and Implementation of Berkeley Lab’s Linux Checkpoint/Restart.— 2005.—4.— URL: https://www.osti.gOv/b iblio/891617 (дата обращения: 7 апреля 2024 г.).
[13] Eclipse Jetty - Servlet Engine and Http Server. — URL: https: // projects.eclipse.org/projects/rt.jetty (дата обращения: 22 октября 2023 г.).
[14] Eclipse Foundation, Inc. — Eclipse OpenJ9 documentation: CRIU support.— URL: https://eclipse.dev/openj9/docs/criusupport (дата обращения: 19 декабря 2023 г.).
[15] Eclipse OpenJ9; not just any Java Virtual Machine. — 2018. — URL: https://www.eclipse.org/community/eclipse_newsletter/2018/ april/openj9.php (дата обращения: 20 октября 2023 г.).
[16] HPROF Agent, JDK 8 edition.— URL: https://htmlpreview.gi thub.io/?https://github.com/openjdk/jdk8u/blob/master/j dk/src/share/demo/jvmti/hprof/manual.html (дата обращения: 4 декабря 2023 г.).
[17] HotSpot Glossary: deoptimization. — URL: https://openjdk.org/gr oups/hotspot/docs/HotSpotGlossary.html#deoptimization (дата обращения: 8 декабря 2023 г.).
[18] HotSpot Runtime Overview: interpreter outline. — URL: https://op enj dk.org/groups/hotspot/docs/RuntimeOverview.html#Interpr eter|outline (дата обращения: 20 октября 2023 г.).
[19] Improving the performance of JVM startup using the shared class cache / Dev Bhattacharya, Kenneth B Kent, Eric Aubanel et al. // 2017 IEEE Pacific Rim Conference on Communications, Computers and Signal Processing (PACRIM) / IEEE. - 2017. - P. 1-6.
[20] Oracle and/or its affiliates.— Java Native Interface Specification, Java SE 21 edition, 2023. — URL: https://docs.oracle.com/en/java/ja vase/21/docs/specs/jni/index.html (дата обращения: 14 декабря
2023 г.).
[21] Java Platform, Standard Edition 21 Reference Implementations. — URL: https://jdk.java.net/java-se-ri/21 (дата обращения: 19 апреля
2024 г.).
[22] Oracle and/or its affiliates. — Java® Development Kit Tool Specifica¬tions, Version 21 edition, 2023.— URL: https://docs.oracle.com/ en/java/javase/21/docs/specs/man/index.html (дата обращения: 8 апреля 2023 г.).
[23] Oracle and/or its affiliates. — Java® Development Kit Tool Specifica¬tions: The jcmd Command, Version 21 edition, 2023. — URL: https:// docs.oracle.com/en/java/javase/21/docs/specs/man/jcmd.html (дата обращения: 2 декабря 2023 г.).
[24] Oracle and/or its affiliates.— Java® Development Kit Tool Speci¬fications: The jstack Command, Version 21 edition, 2023. — URL: https://docs.oracle.com/en/java/javase/21/docs/specs/man/j stack.html (дата обращения: 9 декабря 2023 г.).
[25] Oracle and/or its affiliates.— Java® Platform, Standard Edition & Java Development Kit API Specification: java.lang.Class, Version 21 edition, 2023.— URL: https://docs.oracle.com/en/java/javase /21/docs/api/java.base/java/lang/Class.html (дата обращения: 3 декабря 2023 г.).
[26] Oracle and/or its affiliates. — Java® Platform, Standard Edition & Java Development Kit API Specification: java.lang.ClassLoader, Version 21 edition, 2023.— URL: https://docs.oracle.com/en/java/java se/21/docs/api/java.base/java/lang/ClassLoader.html (дата обращения: 3 декабря 2023 г.).
[27] Lindholm Tim, Yellin Frank, Bracha Gilad et al. — The Java® Virtual Machine Specification.— Oracle America, Inc., Java SE 21 edition, 2023.
[28] Kotzmann Thomas, Wimmer Christian. Synchronization - OpenJDK Wiki. — URL: https://wiki.openjdk.org/display/HotSpot/Synch ronization (дата обращения: 7 декабря 2023 г.).
[29] Micronaut Framework.— URL: https://micronaut.io (дата обращения: 22 октября 2023 г.).
[30] OpenJDK.— URL: https://openjdk.org (дата обращения: 11 апреля 2024 г.).
[31] OpenJDK: CRaC Project.— URL: https://openjdk.org/projects /crac (дата обращения: 20 октября 2023 г.).
[32] OpenJDK: HotSpot Group.— URL: https://openjdk.org/groups/h otspot (дата обращения: 11 апреля 2024 г.).
[33] OpenJDK: Project Leyden.— URL: https://openjdk.org/projects /leyden (дата обращения: 14 декабря 2023 г.).
[34] Package jdk.crac. — URL: https://crac.github.io/jdk/jdk-crac/ api/java.base/jdk/crac/package-summary.html (дата обращения: 7 апреля 2024 г.).
[35] QEMU: A generic and open source machine emulator and virtualizer. — URL: https://www.qemu.org/ (дата обращения: 2 мая 2024 г.).
[36] Quarkus - Supersonic Subatomic Java. — URL: https://quarkus.io (дата обращения: 22 октября 2023 г.).
[37] Spring Framework.— URL: https://spring.io (дата обращения: 22 октября 2023 г.).
[38] Use at Your Own Risk: The Java Unsafe API in the Wild / Luis Mastrangelo, Luca Ponzanelli, Andrea Mocci et al. // SIG¬PLAN Not. - 2015.-oct. - Vol. 50, no. 10.- P. 695-710.- URL: https://doi.org/10.1145/2858965.2814313 (дата обращения: 14 декабря 2023 г.).
[39] WildFly.— URL: https://www.wildfly.org (дата обращения: 22 октября 2023 г.).
[40] Wycislik Lukasz, Latusik Lukasz, Kaminska Anna Malgorzata. A Com-parative Assessment of JVM Frameworks to Develop Microservices // Applied Sciences. — 2023. — Vol. 13, no. 3. — URL: https://www.mdpi .com/2076-3417/13/3/1343 (дата обращения: 14 декабря 2023 г.).


Работу высылаем на протяжении 30 минут после оплаты.




©2025 Cервис помощи студентам в выполнении работ