+ - 0:00:00
Notes for current slide
Notes for next slide

Поговорим про перфоманс-анализ

Андрей Акиньшин, JetBrains

DotNext Piter, 16.06.2020

1 / 118

Типичный день перфоманс-инженера

2 / 118

Типичный день любого инженера

2 / 118

Четыре главные задачи перфоманс-анализа

3 / 118

Четыре главные задачи перфоманс-анализа

Анализ распределений
3 / 118

Четыре главные задачи перфоманс-анализа

Анализ распределений Сравнение бенчмарков
3 / 118

Четыре главные задачи перфоманс-анализа

Анализ распределений Сравнение бенчмарков
Анализ истории
3 / 118

Четыре главные задачи перфоманс-анализа

Анализ распределений Сравнение бенчмарков
Анализ истории Перфоманс-тесты
3 / 118

Источники вдохновения

4 / 118

Источники вдохновения

4 / 118

Источники вдохновения

stars 5403 used by 4239 downloads 4519891
4 / 118

Источники вдохновения

stars 5403 used by 4239 downloads 4519891

4 / 118

Источники вдохновения

stars 5403 used by 4239 downloads 4519891

4 / 118

Часть 1

Изучаем сырые данные

5 / 118
(1) Изучаем сырые данные

Анализируем глазами

6 / 118
(1) Изучаем сырые данные

Анализируем глазами

6 / 118
(1) Изучаем сырые данные

Анализируем глазами

Задачка: если у нас есть 10'000 тестов, то какова вероятность получить такую картинку хотя бы в одном из них?

6 / 118
(1) Изучаем сырые данные

Считаем вероятности

Предположим, что форма распределения известна:

7 / 118
(1) Изучаем сырые данные

Считаем вероятности

Предположим, что форма распределения известна:

Вероятность появления "плохой" картинки:

7 / 118
(1) Изучаем сырые данные

Считаем вероятности

Предположим, что форма распределения известна:

Вероятность появления "плохой" картинки:

Вероятность появления хотя бы одной "плохой" картинки из 10'000:

7 / 118
(1) Изучаем сырые данные

График вероятности

8 / 118
(1) Изучаем сырые данные

Закон малых чисел

Tversky, Amos, and Daniel Kahneman. "Belief in the law of small numbers." Psychological bulletin 76, no. 2 (1971): 105

9 / 118
(1) Изучаем сырые данные

Кто лучше всех разбирается в перфоманс-анализе?

10 / 118
(1) Изучаем сырые данные

Кто лучше всех разбирается в перфоманс-анализе?

10 / 118
(1) Изучаем сырые данные

Кто лучше всех разбирается в перфоманс-анализе?

Процент угадываний: 20-30%
10 / 118

И тогда я пошёл к руководителю всего нашего .NET-отдела и попросил порешать те же самые перфомансные задачки (драматическая пауза) его кошку.

(1) Изучаем сырые данные

Кто лучше всех разбирается в перфоманс-анализе?

Процент угадываний: 20-30%
10 / 118
(1) Изучаем сырые данные

Кто лучше всех разбирается в перфоманс-анализе?

Процент угадываний: 20-30%
10 / 118
(1) Изучаем сырые данные

Кто лучше всех разбирается в перфоманс-анализе?

Процент угадываний: 20-30%
10 / 118
(1) Изучаем сырые данные

Кто лучше всех разбирается в перфоманс-анализе?

Процент угадываний: 20-30% Процент угадываний: 45-55%
10 / 118
(1) Изучаем сырые данные

Кто лучше всех разбирается в перфоманс-анализе?

Процент угадываний: 20-30% Процент угадываний: 45-55%
10 / 118
(1) Изучаем сырые данные

Кто лучше всех разбирается в перфоманс-анализе?

Процент угадываний: 20-30% Процент угадываний: 45-55%
10 / 118
(1) Изучаем сырые данные

Нужно запомнить

Сырые данные
контринтуитивны и обманчивы

11 / 118

Но если пользоваться интуицией опасно,
то как правильно изучать данные?

12 / 118

Часть 2

Изучаем сводные метрики

13 / 118
(2) Изучаем сводные метрики

Нормальное распределение

14 / 118
(2) Изучаем сводные метрики

Нормальное распределение

Нормальность — это миф; никогда не было и никогда не будет ни одного нормального распределения.
"Testing for normality", R.C. Geary, 1947

14 / 118
(2) Изучаем сводные метрики

Проведём эксперимент

| Метод | Среднее | Стандартное отклонение | Медиана |
|-------|----------|------------------------|----------|
| A | 136.2 мс | 56.92 мс | 107.0 мс |
| B | 133.7 мс | 12.20 мс | 130.2 мс |
15 / 118
(2) Изучаем сводные метрики

Проведём эксперимент

| Метод | Среднее | Стандартное отклонение | Медиана |
|-------|----------|------------------------|----------|
| A | 136.2 мс | 56.92 мс | 107.0 мс |
| B | 133.7 мс | 12.20 мс | 130.2 мс |

15 / 118
(2) Изучаем сводные метрики

Проведём эксперимент

| Метод | Среднее | Стандартное отклонение | Медиана |
|-------|----------|------------------------|----------|
| A | 136.2 мс | 56.92 мс | 107.0 мс |
| B | 133.7 мс | 12.20 мс | 130.2 мс |

15 / 118
(2) Изучаем сводные метрики

Квартет Энскомба

IIIIIIIV
x y x y x y x y
10,0 8,04 10,0 9,14 10,0 7,46 8,0 6,58
8,0 6,95 8,0 8,14 8,0 6,77 8,0 5,76
13,0 7,58 13,0 8,74 13,0 12,74 8,0 7,71
9,0 8,81 9,0 8,77 9,0 7,11 8,0 8,84
11,0 8,33 11,0 9,26 11,0 7,81 8,0 8,47
14,0 9,96 14,0 8,10 14,0 8,84 8,0 7,04
6,0 7,24 6,0 6,13 6,0 6,08 8,0 5,25
4,0 4,26 4,0 3,10 4,0 5,39 19,0 12,50
12,0 10,84 12,0 9,13 12,0 8,15 8,0 5,56
7,0 4,82 7,0 7,26 7,0 6,42 8,0 7,91
5,0 5,68 5,0 4,74 5,0 5,73 8,0 6,89

Anscombe, Francis J. "Graphs in statistical analysis." The american statistician 27, no. 1 (1973): 17-21.

16 / 118
(2) Изучаем сводные метрики

Квартет Энскомба

IIIIIIIV
x y x y x y x y
10,0 8,04 10,0 9,14 10,0 7,46 8,0 6,58
8,0 6,95 8,0 8,14 8,0 6,77 8,0 5,76
13,0 7,58 13,0 8,74 13,0 12,74 8,0 7,71
9,0 8,81 9,0 8,77 9,0 7,11 8,0 8,84
11,0 8,33 11,0 9,26 11,0 7,81 8,0 8,47
14,0 9,96 14,0 8,10 14,0 8,84 8,0 7,04
6,0 7,24 6,0 6,13 6,0 6,08 8,0 5,25
4,0 4,26 4,0 3,10 4,0 5,39 19,0 12,50
12,0 10,84 12,0 9,13 12,0 8,15 8,0 5,56
7,0 4,82 7,0 7,26 7,0 6,42 8,0 7,91
5,0 5,68 5,0 4,74 5,0 5,73 8,0 6,89
ХарактеристикаЗначение
Среднее x9.0
Дисперсия x11.0
Среднее y7.5
Дисперсия y4.125
Корреляция rxy0.816
Линейная регрессияy=3+0.5x

Anscombe, Francis J. "Graphs in statistical analysis." The american statistician 27, no. 1 (1973): 17-21.

16 / 118
(2) Изучаем сводные метрики

Квартет Энскомба

Anscombe, Francis J. "Graphs in statistical analysis." The american statistician 27, no. 1 (1973): 17-21.

17 / 118
(2) Изучаем сводные метрики

Обманчивые среднее и дисперсия

Justin Matejka, George Fitzmaurice (2017), "Same Stats, Different Graphs: Generating Datasets with Varied Appearance and Identical Statistics through Simulated Annealing", CHI 2017 Conference proceedings: ACM SIGCHI Conference on Human Factors in Computing Systems

18 / 118
(2) Изучаем сводные метрики

Обманчивые среднее и дисперсия

Justin Matejka, George Fitzmaurice (2017), "Same Stats, Different Graphs: Generating Datasets with Varied Appearance and Identical Statistics through Simulated Annealing", CHI 2017 Conference proceedings: ACM SIGCHI Conference on Human Factors in Computing Systems

19 / 118
(2) Изучаем сводные метрики

Статистика должна быть дружелюбной

20 / 118
(2) Изучаем сводные метрики

Статистика должна быть дружелюбной

| Метод | Интервал |
|-------|--------------|
| A | 100мс..200мс |
| B | 120мс..150мс |
| C | 400мс..900мс |
20 / 118
(2) Изучаем сводные метрики

Статистика должна быть дружелюбной

| Метод | Интервал | Заметки |
|-------|--------------|---------------------|
| A | 100мс..200мс | Большие выбросы |
| B | 120мс..150мс | |
| C | 400мс..900мс | |
20 / 118
(2) Изучаем сводные метрики

Статистика должна быть дружелюбной

| Метод | Интервал | Заметки |
|-------|--------------|---------------------|
| A | 100мс..200мс | Большие выбросы^1 |
| B | 120мс..150мс | |
| C | 400мс..900мс | |
^1 Выбросы: 327мс, 364мс, 396мс
20 / 118
(2) Изучаем сводные метрики

Статистика должна быть дружелюбной

| Метод | Интервал | Заметки |
|-------|--------------|---------------------|
| A | 100мс..200мс | Большие выбросы^1 |
| B | 120мс..150мс | Маленькая выборка |
| C | 400мс..900мс | |
^1 Выбросы: 327мс, 364мс, 396мс
20 / 118
(2) Изучаем сводные метрики

Статистика должна быть дружелюбной

| Метод | Интервал | Заметки |
|-------|--------------|---------------------|
| A | 100мс..200мс | Большие выбросы^1 |
| B | 120мс..150мс | Маленькая выборка^2 |
| C | 400мс..900мс | |
^1 Выбросы: 327мс, 364мс, 396мс
^2 Размер выборки: 3 замера
20 / 118
(2) Изучаем сводные метрики

Статистика должна быть дружелюбной

| Метод | Интервал | Заметки |
|-------|--------------|---------------------|
| A | 100мс..200мс | Большие выбросы^1 |
| B | 120мс..150мс | Маленькая выборка^2 |
| C | 400мс..900мс | Мультимодальность |
^1 Выбросы: 327мс, 364мс, 396мс
^2 Размер выборки: 3 замера
20 / 118
(2) Изучаем сводные метрики

Статистика должна быть дружелюбной

| Метод | Интервал | Заметки |
|-------|--------------|---------------------|
| A | 100мс..200мс | Большие выбросы^1 |
| B | 120мс..150мс | Маленькая выборка^2 |
| C | 400мс..900мс | Мультимодальность^3 |
^1 Выбросы: 327мс, 364мс, 396мс
^2 Размер выборки: 3 замера
^3 Интервалы: [400мс..450мс] и [850мс..900мс]
20 / 118
(2) Изучаем сводные метрики

Источники шума и мультимодальности

21 / 118
(2) Изучаем сводные метрики

Источники шума и мультимодальности

Планировщик ОС
21 / 118
(2) Изучаем сводные метрики

Источники шума и мультимодальности

Планировщик ОС Многопоточность
21 / 118
(2) Изучаем сводные метрики

Источники шума и мультимодальности

Планировщик ОС Многопоточность Выравнивание
21 / 118
(2) Изучаем сводные метрики

Источники шума и мультимодальности

Планировщик ОС Многопоточность Выравнивание
Кэш процессора
21 / 118
(2) Изучаем сводные метрики

Источники шума и мультимодальности

Планировщик ОС Многопоточность Выравнивание
Кэш процессора Изменение частоты CPU
21 / 118
(2) Изучаем сводные метрики

Источники шума и мультимодальности

Планировщик ОС Многопоточность Выравнивание
Кэш процессора Изменение частоты CPU Термальный троттлинг
21 / 118
(2) Изучаем сводные метрики

Термальный троттлинг

22 / 118
(2) Изучаем сводные метрики

Термальный троттлинг

22 / 118
(2) Изучаем сводные метрики

Термальный троттлинг

22 / 118
(2) Изучаем сводные метрики

Термальный троттлинг

(В морозилке)
Частота процессора: 3.5ГГц
Итерация 1: 103мс
Итерация 2: 104мс
Итерация 3: 102мс
Итерация 4: 101мс
Итерация 5: 106мс
Итерация 6: 104мс
22 / 118
(2) Изучаем сводные метрики

Термальный троттлинг

(В морозилке)
Частота процессора: 3.5ГГц
Итерация 1: 103мс
Итерация 2: 104мс
Итерация 3: 102мс
Итерация 4: 101мс
Итерация 5: 106мс
Итерация 6: 104мс
(В одеялке)
Частота процессора: 2.5ГГц
Итерация 1: 145мс
Итерация 2: 142мс
Итерация 3: 147мс
Итерация 4: 139мс
Итерация 5: 144мс
Итерация 6: 142мс
22 / 118
(2) Изучаем сводные метрики

Нужно запомнить

Статистика
должна быть дружелюбной

23 / 118

Допустим я разобрался со всеми этими метриками.
Как мне два бенчмарка-то сравнить?

24 / 118

Часть 3

Применяем статистические тесты

25 / 118
(3) Применяем статистические тесты

Типичная деградация

26 / 118
(3) Применяем статистические тесты

Медитируем на список статистических тестов

27 / 118
(3) Применяем статистические тесты

Общая схема

28 / 118
(3) Применяем статистические тесты

Общая схема

28 / 118
(3) Применяем статистические тесты

Общая схема

28 / 118
(3) Применяем статистические тесты

Общая схема

28 / 118
(3) Применяем статистические тесты

Общая схема

28 / 118
(3) Применяем статистические тесты

Общая схема

28 / 118
(3) Применяем статистические тесты

Общая схема

28 / 118
(3) Применяем статистические тесты

Статистические ошибки

29 / 118
(3) Применяем статистические тесты

Статистические ошибки

Самые главные ошибки

29 / 118
(3) Применяем статистические тесты

Статистические ошибки

Самые главные ошибки

  • Ошибка первого рода   : деградации нет, а мы решили, что есть
29 / 118
(3) Применяем статистические тесты

Статистические ошибки

Самые главные ошибки

  • Ошибка первого рода   : деградации нет, а мы решили, что есть

  • Ошибка второго рода   : деградация есть, а мы решили, что нет

29 / 118
(3) Применяем статистические тесты

Статистические ошибки

Самые главные ошибки

  • Ошибка первого рода   : деградации нет, а мы решили, что есть

  • Ошибка второго рода   : деградация есть, а мы решили, что нет

  • Ошибка третьего рода1 : мы получили ответ на неправильный вопрос

1Mitroff, Ian I., and Tom R. Featheringham. "On systemic problem solving and the error of the third kind."
Behavioral Science 19, no. 6 (1974): 383-393.

29 / 118
(3) Применяем статистические тесты

Статистические ошибки

Самые главные ошибки

  • Ошибка первого рода   : деградации нет, а мы решили, что есть

  • Ошибка второго рода   : деградация есть, а мы решили, что нет

  • Ошибка третьего рода1 : мы получили ответ на неправильный вопрос

1Mitroff, Ian I., and Tom R. Featheringham. "On systemic problem solving and the error of the third kind."
Behavioral Science 19, no. 6 (1974): 383-393.

Вероятности

29 / 118
(3) Применяем статистические тесты

Статистические ошибки

Самые главные ошибки

  • Ошибка первого рода   : деградации нет, а мы решили, что есть

  • Ошибка второго рода   : деградация есть, а мы решили, что нет

  • Ошибка третьего рода1 : мы получили ответ на неправильный вопрос

1Mitroff, Ian I., and Tom R. Featheringham. "On systemic problem solving and the error of the third kind."
Behavioral Science 19, no. 6 (1974): 383-393.

Вероятности

  • Ошибка первого рода   : α (значение по умолчанию = 0.05)
29 / 118
(3) Применяем статистические тесты

Статистические ошибки

Самые главные ошибки

  • Ошибка первого рода   : деградации нет, а мы решили, что есть

  • Ошибка второго рода   : деградация есть, а мы решили, что нет

  • Ошибка третьего рода1 : мы получили ответ на неправильный вопрос

1Mitroff, Ian I., and Tom R. Featheringham. "On systemic problem solving and the error of the third kind."
Behavioral Science 19, no. 6 (1974): 383-393.

Вероятности

  • Ошибка первого рода   : α (значение по умолчанию = 0.05)

  • Ошибка второго рода   : β (значение по умолчанию = 0.20)

29 / 118
(3) Применяем статистические тесты

Статистические ошибки

Самые главные ошибки

  • Ошибка первого рода   : деградации нет, а мы решили, что есть

  • Ошибка второго рода   : деградация есть, а мы решили, что нет

  • Ошибка третьего рода1 : мы получили ответ на неправильный вопрос

1Mitroff, Ian I., and Tom R. Featheringham. "On systemic problem solving and the error of the third kind."
Behavioral Science 19, no. 6 (1974): 383-393.

Вероятности

  • Ошибка первого рода   : α (значение по умолчанию = 0.05)

  • Ошибка второго рода   : β (значение по умолчанию = 0.20)

  • Ошибка третьего рода  : большая вероятность

29 / 118
(3) Применяем статистические тесты

Уровень статистической значимости: α=0.05

30 / 118
(3) Применяем статистические тесты

Уровень статистической значимости: α=0.05

Fisher RA. The Design of Experiments, Edinburgh: Oliver and Boyd. 1935. Pages 15–16

30 / 118
(3) Применяем статистические тесты

Уровень статистической значимости: α=0.05

Fisher RA. The Design of Experiments, Edinburgh: Oliver and Boyd. 1935. Pages 15–16

30 / 118
(3) Применяем статистические тесты

Уровень статистической значимости: α=0.05

class StatisticalTest
{
// Магическое число,
// которые мы выбрали случайным образом
const double DefaultAlpha = 0.05;
// Никогда не используйте умолчание!
public StatisticalTest(
double alpha = DefaultAlpha)
{
// ...
}
}

Fisher RA. The Design of Experiments, Edinburgh: Oliver and Boyd. 1935. Pages 15–16

30 / 118
(3) Применяем статистические тесты

Статистическая мощность теста: 1-β=0.80

31 / 118
(3) Применяем статистические тесты

Статистическая мощность теста: 1-β=0.80

Cohen, Jacob. Statistical power analysis for the behavioral sciences. No. 300.72 C6. 1988. Page 56

31 / 118
(3) Применяем статистические тесты

Статистическая мощность теста: 1-β=0.80

Cohen, Jacob. Statistical power analysis for the behavioral sciences. No. 300.72 C6. 1988. Page 56

31 / 118
(3) Применяем статистические тесты

Статистическая мощность теста: 1-β=0.80

class StatisticalTest
{
// Магические числа,
// которые мы выбрали случайным образом
const double DefaultAlpha = 0.05;
const double DefaultBeta = DefaultAlpha * 4;
// Никогда не используйте умолчания!
public StatisticalTest(
double alpha = DefaultAlpha,
double beta = DefaultBeta)
{
// ...
}
}

Cohen, Jacob. Statistical power analysis for the behavioral sciences. No. 300.72 C6. 1988. Page 56

31 / 118
(3) Применяем статистические тесты

Эвфемизмы для неудачных результатов

(barely) not statistically significant                                  p=0.052
a barely detectable statistically significant difference                p=0.073
a borderline significant trend                                          p=0.09
a certain trend toward significance                                     p=0.08
a clear tendency to significance                                        p=0.052
a clear trend                                                           p<0.09
a clear, strong trend                                                   p=0.09
a considerable trend toward significance                                p=0.069
a decreasing trend                                                      p=0.09
a definite trend                                                        p=0.08
a distinct trend toward significance                                    p=0.07
a favorable trend                                                       p=0.09
a favourable statistical trend                                          p=0.09
a little significant                                                    p<0.1
a margin at the edge of significance                                    p=0.0608
a marginal trend                                                        p=0.09
a marginal trend toward significance                                    p=0.052
a marked trend                                                          p=0.07
a mild trend                                                            p<0.09
a moderate trend toward significance                                    p=0.068
a near-significant trend                                                p=0.07
a negative trend                                                        p=0.09
a nonsignificant trend                                                  p<0.1
a nonsignificant trend toward significance                              p=0.1
a notable trend                                                         p<0.1
a numerical increasing trend                                            p=0.09
a numerical trend                                                       p=0.09
a positive trend                                                        p=0.09
a possible trend                                                        p=0.09
a possible trend toward significance                                    p=0.052
a pronounced trend                                                      p=0.09
a reliable trend                                                        p=0.058
a robust trend toward significance                                      p=0.0503
a significant trend                                                     p=0.09
a slight slide towards significance                                     p<0.20
a slight tendency toward significance                                   p<0.08
a slight trend                                                          p<0.09
a slight trend toward significance                                      p=0.098
a slightly increasing trend                                             p=0.09
a small trend                                                           p=0.09
a statistical trend                                                     p=0.09
a statistical trend toward significance                                 p=0.09
a strong tendency towards statistical significance                      p=0.051
a strong trend                                                          p=0.077
a strong trend toward significance                                      p=0.08
a substantial trend toward significance                                 p=0.068
a suggestive trend                                                      p=0.06
a trend close to significance                                           p=0.08
a trend significance level                                              p=0.08
a trend that approached significance                                    p<0.06
a very slight trend toward significance                                 p=0.20
a weak trend                                                            p=0.09
a weak trend toward significance                                        p=0.12
a worrying trend                                                        p=0.07
all but significant                                                     p=0.055
almost achieved significance                                            p=0.065
almost approached significance                                          p=0.065
almost attained significance                                            p<0.06
almost became significant                                               p=0.06
almost but not quite significant                                        p=0.06
almost clinically significant                                           p<0.10
almost insignificant                                                    p<0.065
almost marginally significant                                           p>0.05
almost non-significant                                                  p=0.083
almost reached statistical significance                                 p=0.06
almost significant                                                      p=0.06
almost significant tendency                                             p=0.06
almost statistically significant                                        p=0.06
an adverse trend                                                        p=0.10
an apparent trend                                                       p=0.286
an associative trend                                                    p=0.09
an elevated trend                                                       p<0.05
an encouraging trend                                                    p<0.1
an established trend                                                    p<0.10
an evident trend                                                        p=0.13
an expected trend                                                       p=0.08
an important trend                                                      p=0.066
an increasing trend                                                     p<0.09
an interesting trend                                                    p=0.1
an inverse trend toward significance                                     p=0.06
an observed trend                                                       p=0.06
an obvious trend                                                        p=0.06
an overall trend                                                        p=0.2
an unexpected trend                                                     p=0.09
an unexplained trend                                                    p=0.09
an unfavorable trend                                                    p<0.10
appeared to be marginally significant                                   p<0.10
approached acceptable levels of statistical significance                p=0.054
approached but did not quite achieve significance                       p>0.05
approached but fell short of significance                               p=0.07
approached conventional levels of significance                          p<0.10
approached near significance                                            p=0.06
approached our criterion of significance                                p>0.08
approached significant                                                  p=0.11
approached the borderline of significance                               p=0.07
approached the level of significance                                     p=0.09
approached trend levels of significance                                 p=0.05
approached, but did reach, significance                                 p=0.065
approaches statistical significance                                     p>0.06
approaching a level of significance                                     p=0.089
approaching an acceptable significance level                            p=0.056
approaching borderline significance                                     p=0.08
approaching borderline statistical significance                         p=0.07
approaching but not reaching significance                               p=0.53
approaching clinical significance                                       p=0.07
approaching close to significance                                       p<0.1
approaching conventional significance levels                            p=0.06
approaching conventional statistical significance                       p=0.06
approaching formal significance                                         p=0.1052
approaching independent prognostic significance                         p=0.08
approaching marginal levels of significance                             p<0.107
approaching marginal significance                                       p=0.064
approaching more closely significance                                   p=0.06
approaching our preset significance level                               p=0.076
approaching prognostic significance                                     p=0.052
approaching significance                                                p=0.09
approaching the traditional significance level                          p=0.06
approaching to statistical significance                                 p=0.075
approaching, although not reaching, significance                        p=0.08
approaching, but not reaching, significance                             p<0.09
approximately significant                                               p=0.053
approximating significance                                              p=0.09
arguably significant                                                    p=0.07
as good as significant                                                  p=0.0502
at the brink of significance                                            p=0.06
at the cusp of significance                                             p=0.06
at the edge of significance                                             p=0.055
at the limit of significance                                            p=0.054
at the limits of significance                                           p=0.053
at the margin of significance                                           p=0.056
at the margin of statistical significance                               p<0.07
at the verge of significance                                            p=0.058
at the very edge of significance                                        p=0.053
barely below the level of significance                                  p=0.06
barely escaped statistical significance                                 p=0.07
barely failed to attain statistical significance                        p=0.067
barely fails to attain statistical significance at conventional levels  p<0.10
barely insignificant                                                    p=0.075
barely missed statistical significance                                  p=0.051
barely missed the commonly acceptable significance level                p<0.053
barely outside the range of significance                                p=0.06
barely significant                                                      p=0.07
below (but verging on) the statistical significant level                p>0.05
better trends of improvement                                            p=0.056
bordered on a statistically significant value                           p=0.06
bordered on being significant                                           p>0.07
bordered on being statistically significant                             p=0.0502
bordered on but was not less than the accepted level of significance    p>0.05
bordered on significant                                                 p=0.09
borderline conventional significance                                    p=0.051
borderline level of statistical significance                            p=0.053
borderline significant                                                   p=0.09
borderline significant trends                                           p=0.099
close to a marginally significant level                                 p=0.06
close to being significant                                              p=0.06
close to being statistically significant                                 p=0.055
close to borderline significance                                         p=0.072
close to the boundary of significance                                   p=0.06
close to the level of significance                                      p=0.07
close to the limit of significance                                      p=0.17
close to the margin of significance                                     p=0.055
close to the margin of statistical significance                         p=0.075
closely approaches the brink of significance                             p=0.07
closely approaches the statistical significance                         p=0.0669
closely approximating significance                                      p>0.05
closely not significant                                                 p=0.06
closely significant                                                     p=0.058
close-to-significant                                                     p=0.09
did not achieve conventional threshold levels of statistical significancp=0.08
did not exceed the conventional level of statistical significance       p<0.08
did not quite achieve acceptable levels of statistical significance     p=0.054
did not quite achieve significance                                      p=0.076
did not quite achieve the conventional levels of significance           p=0.052
did not quite achieve the threshold for statistical significance        p=0.08
did not quite attain conventional levels of significance                p=0.07
did not quite reach a statistically significant level                   p=0.108
did not quite reach conventional levels of statistical significance     p=0.079
did not quite reach statistical significance                            p=0.063
did not reach the traditional level of significance                      p=0.10
did not reach the usually accepted level of clinical significance       p=0.07
difference was apparent                                                 p=0.07
direction heading towards significance                                  p=0.10
does not appear to be sufficiently significant                          p>0.05
does not narrowly reach statistical significance                        p=0.06
does not reach the conventional significance level                      p=0.098
effectively significant                                                 p=0.051
equivocal significance                                                  p=0.06
essentially significant                                                 p=0.10
extremely close to significance                                          p=0.07
failed to reach significance on this occasion                           p=0.09
failed to reach statistical significance                                p=0.06
fairly close to significance                                            p=0.065
fairly significant                                                      p=0.09
falls just short of standard levels of statistical significance         p=0.06
fell (just) short of significance                                       p=0.08
fell barely short of significance                                       p=0.08
fell just short of significance                                         p=0.07
fell just short of statistical significance                             p=0.12
fell marginally short of significance                                   p=0.07
fell narrowly short of significance                                     p=0.0623
fell only marginally short of significance                              p=0.0879
fell only short of significance                                         p=0.06
fell short of significance                                              p=0.07
fell slightly short of significance                                     p=0.0167
fell somewhat short of significance                                     p=0.138
felt short of significance                                              p=0.07
flirting with conventional levels of significance                       p>0.1
heading towards significance                                            p=0.086
highly significant                                                      p=0.09
hint of significance                                                    p>0.05
hovered around significance                                              p=0.061
hovered at nearly a significant level                                   p=0.058
hovering closer to statistical significance                             p=0.076
hovers on the brink of significance                                     p=0.055
in the edge of significance                                             p=0.059
in the verge of significance                                            p=0.06
inconclusively significant                                              p=0.070
indeterminate significance                                              p=0.08
indicative significance                                                 p=0.08
just about significant                                                  p=0.051
just above the arbitrary level of significance                           p=0.07
just above the margin of significance                                   p=0.053
just at the conventional level of significance                          p=0.05001
just barely below the level of significance                             p=0.06
just barely failed to reach significance                                p=<0.06
just barely insignificant                                               p=0.11
just barely statistically significant                                    p=0.054
just beyond significance                                                p=0.06
just borderline significant                                             p=0.058
just escaped significance                                               p=0.07
just failed significance                                                p=0.057
just failed to be significant                                           p=0.072
just failed to reach statistical significance                           p=0.06
just failing to reach statistical significance                          p=0.06
just fails to reach conventional levels of statistical significance     p=0.07
just lacked significance                                                p=0.053
just marginally significant                                             p=0.0562
just missed being statistically significant                             p=0.06
just missing significance                                               p=0.07
just on the verge of significance                                       p=0.06
just outside accepted levels of significance                            p=0.06
just outside levels of significance                                     p<0.08
just outside the bounds of significance                                 p=0.06
just outside the conventional levels of significance                    p=0.1076
just outside the level of significance                                  p=0.0683
just outside the limits of significance                                 p=0.06
just outside the traditional bounds of significance                     p=0.06
just over the limits of statistical significance                        p=0.06
just short of significance                                              p=0.07
just shy of significance                                                p=0.053
just skirting the boundary of significance                              p=0.052
just tendentially significant                                            p=0.056
just very slightly missed the significance level                        p=0.086
leaning towards significance                                            p=0.15
leaning towards statistical significance                                p=0.06
likely to be significant                                                p=0.054
loosely significant                                                     p=0.10
marginal significance                                                   p=0.07
marginally and negatively significant                                   p=0.08
marginally insignificant                                                p=0.08
marginally nonsignificant                                               p=0.096
marginally significant                                                  p>=0.1
marginally significant tendency                                         p=0.08
marginally statistically significant                                    p=0.08
may not be significant                                                   p=0.06
medium level of significance                                            p=0.051
mildly significant                                                       p=0.07
missed narrowly statistical significance                                p=0.054
moderately significant                                                  p>0.11
modestly significant                                                    p=0.09
narrowly avoided significance                                           p=0.052
narrowly eluded statistical significance                                p=0.0789
narrowly escaped significance                                           p=0.08
narrowly evaded statistical significance                                p>0.05
narrowly failed significance                                            p=0.054
narrowly missed achieving significance                                  p=0.055
narrowly missed overall significance                                    p=0.06
narrowly missed significance                                            p=0.051
narrowly missed standard significance levels                            p<0.07
narrowly missed the significance level                                  p=0.07
narrowly missing conventional significance                              p=0.054
near limit significance                                                 p=0.073
near miss of statistical significance                                   p>0.1
near nominal significance                                               p=0.064
near significance                                                       p=0.07
near to statistical significance                                        p=0.056
near/possible significance                                              p=0.0661
near-borderline significance                                            p=0.10
near-certain significance                                                p=0.07
nearing significance                                                    p>0.051
nearly acceptable level of significance                                 p=0.06
nearly approaches statistical significance                              p=0.079
nearly borderline significance                                          p=0.052
nearly negatively significant                                           p<0.1
nearly positively significant                                           p=0.063
nearly reached a significant level                                      p=0.07
nearly reaching the level of significance                               p<0.06
nearly significant                                                      p=0.06
nearly significant tendency                                             p=0.06
nearly, but not quite significant                                       p>0.06
near-marginal significance                                              p=0.18
near-significant                                                        p=0.09
near-to-significance                                                    p=0.093
near-trend significance                                                 p=0.11
nominally significant                                                   p=0.08
non-insignificant result                                                p=0.500
non-significant in the statistical sense                                p>0.05
not absolutely significant but very probably so                         p>0.05
not as significant                                                      p=0.06
not clearly significant                                                 p=0.08
not completely significant                                              p=0.07
not completely statistically significant                                 p=0.0811
not currently significant                                               p=0.06
not decisively significant                                              p=0.106
not entirely significant                                                p=0.10
not especially significant                                              p>0.05
not exactly significant                                                 p=0.052
not extremely significant                                               p<0.06
not formally significant                                                p=0.06
not fully significant                                                   p=0.085
not globally significant                                                p=0.11
not highly significant                                                  p=0.089
not insignificant                                                       p=0.056
not markedly significant                                                p=0.06
not moderately significant                                              p>0.20
not non-significant                                                     p>0.1
not numerically significant                                             p>0.05
not obviously significant                                                p>0.3
not overly significant                                                  p>0.08
not quite borderline significance                                       p=0.089
not quite reach the level of significance                               p=0.07
not quite significant                                                   p=0.118
not quite within the conventional bounds of statistical significance    p=0.12
not reliably significant                                                 p=0.091
not remarkably significant                                               p=0.236
not significant by common standards                                     p=0.099
not significant by conventional standards                               p=0.10
not significant by traditional standards                                p<0.1
not significant in the formal statistical sense                         p=0.08
not significant in the narrow sense of the word                         p=0.29
not significant in the normally accepted statistical sense              p=0.064
not significantly significant but..clinically meaningful                p=0.072
not statistically quite significant                                     p<0.06
not strictly significant                                                p=0.06
not strictly speaking significant                                       p=0.057
not technically significant                                             p=0.06
not that significant                                                    p=0.08
not to an extent that was fully statistically significant                p=0.06
not totally significant                                                 p=0.09
not unequivocally significant                                           p=0.055
not very definitely significant                                         p=0.08
not very definitely significant from the statistical point of view      p=0.08
not very far from significance                                          p<0.092
not very significant                                                    p=0.1
not very statistically significant                                      p=0.10
not wholly significant                                                  p>0.1
not yet significant                                                     p=0.09
not strongly significant                                                p=0.08
noticeably significant                                                   p=0.055
on the border of significance                                           p=0.063
on the borderline of significance                                       p=0.0699
on the borderlines of significance                                      p=0.08
on the boundaries of significance                                        p=0.056
on the boundary of significance                                          p=0.055
on the brink of significance                                            p=0.052
on the cusp of conventional statistical significance                    p=0.054
on the cusp of significance                                             p=0.058
on the edge of significance                                             p>0.08
on the limit to significant                                             p=0.06
on the margin of significance                                           p=0.051
on the threshold of significance                                        p=0.059
on the verge of significance                                            p=0.053
on the very fringes of significance                                      p=0.099
only a little short of significance                                     p>0.05
only just failed to meet statistical significance                       p=0.051
only just insignificant                                                 p>0.10
only marginally fails to be significant at the 95% level                p=0.06
only marginally nearly insignificant                                    p=0.059
only marginally significant                                             p=0.9
only slightly less than significant                                     p=0.08
only slightly missed the conventional threshold of significance         p=0.062
only slightly missed the level of significance                          p=0.058
only slightly missed the significance level                             p=0.0556
only slightly non-significant                                            p=0.0738
only slightly significant                                               p=0.08
partial significance                                                    p>0.09
partially significant                                                   p=0.08
partly significant                                                      p=0.08
perceivable statistical significance                                    p=0.0501
possible significance                                                   p>0.098
possibly marginally significant                                         p=0.116
possibly statistically significant                                      p=0.10
potentially significant                                                 p>0.1
practically significant                                                 p=0.06
probably not experimentally significant                                 p=0.2
probably not significant                                                p>0.25
probably not statistically significant                                  p=0.14
probably significant                                                    p=0.06
provisionally significant                                               p=0.073
quasi-significant                                                       p=0.09
questionably significant                                                p=0.13
quite close to significance at the 10% level                            p=0.104
quite significant                                                       p=0.07
rather marginal significance                                            p>0.10
reached borderline significance                                         p=0.0509
reached near significance                                               p=0.07
reasonably significant                                                  p=0.07
remarkably close to significance                                        p=0.05009
resides on the edge of significance                                     p=0.10
roughly significant                                                     p>0.1
significant tendency                                                    p=0.09
significant, or close to significant effects                            p=0.05
significantly better overall                                            p=0.051
significantly significant                                               p=0.065
similar but not nonsignificant trends                                    p>0.05
slight non-significance                                                 p=0.06
slight significance                                                     p=0.128
slight tendency toward significance                                     p=0.086
slightly above the level of significance                                 p=0.06
slightly below the level of significance                                 p=0.068
slightly exceeded significance level                                     p=0.06
slightly failed to reach statistical significance                        p=0.061
slightly insignificant                                                  p=0.07
slightly less than needed for significance                              p=0.08
slightly marginally significant                                         p=0.06
slightly missed being of statistical significance                       p=0.08
slightly missed statistical significance                                p=0.059
slightly missed the conventional level of significance                  p=0.061
slightly missed the level of statistical significance                   p<0.10
slightly missed the margin of significance                              p=0.051
slightly not significant                                                p=0.06
slightly outside conventional statistical significance                  p=0.051
slightly outside the margins of significance                            p=0.08
slightly outside the range of significance                              p=0.09
slightly outside the significance level                                 p=0.077
slightly outside the statistical significance level                     p=0.053
slightly significant                                                    p=0.09
somewhat marginally significant                                         p<0.055
somewhat short of significance                                          p=0.07
somewhat significant                                                    p=0.23
somewhat statistically significant                                      p=0.092
strong trend toward significance                                        p=0.08
sufficiently close to significance                                      p=0.07
suggestive but not quite significant                                    p=0.061
suggestive of a significant trend                                       p=0.08
suggestive of statistical significance                                  p=0.06
suggestively significant                                                p=0.064
tailed to insignificance                                                p=0.1
tantalisingly close to significance                                     p=0.104
technically not significant                                             p=0.06
teetering on the brink of significance                                  p=0.06
tend to significant                                                     p>0.1
tended to approach significance                                         p=0.09
tended to be significant                                                p=0.06
tended toward significance                                              p=0.13
tendency toward statistical significance                                p=0.07
tends to approach significance                                           p=0.12
tentatively significant                                                  p=0.107
too far from significance                                                p=0.12
trend bordering on statistical significance                             p=0.066
trend in a significant direction                                        p=0.09
trend in the direction of significance                                  p=0.089
trend significance level                                                p=0.06
trend toward                                                            p>0.07
trending towards significance                                           p>0.15
trending towards significant                                            p=0.099
uncertain significance                                                  p>0.07
vaguely significant                                                     p>0.2
verged on being significant                                             p=0.11
verging on significance                                                 p=0.056
verging on the statistically significant                                p<0.1
verging-on-significant                                                  p=0.06
very close to approaching significance                                  p=0.060
very close to significant                                               p=0.11
very close to the conventional level of significance                    p=0.055
very close to the cut-off for significance                              p=0.07
very close to the established statistical significance level of p=0.05  p=0.065
very close to the threshold of significance                             p=0.07
very closely approaches the conventional significance level             p=0.055
very closely brushed the limit of statistical significance              p=0.051
very narrowly missed significance                                       p<0.06
very nearly significant                                                 p=0.0656
very slightly non-significant                                           p=0.10
very slightly significant                                               p<0.1
virtually significant                                                   p=0.059
weak significance                                                       p>0.10
weakly non-significant                                                  p=0.07
weakly significant                                                      p=0.11
weakly statistically significant                                        p=0.0557
well-nigh significant                                                    p=0.11
Hankins, Matthew. "Still Not Significant." (2013)
https://mchankins.wordpress.com/2013/04/21/still-not-significant-2/
32 / 118
(3) Применяем статистические тесты

Попытка использования статистических тестов №1

33 / 118
(3) Применяем статистические тесты

Попытка использования статистических тестов №1

// Перед изменениями
Итерация 0000: 1.011 мин
Итерация 0001: 1.014 мин
Итерация 0002: 1.021 мин
Итерация 0003: 1.017 мин
...
Итерация 9999: 1.012 мин
33 / 118
(3) Применяем статистические тесты

Попытка использования статистических тестов №1

// Перед изменениями
Итерация 0000: 1.011 мин
Итерация 0001: 1.014 мин
Итерация 0002: 1.021 мин
Итерация 0003: 1.017 мин
...
Итерация 9999: 1.012 мин

// После изменений
Итерация 0000: 60.127 мин
33 / 118
(3) Применяем статистические тесты

Попытка использования статистических тестов №1

// Перед изменениями
Итерация 0000: 1.011 мин
Итерация 0001: 1.014 мин
Итерация 0002: 1.021 мин
Итерация 0003: 1.017 мин
...
Итерация 9999: 1.012 мин

// После изменений
Итерация 0000: 60.127 мин
🐙Менеджер : У нас есть перфомансная деградация?
33 / 118
(3) Применяем статистические тесты

Попытка использования статистических тестов №1

// Перед изменениями
Итерация 0000: 1.011 мин
Итерация 0001: 1.014 мин
Итерация 0002: 1.021 мин
Итерация 0003: 1.017 мин
...
Итерация 9999: 1.012 мин

// После изменений
Итерация 0000: 60.127 мин
🐙Менеджер : У нас есть перфомансная деградация?

🐵Перфоманс-инженер : Думаю, что есть, но это не точно.
33 / 118
(3) Применяем статистические тесты

Попытка использования статистических тестов №1

// Перед изменениями
Итерация 0000: 1.011 мин
Итерация 0001: 1.014 мин
Итерация 0002: 1.021 мин
Итерация 0003: 1.017 мин
...
Итерация 9999: 1.012 мин

// После изменений
Итерация 0000: 60.127 мин
🐙Менеджер : У нас есть перфомансная деградация?

🐵Перфоманс-инженер : Думаю, что есть, но это не точно.

👻Статистический тест : throw new DivideByZeroException("N should be > 1")
33 / 118
(3) Применяем статистические тесты

Попытка использования статистических тестов №2

34 / 118
(3) Применяем статистические тесты

Попытка использования статистических тестов №2

// Перед изменениями
Итерация 0000: 1.011 мин
Итерация 0001: 1.014 мин
Итерация 0002: 1.021 мин
Итерация 0003: 1.017 мин
...
Итерация 9999: 1.012 мин
34 / 118
(3) Применяем статистические тесты

Попытка использования статистических тестов №2

// Перед изменениями
Итерация 0000: 1.011 мин
Итерация 0001: 1.014 мин
Итерация 0002: 1.021 мин
Итерация 0003: 1.017 мин
...
Итерация 9999: 1.012 мин

// После изменений
Итерация 0000: 60.127 мин
Итерация 0001: 60.279 мин
Итерация 0002: 60.241 мин
34 / 118
(3) Применяем статистические тесты

Попытка использования статистических тестов №2

// Перед изменениями
Итерация 0000: 1.011 мин
Итерация 0001: 1.014 мин
Итерация 0002: 1.021 мин
Итерация 0003: 1.017 мин
...
Итерация 9999: 1.012 мин

// После изменений
Итерация 0000: 60.127 мин
Итерация 0001: 60.279 мин
Итерация 0002: 60.241 мин
🐙Менеджер : У нас есть перфомансная деградация?
34 / 118
(3) Применяем статистические тесты

Попытка использования статистических тестов №2

// Перед изменениями
Итерация 0000: 1.011 мин
Итерация 0001: 1.014 мин
Итерация 0002: 1.021 мин
Итерация 0003: 1.017 мин
...
Итерация 9999: 1.012 мин

// После изменений
Итерация 0000: 60.127 мин
Итерация 0001: 60.279 мин
Итерация 0002: 60.241 мин
🐙Менеджер : У нас есть перфомансная деградация?

🐵Перфоманс-инженер : Скорее всего.
34 / 118
(3) Применяем статистические тесты

Попытка использования статистических тестов №2

// Перед изменениями
Итерация 0000: 1.011 мин
Итерация 0001: 1.014 мин
Итерация 0002: 1.021 мин
Итерация 0003: 1.017 мин
...
Итерация 9999: 1.012 мин

// После изменений
Итерация 0000: 60.127 мин
Итерация 0001: 60.279 мин
Итерация 0002: 60.241 мин
🐙Менеджер : У нас есть перфомансная деградация?

🐵Перфоманс-инженер : Скорее всего.

💩Статистический тест : Нельзя отвергнуть нулевую гипотезу.
34 / 118
(3) Применяем статистические тесты

Попытка использования статистических тестов №3

35 / 118
(3) Применяем статистические тесты

Попытка использования статистических тестов №3

// Перед изменениями
public void Foo(object x)
{
// Некоторый код
}
// После изменений
public void Foo(object x)
{
if (x == null)
throw new NullReferenceException("x");
// Некоторый код
}
35 / 118
(3) Применяем статистические тесты

Попытка использования статистических тестов №3

// Перед изменениями
public void Foo(object x)
{
// Некоторый код
}
// После изменений
public void Foo(object x)
{
if (x == null)
throw new NullReferenceException("x");
// Некоторый код
}
🐙Менеджер : У нас есть перфомансная деградация?
35 / 118
(3) Применяем статистические тесты

Попытка использования статистических тестов №3

// Перед изменениями
public void Foo(object x)
{
// Некоторый код
}
// После изменений
public void Foo(object x)
{
if (x == null)
throw new NullReferenceException("x");
// Некоторый код
}
🐙Менеджер : У нас есть перфомансная деградация?

🐵Перфоманс-инженер : Конечно! Мы же нового кода добавили.
35 / 118
(3) Применяем статистические тесты

Попытка использования статистических тестов №3

// Перед изменениями
public void Foo(object x)
{
// Некоторый код
}
// После изменений
public void Foo(object x)
{
if (x == null)
throw new NullReferenceException("x");
// Некоторый код
}
🐙Менеджер : У нас есть перфомансная деградация?

🐵Перфоманс-инженер : Конечно! Мы же нового кода добавили.

💩Статистический тест : Нельзя отвергнуть нулевую гипотезу.
35 / 118
(3) Применяем статистические тесты

Попытка использования статистических тестов №3

// Перед изменениями
public void Foo(object x)
{
// Некоторый код
}
// После изменений
public void Foo(object x)
{
if (x == null)
throw new NullReferenceException("x");
// Некоторый код
}
🐙Менеджер : У нас есть перфомансная деградация?

🐵Перфоманс-инженер : Конечно! Мы же нового кода добавили.

💩Статистический тест : Нельзя отвергнуть нулевую гипотезу.

Мы задали неправильный вопрос!

35 / 118
(3) Применяем статистические тесты

Попытка использования статистических тестов №4

// Перед изменениями
public void Foo(object x)
{
// Некоторый код
}
// После изменений
public void Foo(object x)
{
if (x == null)
throw new NullReferenceException("x");
// Некоторый код
}
36 / 118
(3) Применяем статистические тесты

Попытка использования статистических тестов №4

// Перед изменениями
public void Foo(object x)
{
// Некоторый код
}
// После изменений
public void Foo(object x)
{
if (x == null)
throw new NullReferenceException("x");
// Некоторый код
}
🐙Менеджер : Насколько велика эта деградация?
36 / 118
(3) Применяем статистические тесты

Попытка использования статистических тестов №4

// Перед изменениями
public void Foo(object x)
{
// Некоторый код
}
// После изменений
public void Foo(object x)
{
if (x == null)
throw new NullReferenceException("x");
// Некоторый код
}
🐙Менеджер : Насколько велика эта деградация?

🙈Перфоманс-инженер : Очень маленькая, можно не обращать внимания.
36 / 118
(3) Применяем статистические тесты

Попытка использования статистических тестов №4

// Перед изменениями
public void Foo(object x)
{
// Некоторый код
}
// После изменений
public void Foo(object x)
{
if (x == null)
throw new NullReferenceException("x");
// Некоторый код
}
🐙Менеджер : Насколько велика эта деградация?

🙈Перфоманс-инженер : Очень маленькая, можно не обращать внимания.

👻Статистический тест : throw new InvalidOperationException(":(")
36 / 118
(3) Применяем статистические тесты

Награда по неврологии в 2012 году

Craig M. Bennett1 Abigail A. Baird2 Michael B. Miller1 George L. Wolford3
1Department of Psychology, University of California at Santa Barbara, Santa Barbara, CA 93106
2Department of Psychology, Blodgett Hall, Vassar College, Poughkeepsie, NY 12604
3Department of Psychological and Brain Sciences, Moore Hall, Dartmouth College, Hanover, NH03755
37 / 118
(3) Применяем статистические тесты

Функциональная МРТ мёртвого атлантического лосося

Bennet, C., A. Baird, M. Miller, and G. Wolford. "Neural correlates of interspecies perspective taking in the post-mortem Atlantic salmon: An argument for proper multiple comparisons correction."
Journal of Serendipitous and Unexpected Results 1, no. 1 (2010): 1-5.

38 / 118
(3) Применяем статистические тесты

Нужно запомнить

Статистические тесты
сложны для восприятия и использования 

39 / 118
(3) Применяем статистические тесты

Нужно запомнить

Статистические тесты
сложны для восприятия и использования;
обладают множеством скрытых ограничений 

39 / 118
(3) Применяем статистические тесты

Нужно запомнить

Статистические тесты
сложны для восприятия и использования;
обладают множеством скрытых ограничений;
не воспроизводимы 

39 / 118
(3) Применяем статистические тесты

Нужно запомнить

Статистические тесты
сложны для восприятия и использования;
обладают множеством скрытых ограничений;
не воспроизводимы;
отвечают не на тот вопрос 

39 / 118
(3) Применяем статистические тесты

Нужно запомнить

Статистические тесты
сложны для восприятия и использования;
обладают множеством скрытых ограничений;
не воспроизводимы;
отвечают не на тот вопрос;
...

39 / 118
(3) Применяем статистические тесты

Нужно запомнить

Статистические тесты
не нужны в перфоманс-анализе

40 / 118

Но если тесты на статистическую значимость не нужны,
то как распределения-то сравнивать?

41 / 118

Часть 4

Сравниваем перфомансные распределения

42 / 118
(4) Сравниваем перфомансные распределения

Ключевые слова для поиска

43 / 118
(4) Сравниваем перфомансные распределения

Сдвиг всего распределения

44 / 118
(4) Сравниваем перфомансные распределения

Сдвиг одной моды

45 / 118
(4) Сравниваем перфомансные распределения

Сдвиг двух мод

46 / 118
(4) Сравниваем перфомансные распределения

Функция сдвига

47 / 118
(4) Сравниваем перфомансные распределения

Функция сдвига

47 / 118
(4) Сравниваем перфомансные распределения

Функция сдвига

47 / 118
(4) Сравниваем перфомансные распределения

Функция сдвига

47 / 118
(4) Сравниваем перфомансные распределения

Функция сдвига

47 / 118
(4) Сравниваем перфомансные распределения

Функция сдвига

47 / 118
(4) Сравниваем перфомансные распределения

Функция сдвига

47 / 118
(4) Сравниваем перфомансные распределения

Функция сдвига

48 / 118
(4) Сравниваем перфомансные распределения

Функция пропорции

49 / 118
(4) Сравниваем перфомансные распределения

Сдвиг средней моды

50 / 118
(4) Сравниваем перфомансные распределения

Статистическое безобразие

51 / 118
(4) Сравниваем перфомансные распределения

Метрики в текстовом виде

| Метод | Пропорция |
|-------|-----------|
| A | Эталон |
| B | 1.5-3.0 |
| C | 1.2-1.4 |
| D | 1.2-1.3 |
52 / 118
(4) Сравниваем перфомансные распределения

Метрики в текстовом виде

| Метод | Пропорция |
|-------|-----------|
| A | Эталон |
| B | 1.5-3.0 |
| C | 1.2-1.4 |
| D | 1.2-1.3 |
🐙Менеджер : У нас точно есть все эти деградации?
52 / 118
(4) Сравниваем перфомансные распределения

Метрики в текстовом виде

| Метод | Пропорция |
|-------|-----------|
| A | Эталон |
| B | 1.5-3.0 |
| C | 1.2-1.4 |
| D | 1.2-1.3 |
🐙Менеджер : У нас точно есть все эти деградации?

🐵Перфоманс-инженер : (B,C) Скорее всего, данных довольно много.
52 / 118
(4) Сравниваем перфомансные распределения

Метрики в текстовом виде

| Метод | Пропорция |
|-------|-----------|
| A | Эталон |
| B | 1.5-3.0 |
| C | 1.2-1.4 |
| D | 1.2-1.3 |
🐙Менеджер : У нас точно есть все эти деградации?

🐵Перфоманс-инженер : (B,C) Скорее всего, данных довольно много.

🐵Перфоманс-инженер : (D) Непонятно, надо бы собрать больше данных.
52 / 118
(4) Сравниваем перфомансные распределения

Статистика должна быть дружелюбной

| Метод | Пропорция | Точно ли есть деградация? |
|-------|-----------|---------------------------|
| A | Эталон | |
| B | 1.5-3.0 | Скорее всего |
| C | 1.2-1.4 | Скорее всего |
| D | 1.2-1.3 | 🤷‍♀️ Нужно больше данных    |
53 / 118
(4) Сравниваем перфомансные распределения

Нужно запомнить

Не "деградировали ли мы?",
а "насколько мы деградировали?"

54 / 118

А если у меня есть история замеров?
Как в ней проблемы искать?

55 / 118

Часть 5

Анализируем историю замеров

56 / 118
(5) Анализируем историю замеров

Изменения бывают разными

57 / 118
(5) Анализируем историю замеров

Изменения бывают разными

57 / 118
(5) Анализируем историю замеров

Изменения бывают разными

57 / 118
(5) Анализируем историю замеров

Изменения бывают разными

57 / 118
(5) Анализируем историю замеров

Изменения бывают разными

57 / 118
(5) Анализируем историю замеров

Изменения бывают разными

57 / 118
(5) Анализируем историю замеров

Изменения бывают разными

57 / 118
(5) Анализируем историю замеров

Изменения бывают разными

57 / 118
(5) Анализируем историю замеров

Много разных алгоритмов

Truong, Charles, Laurent Oudre, and Nicolas Vayatis. "Selective review of offline change point detection methods." Signal Processing 167 (2020): 107299.

58 / 118
(5) Анализируем историю замеров

Хороший алгоритм: ED-PELT

Haynes, Kaylea, Paul Fearnhead, and Idris A. Eckley. "A computationally efficient nonparametric approach for changepoint detection." Statistics and Computing 27, no. 5 (2017): 1293-1305.

59 / 118
(5) Анализируем историю замеров

Динамическое программирование

60 / 118
(5) Анализируем историю замеров

Динамическое программирование

60 / 118
(5) Анализируем историю замеров

Динамическое программирование

60 / 118
(5) Анализируем историю замеров

Динамическое программирование

60 / 118
(5) Анализируем историю замеров

Динамическое программирование

60 / 118
(5) Анализируем историю замеров

Динамическое программирование

60 / 118
(5) Анализируем историю замеров

Динамическое программирование

60 / 118
(5) Анализируем историю замеров

Динамическое программирование

60 / 118
(5) Анализируем историю замеров

Динамическое программирование

60 / 118
(5) Анализируем историю замеров

Динамическое программирование

60 / 118
(5) Анализируем историю замеров

Динамическое программирование

60 / 118
(5) Анализируем историю замеров

Pruned exact linear time (PELT)

Killick, R., Fearnhead, P., Eckley, I.A. "Optimal detection of changepoints with a linear computational cost."
J. Am. Stat. Assoc. 107(500), 1590–1598 (2012)

61 / 118
(5) Анализируем историю замеров

Pruned exact linear time (PELT)

Killick, R., Fearnhead, P., Eckley, I.A. "Optimal detection of changepoints with a linear computational cost."
J. Am. Stat. Assoc. 107(500), 1590–1598 (2012)

61 / 118
(5) Анализируем историю замеров

Функция стоимости на эмпирическом распределении

62 / 118
(5) Анализируем историю замеров

Функция стоимости на эмпирическом распределении

Вводим обозначения:

данныеиндексыточекразладки

62 / 118
(5) Анализируем историю замеров

Функция стоимости на эмпирическом распределении

Вводим обозначения:

данныеиндексыточекразладки

Задаём эмпирическую функцию распределения:

62 / 118
(5) Анализируем историю замеров

Функция стоимости на эмпирическом распределении

Вводим обозначения:

данныеиндексыточекразладки

Задаём эмпирическую функцию распределения:

Задаём непараметрическую функцию максимального правдоподобия:

62 / 118
(5) Анализируем историю замеров

Функция стоимости на эмпирическом распределении

Считаем K квантилей по всей выборке:

63 / 118
(5) Анализируем историю замеров

Функция стоимости на эмпирическом распределении

Считаем K квантилей по всей выборке:

Назначаем штраф (модифицированный Байесовский информационный критерий):

63 / 118
(5) Анализируем историю замеров

Функция стоимости на эмпирическом распределении

Считаем K квантилей по всей выборке:

Назначаем штраф (модифицированный Байесовский информационный критерий):

Определяем функцию стоимости:

63 / 118
(5) Анализируем историю замеров

Запускаем ED-PELT короткой истории

64 / 118
(5) Анализируем историю замеров

Запускаем ED-PELT на длинной истории

65 / 118
(5) Анализируем историю замеров

Функция стоимости на пересечениях

66 / 118
(5) Анализируем историю замеров

Функция стоимости на пересечениях

66 / 118
(5) Анализируем историю замеров

Функция стоимости на пересечениях

66 / 118
(5) Анализируем историю замеров

Функция стоимости на пересечениях

66 / 118
(5) Анализируем историю замеров

Функция стоимости на пересечениях

66 / 118
(5) Анализируем историю замеров

Функция стоимости на пересечениях

66 / 118
(5) Анализируем историю замеров

Функция стоимости на пересечениях

67 / 118
(5) Анализируем историю замеров

Функция стоимости на пересечениях

67 / 118
(5) Анализируем историю замеров

Функция стоимости на пересечениях

67 / 118
(5) Анализируем историю замеров

Функция стоимости на пересечениях

67 / 118
(5) Анализируем историю замеров

Функция стоимости на пересечениях

67 / 118
(5) Анализируем историю замеров

Функция стоимости на пересечениях

68 / 118
(5) Анализируем историю замеров

Поиск квантилей на отрезке (RQQ)

Gagie, Travis, Simon J. Puglisi, and Andrew Turpin. "Range quantile queries: Another virtue of wavelet trees." In International Symposium on String Processing and Information Retrieval, pp. 1-6. Springer, Berlin, Heidelberg, 2009.

69 / 118
(5) Анализируем историю замеров

Сбалансированное вейвлет-дерево

┌─────────────────────┐
│ 6 2 0 7 9 3 1 8 5 4 │
│ │
└─────────────────────┘
70 / 118
(5) Анализируем историю замеров

Сбалансированное вейвлет-дерево

┌─────────────────────┐
6 2 0 7 9 3 1 8 5 4
│ │
└─────────────────────┘
70 / 118
(5) Анализируем историю замеров

Сбалансированное вейвлет-дерево

┌─────────────────────┐
6 2 0 7 9 3 1 8 5 4
R L L R R L L R R L
└─────────────────────┘
70 / 118
(5) Анализируем историю замеров

Сбалансированное вейвлет-дерево

┌─────────────────────┐
6 2 0 7 9 3 1 8 5 4
R L L R R L L R R L
───────────────────
┌──────────┴┐ ┌┴──────────┐
│ 2 0 3 1 4 │ │ 6 7 9 8 5 │
│ │ │ │
└───────────┘ └───────────┘
70 / 118
(5) Анализируем историю замеров

Сбалансированное вейвлет-дерево

┌─────────────────────┐
│ 6 2 0 7 9 3 1 8 5 4 │
│ R L L R R L L R R L │
└┬───────────────────┬┘
│ │
┌──────────┴┐ ┌┴──────────┐
2 0 3 1 4 │ │ 6 7 9 8 5
L L R L R │ │ L L R R L
└───────────┘ └───────────┘
70 / 118
(5) Анализируем историю замеров

Сбалансированное вейвлет-дерево

┌─────────────────────┐
│ 6 2 0 7 9 3 1 8 5 4 │
│ R L L R R L L R R L │
└┬───────────────────┬┘
│ │
┌──────────┴┐ ┌┴──────────┐
2 0 3 1 4 │ │ 6 7 9 8 5
L L R L R │ │ L L R R L
─────────┘ └─────────
┌─────┴─┐ ┌─┴───┐ ┌─────┴─┐ ┌─┴───┐
│ 2 0 1 │ │ 3 4 │ │ 6 7 5 │ │ 9 8 │
│ │ │ │ │ │ │ │
└───────┘ └─────┘ └───────┘ └─────┘
70 / 118
(5) Анализируем историю замеров

Сбалансированное вейвлет-дерево

┌─────────────────────┐
│ 6 2 0 7 9 3 1 8 5 4 │
│ R L L R R L L R R L │
└┬───────────────────┬┘
│ │
┌──────────┴┐ ┌┴──────────┐
│ 2 0 3 1 4 │ │ 6 7 9 8 5 │
│ L L R L R │ │ L L R R L │
└┬─────────┬┘ └┬─────────┬┘
│ │ │ │
┌─────┴─┐ ┌─┴───┐ ┌─────┴─┐ ┌─┴───┐
2 0 1 │ │ 3 4 │ │ 6 7 5 │ │ 9 8
R L L │ │ L R │ │ L R L │ │ R L
└───────┘ └─────┘ └───────┘ └─────┘
70 / 118
(5) Анализируем историю замеров

Сбалансированное вейвлет-дерево

┌─────────────────────┐
│ 6 2 0 7 9 3 1 8 5 4 │
│ R L L R R L L R R L │
└┬───────────────────┬┘
│ │
┌──────────┴┐ ┌┴──────────┐
│ 2 0 3 1 4 │ │ 6 7 9 8 5 │
│ L L R L R │ │ L L R R L │
└┬─────────┬┘ └┬─────────┬┘
│ │ │ │
┌─────┴─┐ ┌─┴───┐ ┌─────┴─┐ ┌─┴───┐
2 0 1 │ │ 3 4 │ │ 6 7 5 │ │ 9 8
R L L │ │ L R │ │ L R L │ │ R L
─────┘ └───┘ └─────┘ └───
┌────┴┐ ┌┴──┐ ┌──┴┐ ┌┴──┐ ┌────┴┐ ┌┴──┐ ┌──┴┐ ┌┴──┐
│ 0 1 │ │ 2 │ │ 3 │ │ 4 │ │ 6 5 │ │ 7 │ │ 8 │ │ 9 │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
└─────┘ └───┘ └───┘ └───┘ └─────┘ └───┘ └───┘ └───┘
70 / 118
(5) Анализируем историю замеров

Сбалансированное вейвлет-дерево

┌─────────────────────┐
│ 6 2 0 7 9 3 1 8 5 4 │
│ R L L R R L L R R L │
└┬───────────────────┬┘
│ │
┌──────────┴┐ ┌┴──────────┐
│ 2 0 3 1 4 │ │ 6 7 9 8 5 │
│ L L R L R │ │ L L R R L │
└┬─────────┬┘ └┬─────────┬┘
│ │ │ │
┌─────┴─┐ ┌─┴───┐ ┌─────┴─┐ ┌─┴───┐
│ 2 0 1 │ │ 3 4 │ │ 6 7 5 │ │ 9 8 │
│ R L L │ │ L R │ │ L R L │ │ R L │
└┬─────┬┘ └┬───┬┘ └┬─────┬┘ └┬───┬┘
│ │ │ │ │ │ │ │
┌────┴┐ ┌┴──┐ ┌──┴┐ ┌┴──┐ ┌────┴┐ ┌┴──┐ ┌──┴┐ ┌┴──┐
0 1 │ │ 2 │ │ 3 │ │ 4 │ │ 6 5 │ │ 7 │ │ 8 │ │ 9 │
L R │ │ │ │ │ │ │ │ R L │ │ │ │ │ │ │
└─────┘ └───┘ └───┘ └───┘ └─────┘ └───┘ └───┘ └───┘
70 / 118
(5) Анализируем историю замеров

Сбалансированное вейвлет-дерево

┌─────────────────────┐
│ 6 2 0 7 9 3 1 8 5 4 │
│ R L L R R L L R R L │
└┬───────────────────┬┘
│ │
┌──────────┴┐ ┌┴──────────┐
│ 2 0 3 1 4 │ │ 6 7 9 8 5 │
│ L L R L R │ │ L L R R L │
└┬─────────┬┘ └┬─────────┬┘
│ │ │ │
┌─────┴─┐ ┌─┴───┐ ┌─────┴─┐ ┌─┴───┐
│ 2 0 1 │ │ 3 4 │ │ 6 7 5 │ │ 9 8 │
│ R L L │ │ L R │ │ L R L │ │ R L │
└┬─────┬┘ └┬───┬┘ └┬─────┬┘ └┬───┬┘
│ │ │ │ │ │ │ │
┌────┴┐ ┌┴──┐ ┌──┴┐ ┌┴──┐ ┌────┴┐ ┌┴──┐ ┌──┴┐ ┌┴──┐
0 1 │ │ 2 │ │ 3 │ │ 4 │ │ 6 5 │ │ 7 │ │ 8 │ │ 9 │
L R │ │ │ │ │ │ │ │ R L │ │ │ │ │ │ │
───┘ └───┘ └───┘ └───┘ └───┘ └───┘ └───┘ └───┘
┌──┴┐ ┌┴──┐ ┌──┴┐ ┌┴──┐
│ 0 │ │ 1 │ │ 5 │ │ 6 │
│ │ │ │ │ │ │ │
└───┘ └───┘ └───┘ └───┘
70 / 118
(5) Анализируем историю замеров

Сбалансированное вейвлет-дерево

┌─────────────────────┐
│ 6 2 0 7 9 3 1 8 5 4 │
│ R L L R R L L R R L │
└┬───────────────────┬┘
│ │
┌──────────┴┐ ┌┴──────────┐
│ 2 0 3 1 4 │ │ 6 7 9 8 5 │
│ L L R L R │ │ L L R R L │
└┬─────────┬┘ └┬─────────┬┘
│ │ │ │
┌─────┴─┐ ┌─┴───┐ ┌─────┴─┐ ┌─┴───┐
│ 2 0 1 │ │ 3 4 │ │ 6 7 5 │ │ 9 8 │
│ R L L │ │ L R │ │ L R L │ │ R L │
└┬─────┬┘ └┬───┬┘ └┬─────┬┘ └┬───┬┘
│ │ │ │ │ │ │ │
┌────┴┐ ┌┴──┐ ┌──┴┐ ┌┴──┐ ┌────┴┐ ┌┴──┐ ┌──┴┐ ┌┴──┐
│ 0 1 │ │ 2 │ │ 3 │ │ 4 │ │ 6 5 │ │ 7 │ │ 8 │ │ 9 │
│ L R │ │ │ │ │ │ │ │ R L │ │ │ │ │ │ │
└┬───┬┘ └───┘ └───┘ └───┘ └┬───┬┘ └───┘ └───┘ └───┘
│ │ │ │
┌──┴┐ ┌┴──┐ ┌──┴┐ ┌┴──┐
│ 0 │ │ 1 │ │ 5 │ │ 6 │
│ │ │ │ │ │ │ │
└───┘ └───┘ └───┘ └───┘
70 / 118
(5) Анализируем историю замеров

Сбалансированное вейвлет-дерево

┌─────────────────────┐
6 2 0 7 9 3 1 8 5 4
│ R L L R R L L R R L │
└┬───────────────────┬┘
│ │
┌──────────┴┐ ┌┴──────────┐
│ 2 0 3 1 4 │ │ 6 7 9 8 5 │
│ L L R L R │ │ L L R R L │
└┬─────────┬┘ └┬─────────┬┘
│ │ │ │
┌─────┴─┐ ┌─┴───┐ ┌─────┴─┐ ┌─┴───┐
│ 2 0 1 │ │ 3 4 │ │ 6 7 5 │ │ 9 8 │
│ R L L │ │ L R │ │ L R L │ │ R L │
└┬─────┬┘ └┬───┬┘ └┬─────┬┘ └┬───┬┘
│ │ │ │ │ │ │ │
┌────┴┐ ┌┴──┐ ┌──┴┐ ┌┴──┐ ┌────┴┐ ┌┴──┐ ┌──┴┐ ┌┴──┐
│ 0 1 │ │ 2 │ │ 3 │ │ 4 │ │ 6 5 │ │ 7 │ │ 8 │ │ 9
│ L R │ │ │ │ │ │ │ │ R L │ │ │ │ │ │ │
└┬───┬┘ └───┘ └───┘ └───┘ └┬───┬┘ └───┘ └───┘ └───┘
│ │ │ │
┌──┴┐ ┌┴──┐ ┌──┴┐ ┌┴──┐
0 │ │ 1 │ │ 5 │ │ 6
│ │ │ │ │ │ │ │
└───┘ └───┘ └───┘ └───┘
70 / 118
(5) Анализируем историю замеров

Запускаем ED-PELT и RQQ-PELT

71 / 118
(5) Анализируем историю замеров

Как начать всё это использовать?

72 / 118
(5) Анализируем историю замеров

Как начать всё это использовать?

Фаза 1: Просто попробуйте

72 / 118
(5) Анализируем историю замеров

Как начать всё это использовать?

Фаза 1: Просто попробуйте

Фаза 2: Анализируйте ограничения

72 / 118
(5) Анализируем историю замеров

Как начать всё это использовать?

Фаза 1: Просто попробуйте

Фаза 2: Анализируйте ограничения

  • Сколько у вас тестов?
72 / 118
(5) Анализируем историю замеров

Как начать всё это использовать?

Фаза 1: Просто попробуйте

Фаза 2: Анализируйте ограничения

  • Сколько у вас тестов?

  • Сколько у вас замеров для каждого теста?

72 / 118
(5) Анализируем историю замеров

Как начать всё это использовать?

Фаза 1: Просто попробуйте

Фаза 2: Анализируйте ограничения

  • Сколько у вас тестов?

  • Сколько у вас замеров для каждого теста?

  • Какие изменения вы хотите находить?

72 / 118
(5) Анализируем историю замеров

Как начать всё это использовать?

Фаза 1: Просто попробуйте

Фаза 2: Анализируйте ограничения

  • Сколько у вас тестов?

  • Сколько у вас замеров для каждого теста?

  • Какие изменения вы хотите находить?

  • Сколько времени вы готовы тратить на поиск?

72 / 118
(5) Анализируем историю замеров

История про медленный NuGet-сервер

73 / 118
(5) Анализируем историю замеров

История про медленный NuGet-сервер

Andrey Akinshin. "A story about slow NuGet package browsing." (2018)
https://aakinshin.net/posts/nuget-package-browsing/

73 / 118
(5) Анализируем историю замеров

История про медленный NuGet-сервер

Andrey Akinshin. "A story about slow NuGet package browsing." (2018)
https://aakinshin.net/posts/nuget-package-browsing/

73 / 118
(5) Анализируем историю замеров

История про медленный NuGet-сервер

Andrey Akinshin. "A story about slow NuGet package browsing." (2018)
https://aakinshin.net/posts/nuget-package-browsing/

73 / 118
(5) Анализируем историю замеров

История про медленный NuGet-сервер

Andrey Akinshin. "A story about slow NuGet package browsing." (2018)
https://aakinshin.net/posts/nuget-package-browsing/

73 / 118
(5) Анализируем историю замеров

История про медленный NuGet-сервер

Andrey Akinshin. "A story about slow NuGet package browsing." (2018)
https://aakinshin.net/posts/nuget-package-browsing/

73 / 118
(5) Анализируем историю замеров

История про медленный NuGet-сервер

Andrey Akinshin. "A story about slow NuGet package browsing." (2018)
https://aakinshin.net/posts/nuget-package-browsing/

73 / 118
(5) Анализируем историю замеров

История про медленный NuGet-сервер

Andrey Akinshin. "A story about slow NuGet package browsing." (2018)
https://aakinshin.net/posts/nuget-package-browsing/

73 / 118
(5) Анализируем историю замеров

История про медленный NuGet-сервер

Andrey Akinshin. "A story about slow NuGet package browsing." (2018)
https://aakinshin.net/posts/nuget-package-browsing/

73 / 118
(5) Анализируем историю замеров

История про медленный NuGet-сервер

Andrey Akinshin. "A story about slow NuGet package browsing." (2018)
https://aakinshin.net/posts/nuget-package-browsing/

73 / 118
(5) Анализируем историю замеров

Нужно запомнить

Анализировать историю
полезно

74 / 118

У меня нашлось 600 точек разладки.
Что с ними делать?

75 / 118

Часть 6

Анализируем точки разладки

76 / 118
(6) Анализируем точки разладки

Сводная таблица

Худшие деградации

Тест Сдвиг (секунды) Пропорция
Test472 19.7..22.4 35.3..48.9
Test982 0.8.. 1.5 10.0..12.0
Test872 0.2.. 0.3 1.1.. 1.2
Test375 0.1.. 0.2 1.0.. 1.1
Test184 -0.1.. 0.0 0.9.. 1.0
Test592 -0.1.. 0.0 0.9.. 1.0
Test824 -0.1.. 0.0 0.9.. 1.0
Test294 -0.1.. 0.0 0.9.. 1.0
Test235 -0.1.. 0.0 0.9.. 1.0
Test948 -0.1.. 0.0 0.9.. 1.0
77 / 118
(6) Анализируем точки разладки

Сводные таблицы по целому распределению

78 / 118
(6) Анализируем точки разладки

Сводные таблицы по целому распределению

Дисперсия
78 / 118
(6) Анализируем точки разладки

Сводные таблицы по целому распределению

Дисперсия Мультимодальность
78 / 118
(6) Анализируем точки разладки

Сводные таблицы по целому распределению

Дисперсия Мультимодальность
Процентиль
78 / 118
(6) Анализируем точки разладки

Сводные таблицы по целому распределению

Дисперсия Мультимодальность
Процентиль Выбросы
78 / 118
(6) Анализируем точки разладки

Ищем разладки в реальной жизни

79 / 118
(6) Анализируем точки разладки

Ищем разладки в реальной жизни

79 / 118

В теории нет разницы между теорией и практикой. А на практике есть.

(6) Анализируем точки разладки

Ищем разладки в реальной жизни

79 / 118
(6) Анализируем точки разладки

Ищем разладки в реальной жизни

var changePoints = GetChangePoints(durations);
for (var cp in changePoints)
if (IsNotReported(cp))
SendAlarm(cp);
79 / 118
(6) Анализируем точки разладки

Ищем разладки в реальной жизни

var changePoints = GetChangePoints(durations);
for (var cp in changePoints)
if (IsNotReported(cp))
SendAlarm(cp);
79 / 118
(6) Анализируем точки разладки

Ищем разладки в реальной жизни

var changePoints = GetChangePoints(durations);
for (var cp in changePoints)
if (IsNotReported(cp))
SendAlarm(cp);
79 / 118
(6) Анализируем точки разладки

Ищем разладки в реальной жизни

var changePoints = GetChangePoints(durations);
for (var cp in changePoints)
if (IsNotReported(cp) && cp.Date.DayOfWeek != DayOfWeek.Saturday &&
cp.Date.DayOfWeek != DayOfWeek.Monday)
SendAlarm(cp);
79 / 118
(6) Анализируем точки разладки

Ищем разладки в реальной жизни

var changePoints = GetChangePoints(durations);
for (var cp in changePoints)
if (IsNotReported(cp) && cp.Date.DayOfWeek != DayOfWeek.Saturday &&
cp.Date.DayOfWeek != DayOfWeek.Monday)
SendAlarm(cp);
79 / 118
(6) Анализируем точки разладки

Ищем разладки в реальной жизни

var changePoints = GetChangePoints(durations);
for (var cp in changePoints)
if (IsNotReported(cp) && cp.Date.DayOfWeek != DayOfWeek.Saturday &&
cp.Date.DayOfWeek != DayOfWeek.Monday)
SendAlarm(cp);
79 / 118
(6) Анализируем точки разладки

Смотрим на железо

80 / 118
(6) Анализируем точки разладки

Смотрим на железо

80 / 118
(6) Анализируем точки разладки

Смотрим на железо

80 / 118
(6) Анализируем точки разладки

Смотрим на железо

80 / 118
(6) Анализируем точки разладки

Смотрим на железо

80 / 118
(6) Анализируем точки разладки

Смотрим на железо

80 / 118
(6) Анализируем точки разладки

Строим модель нагрузки

81 / 118
(6) Анализируем точки разладки

Строим модель нагрузки

81 / 118
(6) Анализируем точки разладки

Строим модель нагрузки

81 / 118
(6) Анализируем точки разладки

Строим модель нагрузки

81 / 118
(6) Анализируем точки разладки

Строим модель нагрузки

81 / 118
(6) Анализируем точки разладки

Строим модель нагрузки

81 / 118
(6) Анализируем точки разладки

Строим модель нагрузки

81 / 118
(6) Анализируем точки разладки

Строим модель нагрузки

81 / 118
(6) Анализируем точки разладки

Строим модель нагрузки

81 / 118
(6) Анализируем точки разладки

Строим модель нагрузки

81 / 118
(6) Анализируем точки разладки

Строим модель нагрузки

81 / 118
(6) Анализируем точки разладки

Строим модель нагрузки

81 / 118
(6) Анализируем точки разладки

Строим модель нагрузки

81 / 118
(6) Анализируем точки разладки

Строим модель нагрузки

81 / 118
(6) Анализируем точки разладки

Строим модель нагрузки

81 / 118
(6) Анализируем точки разладки

Строим модель нагрузки

81 / 118
(6) Анализируем точки разладки

Строим модель нагрузки

81 / 118
(6) Анализируем точки разладки

Строим модель нагрузки

81 / 118
(6) Анализируем точки разладки

Строим модель нагрузки

81 / 118
(6) Анализируем точки разладки

Строим модель нагрузки

81 / 118
(6) Анализируем точки разладки

Строим модель нагрузки

81 / 118
(6) Анализируем точки разладки

Нужно запомнить

Не используйте магические числа,
используйте сортировку

82 / 118

Не хочу узнавать о деградациях спустя неделю, хочу узнавать о них сразу!

83 / 118

Часть 7

Пишем перфомансные тесты

84 / 118
(7) Пишем перфомансные тесты

Абсолютное условие

85 / 118
(7) Пишем перфомансные тесты

Абсолютное условие

[Test, Timeout(2000)]
public void Benchmark()
{
// ...
}
85 / 118
(7) Пишем перфомансные тесты

Относительное условие

86 / 118
(7) Пишем перфомансные тесты

Относительное условие

private long baseline;
public void Baseline()
{
var sw = Stopwatch.StartNew();
// ...
sw.Stop();
baseline = sw.ElapsedMilliseconds;
}
86 / 118
(7) Пишем перфомансные тесты

Относительное условие

private long baseline;
public void Baseline()
{
var sw = Stopwatch.StartNew();
// ...
sw.Stop();
baseline = sw.ElapsedMilliseconds;
}
public void Benchmark()
{
var sw = Stopwatch.StartNew();
// ...
sw.Stop();
if (sw.ElapsedMilliseconds / baseline > 2)
Assert.Fail();
}
86 / 118
(7) Пишем перфомансные тесты

Адаптивное условие

87 / 118
(7) Пишем перфомансные тесты

Адаптивное условие

public void Benchmark(string name)
{
⠀⠀⠀⠀
⠀⠀⠀⠀
⠀⠀⠀⠀
⠀⠀⠀⠀
⠀⠀⠀⠀
⠀⠀⠀⠀
}
87 / 118
(7) Пишем перфомансные тесты

Адаптивное условие

public void Benchmark(string name)
{
var history = LoadHistoryFromDatabase(name);
⠀⠀⠀⠀
⠀⠀⠀⠀
⠀⠀⠀⠀
⠀⠀⠀⠀
⠀⠀⠀⠀
}
87 / 118
(7) Пишем перфомансные тесты

Адаптивное условие

public void Benchmark(string name)
{
var history = LoadHistoryFromDatabase(name);
var current = new List<double>();
for (int i = 0; i < N; i++)
current.Add(Measure(name));
⠀⠀⠀⠀
⠀⠀⠀⠀
}
87 / 118
(7) Пишем перфомансные тесты

Адаптивное условие

public void Benchmark(string name)
{
var history = LoadHistoryFromDatabase(name);
var current = new List<double>();
for (int i = 0; i < N; i++)
current.Add(Measure(name));
if (HasDegradation(history, current))
Assert.Fail();
}
87 / 118
(7) Пишем перфомансные тесты

Статистический последовательный анализ

88 / 118
(7) Пишем перфомансные тесты

Статистический последовательный анализ

88 / 118
(7) Пишем перфомансные тесты

Статистический последовательный анализ

88 / 118
(7) Пишем перфомансные тесты

Статистический последовательный анализ

88 / 118
(7) Пишем перфомансные тесты

Статистический последовательный анализ

88 / 118
(7) Пишем перфомансные тесты

Статистический последовательный анализ

88 / 118
(7) Пишем перфомансные тесты

Статистический последовательный анализ

88 / 118
(7) Пишем перфомансные тесты

Статистический последовательный анализ

88 / 118
(7) Пишем перфомансные тесты

Как принять решение? (Пример)

89 / 118
(7) Пишем перфомансные тесты

Как принять решение? (Пример)

89 / 118
(7) Пишем перфомансные тесты

Как принять решение? (Пример)

89 / 118
(7) Пишем перфомансные тесты

Как принять решение? (Пример)

89 / 118
(7) Пишем перфомансные тесты

Как принять решение? (Пример)

89 / 118
(7) Пишем перфомансные тесты

Как принять решение? (Пример)

89 / 118
(7) Пишем перфомансные тесты

Как принять решение? (Пример)

89 / 118
(7) Пишем перфомансные тесты

Как принять решение? (Пример)

89 / 118
(7) Пишем перфомансные тесты

Как принять решение? (Пример)

89 / 118
(7) Пишем перфомансные тесты

Как принять решение? (Пример)

89 / 118
(7) Пишем перфомансные тесты

Как принять решение? (Пример)

89 / 118
(7) Пишем перфомансные тесты

Как принять решение? (Пример)

89 / 118
(7) Пишем перфомансные тесты

Реальная жизнь

90 / 118
(7) Пишем перфомансные тесты

Реальная жизнь

90 / 118
(7) Пишем перфомансные тесты

Реальная жизнь

90 / 118
(7) Пишем перфомансные тесты

Реальная жизнь

90 / 118
(7) Пишем перфомансные тесты

Реальная жизнь

90 / 118
(7) Пишем перфомансные тесты

Нужно запомнить

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

91 / 118

Звучит сложно, вряд ли сходу получится это внедрить на нашем проекте.

92 / 118

Часть 8

Допускаем много ошибок

93 / 118
(8) Допускаем много ошибок

Томас Уотсон старший

94 / 118
(8) Допускаем много ошибок

Ошибки были допущены

95 / 118
(8) Допускаем много ошибок

Написание постмортемов

96 / 118
(8) Допускаем много ошибок

Написание постмортемов

96 / 118
(8) Допускаем много ошибок

Кросс-бенчмаркинг

97 / 118
(8) Допускаем много ошибок

Кросс-бенчмаркинг

97 / 118
(8) Допускаем много ошибок

Кросс-бенчмаркинг

97 / 118
(8) Допускаем много ошибок

Полезные советы

98 / 118
(8) Допускаем много ошибок

Полезные советы

  • Не стесняйтесь допускать ошибки
98 / 118
(8) Допускаем много ошибок

Полезные советы

  • Не стесняйтесь допускать ошибки

  • Не стесняйтесь признавать ошибки

98 / 118
(8) Допускаем много ошибок

Полезные советы

  • Не стесняйтесь допускать ошибки

  • Не стесняйтесь признавать ошибки

  • Пишите постмортемы

98 / 118
(8) Допускаем много ошибок

Полезные советы

  • Не стесняйтесь допускать ошибки

  • Не стесняйтесь признавать ошибки

  • Пишите постмортемы

  • Используйте кросс-бенчмаркинг

98 / 118
(8) Допускаем много ошибок

Полезные советы

  • Не стесняйтесь допускать ошибки

  • Не стесняйтесь признавать ошибки

  • Пишите постмортемы

  • Используйте кросс-бенчмаркинг

  • Получайте удовольствие от ошибок

98 / 118
(8) Допускаем много ошибок

Полезные советы

  • Не стесняйтесь допускать ошибки

  • Не стесняйтесь признавать ошибки

  • Пишите постмортемы

  • Используйте кросс-бенчмаркинг

  • Получайте удовольствие от ошибок

Самая волнующая фраза, какую можно услышать в науке,
вовсе не «Эврика!», а «Это забавно…»

— Айзек Азимов1

1https://quoteinvestigator.com/2015/03/02/eureka-funny/

98 / 118
(8) Допускаем много ошибок

Карл Поппер

99 / 118

Однажды у Карла Поппера спросили, можно ли «фальсифицировать фальсификацию». То есть можно ли проявить скептицизм по отношению к самой концепции скептицизма. Карл Поппер ответил, что выгонял студентов с лекций и за менее тупые вопросы.

(8) Допускаем много ошибок

Нужно запомнить

Допускать ошибки —
это круто!

100 / 118

Я одну половину доклада не запомнил, а другую не понял.
Что бы мне почитать на тему
перфоманс-анализа?

101 / 118

Часть 9

Читаем методическую литературу

102 / 118
(9) Читаем методическую литературу

Хорошие книжки

103 / 118
(9) Читаем методическую литературу

Про способность находить закономерности

104 / 118
(9) Читаем методическую литературу

Про статистические тесты

105 / 118
(9) Читаем методическую литературу

Про cтатистический последовательный анализ

  • Lakens, Daniël. "Performing high‐powered studies efficiently with sequential analyses." European Journal of Social Psychology 44, no. 7 (2014): 701-710.
    http://doi.wiley.com/10.1002/ejsp.2023
106 / 118
(9) Читаем методическую литературу

Про размер эффекта

107 / 118
(9) Читаем методическую литературу

Про функцию сдвига

108 / 118
(9) Читаем методическую литературу

Про разладку

109 / 118
(9) Читаем методическую литературу

Про k-й наименьший элемент

  • Gagie, Travis, Simon J. Puglisi, and Andrew Turpin. "Range quantile queries: Another virtue of wavelet trees." In International Symposium on String Processing and Information Retrieval, pp. 1-6. Springer, Berlin, Heidelberg, 2009.
    https://arxiv.org/pdf/0903.4726.pdf
  • Alexandrescu, Andrei. "Fast deterministic selection." arXiv preprint arXiv:1606.00484 (2016).
    http://erdani.com/research/sea2017.pdf
110 / 118
(9) Читаем методическую литературу

Про квантильные оценки

111 / 118
(9) Читаем методическую литературу

Как не надо делать

112 / 118
(9) Читаем методическую литературу

Как не надо делать

112 / 118
(9) Читаем методическую литературу

Как не надо делать

112 / 118
(9) Читаем методическую литературу

Нужно запомнить

Никогда не переставайте
изучать

113 / 118

Я устал.
Давай заканчивать, нужно передохнуть.

114 / 118

Часть 10

Резюмируем изученную информацию

115 / 118
(10) Резюмируем изученную информацию

Советы перфоманс-инженерам

116 / 118
(10) Резюмируем изученную информацию

Советы перфоманс-инженерам

Образовывайтесь
116 / 118
(10) Резюмируем изученную информацию

Советы перфоманс-инженерам

Образовывайтесь Анализируйте
116 / 118
(10) Резюмируем изученную информацию

Советы перфоманс-инженерам

Образовывайтесь Анализируйте Адаптируйтесь
116 / 118
(10) Резюмируем изученную информацию

Советы перфоманс-инженерам

Образовывайтесь Анализируйте Адаптируйтесь
Сомневайтесь
116 / 118
(10) Резюмируем изученную информацию

Советы перфоманс-инженерам

Образовывайтесь Анализируйте Адаптируйтесь
Сомневайтесь Думайте
116 / 118
(10) Резюмируем изученную информацию

Советы перфоманс-инженерам

Образовывайтесь Анализируйте Адаптируйтесь
Сомневайтесь Думайте Ошибайтесь
116 / 118
(10) Резюмируем изученную информацию

Советы любым инженерам

Образовывайтесь Анализируйте Адаптируйтесь
Сомневайтесь Думайте Ошибайтесь
116 / 118
Титры Главные герои
Перфолозавр
Перфолитка
Менеджер🐙
Перфоманс-инженер🐵
Статистические тесты👻💩
Визуальное оформление

Создание презентации

Графики и иллюстрации

Основные шрифты

Оборудование для эксперимента с термальным троттлингом

  • MacBook Pro (Retina, 15-inch, Mid 2015, 2,5 GHz Quad-Core Intel Core i7, 16 GB 1600 MHz DDR3)
  • Тепловентилятор керамический Vitek VT-2052
  • Плед ИГАБРИТТА из IKEA
  • Холодильник NEFF
  • Тепловизор Seek Thermal Compact для Android

Используемые и упомянутые интернет-ресурсы

Музыка

Источники фотографий

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

  • Иван Пащенко
  • Алина Смирнова
  • Константин Хоматьяно
  • Сергей Кукс

Вдходновение для иллюстраций

Библиография

Хорошие инструменты

Организаторы конференции
© 2020 Андрей Акиньшин | CC BY-NC-SA 4.0
118 / 118

Типичный день перфоманс-инженера

2 / 118
Paused

Help

Keyboard shortcuts

, , Pg Up, k Go to previous slide
, , Pg Dn, Space, j Go to next slide
Home Go to first slide
End Go to last slide
Number + Return Go to specific slide
b / m / f Toggle blackout / mirrored / fullscreen mode
c Clone slideshow
p Toggle presenter mode
t Restart the presentation timer
?, h Toggle this help
Esc Back to slideshow