Когда сравнивается скорость работы некоторого компонента программы в различных средах, часто делаются различного рода ошибки. В этом разделе приведена информация о том, как избежать этих ошибок. Информация о различных способах вычисления времени работы программы приведена в других разделах этой книги.
При измерении времени обработки системного вызова пользователь получает значение, учитывающее следующее:
Для того чтобы избежать случайных погрешностей, измерения обычно выполняются несколько раз. Поскольку к фактическому времени обработки системного вызова добавляется еще несколько величин, зависящих от внешних факторов, обычно по результатам измерений строят кривую, пример которой приведен на следующем рисунке.
Рис. 1-3. Кривая на основе набора измерений
Крайне низкий уровень может соответствовать маловероятной ситуации оптимального кэширования или являться следствием ошибки округления.
Если во время обработки системного вызова регулярно возникали внешние события, то у полученной кривой может быть два максимальных значения, как показано на следующем рисунке.
Рис. 1-4. Кривая с двумя вершинами
Если во время обработки системного вызова возникло несколько прерываний, на обработку которых было затрачено значительное время, то кривая может исказиться еще больше, как показано на следующем рисунке:
Распределение результатов измерений относительно фактического значения нельзя считать случайным, поэтому стандартные тесты статистики, основанной на логическом выводе, должны применяться с крайней осторожностью. Кроме того, в зависимости от цели измерения, для описания производительности может не подходить ни среднее, ни фактическое значение.