Достижение 4-ого уровня с помощью подогрева

Как видно из предыдущих статей JIT-компилятор на 4-ом уровне способен создавать высокопроизводительный нативный код. В некоторых случаях, благодаря сбору статистки в реальном рабочем окружении, нативный код получается даже лучше, чем код созданный статическим компилятором из исходников C/C++. Именно поэтому Java-программисты заявляют, что Java-приложение по скорости может превзойти приложение, написанное на C/C++.

Как же нам достичь этого уровня компиляции, если для его достижения требуется 15.000 исполнений?

Прогрев (warm-up)

Мы можем исполнить нужный нам код намеренно заданное количество раз при старте системы, имитируя поведение системы и события реальных ситуаций. Этот подход называется warm-up (прогревание) кода и похож он на то, как гонщики перед стартом прогревают свои моторы, чтобы быстро выйти на пиковый режим сразу в начале старта. Или как спортсмены перед забегом разогревают мышцы и суставы.

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

Несколько советов:

  • Соблюдайте предельную осторожность, чтобы на продакшене разогревающий код случайно не начал реально торговать
  • При разогреве важно выполнить все ветки кода. Если вы разогреете только одну ветку кода, JIT-компилятор сгененрирует машинный код только для нее, игнорируя ветку кода, которая не выполнялась при разогреве. Позднее, когда наступит событие приводящее к исполнению неразогретой ветки кода вы получите задержку
  • Разогреть код мало, надо его еще поддерживать в горячем состоянии. Если после разогрева в вашей системе ничего не происходит, например, система сидит и ждет какого-то события, JVM декомпилирует «остывший» код, а когда событие все же наступит, вы получите задержку. В идеале хорошо время от времени подогревать код, пропуская через него тестовые события, но это сопряжено с опасностью: тестовое событие может привести к реальной торговле
  • Все замеры производительности делайте только на прогретом коде

Как пишется разогревающий код

  1. Пишете кусок кода, который вызывает самые критически важные для производительности куски кода.
  2. Запускаете ситему на тестовом стенде с параметрами -XX:+PrintCompilation -XX:+PrintInlining
  3. Смотрите логи, любуетесь тем, как прогревается код.
  4. Когда прогревка закончена, ставите метку в логах и начинаете на тестовом стенде симулировать реальные торговые ситуации.
  5. Если код разогрева написан хорошо, в логах после метки вы не увидите больше сообщений о компиляции. Если такие сообщения появляются, останавливаете систему, анализируете, что именно послужило причиной компиляции, и улучшаете код разогрева
  6. Снова запускаете систему и проверяете, исчезло ли сообщение о компиляции
  7. Продолжаете до тех пор, пока лог компиляции после разогрева будет идеально чистым.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s