Стратегии определяют способ выполнения бенчмарков и влияют на точность и характер получаемых метрик производительности.
Стратегия по умолчанию. Оптимальна для микробенчмаркинга и измерения производительности. Автоматически подбирает количество вызовов за итерацию. Выполняет прогревочные итерации для стабилизации результатов.
- Оценочный этап: автоматически определяет оптимальное количество операций на итерацию
- Прогрев: выполняет итерации для стабилизации кешей
- Измерение: собирает статистику производительности на "разогретом" коде
&СтратегияПропускнаяСпособность
Процедура ПриСозданииОбъекта()
// ...
КонецПроцедурыКонфигурация.УстановитьСтратегию(СтратегииЗапускаБенчмарка.ПропускнаяСпособность);benchos run --throughput [FILE]Подробнее см. в разделе CLI.
Стратегия для измерения производительности первого запуска. Каждая итерация выполняется в изолированном окружении без предварительных оптимизаций.
- Изоляция процессов: каждая итерация запускается в отдельном новом процессе с чистым окружением
- Отсутствие прогрева: оценочные и прогревочные итерации отключены
- Независимость измерений: каждое измерение начинается с нулевого состояния и не зависит от предыдущих запусков
&СтратегияХолодныйЗапуск
Процедура ПриСозданииОбъекта()
// ...
КонецПроцедурыКонфигурация.УстановитьСтратегию(СтратегииЗапускаБенчмарка.ХолодныйЗапуск);benchos run --coldstart [FILE]Подробнее см. в разделе CLI.
В этом примере первый вызов метода занимает значительно больше времени из-за инициализации. Стратегия Холодный запуск позволяет точно измерить это влияние, так как каждая итерация выполняется в новом процессе.
Перем ЭтоПервыйВызов;
&СтратегияХолодныйЗапуск
&КоличествоИтераций(5)
&КолонкаМин
&КолонкаМакс
Процедура ПриСозданииОбъекта()
ЭтоПервыйВызов = Истина;
КонецПроцедуры
&Бенчмарк
Процедура Бенчмарк() Экспорт
Если ЭтоПервыйВызов Тогда
ЭтоПервыйВызов = Ложь;
Приостановить(1000);
Иначе
Приостановить(10);
КонецЕсли;
КонецПроцедуры// Бенчмарк: МойКласс.Бенчмарк
Измерение 1 : 1 op, 1.0 s, 1.0 s/op
Измерение 2 : 1 op, 1.001 s, 1.001 s/op
Измерение 3 : 1 op, 1.001 s, 1.001 s/op
Измерение 4 : 1 op, 1.001 s, 1.001 s/op
Измерение 5 : 1 op, 1.001 s, 1.001 s/op
// Статистика
Mean = 1.001 s, StdDev = 0.0 ns, StdErr = 0.0 ns, N = 1, Op/s = 0.999
Min = 1.001 s, Q1 = 1.001 s, Median = 1.001 s, Q3 = 1.001 s, Max = 1.001 s
// Сводка
BenchmarkOneScript v0.7.0, OneScript v2.0.1-rc.2+702, Microsoft Windows NT 10.0.20348.0 \
Intel Core i7-8700 CPU 3.20GHz (Coffee Lake), 1 CPU, 12 logical and 6 physical cores
| Method | Mean | StdErr | StdDev | Min | Max | Op/s |
|----------|--------:|---------:|---------:|------:|--------:|------:|
| Бенчмарк | 1.001 s | 91.57 us | 204.8 us | 1.0 s | 1.001 s | 0.999 |
// Легенда
Mean : Арифметическое среднее всех измерений
StdErr : Стандартная ошибка всех измерений
StdDev : Стандартное отклонение всех измерений
Min : Минимум
Max : Максимум
Op/s : Операций в секунду
1 s : 1 Секунда
1 us : 1 МикросекундаПоскольку каждая итерация выполняется в новом процессе, переменная ЭтоПервыйВызов сбрасывается в Истина при каждой итерации. Поэтому все 5 измерений показывают время первого вызова (~1 секунда), что и требовалось измерить.
При использовании стратегии Пропускная способность результат был бы другим:
- Первая итерация: ~1 секунда (инициализация)
- Последующие итерации: ~10 мс (быстрые вызовы)
- Среднее значение было бы искажено и не отражало бы реальное время инициализации