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

JEP 234: Additional Run-Time Compiler JVM Trace Events

Дополнительные события трассировки JVM от компиляторов времени выполнения

ОтветственныйIgor Ignatyev
ТипFeature
ОбластьImplementation
СтатусCandidate
Компонентhotspot / compiler
Обсуждениеhotspot dash compiler dash dev at openjdk dot java dot net
ТрудоёмкостьM
ДлительностьM
РецензентыAleksandre Iline, Mikael Vidstedt, Vladimir Kozlov
ОдобренMikael Vidstedt
Создан2014/05/19 18:32
Обновлён2021/10/22 17:17
Задача8043473

Аннотация

Расширить набор событий трассировки JVM, которые генерируют компиляторы времени выполнения.

Критерии успеха

  • Отсутствие измеримых накладных расходов на производительность, когда события не включены.

Мотивация

JEP 167 добавил инфраструктуру для подробной трассировки JVM. В нём появился базовый набор полезных событий компиляторов времени выполнения, но этот набор не даёт никакой информации о том, какие оптимизации были применены, что эти оптимизации сделали, почему компиляция завершилась неудачей и т. д.

Описание

Определить дополнительные события, которые подробнее покажут работу компиляторов времени выполнения и будут полезны как для тестирования, так и для профилирования.

Некоторые события фаз компиляции C2 уже генерирует; при необходимости мы доработаем C1, чтобы он тоже их генерировал.

События фаз компиляции будут содержать информацию, в том числе идентификатор компиляции и представление компилируемого метода или его существенных характеристик, и будут генерироваться в конце фазы. Если фаза компиляции завершится неудачей, будет сгенерировано событие с описанием сбоя. Фазы, для которых мы рассмотрим добавление событий:

  • Разбор
  • Граф высокого уровня
  • Низкоуровневое промежуточное представление
  • Машинно-независимый код
  • Ассемблирование

События о применённых оптимизациях будут содержать идентификатор компиляции и описывать выполненные преобразования. События будут генерироваться по завершении оптимизации. События будут определены как минимум для всех высокоуровневых оптимизаций, например:

  • Встраивание
  • Развёртывание циклов
  • Отделение итераций цикла (loop peeling)

Также будут генерироваться другие события, влияющие на компиляцию и выполнение скомпилированного метода, например:

  • События деоптимизации
  • События uncommon trap (ловушки для редких случаев)
  • События о нештатных ситуациях:
    • Достигнут максимальный предел числа узлов
    • Достигнута максимальная глубина рекурсии

Альтернативы

Эту информацию можно получить с помощью API для тестирования методом белого ящика (white-box testing API), но в нём нет средств для записи событий для последующего анализа.