Производительность и рантаймы на конференции JPoint 2018

Все мы имеем какие-то ожидания от конференций. Обычно мы идём на вполне конкретную группу докладов, вполне конкретной тематики. Набор тем отличается от платформы к платформе. Вот что сейчас интересует джавистов:


  • Производительность
  • Виртуальные машины и особенности рантаймов
  • JDK 9/10/…
  • Фреймворки
  • Архитектура
  • Enterprise
  • Большие данные и машинное обучение
  • Базы данных
  • JVM-языки (включая Kotlin)
  • DevOps
  • Разные мелкие темы


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


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


Масштабирование, кластеры и всё такое рассматривать тут не будем, достаточно сказать, что оно есть (Christopher Batey из Lightbend расскажет про Akka, Виктор Гамов из Confluent расскажет про Kafka, и так далее).


mmy7cz6yk6wpsgfnobn3pkjc7ig.png

Disclamer. Статья написана по впечатлeниям от содержимого программы на официальном сайте. Всё ниженаписанное — мои собственные мысли, а не цитаты из докладов. В тексте могут быть (и точно есть) неверные предположения и неточности.


Производительность

Помните шуточную статью «Java с ассемблерными вставками»? В комментариях apangin сказал, что сделает доклад про VMStructs. Сказано — сделано, вот он: «VMStructs: зачем приложению знать о внутренностях JVM». Доклад посвящён использованию VMStructs — специального API виртуальной машины HotSpot, благодаря которому можно узнать о внутренних структурах JVM, включая TLAB, Code Cache, Constant Pool, Method, Symbol и т. д. Несмотря на свою «хакерскую» сущность, этот API может пригодиться и обычной программе. Андрей будет показывать примеры того, как VMStructs помогает в разработке реальных инструментов (которые они применяют в Одноклассниках).


Второй доклад, «Аппаратная транзакционная память в Java», делает Никита Коваль — инженер-исследователь в исследовательской группе dxLab компании Devexperts. Если вы были на JBreak в начале этого месяца, то можете заметить, что там он рассказывал о совершенно других вещах (о написании быстрой многопоточной хэш-таблицы с использованием мощи современных многоядерных архитекур и специальных алгоритмов). В этом же докладе речь пойдёт про транзакционную память, которая понемногу появляется в современных процессорах, но которую пока непонятно как использовать обычному человеку. Никита должен рассказать про способы использования, какие оптимизации уже есть в OpenJDK, и как выполнять транзакции напрямую из Java-кода.


Ну и наконец, «Enterprise без тормозов». Куда же мы без кровавого энтерпрайза! Сергей Цыпанов занимается вопросами производительности в Luxoft, в домене Deutsche Bank. В докладе будут рассматриваться паттерны, убивающие производительность ваших приложений — достаточно легкие, чтобы найти на code review, но достаточно сложные, чтобы в IDE красным они не подчёркивались. Все примеры основаны на коде работающих в продакшнe приложений.


Профилирование

По профилированию глаз зацепился за три доклада. Первый доклад — Саши Гольдштейна, «Linux container performance tools for JVM applications». Саша — серийный создатель перфомансного хардкора. В прошлом году на JPoint он делал отличный доклад про использование Berkeley Packet Filter для JVM (отчаянно рекомендую посмотреть запись на YouTube), и это был только вопрос времени, когда он доберётся до подробного разбора контейнеризации. Мир уходит в облака и докеры, что в свою очередь приносит нам множество новых проблем. Как вы могли заметить, большинство низкоуровневых систем отладки и профилирования, будучи применены к контейнерам, обрастают разными особенностями и косяками. Саша будет рассматривать основные сценарии (загрузку CPU, отзывчивость IO, доступ до расшаренных баз, итп) сквозь призму использования современных инструментов на платфомре GNU/Linux, включая BCC и perf.


«Профилируем с точностью до микросекунд и инструкций процессора» — второй доклад по профилированию, который делает Сергей Мельников из Райффайзенбанка. Интересно, что до того, как заняться low-latency кодом на Java, он работал в Intel инженером по производительности компиляторов для языков C/C++/FORTRAN. В этом докладе тоже будет perf! :-) Ещё будет про аппаратные особенности процессоров и технологии Intel Processor Trace, которая позволяет сделать следующий шаг в точности профилирования и реконструировать выполнение участка программы. Таких докладов довольно мало (например, можно найти доклад Andi Kleen на Tracing Summit 2015), они обычно оставляют море вопросов и не блещут практичностью применительно к Java. Тут у нас не просто есть человек, побывавший в обоих мирах (и Intel, и Java в банке), ещё его можно будет найти в дискуссионной зоне и задать неудобные вопросы.


Третий доклад — «Универсальные профилировщики и где они обитают». Его делает Иван Углянский — один из разработчиков Excelsior JET (сертифицированной реализации Java SE, основанной на оптимизирующей AOT-компиляции), занимющийся рантаймом: GC, загрузкой классов, поддержкой многопоточности, профилирования и т.д. Суть доклада в том, что недавно им понадобилось собирать профиль приложений, запускаемых на Excelsior JET. Делать это нужно на всех поддерживаемых системах и архитектурах, без перекомпиляции приложения, да еще и с приемлемой производительностью. Оказалось, что привычные способы профилирования одновременно под все эти пункты не подходят, поэтому пришлось придумать что-то своё. Иван расскажет, какие способы профилирования подходят для AOT, что можно себе позволить, если профилировать код изнутри JVM, и чем приходится платить за универсальность профилировщика.


Нестандартные рантаймы

«Рантайм», если говорить коротко, это штука, которая берёт твой высокоуровневый код на JVM-языке, превращает в низкоуровневый (машкод, например) и контролирует процесс выполнения. Обычно там есть какой-то ассемблер, компилятор, интерпретатор, виртуальная машина. Особенности рантайма задают особенности перфоманса прикладных задач.


Первое, на что падает взгляд в программе — это доклад Alibaba про их JDK. Кто не мечтал сделать собственный JDK с блэкджеком и корутинами? Но всем ясно, что это адский труд, боль и страдания. А вот в Alibaba получилось. Вот что у них есть:


  • Некий механизм, который ползволяет без оверхеда на GC выделять объекты в скрытых регионах;
  • Легкие треды (корутины), встроенные прямо в JVM, это нужно им для асинхронного программирования;
  • Возможность профилирования на живую
  • Разные приятные мелочи


Да, у нас (широкой общественности, использующей OpenJDK) скоро будет Project Loom. Но есть нюанс — разработка корутин является в Loom вторичной по отношению к главной цели — файберам. Файберы требуют delimited continuations, но совершенно необязательно, что они скоро, или когда-либо вообще, появятся в публичном API. Похоже, что в Alibaba всё это уже запилили самостоятельно.


Насколько понял, это не доклад из разряда «используйте нашу закрытую проприетарную JDK», а гид для людей, которые собираются осваивать разработку похожих фичей, или бороться с их отсутствием в OpenJDK. Например, инструменты для профилирования зависят от профилируемых областей и ворклоадов — для каждого продукта они будут свои. Докладчик от Alibaba будет не столько рассказывать о своих инструментах, сколько о процессе классификации ворклоадов, который ведёт разработку подобных инструментов в правильном направлении.


Кстати, раз уж мы заговорили про корутины. В Kotlin они появились, начиная с версии 1.1 (в экспериментальном статусе), и про них будет доклад Романа Елизарова из JetBrains. Роман расскажет про эволюцию подходов к асинхронному программированию, про их отличия и схожести. Плюс мы услышим официальную позицию, почему то, что сейчас есть в Kotlin — лучше, чем знакомый всем async/await.


Чтобы не ходить далеко, Alibaba JDK — это не единственные представители необычных экосистем. Конечно же, присустствует доклад про Azul Zing, и целых два про OpenJ9 (раз, два).


Все доклады про внутренности продуктов Azul обладают для меня неким оттенком грусти, т.к. ни разу в жизни не пришлось войти в круг избранных, использующих их крутые, но весьма недешёвые решения. Поэтому для меня этот их свежий доклад имеет скорей теоретическую значимость, как источник информации о технологиях, конкурирующих с нашим родным OpenJDK. Сейчас в OpenJDK активно развивается тема AOT — в OpenJDK JDK 9 уже был встроенный AOT (только для 64-битных линуксов), есть SubstrateVM, и дальше будет только лучше, вплоть до реализации проекта Metropolis. К сожалению, c AOT в Java не всё так просто, к части современной инфраструктуры очень неприятно всё это прикручивается (помните эпический доклад Никиты Липского про криво спроектированный OSGi?). У Azul уже есть некое готовое AOT решение под названием ReadyNow, встроенное в их Zing, пытающееся сочетать лучшие качества JIT и AOT — вот о нём и будет этот доклад.


С другой стороны, OpenJ9 можно скачать прямо сейчас. С тех пор как IBM опенсорснула свою виртуалку в Eclipse Foundation, вокруг неё произошло очень много хайпа. В массовом сознании есть некий набор идей и фактов про то, что ей можно заменить HotSpot, что при этом библиотеки из OpenJDK можно спокойно переиспользовать, что должно снизиться количество расходуемой памяти, и даже что-то переложить на GPU… и в общем-то, всё. (Кстати, GPU вообще обычно представляется как чёрная магия — благо, на прошлом Joker Дмитрий Александров делал отличный доклад «Java и GPU: где мы сейчас?». Видео ещё нет, но можно глянуть слайды).


Первый доклад, «The Eclipse OpenJ9 JVM: a deep dive!» рассказывает Tobi Ajila — разработчик J9 из IBM, работающий над Valhalla и Panama, с большим послужным списком вроде улучшений в интерпретаторе, JVMTI и лямбдах. Судя по всему, будет описание неких технических особенностей OpenJ9, благодаря которым можно разогнать свои облачные решения и прочие перфоманс-критичные штуки. Второй доклад, «Deep dive into the Eclipse OpenJ9 GC technologies» ведёт архитектор сборщика мусора в OpenJ9, тоже из IBM — там будет весьма прагматичный рассказ о четырех политиках сборки мусора, где их надо использовать, и как всё это работает под капотом. Надеюсь, что после прослушивания этих докладов, аура магии вокруг OpenJ9 слегка поуменьшится.


Заключение

За эти два дня можно побывать на 12 докладах. Из них на 3 кейноута — общие для всех, поэтому нужно сделать выбор 9 раз. Если выбирать доклады только из этого списка, то можно сделать 7 решений из 9. Остальные два — по вкусу (надо же иметь кругозор и по «общечеловеческим» темам?). Некоторые доклады пересекаются между собой (самый тяжкий выбор в 13.45 первого дня — между профилированием контейнеров Саши Гольдштейна, аппаратной транзакционной памятью Никиты Коваля и корутинами Kotlin Романа Елизарова). Есть идея, что с точки зрения человека, интересующегося перфомансом и рантаймами, программа составлена достаточно хорошо, чтобы быть интересной с начала до конца. Встретимся на конференции!


Напоминаю, что до JPoint 2018 осталось меньше месяца. Билеты всё ещё можно приобрести на официальном сайте.

© Habrahabr.ru