intro: performance engineering - aleksey shipilëv...Цель – улучшение метрики!...
TRANSCRIPT
![Page 1: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/1.jpg)
<Insert Picture Here>
Intro: Performance EngineeringSergey Kuksenko, Aleksey Shipilev
![Page 2: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/2.jpg)
#2, Oracle
![Page 3: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/3.jpg)
#3, Oracle
Performance Engineering
![Page 4: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/4.jpg)
#4, Oracle
Performance Engineeringабстрактно и отлично об отличиях в абстракциях
• Computer Science → Software Engineering– Строим приложения по функциональным требованиям– В большой степени абстрактно, в “идеальном мире”
• Теоретически неограниченная свобода – искусство!• Можно строить воздушные зАмки
– Рассуждения при помощи формальных методов
• Software Performance Engineering– “Real world strikes back!”– Исследуем взаимодействие софта с железом на типичных данных
• Производительность уже нельзя оценить• Производительность можно только измерить
– Естественно-научные методы• Основываемся на эмпирических данных
![Page 5: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/5.jpg)
#5, Oracle
У меня всё медленно!Ваш первый шаг?
![Page 6: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/6.jpg)
#6, Oracle
Performance Engineeringпервый шаг
• Классические ошибки первого шага– “я вижу, что метод foo() реализован неэффективно”– “по профилю видно, что метод bar() – самый горячий и занимает 5%”
– “по-моему, у нас тормозит БД, и необходимо перейти с DBX на DB
Y”
![Page 7: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/7.jpg)
#7, Oracle
Performance Engineeringпервый шаг
• Классические ошибки первого шага– “я вижу, что метод foo() реализован неэффективно”– “по профилю видно, что метод bar() – самый горячий и занимает 5%”
– “по-моему, у нас тормозит БД, и необходимо перейти с DBX на DB
Y”
• Правильный первый шаг:– Выбрать метрику
• ops/sec, transactions/sec• время исполнения• время отклика
– Убедиться в корректности метрики• релевантна (учитывает реальный сценарий работы приложения)• повторяема
Цель – улучшение метрики!
![Page 8: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/8.jpg)
#8, Oracle
Метрики
![Page 9: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/9.jpg)
#9, Oracle
МетрикиThroughput, bandwidth
• Throughput, Bandwidth– Количество работы, выполненное системой за единицу
времени– Принимает разные формы:
• MB/sec• ops/sec, transactions/sec• FPS (frames per second, frags per second)• MIPS• FLOPS
![Page 10: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/10.jpg)
#10, Oracle
МетрикиLatency, Response Time
• Время...– ...работы
• Execution time: общее время исполнения
– ...отклика• Latency: время отдельной операции• Response time: задержка между стимулом и реакцией
– ...запуска• Startup time: время до начала работы• Time to performance: время до начала хорошей работы
– etc.
![Page 11: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/11.jpg)
#11, Oracle
МетрикиThroughput vs. Response Time
• Производительность – композитная метрика:– throughput vs RT → throughput & RT
• Оказывается, что проще улучшить throughput:– DDR2 PC2-3200: 3200 Mb/sec, CL 4ns
– DDR2 PC2-6400: 6400 Mb/sec, CL 5ns
• В большинстве систем, RT тесно связан с throughput– Из пункта А в пункт Б один автобус может перевезти сотню человек
• Достаточно много автобусов перевезут миллион человек
• Несколько больших автопоездов перевезут миллион человек
• ...но в обоих случаях будут дикие очереди на погрузку и выгрузку :)
![Page 12: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/12.jpg)
#12, Oracle
МетрикиThroughput vs. Response Time
• Обычно RT быстро растёт с throughput
![Page 13: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/13.jpg)
#13, Oracle
МетрикиThroughput vs. Response Time
• Обычно RT быстро растёт с throughput
![Page 14: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/14.jpg)
#14, Oracle
МетрикиПрочие
• Прочие метрики:– потребление ресурсов
• память, сеть, etc.– отказоустойчивость
• MTBF, MTTR– потребляемая и отводимая мощность
• performance per watt• TDP
– etc.
![Page 15: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/15.jpg)
#15, Oracle
Теория
![Page 16: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/16.jpg)
#16, Oracle
ТеорияУтилизация
• Утилизация – на сколько ресурс занят?
• Idle – на сколько ресурс свободен?
![Page 17: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/17.jpg)
#17, Oracle
ТеорияЭффективность
• Эффективность (efficiency)– Оценка КПД для времени: часть общего времени,
потраченная на выполнение полезной работы– Субъективно, невозможно строго вычислить
• Высокая утилизация CPU не означает хорошую эффективность
A
B
![Page 18: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/18.jpg)
#18, Oracle
ТеорияSpeedUp
• “A в N раз быстрее B” означает
![Page 19: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/19.jpg)
#19, Oracle
Теория%Boost
• “A на n% быстрее B” означает:
![Page 20: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/20.jpg)
#20, Oracle
ТеорияЗакон Амдала
70 секунд 30 секунд
• Допустим, есть две независимые части:– Часть А занимает 70% времени, ускорябельна в 2 раза– Часть B занимает 30% времени, ускорябельна в 6 раз– Где профит больше?
![Page 21: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/21.jpg)
#21, Oracle
ТеорияЗакон Амдала
70 секунд
70 секунд
35 секунд
5c
30 секунд
30 секунд
Ускорим B в 6 раз:
Ускорим A в 2 раза:
• Допустим, есть две независимые части:– Часть А занимает 70% времени, ускорябельна в 2 раза– Часть B занимает 30% времени, ускорябельна в 6 раз– Где профит больше?
![Page 22: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/22.jpg)
#22, Oracle
ТеорияЗакон Амдала
• Закон Амдала
![Page 23: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/23.jpg)
#23, Oracle
ТеорияЗакон Амдала
70 секунд
70 секунд
35 секунд
5c
30 секунд
30 секунд
Ускорим B в 6 раз:
Ускорим A в 2 раза:
• Допустим, есть две независимые части:– Часть А занимает 70% времени, ускорябельна в 2 раза– Часть B занимает 30% времени, ускорябельна в 6 раз– Где профит больше?
+33%
+53%
![Page 24: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/24.jpg)
#24, Oracle
ТеорияЗакон Амдала
![Page 25: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/25.jpg)
#25, Oracle
ТеорияScalability
• Масштабируемость (scalability)– Способность системы увеличивать производительность
при добавлении ресурсов
• Ресурсы:– CPU ~ processor scaling– тактовая частота ~ frequency scaling– память ~ memory scaling– etc.
![Page 26: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/26.jpg)
#26, Oracle
ТеорияScalability (вариант 1)
Добавляем ресурсы → работаем быстрее
![Page 27: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/27.jpg)
#27, Oracle
ТеорияScalability (вариант 2)
Добавляем ресурсы и нагрузку → работаем так же
![Page 28: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/28.jpg)
#28, Oracle
Методология
![Page 29: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/29.jpg)
#29, Oracle
Классические ошибки второго шагаУзнай себя!
• «Я вижу, что метод foo() реализован плохо, перепишем и посмотрим, что изменится»
![Page 30: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/30.jpg)
#30, Oracle
Классические ошибки второго шагаУзнай себя!
• «Я вижу, что метод foo() реализован плохо, перепишем и посмотрим, что изменится»
– …а метод не используется вообще.– …или используется, но занимает пару миллисекунд– …или используется, но дело не в этом.
• Не самый плохой вариант, если таких методов мало, и изменения очень быстрые
![Page 31: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/31.jpg)
#31, Oracle
Классические ошибки второго шагаУзнай себя!
• «По профилю видно, что метод bar() – самый горячий и занимает целых 5%, надо его убить»
![Page 32: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/32.jpg)
#32, Oracle
Классические ошибки второго шагаУзнай себя!
• «По профилю видно, что метод bar() – самый горячий и занимает целых 5%, надо его убить»
– …а оказывается, что это 5% от всего приложения, которое занимает 6.25% CPU 16-процессорной системы
– …или это метод, помогающий всем остальным быть быстрее
– …или он действительно проблемный, но дело не в этом.
![Page 33: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/33.jpg)
#33, Oracle
Классические ошибки второго шагаУзнай себя!
• «Полносистемная профилировка показывает, что у нас тормозит база данных, и нужно срочно перейти с СУБД
X на СУБД
Y»
![Page 34: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/34.jpg)
#34, Oracle
Классические ошибки второго шагаУзнай себя!
• «Полносистемная профилировка показывает, что у нас тормозит база данных, и нужно срочно перейти с СУБД
X на СУБД
Y»
– …а вдруг оказывается, что диски слабоваты– …или оказывается, что злые админы зашейпили сеть– …или просто БД уже давно никто не «пылесосил»
• Без шуток, мы наблюдали спонтанные переезды с X на Y– ...и обратно, немного погодя. А потом опять с X на Y.
![Page 35: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/35.jpg)
#35, Oracle
Как ускорить приложение?
• К.О. сообщает:– “Нужно что-то где-то как-то изменить!”
• Что?
• Где?
• Как?
![Page 36: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/36.jpg)
#36, Oracle
Как ускорить приложение?
• К.О. сообщает:– “Нужно что-то где-то как-то изменить!”
• Что мешает работать быстрее?
• Где это находится?
• Как это исправить?
![Page 37: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/37.jpg)
#37, Oracle
Как ускорить приложение?
• К.О. сообщает:– “Нужно что-то где-то как-то изменить!”
• Что мешает работать быстрее?– Используем голову и monitoring tools
• Где это находится?– Используем голову и profiling tools
• Как это исправить?– Используем голову и прямые руки
![Page 38: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/38.jpg)
#38, Oracle
Performance EngineeringКлассический ”нисходящий” метод поиска узких мест
• Уровень системы – Сеть– Диск– Операционная система– Процессор/память
• Уровень приложения – Блокировки, синхронизация– Execution Threads– API– Алгоритмические проблемы
• Микроархитектурный уровень – Code/data alignment– Cache optimizations– Processor stalls– Branch prediction
![Page 39: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/39.jpg)
#39, Oracle
Performance Engineering”нисходящий” метод поиска узких мест
• Уровень системы – Сеть– Диск– Операционная система– Процессор/память
• Уровень приложения – Блокировки, синхронизация– Execution Threads– API– Алгоритмические проблемы
• Микроархитектурный уровень – Code/data alignment– Cache optimizations– Processor stalls– Branch prediction
JVM
![Page 40: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/40.jpg)
#40, Oracle
Performance Engineering”нисходящий” метод поиска узких мест (Java World)
• Уровень системы– Сеть– Диск– Операционная система– Процессор/память
• Уровень JVM– Выбор JVM– Heap/GC tuning– JVM tuning
• Уровень приложения– Блокировки, синхронизация– Execution Threads– API– Алгоритмические проблемы
![Page 41: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/41.jpg)
#41, Oracle
Solaris Linux Windows Что смотрим
Сеть netstat, dtrace, nicstat
netstat, nicstat perfmon количество соединений, объем трафика
Диск iostat, dtrace iostat perfmon количество обращений к диску, задержка
Память vmstat, prstat, dtrace
vmstat, top perfmon подкачка страниц, размер памяти
Процессы ps, vmstat, mpstat, prstat, dtrace
ps, vmstat, top perfmon количество нитей, состояние нитей, переключения контекста
Ядро ОС mpstat, lockstat, plockstat, dtrace, intrstat, vmstat
vmstat perfmon kernel time, блокировки, системные вызовы, прерывания ...
Performance Engineeringинструменты для анализа системы (monitoring tools)
![Page 42: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/42.jpg)
#42, Oracle
Performance Engineeringtools, tools, tools again, more tools
• VisualVM – http://visualvm.dev.java.net
• JRockit Mission Control– http://www.oracle.com/technetwork/middleware/jrockit/mission-control/index.html
• Sun Studio Analyzer– http://www.oracle.com/technetwork/server-storage/solarisstudio/overview/index.html
• NetBeans Profiler– http://www.netbeans.org
• DTrace– http://www.oracle.com/technetwork/systems/dtrace/dtrace/index.html
• Ещё могут быть полезны:– JProbe– OptimizeIt– YourKit
![Page 43: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/43.jpg)
#43, Oracle
Tips and Tricks
![Page 44: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/44.jpg)
#44, Oracle
• I/O– Сеть– Диск
• Memory paging (swapping)• CPU
Системный уровень
![Page 45: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/45.jpg)
#45, Oracle
• CPU, на что обратить внимание– CPU utilization
• User time• System (kernel) time• Idle time
– Context switching• Voluntary context switching• Involuntary context switching
– CPU scheduler run queue length
Системный уровеньCPU
![Page 46: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/46.jpg)
#46, Oracle
Системный уровеньCPU
vmstat
![Page 47: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/47.jpg)
#47, Oracle
Системный уровеньCPU
vmstatCPU utilizationCPU utilization
![Page 48: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/48.jpg)
#48, Oracle
Системный уровеньCPU
vmstatcontext switches
![Page 49: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/49.jpg)
#49, Oracle
Системный уровеньCPU
vmstatI/O
![Page 50: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/50.jpg)
#50, Oracle
Системный уровеньCPU
vmstatpaging/swapping
![Page 51: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/51.jpg)
#51, Oracle
Системный уровеньCPU
vmstat CPU scheduler run queue length
![Page 52: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/52.jpg)
#52, Oracle
• Высокая утилизация ядра ОС (system/kernel time)– I/O– конфликт ресурсов ОС– конфликт блокировок
Системный уровеньCPU (симптомы)
![Page 53: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/53.jpg)
#53, Oracle
• Низкая утилизация CPU (high idle time)– I/O (+ high kernel time)– конфликт ресурсов ОС (+ high kernel time)– конфликт блокировок (+ high kernel time)– слабая параллелизация приложения
Системный уровеньCPU (симптомы)
![Page 54: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/54.jpg)
#54, Oracle
• Высокая утилизация CPU (user time)– Неоптимальная архитектура приложения– Неправильное использование API– Неоптимальные настройки JVM (GC)– Неоптимизованный код приложения – (на этом месте можно переходить на нижний уровень)
Системный уровеньCPU (симптомы)
![Page 55: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/55.jpg)
#55, Oracle
• Voluntary context switching– I/O– Блокировки (lock contention)
• Involuntary context switching• CPU scheduler run queue length
– Рекомендуемое значение не больше 4*<кол-во CPU>– Что делать если больше?
• Увеличить количество CPU• Уменьшить количество тредов• Копать глубже и оптимизировать каждый тред
Системный уровеньCPU (симптомы)
![Page 56: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/56.jpg)
#56, Oracle
• Oracle (Sun) HotSpot– Client VM– Server VM
• Oracle (BEA) JRockit
• [эту JVM нам нельзя упоминать]• [и эту тоже]• [и эту]
Уровень JVMвыбор JVM
![Page 57: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/57.jpg)
#57, Oracle
• Oracle (Sun) HotSpot– -XX:+UseSerialGC (по-умолчанию)– -XX:+ParallelGC– -XX:+ParallelOldGC– -XX:+ConcMarkSweepGC– -XX:+UseG1GC
• Oracle (BEA) Jrockit– -Xgc:{single,gen}{con,par}{con,par}
Уровень JVMвыбор GC
![Page 58: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/58.jpg)
#58, Oracle
• Слишком мало?– GC негде развернуться, видно по долгим и/или
частым сборкам– PermGen!
• Слишком много?– Значит, у кого-то отобрали:
• Кэши ФС• Стеки потоков• Direct-буфера• Нативные буфера
Уровень JVMвыбор размера кучи
![Page 59: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/59.jpg)
#59, Oracle
• Подавляющее большинство общеизвестных настроек выставлено по умолчанию
• Остальной тюнинг симптоматический:– Понимаем, что не работает– Понимаем/спрашиваем, как можно сделать быстрее– Печатаем -XX:+PrintFlagsFinal и находим нужный флаг– Гоняем функциональные тесты– Гоняем перформансные тесты– ???– PROFIT!
Уровень JVMтюнинг
![Page 60: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/60.jpg)
#60, Oracle
• Конфликты на блокировках видны в профиле!– Даже банальный jstack может обозначить проблему
– А если взять сотню jstack'ов подряд...
• Всегда видна только самая дикая блокировка– “Convoying”: остальные прячутся за ней
• Лучше много маленьких, чем одна большая– “lock striping”
• Лучше lock-free, чем маленькая блокировка– Большая предсказуемость
– Ещё лучше отсвечивается в профиле!
Уровень приложенияблокировки и синхронизация
![Page 61: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/61.jpg)
#61, Oracle
• Алгоритмическая сложность– Не зря на собеседованиях спрашивают про сложность, ой не зря
– Компиляторы никогда не будут делать алгоритмические преобразования чужого кода
– Ваш супероптимизированный bogosort внутри останется bogosort'ом
• Пользуйтесь правильным API– Вам точно нужен List, а не Collection? Точно List, а не Set?
Точно SortedSet, а не Set?
– Отходите от умолчаний, только когда очень нужно
– Exceptions
• Думаем заранее о concurrency– Immutability
– Бьём себя по рукам за synchronized {}
– Бьём себя по рукам за Collections.synchronized...{}
Уровень приложенияAPI и алгоритмические проблемы
![Page 62: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/62.jpg)
#62, Oracle
Q/A
![Page 63: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/63.jpg)
#63, Oracle
Backup
![Page 64: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/64.jpg)
#64, Oracle
ТеорияКогда закон Амдала может не работать
Composability• Предположим, есть функциональные блоки А и B
– Есть ли разница при последовательном (...) и параллельном ( || ) исполнении?
• Общая функциональность:– Functionality(A ... B) = Functionality(A || B)– “Black Box”: поведение одинаково
• Общая производительность:– Performance(A ... B) ? Performance(A || B)
– Про это сказать толком ничего нельзя
• A и B соревнуются за аппаратные ресурсы• Возможно, > (эффективный размер кеша меньше)
• Возможно, < (два потока на HT машине)
• Возможно, = (нет конфликтов)
![Page 65: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/65.jpg)
#65, Oracle
Старт
Измерения(эксперименты)
Сбор и обработка данных(профилировка, статистика)
Анализ узких местПоиск решений(прототипирование)
Разработка(кодирование решений)
Performance Engineeringитеративный подход
Важно:– Одно изменение за цикл!– Документировать все изменения
![Page 66: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/66.jpg)
#66, Oracle
Как получить ассемблерный код метода?
– Обычным дебаггером ;)
– JVMTI
– -XX:+PrintAssembly• http://wikis.sun.com/display/HotSpotInternals/PrintAssembly
JITдля любопытных
![Page 67: Intro: Performance Engineering - Aleksey Shipilëv...Цель – улучшение метрики! #8, Oracle Метрики #9, Oracle Метрики Throughput, bandwidth • Throughput,](https://reader033.vdocuments.us/reader033/viewer/2022042219/5ec571493ee7dc4db50ad244/html5/thumbnails/67.jpg)