(the art of) (java) benchmarking - gentle …(theartof)(java)benchmarking gentle introduction in jmh...

44
(The Art of) (Java) Benchmarking Gentle Introduction in JMH Алексей Шипилёв [email protected], @shipilev

Upload: others

Post on 07-Jul-2020

11 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

(The Art of) (Java) BenchmarkingGentle Introduction in JMH

Алексей Шипилёв[email protected], @shipilev

Page 2: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

The following is intended to outline our general product direction. Itis intended for information purposes only, and may not beincorporated into any contract. It is not a commitment to deliver anymaterial, code, or functionality, and should not be relied upon inmaking purchasing decisions. The development, release, and timingof any features or functionality described for Oracle’s productsremains at the sole discretion of Oracle.

Slide 2/34. Copyright c○ 2013, Oracle and/or its affiliates. All rights reserved.

Page 3: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

Введение

Slide 3/34. Copyright c○ 2013, Oracle and/or its affiliates. All rights reserved.

Page 4: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

Введение: стандартный дисклеймер

1. Computer Science → Software EngineeringСтроим приложения по функциональным требованиямВ большой степени абстрактно, в «идеальном мире»Рассуждения при помощи формальных методов

2. Performance Engineering«Real world strikes back!»Исследуем взаимодействия софта с железом на типичных данныхЭффективно предсказывается уже мало чтоРассуждения при помощи формальных методов

Slide 4/34. Copyright c○ 2013, Oracle and/or its affiliates. All rights reserved.

Page 5: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

Теория

Slide 5/34. Copyright c○ 2013, Oracle and/or its affiliates. All rights reserved.

Page 6: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

Теория: бенчмарки

1. «Программа для измерения производительности»Жило-было обычное приложение, добавили измерение времени –бац – уже бенчмаркКаждый запуск бенчмарка – эксперимент

2. Типичные требования к экспериментуРезультат запуска – значение некоторой метрикиДолжен быть объективным («test the right thing»)Должен быть надёжным (воспроизводимым)

Slide 6/34. Copyright c○ 2013, Oracle and/or its affiliates. All rights reserved.

Page 7: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

Теория: классификация бенчмарок

1. Реальные приложенияЗапускаем руками, совершаем действия рукамиМеряем секундомером, вольтметром, осциллографом

2. Автоматические сценарии приложенийЗафиксировали какой-нибудь сценарийАвтоматически измерили время, мощность, трафик

3. Синтетические (макро) бенчмаркиНаписали приложение, похожее на типичное, эталонноеАвтоматически измерили

4. Микро/нано-бенчмаркиНаписали отдельную, маленькую частьВыбросили всё остальное

Slide 7/34. Copyright c○ 2013, Oracle and/or its affiliates. All rights reserved.

Page 8: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

Теория: зачем?

Высечь в граните

Эксперимент требует понимания объекта исследований.

1. Чем у́же область исследования, тем больше нужно знатьнадёжная изоляция от посторонних эффектовнадёжный контроль, «проверки на дурака»

2. Бенчмаркинг – это война против оптимизаций

3. Нужно знать всё, вплоть до микроархитектуры.

Slide 8/34. Copyright c○ 2013, Oracle and/or its affiliates. All rights reserved.

Page 9: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

Теория: зачем?

Высечь в граните

Эксперимент требует понимания объекта исследований.

1. Чем у́же область исследования, тем больше нужно знатьнадёжная изоляция от посторонних эффектовнадёжный контроль, «проверки на дурака»

2. Бенчмаркинг – это война против оптимизаций

3. Нужно знать всё, вплоть до микроархитектуры.

Slide 8/34. Copyright c○ 2013, Oracle and/or its affiliates. All rights reserved.

Page 10: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

Теория: зачем?

Высечь в граните

Эксперимент требует понимания объекта исследований.

1. Чем у́же область исследования, тем больше нужно знатьнадёжная изоляция от посторонних эффектовнадёжный контроль, «проверки на дурака»

2. Бенчмаркинг – это война против оптимизаций

3. Нужно знать всё, вплоть до микроархитектуры.

Slide 8/34. Copyright c○ 2013, Oracle and/or its affiliates. All rights reserved.

Page 11: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

Теория: зачем?

Высечь в граните

Эксперимент требует понимания объекта исследований.

1. Чем у́же область исследования, тем больше нужно знатьнадёжная изоляция от посторонних эффектовнадёжный контроль, «проверки на дурака»

2. Бенчмаркинг – это война против оптимизаций

3. Нужно знать всё, вплоть до микроархитектуры.

Slide 8/34. Copyright c○ 2013, Oracle and/or its affiliates. All rights reserved.

Page 12: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

Теория: главный вопрос

Всегда, всегда задавайте себе его!

Почему мой бенчмарк не может работать быстрее?

Ответ определяет качество эксперимента:1. В какие ограничения упёрлись?2. Работает та часть кода, которую мы «исследуем»?3. Что сделать, чтобы исправить бенчмарк?

Slide 9/34. Copyright c○ 2013, Oracle and/or its affiliates. All rights reserved.

Page 13: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

Теория: главный вопрос

Всегда, всегда задавайте себе его!

Почему мой бенчмарк не может работать быстрее?

Ответ определяет качество эксперимента:1. В какие ограничения упёрлись?2. Работает та часть кода, которую мы «исследуем»?3. Что сделать, чтобы исправить бенчмарк?

Slide 9/34. Copyright c○ 2013, Oracle and/or its affiliates. All rights reserved.

Page 14: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

Практика

Slide 10/34. Copyright c○ 2013, Oracle and/or its affiliates. All rights reserved.

Page 15: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

Практика: фреймворки

АвтоматизацияКилотонна инфраструктуры на грамм измеряемого кодаФреймворк, который эту килотонну делает однажды?a priori не известно, на какие эффекты мы наступим ⇒ нужноучитывать все возможные

Вечная борьба между удобством интерфейсов, ихскоростью, и надёжностью:

звать бенчмарки через Reflection? (oh wow)запускать любые JUnit-тесты? (oh wow x2)(ещё какое-нибудь сумасшествие)

Slide 11/34. Copyright c○ 2013, Oracle and/or its affiliates. All rights reserved.

Page 16: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

Практика: JMH

У нас тоже есть очень хороший харнесс:http://openjdk.java.net/projects/code-tools/jmh/

JMH is Serious Business:Он учитывает тонну VM-ных эффектовМы его периодически допиливаем, когда меняется VMМы его периодически фиксим, как растёт наша экспертизаВсякий внешний бенч валидируется переписыванием под JMH

Мы вынули столько неочевидных граблей из JMH,что не верим ни одному известному харнессу.

Slide 12/34. Copyright c○ 2013, Oracle and/or its affiliates. All rights reserved.

Page 17: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

Практика: JMH

У нас тоже есть очень хороший харнесс:http://openjdk.java.net/projects/code-tools/jmh/

JMH is Serious Business:Он учитывает тонну VM-ных эффектовМы его периодически допиливаем, когда меняется VMМы его периодически фиксим, как растёт наша экспертизаВсякий внешний бенч валидируется переписыванием под JMH

Мы вынули столько неочевидных граблей из JMH,что не верим ни одному известному харнессу.

Slide 12/34. Copyright c○ 2013, Oracle and/or its affiliates. All rights reserved.

Page 18: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

Hello World: демо

Базовый Hello World:

http://hg.openjdk.java.net/code-tools/jmh/file/tip/jmh-samples/src/main/java/org/openjdk/jmh/samples/JMHSample_01_HelloWorld.java

Slide 13/34. Copyright c○ 2013, Oracle and/or its affiliates. All rights reserved.

Page 19: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

Warmup: замолвите слово

Запомните

Мы имеем дело с динамическими системами.«Прогрев» – это выжидание характерного времени

переходного процесса.

У нас полно переходных процессов.

Компиляция кода – не единственный переходный процесс!«Мудрость»: «Cледите за PrintCompilation». WTF?

Slide 14/34. Copyright c○ 2013, Oracle and/or its affiliates. All rights reserved.

Page 20: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

Warmup: замолвите слово

Запомните

Мы имеем дело с динамическими системами.«Прогрев» – это выжидание характерного времени

переходного процесса.

У нас полно переходных процессов.Компиляция кода – не единственный переходный процесс!

«Мудрость»: «Cледите за PrintCompilation». WTF?

Slide 14/34. Copyright c○ 2013, Oracle and/or its affiliates. All rights reserved.

Page 21: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

Warmup: замолвите слово

Запомните

Мы имеем дело с динамическими системами.«Прогрев» – это выжидание характерного времени

переходного процесса.

У нас полно переходных процессов.Компиляция кода – не единственный переходный процесс!«Мудрость»: «Cледите за PrintCompilation». WTF?

Slide 14/34. Copyright c○ 2013, Oracle and/or its affiliates. All rights reserved.

Page 22: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

States & Fixtures: многопоточные бенчмарки

1. Мало кто умеет писать многопоточные бенчмарки

2. Требуется изрядная ловкость, чтобы:корректно инициализировать состояние (+ нужным потоком)корректно состояние опубликовать (+ только нужным потокам)корректно синхронизировать потоки (+ только те, что работаютс состоянием)

3. И уж тем более сложно разделить во харнессе состоянияshared состояние можно сэмулировать static-полямиnon-shared состояние можно сэмулировать instance-полямиа состояние, расшаренное только отдельной группой потоков?

Slide 15/34. Copyright c○ 2013, Oracle and/or its affiliates. All rights reserved.

Page 23: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

States & Fixtures: демо

Про State-объекты:

http://hg.openjdk.java.net/code-tools/jmh/file/tip/jmh-samples/src/main/java/org/openjdk/jmh/samples/JMHSample_03_States.java

Slide 16/34. Copyright c○ 2013, Oracle and/or its affiliates. All rights reserved.

Page 24: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

States & Fixtures: демо

Про Fixtures:

http://hg.openjdk.java.net/code-tools/jmh/file/tip/jmh-samples/src/main/java/org/openjdk/jmh/samples/JMHSample_05_

StateFixtures.java

Slide 17/34. Copyright c○ 2013, Oracle and/or its affiliates. All rights reserved.

Page 25: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

Dead Code Elimination: проблема

Умные компиляторы давно умеют делать dead-codeelimination:

результат не используется, нет side effect’ов?никто не заметит, если мы удалим код?

Кажется, что с этим легко бороться, используем результат!

Q: Накапливать в аккумуляторе?A: DCE «протягивается» даже через очень сложные выражения.Q: Сохранить результат в поле?A: False sharing, card marks...Q: Сравнить с невероятным результатом и кинуть exception?A: Попробуй выбрать такое значение, чтобы оно не былопредсказано.

Slide 18/34. Copyright c○ 2013, Oracle and/or its affiliates. All rights reserved.

Page 26: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

Dead Code Elimination: проблема

Умные компиляторы давно умеют делать dead-codeelimination:

результат не используется, нет side effect’ов?никто не заметит, если мы удалим код?

Кажется, что с этим легко бороться, используем результат!Q: Накапливать в аккумуляторе?A: DCE «протягивается» даже через очень сложные выражения.

Q: Сохранить результат в поле?A: False sharing, card marks...Q: Сравнить с невероятным результатом и кинуть exception?A: Попробуй выбрать такое значение, чтобы оно не былопредсказано.

Slide 18/34. Copyright c○ 2013, Oracle and/or its affiliates. All rights reserved.

Page 27: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

Dead Code Elimination: проблема

Умные компиляторы давно умеют делать dead-codeelimination:

результат не используется, нет side effect’ов?никто не заметит, если мы удалим код?

Кажется, что с этим легко бороться, используем результат!Q: Накапливать в аккумуляторе?A: DCE «протягивается» даже через очень сложные выражения.Q: Сохранить результат в поле?A: False sharing, card marks...

Q: Сравнить с невероятным результатом и кинуть exception?A: Попробуй выбрать такое значение, чтобы оно не былопредсказано.

Slide 18/34. Copyright c○ 2013, Oracle and/or its affiliates. All rights reserved.

Page 28: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

Dead Code Elimination: проблема

Умные компиляторы давно умеют делать dead-codeelimination:

результат не используется, нет side effect’ов?никто не заметит, если мы удалим код?

Кажется, что с этим легко бороться, используем результат!Q: Накапливать в аккумуляторе?A: DCE «протягивается» даже через очень сложные выражения.Q: Сохранить результат в поле?A: False sharing, card marks...Q: Сравнить с невероятным результатом и кинуть exception?A: Попробуй выбрать такое значение, чтобы оно не былопредсказано.

Slide 18/34. Copyright c○ 2013, Oracle and/or its affiliates. All rights reserved.

Page 29: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

Dead Code Elimination: демо

Про DCE:

http://hg.openjdk.java.net/code-tools/jmh/file/tip/jmh-samples/src/main/java/org/openjdk/jmh/samples/JMHSample_08_DeadCode.java

Slide 19/34. Copyright c○ 2013, Oracle and/or its affiliates. All rights reserved.

Page 30: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

CSE, Folding: проблема

Умные компиляторы хорошо предвычисляют:вычисление над константами = константавычисление над локалом = константавычисление над полем = константа для цикла

С этим можно бороться:храним источники данных в поляхделаем volatile read между чтениями источника

Slide 20/34. Copyright c○ 2013, Oracle and/or its affiliates. All rights reserved.

Page 31: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

CSE, Folding: демо

Про constant fold:

http://hg.openjdk.java.net/code-tools/jmh/file/tip/jmh-samples/src/main/java/org/openjdk/jmh/samples/JMHSample_10_ConstantFold.java

Slide 21/34. Copyright c○ 2013, Oracle and/or its affiliates. All rights reserved.

Page 32: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

Loops: Loop Unrolling

Мега-оптимизация!

После раскрутки циклов:склеиваются общие части итерацийчто-то даже hoist’ится наружуудаляются разного рода проверки, типа array bounds check

Если одна итерация реально стоит 𝑋 ns, топосле раскрутки цикла она «эффективно» стоит

𝛼 𝑋, где 𝛼 ∈ [0; 1].

Slide 22/34. Copyright c○ 2013, Oracle and/or its affiliates. All rights reserved.

Page 33: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

Loops: демо

Про loop unrolling:

http://hg.openjdk.java.net/code-tools/jmh/file/tip/jmh-samples/src/main/java/org/openjdk/jmh/samples/JMHSample_11_Loops.java

Slide 23/34. Copyright c○ 2013, Oracle and/or its affiliates. All rights reserved.

Page 34: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

Forking: смешать, но не взбалтывать

Многие оптимизации опираются на профиль.

Почти всегда тесты смешивать нельзя:смешаются профили, и приветобычно, первый тест ещё и шустрее работает

Почти все вменяемые тесты делаются в отдельных JVM.

Slide 24/34. Copyright c○ 2013, Oracle and/or its affiliates. All rights reserved.

Page 35: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

Forking: демо

Про forking:

http://hg.openjdk.java.net/code-tools/jmh/file/tip/jmh-samples/src/main/java/org/openjdk/jmh/samples/JMHSample_12_Forking.java

Slide 25/34. Copyright c○ 2013, Oracle and/or its affiliates. All rights reserved.

Page 36: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

Run-to-run Variance: бич сложных систем

Как и любой сложный ящик, JVM «шумит».

От запуска к запуску производительность может плавать1:шум в профилях, в порядке компиляциишум в тредингеслучайность в JVM/JDK, и в самом приложении

Пока не доказано обратное,тесты нужно запускать в нескольких JVM подряд.

1http://dl.acm.org/citation.cfm?id=1297033Slide 26/34. Copyright c○ 2013, Oracle and/or its affiliates. All rights reserved.

Page 37: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

Run-to-run Variance: демо

Про run-to-run variance:

http://hg.openjdk.java.net/code-tools/jmh/file/tip/jmh-samples/src/main/java/org/openjdk/jmh/samples/JMHSample_13_RunToRun.java

Slide 27/34. Copyright c○ 2013, Oracle and/or its affiliates. All rights reserved.

Page 38: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

Edge Effects: особый, уличный косяк

Warmup уводит нас в steady state.Измеряем ли мы только в steady state?

Пример:реакция шедулинга не мгновеннапока стартуют все потоки, некоторые уже начнут работать(и это существенно исказит результат)

На больших машинах edge effect’ы от потоковсильно искажают результаты!

Slide 28/34. Copyright c○ 2013, Oracle and/or its affiliates. All rights reserved.

Page 39: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

Edge Effects: демо

Про sync iterations:

http://hg.openjdk.java.net/code-tools/jmh/file/tip/jmh-samples/src/main/java/org/openjdk/jmh/samples/JMHSample_17_

SyncIterations.java

Slide 29/34. Copyright c○ 2013, Oracle and/or its affiliates. All rights reserved.

Page 40: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

Edge Effects: демо

Про холодные потоки:

http://hg.openjdk.java.net/code-tools/jmh/file/tip/jmh-samples/src/main/java/org/openjdk/jmh/samples/JMHSample_07_

FixtureLevelInvocation.java

Slide 30/34. Copyright c○ 2013, Oracle and/or its affiliates. All rights reserved.

Page 41: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

Выводы

Slide 31/34. Copyright c○ 2013, Oracle and/or its affiliates. All rights reserved.

Page 42: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

Выводы: Benchmarking is Serious Business

Огромное поле для ошибок.

Написание тестов требует экспертизыНаписание фреймворков требует ещё большей экспертизыНе верьте красивым репортам, верьте логичным результатам

Slide 32/34. Copyright c○ 2013, Oracle and/or its affiliates. All rights reserved.

Page 43: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

Выводы: инструменты

1. МозгПлагин «данунеможетбыть» для перепроверок фактовПлагин «щапридумаем» для построения гипотез и экспериментовПлагин «чётоянепонял» для проверки консистентности гипотезПлагин «ядурак» для лёгкого отвержения ложных гипотез

2. РукиПрямые, для постановки аккуратных экспериментовСильные, для обработки тонн экспериментальных данных

3. Язык, уши, глаза и прочее I/OДля обмена результатами и peer reviewДля доступа к предыдущим экспериментам

Slide 33/34. Copyright c○ 2013, Oracle and/or its affiliates. All rights reserved.

Page 44: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev

Выводы: прочие инструменты

1. ФреймворкиJMH: http://openjdk.java.net/projects/code-tools/jmh/

2. ПрофилировщикиVisualVM, JRockit Mission Control, Oracle Studio PerformanceAnalyzertop, vmstat, mpstat, iostat, dtrace, strace

3. Дизассемблеры-XX:+PrintAssemblyhttps://wikis.sun.com/display/HotSpotInternals/PrintAssembly

Slide 34/34. Copyright c○ 2013, Oracle and/or its affiliates. All rights reserved.