Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

422 views

Published on

При измерении производительности легко получить какие-нибудь данные, но эти данные далеко не всегда отражают реальность, причиной тому может быть как новый эффект, так и неправильная обработка информации в реальном времени. В докладе рассматриваются основные проблемы существующих решений + примеры и цифры на основе опыта одного open source проекта. Основное внимание уделяется измерению latency и быстрым счётчикам, также рассмотрены сэмплирование, генерация случайных чисел и распределённая обработка измеряемых данных.

Published in: Engineering
  • Be the first to comment

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

  1. 1. Проблемы измерения производительности Erlang-приложения Ренат Идрисов
  2. 2. Контекст 108 запросов в секунду1 106 потоков1 102 рабочих станций1 1 Доклад о том, как адекватно мониторить такую систему
  3. 3. Проблемы измерения Адекватность самих измерений1 Импульс в квантовой механике
  4. 4. Проблемы измерения Адекватность самих измерений1 Импульс в квантовой механике1 Масса отдельных частей здорового человека
  5. 5. Проблемы измерения Адекватность самих измерений1 Импульс в квантовой механике1 Масса отдельных частей здорового человека1 Адекватность обработки1 Средняя температура по больнице
  6. 6. Измерение времени Время реакции системы на действие пользователя или запрос другой системы
  7. 7. Измерение времени Время реакции системы на действие пользователя или запрос другой системы1 Среднее
  8. 8. Измерение времени Время реакции системы на действие пользователя или запрос другой системы1 Среднее1 Минимум и максимум
  9. 9. Измерение времени Время реакции системы на действие пользователя или запрос другой системы1 Среднее1 Минимум и максимум1 Перцентили и квантили
  10. 10. Среднее 0 250 500 750 1000 среднее
  11. 11. 50 перцентиль 0 250 500 750 1000 среднее 50
  12. 12. 75 перцентиль 0 250 500 750 1000 среднее 50 75
  13. 13. 95 перцентиль 0 250 500 750 1000 среднее 50 75 95
  14. 14. 99 перцентиль 0 250 500 750 1000 среднее 50 75 95 99
  15. 15. 99.9 перцентиль 0 250 500 750 1000 среднее 50 75 95 99 99.9
  16. 16. Сэмплирование События неравномерно распределены по времени1 Мониторинг — периодический
  17. 17. События 0 1,5 3 4,5 6 0 4 8 12 16 Время Значения
  18. 18. Распределение 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 14 7 26 62 57 27 10 424 секунды количество событий
  19. 19. Кольцевой буфер Снимаем каждые 4 секунды, буфер вмещает 15 событий 0 1,5 3 4,5 6 0 4 8 12 16
  20. 20. Кольцевой буфер Снимаем каждые 4 секунды, буфер вмещает 15 событий 0 1,5 3 4,5 6 0 4 8 12 16
  21. 21. Кольцевой буфер 0 1,5 3 4,5 6 0 4 8 12 16 Снимаем каждые 4 секунды, буфер вмещает 15 событий
  22. 22. Кольцевой буфер 0 1,5 3 4,5 6 0 4 8 12 16 Снимаем каждые 4 секунды, буфер вмещает 15 событий
  23. 23. Окно в секундах Снимаем каждые 4 секунды, буфер вмещает 4 секунды 0 1,5 3 4,5 6 0 4 8 12 16
  24. 24. Окно в секундах 0 1,5 3 4,5 6 0 4 8 12 16 Снимаем каждые 4 секунды, буфер вмещает 4 секунды
  25. 25. Окно в секундах 0 1,5 3 4,5 6 0 4 8 12 16 Снимаем каждые 4 секунды, буфер вмещает 4 секунды
  26. 26. Окно в секундах 0 1,5 3 4,5 6 0 4 8 12 16 Снимаем каждые 4 секунды, буфер вмещает 4 секунды
  27. 27. Случайное выбывание 0 1,5 3 4,5 6 0 4 8 12 16 Снимаем каждые 4 секунды, буфер вмещает 15 событий
  28. 28. Случайное выбывание 0 1,5 3 4,5 6 0 4 8 12 16 Снимаем каждые 4 секунды, буфер вмещает 15 событий
  29. 29. Случайное выбывание 0 1,5 3 4,5 6 0 4 8 12 16 Снимаем каждые 4 секунды, буфер вмещает 15 событий
  30. 30. Случайное выбывание 0 1,5 3 4,5 6 0 4 8 12 16 Снимаем каждые 4 секунды, буфер вмещает 15 событий
  31. 31. Случайное + время (eα*∂T)/rand 0 1,5 3 4,5 6 0 4 8 12 16 Буфер также вмещает 15 событий
  32. 32. Случайное + время (eα*∂T)/rand Буфер также вмещает 15 событий 0 1,5 3 4,5 6 0 4 8 12 16
  33. 33. Случайное + время (eα*∂T)/rand Буфер также вмещает 15 событий 0 1,5 3 4,5 6 0 4 8 12 16
  34. 34. Случайное + время (eα*∂T)/rand Буфер также вмещает 15 событий 0 1,5 3 4,5 6 0 4 8 12 16
  35. 35. Folsom (библиотека) Базируется на ETS
  36. 36. Folsom (библиотека) Базируется на ETS1 Поддерживает счётчики, одиночные значения, гистограммы и “истории”
  37. 37. Folsom (библиотека) Базируется на ETS1 Поддерживает счётчики, одиночные значения, гистограммы и “истории”1 Прост в использовании
  38. 38. Folsom (библиотека) Базируется на ETS1 Поддерживает счётчики, одиночные значения, гистограммы и “истории”1 Прост в использовании1 Не поддерживает экспорт метрик1 https://github.com/boundary/folsom
  39. 39. Folsom проблемы Ограничения на количество (по умолчанию 1400 ETS таблиц)
  40. 40. Folsom проблемы Ограничения на количество (по умолчанию 1400 ETS таблиц)1 Потокоопасность
  41. 41. Folsom проблемы Ограничения на количество (по умолчанию 1400 ETS таблиц)1 Потокоопасность1 Блокирующая запись
  42. 42. Exometer (библиотека) Больше видов гистограмм
  43. 43. Exometer (библиотека) Больше видов гистограмм1 Включает folsom
  44. 44. Exometer (библиотека) Больше видов гистограмм1 Включает folsom1 Кастомизация представления метрики
  45. 45. Exometer (библиотека) Больше видов гистограмм1 Включает folsom1 Кастомизация представления метрики1 Отправка в графит/statsd или вывод на экран1 https://github.com/Feuerlabs/exometer
  46. 46. HDR Histogram Специализируется на временных задержках
  47. 47. HDR Histogram Специализируется на временных задержках1 Реализована на Си
  48. 48. HDR Histogram Специализируется на временных задержках1 Реализована на Си1 Нет потоковой безопасности1 https://github.com/HdrHistogram/ hdr_histogram_erl
  49. 49. Эксперимент складывание чисел “в гистограмму”
  50. 50. Эксперимент складывание чисел “в гистограмму”1 1 и 300 потоков
  51. 51. Эксперимент складывание чисел “в гистограмму”1 1 и 300 потоков1 ec2 c4.8xlarge node (36 ядер) и laptop (4 ядра)
  52. 52. Эксперимент складывание чисел “в гистограмму”1 1 и 300 потоков1 ec2 c4.8xlarge node (36 ядер) и laptop (4 ядра)1 20 запусков с последующим усреднением
  53. 53. Эксперимент складывание чисел “в гистограмму”1 1 и 300 потоков1 ec2 c4.8xlarge node (36 ядер) и laptop (4 ядра)1 20 запусков с последующим усреднением1 скрипты доступны по адресу1 https://github.com/parsifal-47/erlperf
  54. 54. 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 ядер зелёный
  55. 55. 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 ядер зелёный
  56. 56. 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 ядер
  57. 57. Быстрые счётчики gen_server:call — плохо
  58. 58. Быстрые счётчики gen_server:call — плохо1 gen_server:cast — очень плохо
  59. 59. Быстрые счётчики gen_server:call — плохо1 gen_server:cast — очень плохо1 ets counter
  60. 60. Быстрые счётчики gen_server:call — плохо1 gen_server:cast — очень плохо1 ets counter1 Сэмплированные счётчики
  61. 61. Результаты 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 потоков синий цвет
  62. 62. Результаты 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 потоков синий цвет
  63. 63. Случайные числа Часто используются при тестировании
  64. 64. Случайные числа Часто используются при тестировании1 Можно использовать для сэмплирования
  65. 65. Случайные числа Часто используются при тестировании1 Можно использовать для сэмплирования1 Иногда используют время как случайное число
  66. 66. Скорость генерации Random Timestamp SSL random Erlang now 0,01 1 100 0,3 2 0,2 0,7 8 38 0,04 0,2 Random Timestamp SSL random Erlang now 0,01 0,1 1 10 100 0,5 2 0,4 0,7 3 79 0,2 0,04 Время в секундах на 3*106 операций больше=хуже laptop 4 ядра с4.8xlarge 36 ядер 1 поток зелёный 300 потоков синий цвет
  67. 67. Синхронизация времён Docker!
  68. 68. Синхронизация времён Docker!1 ntpdate -q pool.ntp.org1 разные сервера1 отказ от обслуживания
  69. 69. Синхронизация времён Docker!1 ntpdate -q pool.ntp.org1 разные сервера1 отказ от обслуживания1 Выход: собственные сервера,1 а ещё лучше измерять на одном
  70. 70. Объединение данных director node nodenode node Graphite DB
  71. 71. 50 перцентиль 1, 1, 2, 2 -> 1.51 6, 6, 7, 7 -> 6.5
  72. 72. 50 перцентиль 1, 1, 2, 2 -> 1.51 6, 6, 7, 7 -> 6.51 1, 1, 2, 2, 6, 6, 7, 7 -> 4
  73. 73. 50 перцентиль 1, 1, 2, 2 -> 1.51 6, 6, 7, 7 -> 6.51 1, 1, 2, 2, 6, 6, 7, 7 -> 41 5, 6, 7, 8 -> 6.5
  74. 74. 50 перцентиль 1, 1, 2, 2 -> 1.51 6, 6, 7, 7 -> 6.51 1, 1, 2, 2, 6, 6, 7, 7 -> 41 5, 6, 7, 8 -> 6.51 1, 1, 2, 2, 5, 6, 7, 8 -> 3.51 информация теряется
  75. 75. Мораль Прежде чем бенчмаркать, нужно бенчмаркнуть бенчмарк1 1 1 Вопросы?

×