Про бенчмаркинг, часть 3
(части 1,2)
Ранее обсудили, что борьба с шумом (noise) процесс бесконечный.
И если поторопиться с выводами, то в шум легко записать сам bottleneck.
Важно их различать.
Шум это внешний фактор (случайный или систематический), который растягивает распределение задержек системы (см. часть 2). Лечим стабилизацией и изоляцией окружения.
Bottleneck фактор скорее внутренний: то, что напрямую ограничивает производительность системы. Лечим сменой архитектуры, алгоритмов, добавлением ресурсов и подобным.
———
Практический (анти)паттерн.
Частый способ борьбы с широким распределением (да и вообще подход на все случаи жизни): перебирать доступные параметры в надежде, что какой-то сработает. Б. Грегг поэтично назвал его "Drunk Man Anti-Method".
В генерации таких списков особенно хорош AI, у него богатая фантазия. Туда же и множество статей в интернетах из разряда "топ-10 секретов low-latency в 2026 году".
По форме это похоже на Active Benchmarking (см. часть 1): попробовал, проверил, повторил. Но пропущены ключевые шаги: наблюдение и формирование гипотезы ДО изменения. Без них цикл похож на слепой перебор.
Иногда срабатывает, но чаще отнимает время и даёт решение, которое нельзя переиспользовать (непонятно, что помогло).
Не стоит так делать.
Фреймворк, на мой взгляд, должен быть примерно таким:
* Наблюдаем за системой доступными инструментами
* Отмечаем аномалии, формируем гипотезу о том, что шумит
* Точечно вносим изменение, проверяющее гипотезу
* Повторяем
Если гипотеза верна, разброс упадёт. Если нет, идем дальше.
———
Отмечу, что bottleneck может прикидываться шумом, но таким не являться. Например:
* Lock contention
* Работа GC
* Background flushing в БД
* TCP congestion control
Все они срабатывают в случайные моменты, поэтому выглядят как шум. Хотя фактически вызваны внутренними факторами системы, а не чем-то внешним.
Соответственно лечатся не изоляцией, а изменением кода, настроек runtime или архитектуры системы.
———
В следующей части: где и когда остановиться в борьбе с шумом и bottleneck'ами.
Post #116
1.32K
- 👍 9
- 🔥 4
- ⚡ 1