(The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH...
Transcript of (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH...
![Page 1: (The Art of) (Java) Benchmarking - Gentle …(TheArtof)(Java)Benchmarking Gentle Introduction in JMH АлексейШипилёв aleksey.shipilev@oracle.com,@shipilev](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/1.jpg)
(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](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/2.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/3.jpg)
Введение
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](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/4.jpg)
Введение: стандартный дисклеймер
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](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/5.jpg)
Теория
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](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/6.jpg)
Теория: бенчмарки
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](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/7.jpg)
Теория: классификация бенчмарок
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](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/8.jpg)
Теория: зачем?
Высечь в граните
Эксперимент требует понимания объекта исследований.
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](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/9.jpg)
Теория: зачем?
Высечь в граните
Эксперимент требует понимания объекта исследований.
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](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/10.jpg)
Теория: зачем?
Высечь в граните
Эксперимент требует понимания объекта исследований.
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](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/11.jpg)
Теория: зачем?
Высечь в граните
Эксперимент требует понимания объекта исследований.
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](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/12.jpg)
Теория: главный вопрос
Всегда, всегда задавайте себе его!
Почему мой бенчмарк не может работать быстрее?
Ответ определяет качество эксперимента: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](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/13.jpg)
Теория: главный вопрос
Всегда, всегда задавайте себе его!
Почему мой бенчмарк не может работать быстрее?
Ответ определяет качество эксперимента: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](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/14.jpg)
Практика
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](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/15.jpg)
Практика: фреймворки
АвтоматизацияКилотонна инфраструктуры на грамм измеряемого кодаФреймворк, который эту килотонну делает однажды?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](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/16.jpg)
Практика: 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](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/17.jpg)
Практика: 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](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/18.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/19.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/20.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/21.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/22.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/23.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/24.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/25.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/26.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/27.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/28.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/29.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/30.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/31.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/32.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/33.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/34.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/35.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/36.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/37.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/38.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/39.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/40.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/41.jpg)
Выводы
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](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/42.jpg)
Выводы: 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](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/43.jpg)
Выводы: инструменты
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](https://reader033.fdocuments.net/reader033/viewer/2022052803/5f290a1ec0cb4a22d42d8fe7/html5/thumbnails/44.jpg)
Выводы: прочие инструменты
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.