- PVSM.RU - https://www.pvsm.ru -
Все мы имеем какие-то ожидания от конференций. Обычно мы идём на вполне конкретную группу докладов, вполне конкретной тематики. Набор тем отличается от платформы к платформе. Вот что сейчас интересует джавистов:
Программа конференции составляется так, что для каждой из тем стараются подобрать как минимум по одному хорошему докладу. JPoint проводится в течение двух дней, там будет около сорока докладов, поэтому все основные вопросы так или иначе будут освещены.
В этом небольшом посте расскажу о тех докладах, которые приглянулись мне как человеку, который ходит в основном на доклады по производительности и рантаймам.
Масштабирование, кластеры и всё такое рассматривать тут не будем, достаточно сказать, что оно есть (Christopher Batey из Lightbend расскажет про Akka [1], Виктор Гамов из Confluent расскажет про Kafka [2], и так далее).
Disclamer. Статья написана по впечатлeниям от содержимого программы на официальном сайте [3]. Всё ниженаписанное — мои собственные мысли, а не цитаты из докладов. В тексте могут быть (и точно есть) неверные предположения и неточности.
Помните шуточную статью "Java с ассемблерными вставками" [4]? В комментариях apangin [5] сказал, что сделает доклад про VMStructs. Сказано — сделано, вот он: "VMStructs: зачем приложению знать о внутренностях JVM" [6]. Доклад посвящён использованию VMStructs — специального API виртуальной машины HotSpot, благодаря которому можно узнать о внутренних структурах JVM, включая TLAB, Code Cache, Constant Pool, Method, Symbol и т. д. Несмотря на свою «хакерскую» сущность, этот API может пригодиться и обычной программе. Андрей будет показывать примеры того, как VMStructs помогает в разработке реальных инструментов (которые они применяют в Одноклассниках).
Второй доклад, "Аппаратная транзакционная память в Java" [7], делает Никита Коваль — инженер-исследователь в исследовательской группе dxLab компании Devexperts. Если вы были на JBreak в начале этого месяца, то можете заметить, что там он рассказывал о совершенно других вещах [8] (о написании быстрой многопоточной хэш-таблицы с использованием мощи современных многоядерных архитекур и специальных алгоритмов). В этом же докладе речь пойдёт про транзакционную память, которая понемногу появляется в современных процессорах, но которую пока непонятно как использовать обычному человеку. Никита должен рассказать про способы использования, какие оптимизации уже есть в OpenJDK, и как выполнять транзакции напрямую из Java-кода.
Ну и наконец, "Enterprise без тормозов" [9]. Куда же мы без кровавого энтерпрайза! Сергей Цыпанов занимается вопросами производительности в Luxoft, в домене Deutsche Bank. В докладе будут рассматриваться паттерны, убивающие производительность ваших приложений — достаточно легкие, чтобы найти на code review, но достаточно сложные, чтобы в IDE красным они не подчёркивались. Все примеры основаны на коде работающих в продакшнe приложений.
По профилированию глаз зацепился за три доклада. Первый доклад — Саши Гольдштейна, "Linux container performance tools for JVM applications" [10]. Саша — серийный создатель перфомансного хардкора. В прошлом году на JPoint он делал отличный доклад про использование Berkeley Packet Filter для JVM [11] (отчаянно рекомендую посмотреть запись на YouTube), и это был только вопрос времени, когда он доберётся до подробного разбора контейнеризации. Мир уходит в облака и докеры, что в свою очередь приносит нам множество новых проблем. Как вы могли заметить, большинство низкоуровневых систем отладки и профилирования, будучи применены к контейнерам, обрастают разными особенностями и косяками. Саша будет рассматривать основные сценарии (загрузку CPU, отзывчивость IO, доступ до расшаренных баз, итп) сквозь призму использования современных инструментов на платфомре GNU/Linux, включая BCC и perf.
"Профилируем с точностью до микросекунд и инструкций процессора" [12] — второй доклад по профилированию, который делает Сергей Мельников из Райффайзенбанка. Интересно, что до того, как заняться low-latency кодом на Java, он работал в Intel инженером по производительности компиляторов для языков C/C++/FORTRAN. В этом докладе тоже будет perf! :-) Ещё будет про аппаратные особенности процессоров и технологии Intel Processor Trace, которая позволяет сделать следующий шаг в точности профилирования и реконструировать выполнение участка программы. Таких докладов довольно мало (например, можно найти доклад Andi Kleen [13] на Tracing Summit 2015), они обычно оставляют море вопросов и не блещут практичностью применительно к Java. Тут у нас не просто есть человек, побывавший в обоих мирах (и Intel, и Java в банке), ещё его можно будет найти в дискуссионной зоне и задать неудобные вопросы.
Третий доклад — "Универсальные профилировщики и где они обитают" [14]. Его делает Иван Углянский — один из разработчиков Excelsior JET (сертифицированной реализации Java SE, основанной на оптимизирующей AOT-компиляции), занимющийся рантаймом: GC, загрузкой классов, поддержкой многопоточности, профилирования и т.д. Суть доклада в том, что недавно им понадобилось собирать профиль приложений, запускаемых на Excelsior JET. Делать это нужно на всех поддерживаемых системах и архитектурах, без перекомпиляции приложения, да еще и с приемлемой производительностью. Оказалось, что привычные способы профилирования одновременно под все эти пункты не подходят, поэтому пришлось придумать что-то своё. Иван расскажет, какие способы профилирования подходят для AOT, что можно себе позволить, если профилировать код изнутри JVM, и чем приходится платить за универсальность профилировщика.
"Рантайм", если говорить коротко, это штука, которая берёт твой высокоуровневый код на JVM-языке, превращает в низкоуровневый (машкод, например) и контролирует процесс выполнения. Обычно там есть какой-то ассемблер, компилятор, интерпретатор, виртуальная машина. Особенности рантайма задают особенности перфоманса прикладных задач.
Первое, на что падает взгляд в программе — это доклад Alibaba про их JDK [15]. Кто не мечтал сделать собственный JDK с блэкджеком и корутинами? Но всем ясно, что это адский труд, боль и страдания. А вот в Alibaba получилось. Вот что у них есть:
Да, у нас (широкой общественности, использующей OpenJDK) скоро будет Project Loom [16]. Но есть нюанс — разработка корутин является в Loom вторичной по отношению к главной цели — файберам. Файберы требуют delimited continuations, но совершенно необязательно, что они скоро, или когда-либо вообще, появятся в публичном API. Похоже, что в Alibaba всё это уже запилили самостоятельно.
Насколько понял, это не доклад из разряда "используйте нашу закрытую проприетарную JDK", а гид для людей, которые собираются осваивать разработку похожих фичей, или бороться с их отсутствием в OpenJDK. Например, инструменты для профилирования зависят от профилируемых областей и ворклоадов — для каждого продукта они будут свои. Докладчик от Alibaba будет не столько рассказывать о своих инструментах, сколько о процессе классификации ворклоадов, который ведёт разработку подобных инструментов в правильном направлении.
Кстати, раз уж мы заговорили про корутины. В Kotlin они появились, начиная с версии 1.1 (в экспериментальном статусе [17]), и про них будет доклад Романа Елизарова [18] из JetBrains. Роман расскажет про эволюцию подходов к асинхронному программированию, про их отличия и схожести. Плюс мы услышим официальную позицию, почему то, что сейчас есть в Kotlin — лучше, чем знакомый всем async/await
.
Чтобы не ходить далеко, Alibaba JDK — это не единственные представители необычных экосистем. Конечно же, присустствует доклад про Azul Zing, и целых два про OpenJ9 (раз [19], два [20]).
Все доклады про внутренности продуктов Azul обладают для меня неким оттенком грусти, т.к. ни разу в жизни не пришлось войти в круг избранных, использующих их крутые, но весьма недешёвые решения. Поэтому для меня этот их свежий доклад [21] имеет скорей теоретическую значимость, как источник информации о технологиях, конкурирующих с нашим родным OpenJDK. Сейчас в OpenJDK активно развивается тема AOT — в OpenJDK JDK 9 уже был встроенный AOT (только для 64-битных линуксов), есть SubstrateVM [22], и дальше будет только лучше, вплоть до реализации проекта Metropolis [23]. К сожалению, c AOT в Java не всё так просто, к части современной инфраструктуры очень неприятно всё это прикручивается (помните эпический доклад Никиты Липского про криво спроектированный OSGi [24]?). У Azul уже есть некое готовое AOT решение под названием ReadyNow, встроенное в их Zing, пытающееся сочетать лучшие качества JIT и AOT — вот о нём и будет этот доклад.
С другой стороны, OpenJ9 можно скачать прямо сейчас [25]. С тех пор как IBM опенсорснула свою виртуалку в Eclipse Foundation, вокруг неё произошло очень много хайпа. В массовом сознании есть некий набор идей и фактов про то, что ей можно заменить HotSpot, что при этом библиотеки из OpenJDK можно спокойно переиспользовать, что должно снизиться количество расходуемой памяти, и даже что-то переложить на GPU… и в общем-то, всё. (Кстати, GPU вообще обычно представляется как чёрная магия — благо, на прошлом Joker Дмитрий Александров делал отличный доклад "Java и GPU: где мы сейчас?". Видео ещё нет, но можно глянуть слайды [26]).
Первый доклад, "The Eclipse OpenJ9 JVM: a deep dive!" [19] рассказывает Tobi Ajila — разработчик J9 из IBM, работающий над Valhalla [27] и Panama [28], с большим послужным списком вроде улучшений в интерпретаторе, JVMTI и лямбдах. Судя по всему, будет описание неких технических особенностей OpenJ9, благодаря которым можно разогнать свои облачные решения и прочие перфоманс-критичные штуки. Второй доклад, "Deep dive into the Eclipse OpenJ9 GC technologies" [20] ведёт архитектор сборщика мусора в OpenJ9, тоже из IBM — там будет весьма прагматичный рассказ о четырех политиках сборки мусора, где их надо использовать, и как всё это работает под капотом. Надеюсь, что после прослушивания этих докладов, аура магии вокруг OpenJ9 слегка поуменьшится.
За эти два дня можно побывать на 12 докладах. Из них на 3 кейноута — общие для всех, поэтому нужно сделать выбор 9 раз. Если выбирать доклады только из этого списка, то можно сделать 7 решений из 9. Остальные два — по вкусу (надо же иметь кругозор и по "общечеловеческим" темам?). Некоторые доклады пересекаются между собой (самый тяжкий выбор в 13.45 первого дня — между профилированием контейнеров Саши Гольдштейна, аппаратной транзакционной памятью Никиты Коваля и корутинами Kotlin Романа Елизарова). Есть идея, что с точки зрения человека, интересующегося перфомансом и рантаймами, программа составлена достаточно хорошо, чтобы быть интересной с начала до конца. Встретимся на конференции!
Напоминаю, что до JPoint 2018 осталось меньше месяца. Билеты всё ещё можно приобрести на официальном сайте [29].
Автор: olegchir
Источник [30]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/java/275137
Ссылки в тексте:
[1] расскажет про Akka: https://jpoint.ru/talks/5qmjxxmz7gkkcuc0o864gq/
[2] расскажет про Kafka: https://jpoint.ru/talks/6rzzmpfikoqa8uokcu0uas/
[3] программы на официальном сайте: https://jpoint.ru/#schedule
[4] "Java с ассемблерными вставками": https://habrahabr.ru/company/jugru/blog/347200/
[5] apangin: https://habrahabr.ru/users/apangin/
[6] "VMStructs: зачем приложению знать о внутренностях JVM": https://jpoint.ru/talks/7lh7kkir1ye6uamik4w4cs/
[7] "Аппаратная транзакционная память в Java": https://jpoint.ru/talks/7ulbihlaqmk4iquimasikq/
[8] совершенно других вещах: https://2018.jbreak.ru/talks/p8nmritp8gocayqok68cs/
[9] "Enterprise без тормозов": https://jpoint.ru/talks/1smez2ivjmiw0wskqimew0/
[10] "Linux container performance tools for JVM applications": https://jpoint.ru/talks/1bvhc9jbruimqwks4uqaeu/
[11] Berkeley Packet Filter для JVM: https://www.youtube.com/watch?v=0qI31tdlV-k
[12] "Профилируем с точностью до микросекунд и инструкций процессора": https://jpoint.ru/talks/4kniewswg8eiqciayummmc/
[13] доклад Andi Kleen: https://www.youtube.com/watch?v=R0AlpLqhwPQ
[14] "Универсальные профилировщики и где они обитают": https://jpoint.ru/talks/2ju2jfcff2i8ycs60emoig/
[15] Alibaba про их JDK: https://jpoint.ru/talks/2sc3v1jbv2y6eeoyiuisoc/
[16] Project Loom: http://cr.openjdk.java.net/~rpressler/loom/Loom-Proposal.html
[17] в экспериментальном статусе: https://kotlinlang.org/docs/reference/coroutines.html
[18] доклад Романа Елизарова: https://jpoint.ru/talks/1pztl3mbmqswiyiqqg2ocu/
[19] раз: https://jpoint.ru/talks/5vqeeeo89yk6q8qmm0y8sg/
[20] два: https://jpoint.ru/talks/brb8twjoluieiuuew8usu/
[21] их свежий доклад: https://jpoint.ru/talks/63npsyjpokmukqsag80oia/
[22] SubstrateVM: https://github.com/oracle/graal/tree/master/substratevm
[23] Metropolis: http://cr.openjdk.java.net/~jrose/metropolis/Metropolis-Proposal.html
[24] доклад Никиты Липского про криво спроектированный OSGi: https://www.youtube.com/watch?v=hEnvRXNyDgI
[25] можно скачать прямо сейчас: https://www.eclipse.org/openj9/
[26] слайды: http://downloads.contentful.com/oxjq45e8ilak/4f7eARrH9CKEyc4AGcomqK/10944de9030c26780fba33e614206b39/GPU____Java____________________________.pdf
[27] Valhalla: http://openjdk.java.net/projects/valhalla/
[28] Panama: http://openjdk.java.net/projects/panama/
[29] на официальном сайте: https://jpoint.ru/tickets/
[30] Источник: https://habrahabr.ru/post/351078/?utm_campaign=351078
Нажмите здесь для печати.