Подтвердить что ты не робот

Моделирование распределения измерений производительности

Как бы вы математически моделировали распределение повторяющихся измерений реальной жизни - "Реальная жизнь" означает, что вы не просто зацикливаетесь над рассматриваемым кодом, но это всего лишь короткий фрагмент в большом приложении, запущенном в типичном сценарии пользователя

Мой опыт показывает, что у вас обычно есть пик вокруг среднего времени выполнения, который можно адекватно смоделировать с помощью распределения Гаусса. Кроме того, есть "длинный хвост", содержащий выбросы - часто с кратным среднему времени. (Поведение понятно, учитывая факторы, способствующие первому исполнению наказания).

Моя цель заключается в моделировании совокупных значений, которые разумно отражают это и могут быть рассчитаны из совокупных значений (например, для гаусса, вычисления mu и сигма из N, суммы значений и суммы квадратов), Другими словами, количество повторений неограниченно, но требования к памяти и вычислению должны быть сведены к минимуму.

Нормальное гауссовское распределение не может адекватно моделировать длинный хвост и будет иметь среднюю величину смещения сильно даже при очень небольшом проценте выбросов.

Я ищу идеи, особенно если это было ранее предпринято/проанализировано. Я проверил различные модели дистрибутивов, и я думаю, что смогу что-то придумать, но моя статистика ржавая, и я мог бы получить раздутое решение. О, полное решение, упакованное в термоусадочную пленку, тоже будет прекрасным;)

Другие аспекты/идеи: Иногда вы получаете "два горбатых" дистрибутива, что было бы приемлемо в моем сценарии с одним mu/sigma, охватывающим оба, но в идеале они были бы идентифицированы отдельно.

Экстраполируя это, другой подход будет "вычислением плотности плавающей вероятности", который использует только ограниченный буфер и автоматически настраивается на диапазон (из-за длинного хвоста, бункеры могут не располагаться равномерно) - ничего не нашли, но с некоторыми предположениями о распределении это должно быть возможно в принципе.


Почему (поскольку он был задан) -

Для сложного процесса нам необходимо сделать такие гарантии, как "только 0,1% пробегов превышают лимит в 3 секунды, а среднее время обработки составляет 2,8 секунды". Производительность изолированного фрагмента кода может сильно отличаться от обычной среды времени выполнения, включающей различные уровни доступа к диску и сети, фоновые службы, запланированные события, которые происходят в течение дня и т.д.

Это можно решить тривиально путем накопления всех данных. Однако для накопления этих данных в производстве данные должны быть ограничены. Для анализа отдельных фрагментов кода гауссовское отклонение плюс штраф за первое исполнение в порядке. Это больше не работает для распределений, найденных выше.

[edit] У меня уже есть очень хорошие ответы (и, наконец, может быть - какое-то время для работы над этим). Я начинаю щедрость искать больше информации/идей.

4b9b3361

Ответ 1

Часто, когда у вас есть случайное значение, которое может быть только положительным, лог-нормальное распределение - хороший способ его моделировать. То есть вы берете журнал каждого измерения и предполагаете, что он обычно распределяется.

Если вы хотите, вы можете считать, что иметь несколько горбов, т.е. быть суммой двух нормалей, имеющих различное среднее значение. Это немного сложно оценить параметры, потому что вам, возможно, придется оценивать для каждого измерения свою вероятность принадлежать каждому горбу. Это может быть больше, чем вы хотите.

Лог-нормальные распределения очень удобны и хорошо себя ведут. Например, вы не имеете дело со своим средним значением, вы имеете дело с его геометрическим средним значением, которое совпадает с его медианом.

BTW, в фармакометрическом моделировании лог-нормальные распределения являются повсеместными, моделируя такие вещи, как объем крови, скорость абсорбции и элиминации, массу тела и т.д.

ADDED: Если вы хотите, чтобы вы называли плавающее распределение, которое называлось эмпирическим или непараметрическим распределением. Чтобы моделировать это, обычно вы сохраняете измерения в отсортированном массиве. Тогда легко выбрать процентили. Например, медиана - это "среднее число". Если у вас слишком много измерений для сохранения, вы можете перейти к некоторому биннированию после того, как у вас будет достаточно измерений, чтобы получить общую форму.

ДОБАВЛЕН: Существует простой способ определить, является ли распределение нормальным (или log-normal). Возьмите журналы измерений и поместите их в отсортированный массив. Затем сгенерируйте график QQ (квантиль-квантиль). Для этого создайте столько обычных случайных чисел, сколько у вас есть, и отсортируйте их. Затем просто нарисуйте точки, где X - нормальная точка распределения, а Y - точка логарифмической выборки. Результаты должны быть прямой. (Действительно простой способ генерировать нормальное случайное число - просто добавить 12 равномерных случайных чисел в диапазоне +/- 0,5.)

Ответ 2

Задача, которую вы описываете, называется "Распределительная установка" и не имеет ничего общего с измерениями производительности, т.е. это общая проблема подбора подходящего распределения для любого собранного/измеренного образца данных.

Стандартный процесс выглядит примерно так:

  • Угадайте наилучшее распределение.
  • Запустите тесты гипотез, чтобы проверить, насколько хорошо он описывает собранные данные.
  • Повторите 1-3, если не достаточно.

Вы можете найти интересную статью, описывающую, как это можно сделать с помощью open-source R программной системы здесь. Я считаю, что особенно полезным для вас может быть функция fitdistr.

Ответ 3

В дополнение к уже предоставленным ответам рассмотрите Эмпирические распределения. У меня есть успешный опыт использования эмпирических распределений для анализа производительности нескольких распределенных систем. Идея очень проста. Вам необходимо построить гистограмму измерений производительности. Измерения должны быть дискретизированы с заданной точностью. Когда у вас есть гистограмма, вы можете сделать несколько полезных вещей:

  • вычислить вероятность любого заданного значения (вы привязаны только точностью);
  • создавать функции PDF и CDF для измерения производительности;
  • генерировать последовательность откликов в соответствии с распределением. Это очень полезно для моделирования производительности.

Ответ 4

Попробуйте использовать гамма-распределение http://en.wikipedia.org/wiki/Gamma_distribution

Из википедии

Распределение галактик часто является вероятностной моделью времени ожидания; например, при тестировании жизни, время ожидания до смерти является случайной величиной, которая часто моделируется с помощью гамма-распределения.

Ответ 5

Стандарт для рандомизированных времен Прибытия для моделирования производительности является либо экспоненциальным распределением, либо распределением Пуассона (который является только распределением нескольких экспоненциальных распределений, добавленных вместе).

Ответ 6

Не совсем отвечающий на ваш вопрос, но актуальный еще: Mor Harchol-Balter сделал очень хороший анализ размера рабочих мест, представленных на планировщик, Эффект распределения размеров тяжелого хвоста в дизайне компьютерных систем (1999). Она обнаружила, что размер рабочих мест, поданных в ее распределенную систему назначения заданий, получил распространение по степенному закону, а это означало, что определенные части общепринятой мудрости, которые она принимала при построении своей системы назначения задач, самое главное, что рабочие места должны быть хорошо загружены сбалансированный, имел ужасные последствия для подателей рабочих мест. Она сделала хорошую работу над этим вопросом.

Более широкий вопрос: вам нужно задать такие вопросы, как:

  • Что произойдет, если разумные кажущиеся предположения о распределении производительности, например, что они принимают нормальное распределение, ломаются?
  • Являются ли наборы данных, которые я рассматриваю, действительно представляют проблему, которую я пытаюсь решить?