...

вторник, 13 марта 2018 г.

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

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


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

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

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

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



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 осталось меньше месяца. Билеты всё ещё можно приобрести на официальном сайте.

Let's block ads! (Why?)

Комментариев нет:

Отправить комментарий