Проблемы измерения производительности Erlang-приложения...

75
Проблемы измерения производительности Erlang-приложения Ренат Идрисов

Transcript of Проблемы измерения производительности Erlang-приложения...

Проблемы измерения производительности Erlang-приложенияРенат Идрисов

Контекст108 запросов в секунду1106 потоков1102 рабочих станций1

1

Доклад о том, как адекватно мониторить такую систему

Проблемы измеренияАдекватность самих измерений1Импульс в квантовой механике

Проблемы измеренияАдекватность самих измерений1Импульс в квантовой механике1Масса отдельных частей здорового человека

Проблемы измеренияАдекватность самих измерений1Импульс в квантовой механике1Масса отдельных частей здорового человека1

Адекватность обработки1Средняя температура по больнице

Измерение времениВремя реакции системы на действие пользователя или запрос другой системы

Измерение времениВремя реакции системы на действие пользователя или запрос другой системы1Среднее

Измерение времениВремя реакции системы на действие пользователя или запрос другой системы1Среднее1Минимум и максимум

Измерение времениВремя реакции системы на действие пользователя или запрос другой системы1Среднее1Минимум и максимум1Перцентили и квантили

Среднее

0

250

500

750

1000

среднее

50 перцентиль

0

250

500

750

1000

среднее50

75 перцентиль

0

250

500

750

1000

среднее

5075

95 перцентиль

0

250

500

750

1000

среднее

5075

95

99 перцентиль

0

250

500

750

1000

среднее

5075

95

99

99.9 перцентиль

0

250

500

750

1000

среднее

5075

95

9999.9

СэмплированиеСобытия неравномерно распределены по времени1Мониторинг — периодический

События

0

1,5

3

4,5

6

0 4 8 12 16Время

Значения

Распределение

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

147

26

6257

27

10424

секунды

количество событий

Кольцевой буферСнимаем каждые 4 секунды, буфер вмещает 15 событий

0

1,5

3

4,5

6

0 4 8 12 16

Кольцевой буферСнимаем каждые 4 секунды, буфер вмещает 15 событий

0

1,5

3

4,5

6

0 4 8 12 16

Кольцевой буфер

0

1,5

3

4,5

6

0 4 8 12 16

Снимаем каждые 4 секунды, буфер вмещает 15 событий

Кольцевой буфер

0

1,5

3

4,5

6

0 4 8 12 16

Снимаем каждые 4 секунды, буфер вмещает 15 событий

Окно в секундахСнимаем каждые 4 секунды, буфер вмещает 4 секунды

0

1,5

3

4,5

6

0 4 8 12 16

Окно в секундах

0

1,5

3

4,5

6

0 4 8 12 16

Снимаем каждые 4 секунды, буфер вмещает 4 секунды

Окно в секундах

0

1,5

3

4,5

6

0 4 8 12 16

Снимаем каждые 4 секунды, буфер вмещает 4 секунды

Окно в секундах

0

1,5

3

4,5

6

0 4 8 12 16

Снимаем каждые 4 секунды, буфер вмещает 4 секунды

Случайное выбывание

0

1,5

3

4,5

6

0 4 8 12 16

Снимаем каждые 4 секунды, буфер вмещает 15 событий

Случайное выбывание

0

1,5

3

4,5

6

0 4 8 12 16

Снимаем каждые 4 секунды, буфер вмещает 15 событий

Случайное выбывание

0

1,5

3

4,5

6

0 4 8 12 16

Снимаем каждые 4 секунды, буфер вмещает 15 событий

Случайное выбывание

0

1,5

3

4,5

6

0 4 8 12 16

Снимаем каждые 4 секунды, буфер вмещает 15 событий

Случайное + время(eα*∂T)/rand

0

1,5

3

4,5

6

0 4 8 12 16

Буфер также вмещает 15 событий

Случайное + время(eα*∂T)/randБуфер также вмещает 15 событий

0

1,5

3

4,5

6

0 4 8 12 16

Случайное + время(eα*∂T)/randБуфер также вмещает 15 событий

0

1,5

3

4,5

6

0 4 8 12 16

Случайное + время(eα*∂T)/randБуфер также вмещает 15 событий

0

1,5

3

4,5

6

0 4 8 12 16

Folsom (библиотека)Базируется на ETS

Folsom (библиотека)Базируется на ETS1Поддерживает счётчики, одиночные значения, гистограммы и “истории”

Folsom (библиотека)Базируется на ETS1Поддерживает счётчики, одиночные значения, гистограммы и “истории”1Прост в использовании

Folsom (библиотека)Базируется на ETS1Поддерживает счётчики, одиночные значения, гистограммы и “истории”1Прост в использовании1Не поддерживает экспорт метрик1https://github.com/boundary/folsom

Folsom проблемыОграничения на количество (по умолчанию 1400 ETS таблиц)

Folsom проблемыОграничения на количество (по умолчанию 1400 ETS таблиц)1Потокоопасность

Folsom проблемыОграничения на количество (по умолчанию 1400 ETS таблиц)1Потокоопасность1Блокирующая запись

Exometer (библиотека)Больше видов гистограмм

Exometer (библиотека)Больше видов гистограмм1Включает folsom

Exometer (библиотека)Больше видов гистограмм1Включает folsom1Кастомизация представления метрики

Exometer (библиотека)Больше видов гистограмм1Включает folsom1Кастомизация представления метрики1Отправка в графит/statsd или вывод на экран1https://github.com/Feuerlabs/exometer

HDR HistogramСпециализируется на временных задержках

HDR HistogramСпециализируется на временных задержках1Реализована на Си

HDR HistogramСпециализируется на временных задержках1Реализована на Си1Нет потоковой безопасности1https://github.com/HdrHistogram/hdr_histogram_erl

Экспериментскладывание чисел “в гистограмму”

Экспериментскладывание чисел “в гистограмму”11 и 300 потоков

Экспериментскладывание чисел “в гистограмму”11 и 300 потоков1ec2 c4.8xlarge node (36 ядер) и laptop (4 ядра)

Экспериментскладывание чисел “в гистограмму”11 и 300 потоков1ec2 c4.8xlarge node (36 ядер) и laptop (4 ядра)120 запусков с последующим усреднением

Экспериментскладывание чисел “в гистограмму”11 и 300 потоков1ec2 c4.8xlarge node (36 ядер) и laptop (4 ядра)120 запусков с последующим усреднением1скрипты доступны по адресу1https://github.com/parsifal-47/erlperf

Folsom default

Folsom exdec

Folsom slide 1024

Folsom slide uniform

Exometer default

HDR histogram

0 2 4 6 8

0,34

5,5

4,9

7,3

6,2

4,6

0,4

6,2

5,2

6,5

6,4

5,1

Результаты 1 потокВремя в секундах на 3*106 операций, больше=хуже

Laptop 4 ядра синий цвет с4.8xlarge 36 ядер зелёный

Folsom default

Folsom exdec

Folsom slide 1024

Folsom slide uniform

Exometer default

HDR histogram

0 17,5 35 52,5 70

0,26

58

65

0,96

0,92

45

0,09

1,2

16,8

1,5

1,8

29

Результаты 300Время в секундах на 3*106 операций, больше=хуже

Laptop 4 ядра синий цвет

с4.8xlarge 36 ядер зелёный

Hdr_histogramВремя в секундах на 3*106 операций, больше=хуже

количество потоков

0

0,1

0,2

0,3

0,4

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

4 ядра

36 ядер

Быстрые счётчикиgen_server:call — плохо

Быстрые счётчикиgen_server:call — плохо1gen_server:cast — очень плохо

Быстрые счётчикиgen_server:call — плохо1gen_server:cast — очень плохо1ets counter

Быстрые счётчикиgen_server:call — плохо1gen_server:cast — очень плохо1ets counter1Сэмплированные счётчики

Результаты laptopВремя в секундах на 3*106 операций, больше=хуже

Inc tailrec

Folsom

Exometer

HDR histogram

0 1 2 3 4

0,4

1,3

3,2

0,02

0,1

0,4

0,8

0,007 1 поток зелёный

300 потоков синий цвет

Результаты c4.8xlargeВремя в секундах на 3*106 операций, больше=хуже

Inc tailrec

Folsom

Exometer

HDR histogram

0 1 2 3 4

0,34

1,1

2,9

0,015

0,26

0,09

0,25

0,003 1 поток зелёный

300 потоков синий цвет

Случайные числаЧасто используются при тестировании

Случайные числаЧасто используются при тестировании1Можно использовать для сэмплирования

Случайные числаЧасто используются при тестировании1Можно использовать для сэмплирования1Иногда используют время как случайное число

Скорость генерацииRandom

Timestamp

SSL random

Erlang now

0,01 1 1000,3

2

0,2

0,7

8

38

0,04

0,2

Random

Timestamp

SSL random

Erlang now

0,01 0,1 1 10 1000,5

2

0,4

0,7

3

79

0,2

0,04

Время в секундах на 3*106 операций больше=хуже

laptop 4 ядра

с4.8xlarge 36 ядер

1 поток зелёный

300 потоков синий цвет

Синхронизация времёнDocker!

Синхронизация времёнDocker!1ntpdate -q pool.ntp.org1разные сервера1отказ от обслуживания

Синхронизация времёнDocker!1ntpdate -q pool.ntp.org1разные сервера1отказ от обслуживания1Выход: собственные сервера,1а ещё лучше измерять на одном

Объединение данных

director node

nodenode

node

Graphite

DB

50 перцентиль1, 1, 2, 2 -> 1.516, 6, 7, 7 -> 6.5

50 перцентиль1, 1, 2, 2 -> 1.516, 6, 7, 7 -> 6.511, 1, 2, 2, 6, 6, 7, 7 -> 4

50 перцентиль1, 1, 2, 2 -> 1.516, 6, 7, 7 -> 6.511, 1, 2, 2, 6, 6, 7, 7 -> 415, 6, 7, 8 -> 6.5

50 перцентиль1, 1, 2, 2 -> 1.516, 6, 7, 7 -> 6.511, 1, 2, 2, 6, 6, 7, 7 -> 415, 6, 7, 8 -> 6.511, 1, 2, 2, 5, 6, 7, 8 -> 3.51информация теряется

МоральПрежде чем бенчмаркать, нужно бенчмаркнуть бенчмарк11

1

Вопросы?