Разработка сред управляемого исполнения на примере виртуальной машины Java Занятие 8

реклама
Разработка сред управляемого
исполнения на примере
виртуальной машины Java
Занятие 8
Салищев С.И.
Использование Java в системах
реального времени (Real-Time)
Системы реального времени
Стандартные проблемы
Проблемы специфичные для сред
управляемого исполнения
JSR1 Real Time Java
Особенности компиляции
Метроном
Системы реального времени
Жесткое реальное время (Hard RT)



Завершение операции после наступления крайнего срока
является бесполезным.
управление оборудованием, протоколы передачи данных
низкого уровня, обработка звуковых сигналов.
Несоблюдение крайнего срока может привести к поломке
оборудования, потере данных, неприемлемым искажениям
сигнала.
Мягкое реальное время (Soft RT)



Завершение операции после наступления крайнего срока
является допустимым при условии ограниченного
количества таких событий
Сетевые сервисы, потоковое видео, видеоигры
Существуют механизмы обработки задержек: пропуск кадра,
повторный запрос и т.д.
Метрики
Минимальная/Средняя Утилизация Мутатора
(Minimum Mutator Utilization)


Минимальное/среднее соотношение времени исполнения
пользовательского и системного кода за
максимальное/среднее время отклика
Независимая от приложения метрика производительности
Максимальное/Среднее время отклика


максимальное/среднее время реакции на внешнее событие
Сумма времени обработки в пользовательском коде и
задержки создаваемой системой
Минимальная память

Количество памяти необходимое системе для сохранения
временных метрик
Стандартные проблемы
Детерминированное планирование нитей


Код нити не может прерываться в произвольных местах
Строгий порядок передачи управления между нитями
Синхронизация



Детерминированная передача управления при
синхронизации
Строгий порядок очередности ожидающих нитей
Защита от инверсии приоритетов
Управление памятью



Детерминированное время выделения памяти
Детерминированное время обращения к памяти
Защита от фрагментации и выгрузки памяти
Real-Time OS
Примеры: RTLinux, QNX, RTOS, VxWorks
Особенности





Невытесняющее планирование нитей
Строгая семантика приоритетов нитей
Упорядоченная синхронизация (fair locks)
Запрет выгрузки памяти
Наследование приоритетов
Недостатки



Дополнительные затраты на синхронизацию
Ограниченная масштабируемость
Убегающие нити (Runaway threads)
Невытесняющее планирование
Приоритеты
…
Нити
Инверсия и наследование
приоритетов
Стандартные техники
программирования
Статическое выделение памяти

Все объекты выделяются перед стартом основного
цикла обработки событий
Обработка пропусков крайнего срока
(watchdog)


Обнаружение повисания системы
Рестарт нитей обработки событий
Обработка повышенной загрузки ЦП одной
нитью


Обнаружение убегающих нитей
Рестарт нити
Проблемы специфичные для
сред управляемого исполнения
Сборка мусора


Задержки при останавливающей сборке мусора
Невозможность выделить достаточный объем
памяти без сборки мусора
JIT компиляция


Недетерминированная производительность
Задержки компиляции
Загрузка классов

Ленивая загрузка и верификация классов во
время исполнения
JSR1 Real-Time Java
Реализации: Sun Java RTS, IBM WebSphere Real
Time, Apogee Aphelion, TimeSys RTSJ
Планирование



Невытесняющее планирование
Строгая семантика приоритетов
Наследование приоритетов
Управление памятью


Бессмертная память
Контекстная память
Нити



Нити реального времени без кучи
Нити реального времени
Крайние сроки
JSR1 Real-Time Java 2
Синхронизация

Неждущие (lock free, wait free) очереди
Время и таймеры


Периодические события
Часы повышенной точности
Асинхронная обработка событий




Обработка периодических событий
Обработка системных сигналов
Обработка пропущенных крайних сроков
Обработка пользовательских событий
Типы памяти
Бессмертная память


Класс ImmortalMemory
Служит для статического выделения бессмертных
разделяемых объектов
Контекстная память




Класс ScopedMemory
Служит для выделения объектов с ограниченным временем
жизни без использования сборки мусора
Контексты образуют иерархию
Для освобождения контекста используется подсчет ссылок
Обычная куча

Использует сборку мусора
Возможные ссылки
Stored In
Reference
to
Heap
Reference
to
Immortal
Reference to Scoped
null
Heap
Permit
Permit
Forbid
Permit
Immortal
Permit
Permit
Forbid
Permit
Scoped
Permit
Permit
Local Variable
Permit
Permit
Permit, if the reference is from
the same scope, or an outer
scope
Permit
Permit
Permit
Возможные ссылки 2
Heap
D
Outer scope
A
Immortal area
Inner scope
B
C
E
Типы нитей
Нить реального времени без кучи







Класс NoHeapRealtimeThread
Может использовать только контекстную и
бессмертную память
Не останавливается для сборки мусора
Не вытесняется при планировании
Обеспечивает наилучшее время реакции
Используется для обработки событий с коротким
жестким крайним сроком
Сложности при программировании
Типы нитей 2
RealtimeThread






Класс RealTimeThread
Не вытесняется при планировании
Останавливается для сборки мусора
Время реакции определяется свойствами сборки мусора
Используется для обработки периодических событий с
ограниченным крайним сроком
Использование мало отличается от обычных нитей
Обычные нити




Класс Thread
Вытесняется при планировании
Останавливается для сборки мусора
Для нетребовательных к времени реакции задач
Особенности компиляции
JIT компиляция



Ресурсы на компиляцию
Изменение производительности с течением
времени
Требуется прогрев
AOT компиляция



Невозможность межпроцедурной оптимизации
Усложнение развертывания
Постоянная производительность
Метроном
Алгоритм сборки мусора реального
времени с доказанными временными
характеристиками
Достижимые значения метрик для
однопроцессорной системы


Максимальная задержка сборки мусора –
1ms
Минимальная утилизация мутатора на
интервале 10ms – 70%
Метроном 2
Метроном: особенности
алгоритма
Явное разделение квантов времени между
пользовательским кодом и сборкой мусора (тик-так)
Выделение памяти при помощи сегрегированных
списков свободных блоков
Инкрементальная разметка очистка, вариант слепок
на старте
Дефрагментация при помощи эвакуации в
заполненный блок
Использование Read Barrier для отслеживания
обращений к старой версии объекта при эвакуации
Разбиение массивов на блоки (1Mb) для уменьшения
фрагментации
Скачать