Профилируем черного лебедя с помощью Intel Processor Trace, или Что делать, если иногда код выполняется 20 мс вместо 2 мс

День 2 /  / Зал 4  /  RU /

Комментарий Программного комитета:

Доклад-продолжение нашумевшего выступления на JPoint 2018 про профилирование с точностью до микросекунд. На этот раз Сергей расскажет, как использовать новейшие фичи процессоров Intel для сверхточного профилирования прямо из приложения.

Доклад посвящен профилированию небольших участков кода и выявлению причин, почему иногда код работает ощутимо медленнее среднего.

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

Далее рассказывается, как можно сделать небольшой профилировщик из подручных средств, используя интерфейс ядра ОС Linux. Созданный профилировщик будет использовать технологию Intel Processor Trace, которая позволяет восстановить трассу выполнения приложения. Рассказывается о том, как организована передача профиля из ядра ОС с помощью кольцевого буфера (ring buffer). Делается сравнение с другими профилировщиками.

Если у нас есть технология достаточно легковесного профилирования, да еще напрямую не влияющая на JVM, то ее можно использовать для профилирования не только медианных значений, но и событий, которые случаются редко. Т. е. показано различие профиля медианы (50 перцентиль) и, скажем, 99 перцентиль (т. е. каждый сотый раз).

В конце рассказывается, как можно применить технологию Intel Processor Trace и созданный профилировщик для сбора профиля на высоких перцентилях.


Сергей Мельников
Сергей Мельников
Райффайзенбанк

Работает в Райффайзенбанке с 2016 года над высокочастотным торговым приложением. В основном занимается ускорением существующего и написанием нового low-latency кода на Java. До этого работал в Intel инженером по производительности компиляторов для языков C/C++/FORTRAN.

Прошлые выступления спикера