keynote: performanceslide 20/66. ¾keynote: performance¿, aleksey shipil¼v, 2017,...

107

Upload: others

Post on 29-May-2020

10 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Keynote: Performance«Что в имени тебе моём?»

Aleksey Shipilёv

[email protected], @shipilev

@shipilev

Page 2: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Safe Harbor / Тихая Гавань

Everything on this and any subsequent slides may be a lie. Do not base yourdecisions on this talk. If you do, ask for professional help.

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

всё-таки решите принять, то наймите профессионалов.

Slide 2/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 3: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Крупно

Page 4: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Крупно: критерии успеха в разработке

Slide 4/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 5: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Крупно: критерии успеха в разработке

Slide 4/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 6: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Крупно: критерии успеха в разработке

1. Соответствие получившегося желаниям пользователя

2. Корректность реализации

3. Безопасность

4. Быстрота и удобство разработки

5. Производительность

Чаще всего производительность даже близко не главный приоритет.А чаще всего её даже в критериях успеха нет.

Slide 5/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 7: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Крупно: критерии успеха в разработке

1. Соответствие получившегося желаниям пользователя

2. Корректность реализации

3. Безопасность

4. Быстрота и удобство разработки

5. Производительность

Чаще всего производительность даже близко не главный приоритет.А чаще всего её даже в критериях успеха нет.

Slide 5/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 8: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Крупно: критерии успеха в разработке

1. Соответствие получившегося желаниям пользователя

2. Корректность реализации

3. Безопасность

4. Быстрота и удобство разработки

5. Производительность

Чаще всего производительность даже близко не главный приоритет.А чаще всего её даже в критериях успеха нет.

Slide 5/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 9: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Крупно: критерии успеха в разработке

1. Соответствие получившегося желаниям пользователя

2. Корректность реализации

3. Безопасность

4. Быстрота и удобство разработки

5. Производительность

Чаще всего производительность даже близко не главный приоритет.А чаще всего её даже в критериях успеха нет.

Slide 5/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 10: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Крупно: критерии успеха в разработке

1. Соответствие получившегося желаниям пользователя

2. Корректность реализации

3. Безопасность

4. Быстрота и удобство разработки

5. Производительность

Чаще всего производительность даже близко не главный приоритет.А чаще всего её даже в критериях успеха нет.

Slide 5/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 11: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Крупно: критерии успеха в разработке

1. Соответствие получившегося желаниям пользователя

2. Корректность реализации

3. Безопасность

4. Быстрота и удобство разработки

5. Производительность

Чаще всего производительность даже близко не главный приоритет.А чаще всего её даже в критериях успеха нет.

Slide 5/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 12: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Крупно: критерии успеха в разработке

1. Соответствие получившегося желаниям пользователя

2. Корректность реализации

3. Безопасность

4. Быстрота и удобство разработки

5. Производительность

Чаще всего производительность даже близко не главный приоритет.А чаще всего её даже в критериях успеха нет.

Slide 5/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 13: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Крупно: их разыскивает милиция

Slide 6/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 14: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Крупно: про критерии

«Корректная программа»:

1. не видно бесящихпользователя ошибок

2. в критерии успехавложились

3. количество баговизвестно

4. пути обхода иальтернативы известны

←→

«Быстрая программа»:

1. не видно бесящихпользователя тормозов

2. в критерии успехавложились

3. перформансныепроблемы известны

4. пути обхода иальтернативы известны

Slide 7/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 15: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Крупно: про критерии

«Корректная программа»:

1. не видно бесящихпользователя ошибок

2. в критерии успехавложились

3. количество баговизвестно

4. пути обхода иальтернативы известны

←→

«Быстрая программа»:

1. не видно бесящихпользователя тормозов

2. в критерии успехавложились

3. перформансныепроблемы известны

4. пути обхода иальтернативы известны

Slide 7/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 16: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Крупно: про критерии

«Корректная программа»:

1. не видно бесящихпользователя ошибок

2. в критерии успехавложились

3. количество баговизвестно

4. пути обхода иальтернативы известны

←→

«Быстрая программа»:

1. не видно бесящихпользователя тормозов

2. в критерии успехавложились

3. перформансныепроблемы известны

4. пути обхода иальтернативы известны

Slide 7/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 17: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Крупно: про критерии

«Корректная программа»:

1. не видно бесящихпользователя ошибок

2. в критерии успехавложились

3. количество баговизвестно

4. пути обхода иальтернативы известны

←→

«Быстрая программа»:

1. не видно бесящихпользователя тормозов

2. в критерии успехавложились

3. перформансныепроблемы известны

4. пути обхода иальтернативы известны

Slide 7/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 18: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Крупно: про критерии

«Корректная программа»:

1. не видно бесящихпользователя ошибок

2. в критерии успехавложились

3. количество баговизвестно

4. пути обхода иальтернативы известны

←→

«Быстрая программа»:

1. не видно бесящихпользователя тормозов

2. в критерии успехавложились

3. перформансныепроблемы известны

4. пути обхода иальтернативы известны

Slide 7/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 19: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Крупно: Кривая им. Ш:

Slide 8/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 20: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Крупно: Кривая им. Ш:

Вы в зелёной зоне:

Берёте профайлер ипереписываете куски,которые написаныочевидно ужасно

Slide 8/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 21: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Крупно: Кривая им. Ш:

Вы в жёлтой зоне:

Берёте аккуратныйпрофайлер, пишететаргет-бенчмарки,

аккуратно закручиваетегайки

Slide 8/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 22: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Крупно: Кривая им. Ш:

Вы в красной зоне:

Вас съел огр.

Slide 8/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 23: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Крупно: Кривая им. Ш:

Вы в красной зоне:

Идёте наJPoint/JokerConf/JBreak,пытаете разработчиков

продуктов, как писать код,повторяющий кривизну

нижних слоёв

Slide 8/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 24: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Зелёная зона

Page 25: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Зелёная зона: мотивационная карточка

Зелёная зона:

борьба с говнокодом заусенцами

грубой силой

— Резать к чертовой матери, не дожидаясь перитонитов!— Ты права, моя дорогая, с этим отростком пора кончать!

Slide 10/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 26: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Зелёная зона: профилирование и диагностика

Ментальная ловушка:

«Профилировать нужно или нормально, иливообще никак»

На самом деле:

В зелёной зоне точность диагностики влия-ет очень мало! Вам нужно определить, какуючасть говнокода выгодно перепилить в первуюочередь.

Slide 11/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 27: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Зелёная зона: диагностика

Slide 12/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 28: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Зелёная зона: диагностика

Не бойтесь смотреть на ваше приложение!

Даже крупноклеточное понимание, какого ресурса не хватает, лучше, чемникакого понимания. Практически сразу показывает, куда копать:

много sys%: копаем в сторону трединга и т.п.

много irq%: копаем в сторону оффлоада прерываний и т.п.

много idle%: ищем, где простаиваем

много iowait%: копаем в сторону оптимизации I/O

много usr%: аттачим профайлер, и...

Slide 13/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 29: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Зелёная зона: профилирование

Наша цель:

примерно представлять, где мы проводим время

Даже самый наивный профайлер вам покажет все ужасные ошибки:

хоть jstack

хоть perf top

хоть VisualVM

да даже руками расставить Stopwatch-и уже хорошо

да хоть из палок и желудей его соберите!

Slide 14/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 30: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Зелёная зона: измерение производительности

Ментальная ловушка:

«Производительность нужно измерять илинормально, или вообще никак»

На самом деле:

В зелёной зоне улучшения в плюс-минус кило-метр, можно и глазками увидеть. Да и какаяразница, если всё равно переписываете говно-код?

Slide 15/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 31: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Зелёная зона: мораль

Даже тривиальные нагрузочные тесты покажут вам крупные огрехи:

Берёте production и публикуете ссылку в Твитторе

Берёте staging и бешено тыкаете во всё подряд

Берёте staging и хреначите в него Apache Bench’ем

Чем раньше в разработке вы получите перформансные данные, тембезболезненнее можно будет исправить огрехи (ещё до коммита)!

Не надо сразу буйствовать и писать огромные сценарии

Не надо тащить сложные нагрузочные генераторы

Не надо пытаться обеспечить полную репрезентативность сценария

Slide 16/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 32: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Зелёная зона: пример

Сюрпри-и-и-из:

Slide 17/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 33: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Зелёная зона: пример

Сюрпри-и-и-из:

Slide 17/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 34: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Зелёная зона: оптимизации

Ментальная ловушка:

«Преждевременная оптимизация – кореньвсего зла»

На самом деле:

Ну и какое зло в переписывании говнокода?Использовать удобные модели данных и ал-горитмы почти никогда не преждевременно.

Slide 18/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 35: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Зелёная зона: заходы

Улучшение производительности в основном от переписывания плохого кодана хороший. Но «хорошесть» может быть и вкусовщиной, а может бытьвыстраданными приёмами:

эффективнее структуры данных:LinkedList → ArrayList

эффективнее алгоритмы:ArrayList → HashMap

keySet + get → entrySet

bubbleSort → Collections.sort

меньше работы: что-то посчитать один раз и реиспользовать, етц

Slide 19/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 36: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Зелёная зона: подитог

Профилирование –

необходимая часть ежедневной разработки

Наблюдения:

>95% проблем находится на первых же заходах

>90% проблем тривиально разрешимы

Чёткие инструкции по запуску профилировки сильно помогают:отлично, если есть однострочник, или однокнопочник, или APM

Возьмёте девелопера за руку, и с ним один раз попрофилируете – этоуверенно купирует боязнь базовой перформансной работы1

1«Нет-нет, не надо закрывать это окно, оно боится тебя больше, чем ты его»Slide 20/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 37: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Жёлтая зона

Page 38: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Жёлтая зона: мотивационная карточка

Жёлтая зона:

нефть в обмен на продовольствие

усложение кода в обмен на

производительность

Так вот, в момент, когда в голове у клиента происходит этареакция, из кустов появляемся мы. Татарскому было очень приятноуслышать это «мы». (солнце наше Пелевин, «Generation П2»)

2ПерформансSlide 22/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 39: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Жёлтая зона: профилирование и диагностика

Ментальная ловушка:

«Сейчас мы возмём профайлер, посмотримчто где, и как начнём оптимизировать»

На самом деле:

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

Правильные изменения требуют продвинутойдиагностики, и профилировка – только одна

её часть!

Slide 23/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 40: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Жёлтая зона: что собрались оптимизировать?

Slide 24/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 41: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Жёлтая зона: modus operandi

Теперь, оптимизируя, вы вынуждены объяснять, зачем

вы это делаете – хотя бы себе, а может и PM-у

При этом желательно:

1. Иметь на руках численные оценки приростов

2. Иметь оценки приростов до того, как потратить всё ресурсы

3. Иметь понимание, что это самый дешёвый способ

Slide 25/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 42: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Оценки: Pop quiz

Представим себе приложение с двумя отдельными частями:

Часть A занимает 70% времени, разгоняема в 2 раза

Часть B занимает 30% времени, разгоняема в 6 раз

Какую часть будем разгонять?

A B

A B

A B

Slide 26/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 43: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Оценки: Pop quiz

Представим себе приложение с двумя отдельными частями:

Часть A занимает 70% времени, разгоняема в 2 раза

Часть B занимает 30% времени, разгоняема в 6 раз

Какую часть будем разгонять?

A B

A B

A B

Slide 26/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 44: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Оценки: Pop quiz

Представим себе приложение с двумя отдельными частями:

Часть A занимает 70% времени, разгоняема в 2 раза

Часть B занимает 30% времени, разгоняема в 6 раз

Какую часть будем разгонять?

A B

A B

A B

Slide 26/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 45: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Оценки: закон Амдала

𝑃𝑎𝑟𝑡𝐴 = 𝐴𝐴+𝐵

𝑃𝑎𝑟𝑡𝐵 = 𝐵𝐴+𝐵

Закон Амдала:

𝑆 = 𝐴+𝐵𝐴𝑆𝐴

+𝐵= 1

𝑃𝑎𝑟𝑡𝐴𝑆𝐴

+𝑃𝑎𝑟𝑡𝐵

Следствия:

lim𝑃𝑎𝑟𝑡𝐴→0

𝑆 = 1

lim𝑃𝑎𝑟𝑡𝐴→1

𝑆 = 𝑆𝐴

lim𝑆𝐴→0

𝑆 = 0

lim𝑆𝐴→∞

𝑆 =1

𝑃𝑎𝑟𝑡𝐵

Slide 27/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 46: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

з-н Амдала: поведение

0

1

2

3

4

5

6

7

8

9

10

0 10 20 30 40 50 60 70 80 90 100Partial Speedup

Tota

l Spe

edup

Parts

10%

50%

80%

90%

Slide 28/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 47: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

з-н Амдала: обобщение

Немножко поиграем членами:

𝑆 =1

𝑃𝐴

𝑆𝐴+ 𝑃𝐵

=1

1−𝑃𝐵

𝑆𝐴+ 𝑃𝐵

=𝑆𝐴

1− 𝑃𝐵 + 𝑃𝐵𝑆𝐴

=𝑆𝐴

1 + 𝑃𝐵(𝑆𝐴 − 1)

или, после подстановки𝑝 = 𝑆𝐴 (во сколько раз ускорили часть),𝛼 = 𝑃𝐵 (сколько весит всё остальное):

𝑆 =𝑝

1⏟ ⏞ 𝑐𝑜𝑛𝑐𝑢𝑟𝑟𝑒𝑛𝑐𝑦

+ 𝛼(𝑝− 1)⏟ ⏞ 𝑐𝑜𝑛𝑡𝑒𝑛𝑡𝑖𝑜𝑛

Slide 29/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 48: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

з-н Амдала: поведение

0

1

2

3

4

5

6

7

8

9

10

0 10 20 30 40 50 60 70 80 90 100P

S

alpha

0.1

0.2

0.4

0.6

0.8

1.0

Ahmdal's Law

𝑆 =𝑝

1⏟ ⏞ 𝑐𝑜𝑛𝑐𝑢𝑟𝑟𝑒𝑛𝑐𝑦

+ 𝛼(𝑝− 1)⏟ ⏞ 𝑐𝑜𝑛𝑡𝑒𝑛𝑡𝑖𝑜𝑛

Slide 30/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 49: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

USL: Universal Scalability Law

0

5

10

15

20

25

30

0 10 20 30 40 50 60 70 80 90 100P

S

beta

0

0.0001

0.0005

0.001

0.002

0.004

USL, alpha=0.0

0

1

2

3

4

5

6

7

8

9

10

0 10 20 30 40 50 60 70 80 90 100P

S

beta

0

0.0001

0.0005

0.001

0.002

0.004

USL, alpha=0.1

𝑆 =𝑝

1⏟ ⏞ 𝑐𝑜𝑛𝑐𝑢𝑟𝑟𝑒𝑛𝑐𝑦

+ 𝛼(𝑝− 1)⏟ ⏞ 𝑐𝑜𝑛𝑡𝑒𝑛𝑡𝑖𝑜𝑛

+ 𝛽𝑝(𝑝− 1)⏟ ⏞ 𝑐𝑜ℎ𝑒𝑟𝑒𝑛𝑐𝑒

Slide 31/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 50: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

USL: Universal Scalability Law

𝑆 =𝑝

1⏟ ⏞ 𝑐𝑜𝑛𝑐𝑢𝑟𝑟𝑒𝑛𝑐𝑦

+ 𝛼(𝑝− 1)⏟ ⏞ 𝑐𝑜𝑛𝑡𝑒𝑛𝑡𝑖𝑜𝑛

+ 𝛽𝑝(𝑝− 1)⏟ ⏞ 𝑐𝑜ℎ𝑒𝑟𝑒𝑛𝑐𝑒

Наблюдения:

USL хорошо натягивается на эмпирические данные

При 𝛽 > 0, с разгоном конкретной части не то, что может нестановиться лучше, может становиться хуже

Систем с 𝛼 = 0 и 𝛽 = 0 практически не существует

Slide 32/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 51: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Жёлтая зона: измерение производительности

Ментальная ловушка:

«Да мы накодим и посмотрим, что намскажут бенчмарки»

На самом деле:

Перформанс-тестирование в норме дикодорогое, и всё не протестируешь.

Slide 33/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 52: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Жёлтая зона: тестирование

Засада: перформансное тестирование – дорогое удовольствие!

Один тест проходит минуту ⇒ сотни машинных часов на один коммит?

Требуют изоляции ⇒ нельзя шарить HW?

Не бинарная метрика ⇒ человеко-часы на разбор данных?

Ошибки тестирования находятся только после разбора данных...

Бенчмарки дают данные, а хочется-то результатов

Выводы:

1. В активном проекте практически невозможно протестировать всё!

2. Нужно всё-таки уметь разбираться, куда копать.

Slide 34/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 53: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Жёлтая зона: тестирование

Засада: перформансное тестирование – дорогое удовольствие!

Один тест проходит минуту ⇒ сотни машинных часов на один коммит?

Требуют изоляции ⇒ нельзя шарить HW?

Не бинарная метрика ⇒ человеко-часы на разбор данных?

Ошибки тестирования находятся только после разбора данных...

Бенчмарки дают данные, а хочется-то результатов

Выводы:

1. В активном проекте практически невозможно протестировать всё!

2. Нужно всё-таки уметь разбираться, куда копать.

Slide 34/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 54: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Жёлтая зона: тестирование

Засада: перформансное тестирование – дорогое удовольствие!

Один тест проходит минуту ⇒ сотни машинных часов на один коммит?

Требуют изоляции ⇒ нельзя шарить HW?

Не бинарная метрика ⇒ человеко-часы на разбор данных?

Ошибки тестирования находятся только после разбора данных...

Бенчмарки дают данные, а хочется-то результатов

Выводы:

1. В активном проекте практически невозможно протестировать всё!

2. Нужно всё-таки уметь разбираться, куда копать.

Slide 34/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 55: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Жёлтая зона: тестирование

Засада: перформансное тестирование – дорогое удовольствие!

Один тест проходит минуту ⇒ сотни машинных часов на один коммит?

Требуют изоляции ⇒ нельзя шарить HW?

Не бинарная метрика ⇒ человеко-часы на разбор данных?

Ошибки тестирования находятся только после разбора данных...

Бенчмарки дают данные, а хочется-то результатов

Выводы:

1. В активном проекте практически невозможно протестировать всё!

2. Нужно всё-таки уметь разбираться, куда копать.

Slide 34/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 56: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Жёлтая зона: тестирование

Засада: перформансное тестирование – дорогое удовольствие!

Один тест проходит минуту ⇒ сотни машинных часов на один коммит?

Требуют изоляции ⇒ нельзя шарить HW?

Не бинарная метрика ⇒ человеко-часы на разбор данных?

Ошибки тестирования находятся только после разбора данных...

Бенчмарки дают данные, а хочется-то результатов

Выводы:

1. В активном проекте практически невозможно протестировать всё!

2. Нужно всё-таки уметь разбираться, куда копать.

Slide 34/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 57: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Жёлтая зона: тестирование

Засада: перформансное тестирование – дорогое удовольствие!

Один тест проходит минуту ⇒ сотни машинных часов на один коммит?

Требуют изоляции ⇒ нельзя шарить HW?

Не бинарная метрика ⇒ человеко-часы на разбор данных?

Ошибки тестирования находятся только после разбора данных...

Бенчмарки дают данные, а хочется-то результатов

Выводы:

1. В активном проекте практически невозможно протестировать всё!

2. Нужно всё-таки уметь разбираться, куда копать.

Slide 34/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 58: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Бенчмарки: много их, мой друг Горацио

Макробенчмарки

1. берём большой сайт,приложение, библиотекуцеликом

2. пишем большой сценарий

3. измеряем от начала и доконца

←→

Микробенчмарки

1. берём маленькую частьсайта, приложения,библиотеки

2. делаем мелкийизолированный тест

3. измеряем конкретную часть

Slide 35/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 59: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Бенчмарки: макробенчмарки

Голоса в голове у разработчика ему шепчут:

1. Макробенчмарк отражает реальный мир

...и любой макробенчмарк – хороший

...запустил макробенчмарк – и это «real world»

2. Для любой крутой фичи, макробенчмарк даст крутое улучшение

...если макробенчмарк не показывает улучшения, то фича – дерьмо

...если макробенчмарк показывает улучшение, то фича – золото

3. Для любого крутого бага, макробенчмарк даст крутую регрессию

...если макробенчмарк не показал регрессии, то бага и нет

...если макробенчмарк показывает регрессию, то баг жуткий

Slide 36/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 60: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Бенчмарки: макробенчмарки

Голоса в голове у разработчика ему шепчут:

1. Макробенчмарк отражает реальный мир

...и любой макробенчмарк – хороший

...запустил макробенчмарк – и это «real world»

2. Для любой крутой фичи, макробенчмарк даст крутое улучшение

...если макробенчмарк не показывает улучшения, то фича – дерьмо

...если макробенчмарк показывает улучшение, то фича – золото

3. Для любого крутого бага, макробенчмарк даст крутую регрессию

...если макробенчмарк не показал регрессии, то бага и нет

...если макробенчмарк показывает регрессию, то баг жуткий

Slide 36/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 61: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Бенчмарки: макробенчмарки

Голоса в голове у разработчика ему шепчут:

1. Макробенчмарк отражает реальный мир

...и любой макробенчмарк – хороший

...запустил макробенчмарк – и это «real world»

2. Для любой крутой фичи, макробенчмарк даст крутое улучшение

...если макробенчмарк не показывает улучшения, то фича – дерьмо

...если макробенчмарк показывает улучшение, то фича – золото

3. Для любого крутого бага, макробенчмарк даст крутую регрессию

...если макробенчмарк не показал регрессии, то бага и нет

...если макробенчмарк показывает регрессию, то баг жуткий

Slide 36/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 62: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Бенчмарки: микробенчмарки

Голоса в голове у разработчика ему шепчут:

1. Микробенчмарки – зло

Очень удобно: раз зло, значит можно не обращать внимания

2. Микробенчмарк можно написать какой угодно

Регрессия на микробенчмарке ничего не значит

Улучшение на микробенчмарке ничего не значит

3. Микробенчмарки обычно пишут враги, чтобы опорочить наш продукт

Говори, что микробенчмарк неправильный – и кодь дальше

Slide 37/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 63: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Бенчмарки: микробенчмарки

Голоса в голове у разработчика ему шепчут:

1. Микробенчмарки – зло

Очень удобно: раз зло, значит можно не обращать внимания

2. Микробенчмарк можно написать какой угодно

Регрессия на микробенчмарке ничего не значит

Улучшение на микробенчмарке ничего не значит

3. Микробенчмарки обычно пишут враги, чтобы опорочить наш продукт

Говори, что микробенчмарк неправильный – и кодь дальше

Slide 37/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 64: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Бенчмарки: микробенчмарки

Голоса в голове у разработчика ему шепчут:

1. Микробенчмарки – зло

Очень удобно: раз зло, значит можно не обращать внимания

2. Микробенчмарк можно написать какой угодно

Регрессия на микробенчмарке ничего не значит

Улучшение на микробенчмарке ничего не значит

3. Микробенчмарки обычно пишут враги, чтобы опорочить наш продукт

Говори, что микробенчмарк неправильный – и кодь дальше

Slide 37/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 65: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Бенчмарки: жизненный цикл бенчмарков

Все, все, все бенчмарки проходят эти стадии жизненного цикла:

Даже если ты начал как макробенчмарк, ты кончишь микробенчмарком

Slide 38/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 66: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Бенчмарки: жизненный цикл бенчмарков

Все, все, все бенчмарки проходят эти стадии жизненного цикла:

Даже если ты начал как макробенчмарк, ты кончишь микробенчмарком

Slide 38/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 67: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Бенчмарки: жизненный цикл бенчмарков

Все, все, все бенчмарки проходят эти стадии жизненного цикла:

Даже если ты начал как макробенчмарк, ты кончишь микробенчмарком

Slide 38/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 68: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Бенчмарки: но есть и свои плюсы

Улучшения:

𝑆 = 𝑆𝑝𝑒𝑒𝑑𝑢𝑝𝑝 = 𝑆𝑝𝑒𝑒𝑑𝑢𝑝𝑝𝑎𝑟𝑡

𝑆 =𝑝

1⏟ ⏞ 𝑐𝑜𝑛𝑐𝑢𝑟𝑟𝑒𝑛𝑐𝑦

+ 𝛼(𝑝− 1)⏟ ⏞ 𝑐𝑜𝑛𝑡𝑒𝑛𝑡𝑖𝑜𝑛

Регрессии:

𝑅 = 1𝑆

𝑟 = 1𝑝

𝑅 = 𝛼⏟ ⏞ 𝑠𝑎𝑣𝑒

+ 𝑟(1− 𝛼)⏟ ⏞ 𝑟𝑒𝑔𝑟𝑒𝑠𝑠𝑠𝑖𝑜𝑛

Slide 39/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 69: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Бенчмарки: но есть и свои плюсы

Улучшения:

𝑆 = 𝑆𝑝𝑒𝑒𝑑𝑢𝑝𝑝 = 𝑆𝑝𝑒𝑒𝑑𝑢𝑝𝑝𝑎𝑟𝑡

𝑆 =𝑝

1⏟ ⏞ 𝑐𝑜𝑛𝑐𝑢𝑟𝑟𝑒𝑛𝑐𝑦

+ 𝛼(𝑝− 1)⏟ ⏞ 𝑐𝑜𝑛𝑡𝑒𝑛𝑡𝑖𝑜𝑛

Регрессии:

𝑅 = 1𝑆

𝑟 = 1𝑝

𝑅 = 𝛼⏟ ⏞ 𝑠𝑎𝑣𝑒

+ 𝑟(1− 𝛼)⏟ ⏞ 𝑟𝑒𝑔𝑟𝑒𝑠𝑠𝑠𝑖𝑜𝑛

Slide 39/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 70: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Бенчмарки: подставы

Slide 40/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 71: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Бенчмарки: подставы

Slide 40/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 72: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Бенчмарки: подставы

Slide 40/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 73: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Бенчмарки: наблюдения

Макробенчмарки:

1. Их мало, они написаны непонятно кем и непонятно как

2. Сначала показывают интересные результаты, потом вырождаются

3. В конце жизни применимы для регрессионного тестирования

Микробенчмарки:

1. Их много, написаны непонятно как и кем, но их можно исправить

2. На всех этапах жизненного цикла показывают интересные результаты

3. На всех этапах отлично реагируют и на регрессии, и на улучшения

Оба этих класса не взаимозаменяемы!

Slide 41/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 74: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Бенчмарки: микробенчмарки

Как вы не крутитесь,

а учиться микробенчмаркать вам придётся!

«Просто возьми JMH» не работает

Нужно грамотно планировать эксперименты

Грамотно их проводить

Грамотно анализировать данные

Делать правильные выводы

Главная задача – построить правдоподобную модель

Что и как влияет на производительность

Как конкретный сценарий прилежит к остальным сценариям

Slide 42/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 75: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Жёлтая зона: оптимизации

Ментальная ловушка:

«Да мы вот попробовали, оно улучшилометрики. Наверное, потому что (далееследует наукообразное рассуждение)»

На самом деле:

Часто бывает, что тупо повезло: скомпонентом, с рабочей нагрузкой, с патчем,с фазой луны. Чуть везение пропадёт, всё

вернётся на круги своя.

Slide 43/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 76: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Жёлтая зона: вот я вижу улучшение

Варианты:

1. Косяк в моём кодеРеакция: перманентное исправление, и посыпание головы пеплом

2. Косяк в моём использовании библиотеки/рантаймаРеакция: перманентное исправление, и PR в документацию

3. Исправимый косяк в библиотеке/рантаймеРеакция: временная заплатка, с зарубкой на память

4. Неисправимый косяк в библиотеке/рантаймеРеакция: постоянная заплатка, с внесением в анналы

Slide 44/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 77: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Жёлтая зона: вот я вижу улучшение

Варианты:

1. Косяк в моём кодеРеакция: перманентное исправление, и посыпание головы пеплом

2. Косяк в моём использовании библиотеки/рантаймаРеакция: перманентное исправление, и PR в документацию

3. Исправимый косяк в библиотеке/рантаймеРеакция: временная заплатка, с зарубкой на память

4. Неисправимый косяк в библиотеке/рантаймеРеакция: постоянная заплатка, с внесением в анналы

Slide 44/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 78: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Жёлтая зона: вот я вижу улучшение

Варианты:

1. Косяк в моём кодеРеакция: перманентное исправление, и посыпание головы пеплом

2. Косяк в моём использовании библиотеки/рантаймаРеакция: перманентное исправление, и PR в документацию

3. Исправимый косяк в библиотеке/рантаймеРеакция: временная заплатка, с зарубкой на память

4. Неисправимый косяк в библиотеке/рантаймеРеакция: постоянная заплатка, с внесением в анналы

Slide 44/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 79: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Жёлтая зона: вот я вижу улучшение

Варианты:

1. Косяк в моём кодеРеакция: перманентное исправление, и посыпание головы пеплом

2. Косяк в моём использовании библиотеки/рантаймаРеакция: перманентное исправление, и PR в документацию

3. Исправимый косяк в библиотеке/рантаймеРеакция: временная заплатка, с зарубкой на память

4. Неисправимый косяк в библиотеке/рантаймеРеакция: постоянная заплатка, с внесением в анналы

Slide 44/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 80: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Жёлтая зона: типичные штуки – опции JVM

Идея: зная что-то специальное о нашем приложении,

подскажем JVM, в каком режиме работать

Радости: Синергия, механическая симпатия, всё такое

Проблемы: Ну как бэ...

Slide 45/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 81: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Жёлтая зона: типичные штуки – параллелизм

Идея: неважно, что там где написано, берём

parallelStream(), Executor.submit, new Thread, и

параллелим

Радости:

1. Много ума не надо – раз, и готово!

Проблемы:

1. Синхронизация же – уверены, что всё работает?

2. Оверхеды же – уверены, что работы достаточно?

3. Есть куча внешнего параллелизма – внутренний параллелизм не нужен

Slide 46/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 82: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Жёлтая зона: типичные штуки – структуры данных

Идея: идут в печь эти Collection<Integer>,

будем делать int[]

Радости:

1. Плотненько так, упаковано, ням-ням

Проблемы:

1. Конверсии обратно во врапперы – уверены, что не сожрёт?

2. Конверсии туда-обратно всех коллекций – уверены?

3. Вставки-удаления-тормошения?

4. Оптимизации самой JDK? К Valhalla готовы?

Slide 47/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 83: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Жёлтая зона: подитог

Поддержание правдоподобной перформансной модели

проекта – необходимое условие развития проекта

Наблюдения:

>50% потенциальных изменений делаются не там, где стоит

>80% изменений делаются в нужном месте после исследования

Умение исследовать и обновлять свои знания о проекте помогаютпринимать правильные решения – поощряйте это у девелоперов. Еслипроект большой, то вам нужны выделенные роли на такую работу.

Slide 48/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 84: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Красная зона

Page 85: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Красная зона: мотивационная карточка

Красная зона:

эксплуатация кривизны нижних слоёв,

грязные хаки и залезание в кишки

Здесь Паша Эмильевич, обладавший сверхъестественным чутьем,понял, что сейчас его будут бить, может быть, даже ногами.

Slide 50/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 86: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Красная зона: внимание

В абсолютном большинстве проектов сюда ходить не надо! Вменяемыйтехлид, проджект-менеджер или заботливая мама должны сказать:

Slide 51/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 87: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Красная зона: внимание

В абсолютном большинстве проектов сюда ходить не надо! Вменяемыйтехлид, проджект-менеджер или заботливая мама должны сказать:

Slide 51/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 88: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Красная зона: основная идея

Улучшение производительности от эксплуатации

особенностей реализации нижних слоёв

дёрганье скрытых приватных методов

дёрганье в «нужном» порядке публичных методов

доступ к целым кускам приватного API

хаки для обхода особенностей библиотек и рантаймов

микроархитектурные оптимизации

Slide 52/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 89: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Красная зона: профилирование и диагностика

Ментальная ловушка:

«Если долго смотреть в профайл, можноувидеть там решение»

На самом деле:

Умение хакать вырастает из пониманиявзаимодействия всех движущихся деталек.

Slide 53/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 90: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Красная зона: нарабатывание корпуса

Перформансники –

это те люди, которые умеют копаться во всех слоях сразу

Имеют наработанный корпус хаков, знают границы их применимости

Не впадают в ступор, когда видят незнакомую хрень, а начинают еёизучать

«Изучать» = читать документацию, искать упоминаний в статьях,смотреть на другие части кода и историю проекта, делатьэксперименты, спрашивать коллег-специалистов, а не спрашивать наStackOverflow «ой, а чо это такое?»

Slide 54/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 91: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Красная зона: подходы к исправлению

Ментальная ловушка:

«Если долго ездить по конференциям, токогда-нибудь там расскажут трюк, дающий5х перформанса, и мы его тут же применим»

На самом деле:

В конкретном случае спасёт одиннизкоуровневый трюк из тысячи! Его прощенайти самостоятельно, чем ждать у моря

погоды.

Slide 55/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 92: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Красная зона: откроем, значит, StackOverflow...

В программистской тусовке большая часть

обсуждений об этом!

(i++) или (++i)?

for (int c = 0; c < L; c++) или while (c –-> 0)?

Math.pow(x, 2) или x*x?

(x*2) или (x << 1)?

(a*b != 0) или (a != 0 && b != 0)?

(a & b) или (a && b)?

String.isEmpty() или String.trim().length() == 0?

System.arraycopy или таки моя-любимая-идиома

Slide 56/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 93: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Красная зона: костыли

Хаки должны быть временнымизаплатками, а не основой вашего проекта

Указывают на проблему в слое ниже:нужно или исправить, или изучить, илизарепортить!

Смеете учить хакам студентов – горетьвам в аду за вбивание гвоздей в гроб IT

Условный Куксенко рассказывает пронизкоуровневую вакханалию длянарабатывания корпуса возможныххаков, а не чтобы вы их вездеиспользовали

Slide 57/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 94: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Красная зона: пример: ArrayList.Itr

public class ArrayList<E> implements Iterable<E> {

public Iterator<E> iterator() {

return new Itr();

}

private class Itr implements Iterator<E> { }

public [bridge] Itr(java.util.ArrayList, java.util.ArrayList$1);

/*

@ 3 j.u.ArrayList::iterator (10 bytes) inlined (hot)

- @ 6 j.u.ArrayList$Itr::<init> (6 bytes) unloaded signature classes

*/

}

Slide 58/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 95: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Красная зона: пример: ArrayList.Itr

public class ArrayList<E> implements Iterable<E> {

public Iterator<E> iterator() {

return new Itr();

}

private class Itr implements Iterator<E> { }

public [bridge] Itr(java.util.ArrayList, java.util.ArrayList$1);

/*

@ 3 j.u.ArrayList::iterator (10 bytes) inlined (hot)

- @ 6 j.u.ArrayList$Itr::<init> (6 bytes) unloaded signature classes

*/

}

Slide 58/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 96: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Красная зона: пример: ArrayList.Itr

public class ArrayList<E> implements Iterable<E> {

public Iterator<E> iterator() {

return new Itr();

}

private class Itr implements Iterator<E> { }

public [bridge] Itr(java.util.ArrayList, java.util.ArrayList$1);

/*

@ 3 j.u.ArrayList::iterator (10 bytes) inlined (hot)

- @ 6 j.u.ArrayList$Itr::<init> (6 bytes) unloaded signature classes

*/

}

Slide 58/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 97: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Красная зона: пример: ArrayList.Itr

public class ArrayList<E> implements Iterable<E> {

public Iterator<E> iterator() {

return new Itr();

}

// HACK: Create explicit constructor to avoid generating a bad one

// Needed because javac generates synthetic bridge with "unloaded class"

// arguments, see JDK-xxxxxxxx

Itr() {};

private class Itr implements Iterator<E> { }

}

Slide 59/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 98: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Красная зона: подходы к исправлениям

Ментальная ловушка:

«Сейчас мы быстро подкрутим вот здесь,и будет зашибись»

На самом деле:

В красной зоне никогда не будет зашибись.

Slide 60/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 99: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Slide 61/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 100: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Красная зона: технический долг!

Не обманывайте себя: работая в

красной зоне, вы вносите

технический долг.

Всегда, всегда, всегда документируйте:

1. Из-за чего хак выполнен

2. В каких условиях он применим

3. Как проверить, что хак больше ненужен

4. Какие upstream-баги вы ждёте, етц

Slide 62/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 101: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Красная зона: подитог

Удержание численности и плотности хаков в проекте –

необходимое условие выживания проекта

Наблюдения:

Дай волю, и весь проект порастёт...

Умение работать с upstream-ами и другими компонентами сильнооблегчают долговременную судьбу: конверсия хаков в реальные патчиулучшает глобальное положение

Умение разбираться во всех слоях увеличивает тренируется «накошках»

Slide 63/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 102: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Напутствие

Page 103: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Напутствие: на хардкорной конференции

Пользователям продуктов:

1. Обновить запас и применимости хаков из красной зоны

2. Найти/обсудить подходы работы в жёлтой зоне

3. Обсудить, какие приёмы из жёлтой зоны завещать в зелёную зону

Разработчикам продуктов:

1. Обсудить подходы работы в жёлтой зоне

2. Понять, какие хаки из красной зоны перетащить в скрижали жёлтойзоны, или вообще в зелёную зону.

Не забывайте: основная перформансная работа проходит в зелёной зоне

Slide 65/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 104: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Напутствие: на хардкорной конференции

Пользователям продуктов:

1. Обновить запас и применимости хаков из красной зоны

2. Найти/обсудить подходы работы в жёлтой зоне

3. Обсудить, какие приёмы из жёлтой зоны завещать в зелёную зону

Разработчикам продуктов:

1. Обсудить подходы работы в жёлтой зоне

2. Понять, какие хаки из красной зоны перетащить в скрижали жёлтойзоны, или вообще в зелёную зону.

Не забывайте: основная перформансная работа проходит в зелёной зоне

Slide 65/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 105: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Напутствие: на хардкорной конференции

Пользователям продуктов:

1. Обновить запас и применимости хаков из красной зоны

2. Найти/обсудить подходы работы в жёлтой зоне

3. Обсудить, какие приёмы из жёлтой зоны завещать в зелёную зону

Разработчикам продуктов:

1. Обсудить подходы работы в жёлтой зоне

2. Понять, какие хаки из красной зоны перетащить в скрижали жёлтойзоны, или вообще в зелёную зону.

Не забывайте: основная перформансная работа проходит в зелёной зоне

Slide 65/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 106: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Конец

?

Slide 66/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’

Page 107: Keynote: PerformanceSlide 20/66. ¾Keynote: Performance¿, Aleksey Shipil¼v, 2017, D:20170404035127+02'00' Ƽëòàÿ çîíà íåôòü â îáìåí íà ïðîäîâîëüñòâèå

Конец?

Slide 66/66. «Keynote: Performance», Aleksey Shipilёv, 2017, D:20170404035127+02’00’