Анализ распределений | |
Анализ распределений | Сравнение бенчмарков |
Анализ распределений | Сравнение бенчмарков |
Анализ истории |
Анализ распределений | Сравнение бенчмарков |
Анализ истории | Перфоманс-тесты |
Задачка: если у нас есть 10'000 тестов, то какова вероятность получить такую картинку хотя бы в одном из них?
Предположим, что форма распределения известна:
Предположим, что форма распределения известна:
Вероятность появления "плохой" картинки:
Предположим, что форма распределения известна:
Вероятность появления "плохой" картинки:
Вероятность появления хотя бы одной "плохой" картинки из 10'000:
Tversky, Amos, and Daniel Kahneman. "Belief in the law of small numbers." Psychological bulletin 76, no. 2 (1971): 105
![]() |
![]() |
|
Процент угадываний: 20-30% |
И тогда я пошёл к руководителю всего нашего .NET-отдела и попросил порешать те же самые перфомансные задачки (драматическая пауза) его кошку.
![]() |
![]() |
Процент угадываний: 20-30% |
![]() |
![]() |
Процент угадываний: 20-30% |
![]() |
![]() |
Процент угадываний: 20-30% |
![]() |
![]() |
Процент угадываний: 20-30% | Процент угадываний: 45-55% |
![]() |
![]() |
Процент угадываний: 20-30% | Процент угадываний: 45-55% |
![]() |
![]() |
Процент угадываний: 20-30% | Процент угадываний: 45-55% |
Сырые данные
контринтуитивны и обманчивы
Но если пользоваться интуицией опасно,
то как правильно изучать данные?
Нормальность — это миф; никогда не было и никогда не будет ни одного нормального распределения.
"Testing for normality", R.C. Geary, 1947
| Метод | Среднее | Стандартное отклонение | Медиана ||-------|----------|------------------------|----------|| A | 136.2 мс | 56.92 мс | 107.0 мс || B | 133.7 мс | 12.20 мс | 130.2 мс |
| Метод | Среднее | Стандартное отклонение | Медиана ||-------|----------|------------------------|----------|| A | 136.2 мс | 56.92 мс | 107.0 мс || B | 133.7 мс | 12.20 мс | 130.2 мс |
| Метод | Среднее | Стандартное отклонение | Медиана ||-------|----------|------------------------|----------|| A | 136.2 мс | 56.92 мс | 107.0 мс || B | 133.7 мс | 12.20 мс | 130.2 мс |
|
Anscombe, Francis J. "Graphs in statistical analysis." The american statistician 27, no. 1 (1973): 17-21.
|
|
Anscombe, Francis J. "Graphs in statistical analysis." The american statistician 27, no. 1 (1973): 17-21.
Anscombe, Francis J. "Graphs in statistical analysis." The american statistician 27, no. 1 (1973): 17-21.
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
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
| Метод | Интервал ||-------|--------------|| A | 100мс..200мс || B | 120мс..150мс || C | 400мс..900мс |
| Метод | Интервал | Заметки ||-------|--------------|---------------------|| A | 100мс..200мс | Большие выбросы || B | 120мс..150мс | || C | 400мс..900мс | |
| Метод | Интервал | Заметки ||-------|--------------|---------------------|| A | 100мс..200мс | Большие выбросы^1 || B | 120мс..150мс | || C | 400мс..900мс | |^1 Выбросы: 327мс, 364мс, 396мс
| Метод | Интервал | Заметки ||-------|--------------|---------------------|| A | 100мс..200мс | Большие выбросы^1 || B | 120мс..150мс | Маленькая выборка || C | 400мс..900мс | |^1 Выбросы: 327мс, 364мс, 396мс
| Метод | Интервал | Заметки ||-------|--------------|---------------------|| A | 100мс..200мс | Большие выбросы^1 || B | 120мс..150мс | Маленькая выборка^2 || C | 400мс..900мс | |^1 Выбросы: 327мс, 364мс, 396мс^2 Размер выборки: 3 замера
| Метод | Интервал | Заметки ||-------|--------------|---------------------|| A | 100мс..200мс | Большие выбросы^1 || B | 120мс..150мс | Маленькая выборка^2 || C | 400мс..900мс | Мультимодальность |^1 Выбросы: 327мс, 364мс, 396мс^2 Размер выборки: 3 замера
| Метод | Интервал | Заметки ||-------|--------------|---------------------|| A | 100мс..200мс | Большие выбросы^1 || B | 120мс..150мс | Маленькая выборка^2 || C | 400мс..900мс | Мультимодальность^3 |^1 Выбросы: 327мс, 364мс, 396мс^2 Размер выборки: 3 замера^3 Интервалы: [400мс..450мс] и [850мс..900мс]
Планировщик ОС | ||
Планировщик ОС | Многопоточность | |
Планировщик ОС | Многопоточность | Выравнивание |
Планировщик ОС | Многопоточность | Выравнивание |
Кэш процессора |
Планировщик ОС | Многопоточность | Выравнивание |
Кэш процессора | Изменение частоты CPU |
Планировщик ОС | Многопоточность | Выравнивание |
Кэш процессора | Изменение частоты CPU | Термальный троттлинг |
![]() |
||
![]() |
![]() |
![]() |
|
![]() |
![]() |
![]() |
![]() |
|
![]() |
![]() |
![]() |
![]() |
|
![]() |
![]() |
|
Статистика
должна быть дружелюбной
Допустим я разобрался со всеми этими метриками.
Как мне два бенчмарка-то сравнить?
Самые главные ошибки
Самые главные ошибки
Самые главные ошибки
Ошибка первого рода : деградации нет, а мы решили, что есть
Ошибка второго рода : деградация есть, а мы решили, что нет
Самые главные ошибки
Ошибка первого рода : деградации нет, а мы решили, что есть
Ошибка второго рода : деградация есть, а мы решили, что нет
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.
Самые главные ошибки
Ошибка первого рода : деградации нет, а мы решили, что есть
Ошибка второго рода : деградация есть, а мы решили, что нет
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.
Вероятности
Самые главные ошибки
Ошибка первого рода : деградации нет, а мы решили, что есть
Ошибка второго рода : деградация есть, а мы решили, что нет
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.
Вероятности
Самые главные ошибки
Ошибка первого рода : деградации нет, а мы решили, что есть
Ошибка второго рода : деградация есть, а мы решили, что нет
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)
Самые главные ошибки
Ошибка первого рода : деградации нет, а мы решили, что есть
Ошибка второго рода : деградация есть, а мы решили, что нет
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)
Ошибка третьего рода : большая вероятность
Fisher RA. The Design of Experiments, Edinburgh: Oliver and Boyd. 1935. Pages 15–16
Fisher RA. The Design of Experiments, Edinburgh: Oliver and Boyd. 1935. Pages 15–16
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
Cohen, Jacob. Statistical power analysis for the behavioral sciences. No. 300.72 C6. 1988. Page 56
Cohen, Jacob. Statistical power analysis for the behavioral sciences. No. 300.72 C6. 1988. Page 56
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
(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.11Hankins, Matthew. "Still Not Significant." (2013)
// Перед изменениямиИтерация 0000: 1.011 минИтерация 0001: 1.014 минИтерация 0002: 1.021 минИтерация 0003: 1.017 мин...Итерация 9999: 1.012 мин
// Перед изменениямиИтерация 0000: 1.011 минИтерация 0001: 1.014 минИтерация 0002: 1.021 минИтерация 0003: 1.017 мин...Итерация 9999: 1.012 мин
// После измененийИтерация 0000: 60.127 мин
// Перед изменениямиИтерация 0000: 1.011 минИтерация 0001: 1.014 минИтерация 0002: 1.021 минИтерация 0003: 1.017 мин...Итерация 9999: 1.012 мин
// После измененийИтерация 0000: 60.127 мин
🐙Менеджер : У нас есть перфомансная деградация?
// Перед изменениямиИтерация 0000: 1.011 минИтерация 0001: 1.014 минИтерация 0002: 1.021 минИтерация 0003: 1.017 мин...Итерация 9999: 1.012 мин
// После измененийИтерация 0000: 60.127 мин
🐙Менеджер : У нас есть перфомансная деградация?
🐵Перфоманс-инженер : Думаю, что есть, но это не точно.
// Перед изменениямиИтерация 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")
// Перед изменениямиИтерация 0000: 1.011 минИтерация 0001: 1.014 минИтерация 0002: 1.021 минИтерация 0003: 1.017 мин...Итерация 9999: 1.012 мин
// Перед изменениямиИтерация 0000: 1.011 минИтерация 0001: 1.014 минИтерация 0002: 1.021 минИтерация 0003: 1.017 мин...Итерация 9999: 1.012 мин
// После измененийИтерация 0000: 60.127 минИтерация 0001: 60.279 минИтерация 0002: 60.241 мин
// Перед изменениямиИтерация 0000: 1.011 минИтерация 0001: 1.014 минИтерация 0002: 1.021 минИтерация 0003: 1.017 мин...Итерация 9999: 1.012 мин
// После измененийИтерация 0000: 60.127 минИтерация 0001: 60.279 минИтерация 0002: 60.241 мин
🐙Менеджер : У нас есть перфомансная деградация?
// Перед изменениямиИтерация 0000: 1.011 минИтерация 0001: 1.014 минИтерация 0002: 1.021 минИтерация 0003: 1.017 мин...Итерация 9999: 1.012 мин
// После измененийИтерация 0000: 60.127 минИтерация 0001: 60.279 минИтерация 0002: 60.241 мин
🐙Менеджер : У нас есть перфомансная деградация?
🐵Перфоманс-инженер : Скорее всего.
// Перед изменениямиИтерация 0000: 1.011 минИтерация 0001: 1.014 минИтерация 0002: 1.021 минИтерация 0003: 1.017 мин...Итерация 9999: 1.012 мин
// После измененийИтерация 0000: 60.127 минИтерация 0001: 60.279 минИтерация 0002: 60.241 мин
🐙Менеджер : У нас есть перфомансная деградация?
🐵Перфоманс-инженер : Скорее всего.
💩Статистический тест : Нельзя отвергнуть нулевую гипотезу.
// Перед изменениямиpublic void Foo(object x){ // Некоторый код}
// После измененийpublic void Foo(object x){ if (x == null) throw new NullReferenceException("x"); // Некоторый код}
// Перед изменениямиpublic void Foo(object x){ // Некоторый код}
// После измененийpublic void Foo(object x){ if (x == null) throw new NullReferenceException("x"); // Некоторый код}
🐙Менеджер : У нас есть перфомансная деградация?
// Перед изменениямиpublic void Foo(object x){ // Некоторый код}
// После измененийpublic void Foo(object x){ if (x == null) throw new NullReferenceException("x"); // Некоторый код}
🐙Менеджер : У нас есть перфомансная деградация?
🐵Перфоманс-инженер : Конечно! Мы же нового кода добавили.
// Перед изменениямиpublic void Foo(object x){ // Некоторый код}
// После измененийpublic void Foo(object x){ if (x == null) throw new NullReferenceException("x"); // Некоторый код}
🐙Менеджер : У нас есть перфомансная деградация?
🐵Перфоманс-инженер : Конечно! Мы же нового кода добавили.
💩Статистический тест : Нельзя отвергнуть нулевую гипотезу.
// Перед изменениямиpublic void Foo(object x){ // Некоторый код}
// После измененийpublic void Foo(object x){ if (x == null) throw new NullReferenceException("x"); // Некоторый код}
🐙Менеджер : У нас есть перфомансная деградация?
🐵Перфоманс-инженер : Конечно! Мы же нового кода добавили.
💩Статистический тест : Нельзя отвергнуть нулевую гипотезу.
Мы задали неправильный вопрос!
// Перед изменениямиpublic void Foo(object x){ // Некоторый код}
// После измененийpublic void Foo(object x){ if (x == null) throw new NullReferenceException("x"); // Некоторый код}
// Перед изменениямиpublic void Foo(object x){ // Некоторый код}
// После измененийpublic void Foo(object x){ if (x == null) throw new NullReferenceException("x"); // Некоторый код}
🐙Менеджер : Насколько велика эта деградация?
// Перед изменениямиpublic void Foo(object x){ // Некоторый код}
// После измененийpublic void Foo(object x){ if (x == null) throw new NullReferenceException("x"); // Некоторый код}
🐙Менеджер : Насколько велика эта деградация?
🙈Перфоманс-инженер : Очень маленькая, можно не обращать внимания.
// Перед изменениямиpublic void Foo(object x){ // Некоторый код}
// После измененийpublic void Foo(object x){ if (x == null) throw new NullReferenceException("x"); // Некоторый код}
🐙Менеджер : Насколько велика эта деградация?
🙈Перфоманс-инженер : Очень маленькая, можно не обращать внимания.
👻Статистический тест : throw new InvalidOperationException(":(")
![]() |
![]() |
![]() |
![]() |
Craig M. Bennett1 | Abigail A. Baird2 | Michael B. Miller1 | George L. Wolford3 |
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.
Статистические тесты
сложны для восприятия и использования
Статистические тесты
сложны для восприятия и использования;
обладают множеством скрытых ограничений
Статистические тесты
сложны для восприятия и использования;
обладают множеством скрытых ограничений;
не воспроизводимы
Статистические тесты
сложны для восприятия и использования;
обладают множеством скрытых ограничений;
не воспроизводимы;
отвечают не на тот вопрос
Статистические тесты
сложны для восприятия и использования;
обладают множеством скрытых ограничений;
не воспроизводимы;
отвечают не на тот вопрос;
...
Статистические тесты
не нужны в перфоманс-анализе
Но если тесты на статистическую значимость не нужны,
то как распределения-то сравнивать?
| Метод | Пропорция ||-------|-----------|| A | Эталон || B | 1.5-3.0 || C | 1.2-1.4 || D | 1.2-1.3 |
| Метод | Пропорция ||-------|-----------|| A | Эталон || B | 1.5-3.0 || C | 1.2-1.4 || D | 1.2-1.3 |
🐙Менеджер : У нас точно есть все эти деградации?
| Метод | Пропорция ||-------|-----------|| A | Эталон || B | 1.5-3.0 || C | 1.2-1.4 || D | 1.2-1.3 |
🐙Менеджер : У нас точно есть все эти деградации?
🐵Перфоманс-инженер : (B,C) Скорее всего, данных довольно много.
| Метод | Пропорция ||-------|-----------|| A | Эталон || B | 1.5-3.0 || C | 1.2-1.4 || D | 1.2-1.3 |
🐙Менеджер : У нас точно есть все эти деградации?
🐵Перфоманс-инженер : (B,C) Скорее всего, данных довольно много.
🐵Перфоманс-инженер : (D) Непонятно, надо бы собрать больше данных.
| Метод | Пропорция | Точно ли есть деградация? ||-------|-----------|---------------------------|| A | Эталон | || B | 1.5-3.0 | Скорее всего || C | 1.2-1.4 | Скорее всего || D | 1.2-1.3 | 🤷♀️ Нужно больше данных |
Не "деградировали ли мы?",
а "насколько мы деградировали?"
А если у меня есть история замеров?
Как в ней проблемы искать?
Truong, Charles, Laurent Oudre, and Nicolas Vayatis. "Selective review of offline change point detection methods." Signal Processing 167 (2020): 107299.
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.
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)
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)
Вводим обозначения:
Вводим обозначения:
Задаём эмпирическую функцию распределения:
Вводим обозначения:
Задаём эмпирическую функцию распределения:
Задаём непараметрическую функцию максимального правдоподобия:
Считаем K квантилей по всей выборке:
Считаем K квантилей по всей выборке:
Назначаем штраф (модифицированный Байесовский информационный критерий):
Считаем 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.
┌─────────────────────┐ │ 6 2 0 7 9 3 1 8 5 4 │ │ │ └─────────────────────┘
┌─────────────────────┐ │ 6 2 0 7 9 3 1 8 5 4 │ │ │ └─────────────────────┘
┌─────────────────────┐ │ 6 2 0 7 9 3 1 8 5 4 │ │ R L L R R L L R R L │ └─────────────────────┘
┌─────────────────────┐ │ 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 │ │ │ │ │ └───────────┘ └───────────┘
┌─────────────────────┐ │ 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 │ └───────────┘ └───────────┘
┌─────────────────────┐ │ 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 │ │ │ │ │ │ │ │ │ └───────┘ └─────┘ └───────┘ └─────┘
┌─────────────────────┐ │ 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 │ └───────┘ └─────┘ └───────┘ └─────┘
┌─────────────────────┐ │ 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 │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └─────┘ └───┘ └───┘ └───┘ └─────┘ └───┘ └───┘ └───┘
┌─────────────────────┐ │ 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 │ │ │ │ │ │ │ └─────┘ └───┘ └───┘ └───┘ └─────┘ └───┘ └───┘ └───┘
┌─────────────────────┐ │ 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 │ │ │ │ │ │ │ │ │ └───┘ └───┘ └───┘ └───┘
┌─────────────────────┐ │ 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 │ │ │ │ │ │ │ │ │ └───┘ └───┘ └───┘ └───┘
┌─────────────────────┐ │ 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 │ │ │ │ │ │ │ │ │ └───┘ └───┘ └───┘ └───┘
Фаза 1: Просто попробуйте
Фаза 1: Просто попробуйте
Фаза 2: Анализируйте ограничения
Фаза 1: Просто попробуйте
Фаза 2: Анализируйте ограничения
Фаза 1: Просто попробуйте
Фаза 2: Анализируйте ограничения
Сколько у вас тестов?
Сколько у вас замеров для каждого теста?
Фаза 1: Просто попробуйте
Фаза 2: Анализируйте ограничения
Сколько у вас тестов?
Сколько у вас замеров для каждого теста?
Какие изменения вы хотите находить?
Фаза 1: Просто попробуйте
Фаза 2: Анализируйте ограничения
Сколько у вас тестов?
Сколько у вас замеров для каждого теста?
Какие изменения вы хотите находить?
Сколько времени вы готовы тратить на поиск?
Andrey Akinshin. "A story about slow NuGet package browsing." (2018)
https://aakinshin.net/posts/nuget-package-browsing/
Andrey Akinshin. "A story about slow NuGet package browsing." (2018)
https://aakinshin.net/posts/nuget-package-browsing/
Andrey Akinshin. "A story about slow NuGet package browsing." (2018)
https://aakinshin.net/posts/nuget-package-browsing/
Andrey Akinshin. "A story about slow NuGet package browsing." (2018)
https://aakinshin.net/posts/nuget-package-browsing/
Andrey Akinshin. "A story about slow NuGet package browsing." (2018)
https://aakinshin.net/posts/nuget-package-browsing/
Andrey Akinshin. "A story about slow NuGet package browsing." (2018)
https://aakinshin.net/posts/nuget-package-browsing/
Andrey Akinshin. "A story about slow NuGet package browsing." (2018)
https://aakinshin.net/posts/nuget-package-browsing/
Andrey Akinshin. "A story about slow NuGet package browsing." (2018)
https://aakinshin.net/posts/nuget-package-browsing/
Andrey Akinshin. "A story about slow NuGet package browsing." (2018)
https://aakinshin.net/posts/nuget-package-browsing/
Анализировать историю
полезно
У меня нашлось 600 точек разладки.
Что с ними делать?
Худшие деградации
Тест | Сдвиг (секунды) | Пропорция |
---|---|---|
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 |
Дисперсия | |
Дисперсия | Мультимодальность |
Дисперсия | Мультимодальность |
Процентиль |
Дисперсия | Мультимодальность |
Процентиль | Выбросы |
В теории нет разницы между теорией и практикой. А на практике есть.
var changePoints = GetChangePoints(durations);for (var cp in changePoints) if (IsNotReported(cp)) SendAlarm(cp);
var changePoints = GetChangePoints(durations);for (var cp in changePoints) if (IsNotReported(cp)) SendAlarm(cp);
var changePoints = GetChangePoints(durations);for (var cp in changePoints) if (IsNotReported(cp)) SendAlarm(cp);
var changePoints = GetChangePoints(durations);for (var cp in changePoints) if (IsNotReported(cp) && cp.Date.DayOfWeek != DayOfWeek.Saturday && cp.Date.DayOfWeek != DayOfWeek.Monday) SendAlarm(cp);
var changePoints = GetChangePoints(durations);for (var cp in changePoints) if (IsNotReported(cp) && cp.Date.DayOfWeek != DayOfWeek.Saturday && cp.Date.DayOfWeek != DayOfWeek.Monday) SendAlarm(cp);
var changePoints = GetChangePoints(durations);for (var cp in changePoints) if (IsNotReported(cp) && cp.Date.DayOfWeek != DayOfWeek.Saturday && cp.Date.DayOfWeek != DayOfWeek.Monday) SendAlarm(cp);
Не используйте магические числа,
используйте сортировку
Не хочу узнавать о деградациях спустя неделю, хочу узнавать о них сразу!
[Test, Timeout(2000)]public void Benchmark(){ // ...}
private long baseline;public void Baseline(){ var sw = Stopwatch.StartNew(); // ... sw.Stop(); baseline = sw.ElapsedMilliseconds;}
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();}
public void Benchmark(string name){⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀}
public void Benchmark(string name){ var history = LoadHistoryFromDatabase(name);⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀}
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));⠀⠀⠀⠀⠀⠀⠀⠀}
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();}
Перфоманс-тесты
должны быть адаптивными
Звучит сложно, вряд ли сходу получится это внедрить на нашем проекте.
Не стесняйтесь допускать ошибки
Не стесняйтесь признавать ошибки
Не стесняйтесь допускать ошибки
Не стесняйтесь признавать ошибки
Пишите постмортемы
Не стесняйтесь допускать ошибки
Не стесняйтесь признавать ошибки
Пишите постмортемы
Используйте кросс-бенчмаркинг
Не стесняйтесь допускать ошибки
Не стесняйтесь признавать ошибки
Пишите постмортемы
Используйте кросс-бенчмаркинг
Получайте удовольствие от ошибок
Не стесняйтесь допускать ошибки
Не стесняйтесь признавать ошибки
Пишите постмортемы
Используйте кросс-бенчмаркинг
Получайте удовольствие от ошибок
Самая волнующая фраза, какую можно услышать в науке,
вовсе не «Эврика!», а «Это забавно…»— Айзек Азимов1
1https://quoteinvestigator.com/2015/03/02/eureka-funny/
Однажды у Карла Поппера спросили, можно ли «фальсифицировать фальсификацию». То есть можно ли проявить скептицизм по отношению к самой концепции скептицизма. Карл Поппер ответил, что выгонял студентов с лекций и за менее тупые вопросы.
Допускать ошибки —
это круто!
Я одну половину доклада не запомнил, а другую не понял.
Что бы мне почитать на тему
перфоманс-анализа?
Никогда не переставайте
изучать
Я устал.
Давай заканчивать, нужно передохнуть.
![]() |
||
Образовывайтесь | ||
![]() |
||
Образовывайтесь | Анализируйте | |
![]() |
||
Образовывайтесь | Анализируйте | Адаптируйтесь |
![]() |
||
Образовывайтесь | Анализируйте | Адаптируйтесь |
![]() |
||
Сомневайтесь |
![]() |
||
Образовывайтесь | Анализируйте | Адаптируйтесь |
![]() |
![]() |
|
Сомневайтесь | Думайте |
![]() |
||
Образовывайтесь | Анализируйте | Адаптируйтесь |
![]() |
![]() |
![]() |
Сомневайтесь | Думайте | Ошибайтесь |
![]() |
||
Образовывайтесь | Анализируйте | Адаптируйтесь |
![]() |
![]() |
![]() |
Сомневайтесь | Думайте | Ошибайтесь |
Пишите быстрые программы!
Перфолозавр | |
Перфолитка | |
Менеджер | 🐙 |
Перфоманс-инженер | 🐵 |
Статистические тесты | 👻💩 |
Создание презентации
Графики и иллюстрации
Основные шрифты
Оборудование для эксперимента с термальным троттлингом
Используемые и упомянутые интернет-ресурсы
Музыка
Источники фотографий
Благодарности людям, которые помогли подготовить материал
Вдходновение для иллюстраций
Библиография
Хорошие инструменты
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 |