При определении сроков выполнения быстрого процесса, сколько циклов следует использовать? - PullRequest
0 голосов
/ 13 января 2011

Допустим, я собираюсь запустить процесс X и посмотреть, сколько времени это займет.Я собираюсь сохранить в базе данных дату, когда я запустил этот процесс, и время, которое потребовалось.Я хочу знать, что поместить в БД.

Процесс X почти всегда работает менее 1500 мс, так что это короткий процесс.Обычно он длится от 500 до 1500 мс, довольно большой диапазон (разница в 3 раза).

Мой вопрос: сколько «прогонов» следует сохранить в БД как один прогон?

  • Каждый прогон сохраняется в БД в виде отдельной строки?

  • 5 Прогоны, усредненные, затем сохраняются это время?

  • 10Средние пробеги?

  • 20 Выполнение, удаление чего-либо более чем на 2 отклонения и сохранение всего в этом диапазоне?

У кого-нибудь естьхорошая информация, подкрепляющая их на этом?

Ответы [ 6 ]

2 голосов
/ 13 января 2011

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

1 голос
/ 14 января 2011

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

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

Лучший способ сделать это - выполнить как можно больше измерений (если позволяет время).100 - не плохое число, но 30-иш может быть достаточно.

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

Вопреки некоторым указаниям, не «выбрасывайте» наружу значения или «выбросы».Это часто самые интересные измерения.Например, вы можете установить хороший базовый уровень, а затем искать отправления.Понимание этих отклонений поможет вам полностью понять, как работает ваш процесс, как система влияет на ваш процесс и что может помешать вашему процессу.Это часто с готовностью выставляет ошибки.

1 голос
/ 14 января 2011

Самый быстрый прогон - это тот, который наиболее точно умножает только ваш код.

Все медленные прогоны медленнее из-за шума, вносимого планировщиком операционной системы.

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

0 голосов
/ 14 января 2011

Хотя сказать «Спаси каждый прогон» - это хорошо, в твоем случае это может оказаться непрактичным. Тем не менее, я думаю, что хранение только среднего значения исключает слишком много данных. Мне нравится хранить среднее значение за десять прогонов, но вместо того, чтобы хранить только среднее, я бы также сохранил максимальное и минимальное значения, чтобы я мог почувствовать распространение данных в дополнение к их центру.

Информация о максимальных и минимальных значениях, в частности, скажет вам, как часто возникают угловые случаи. Является ли случай 1500 мс выбросом один на 1000? Или это то, что повторяется на регулярной основе?

0 голосов
/ 14 января 2011

http://en.wikipedia.org/wiki/Sample_size

Брайан прав - вам нужно больше расследовать. если ваш код сильно отличается, даже «большую часть времени», то в вашей тестовой среде вы можете сильно колебаться из-за других процессов, страниц или других факторов. Если нет, то кажется, что у вас есть пути к коду, выполняющие чрезвычайно разный объем работы, и создание единого числа / прогона данных для описания производительности такой мультимодальной системы вам мало что скажет. Поэтому я бы сказал, как можно лучше изолируйте ваши настройки, запустите как минимум 30 испытаний и почувствуйте, как выглядит ваша кривая производительности. Как только вы это сделаете, вы можете использовать эту страницу википедии, чтобы найти число, которое сообщит вам, сколько испытаний вам нужно выполнить за изменение кода, чтобы увидеть, увеличилась ли производительность / снизилась с некоторым уровнем статистической значимости. *

0 голосов
/ 13 января 2011

Зависит от того, какие данные вы хотите.Сначала я скажу по одной строке за цикл, затем проанализирую данные и уйду оттуда.Может быть, сохраните мин / макс / среднее X прогонов, если вы хотите его консолидировать.

...