Skip to content

Latest commit

 

History

History
147 lines (104 loc) · 6.33 KB

File metadata and controls

147 lines (104 loc) · 6.33 KB

Стратегии запуска бенчмарков

Стратегии определяют способ выполнения бенчмарков и влияют на точность и характер получаемых метрик производительности.

Пропускная способность (Throughput)

Стратегия по умолчанию. Оптимальна для микробенчмаркинга и измерения производительности. Автоматически подбирает количество вызовов за итерацию. Выполняет прогревочные итерации для стабилизации результатов.

Как работает

  1. Оценочный этап: автоматически определяет оптимальное количество операций на итерацию
  2. Прогрев: выполняет итерации для стабилизации кешей
  3. Измерение: собирает статистику производительности на "разогретом" коде

Конфигурирование

Аннотация

&СтратегияПропускнаяСпособность
Процедура ПриСозданииОбъекта()
	// ...
КонецПроцедуры

API

Конфигурация.УстановитьСтратегию(СтратегииЗапускаБенчмарка.ПропускнаяСпособность);

CLI

benchos run --throughput [FILE]

Подробнее см. в разделе CLI.

Холодный запуск (Cold Start)

Стратегия для измерения производительности первого запуска. Каждая итерация выполняется в изолированном окружении без предварительных оптимизаций.

Как работает

  1. Изоляция процессов: каждая итерация запускается в отдельном новом процессе с чистым окружением
  2. Отсутствие прогрева: оценочные и прогревочные итерации отключены
  3. Независимость измерений: каждое измерение начинается с нулевого состояния и не зависит от предыдущих запусков

Конфигурирование

Аннотация

&СтратегияХолодныйЗапуск
Процедура ПриСозданииОбъекта()
	// ...
КонецПроцедуры

API

Конфигурация.УстановитьСтратегию(СтратегииЗапускаБенчмарка.ХолодныйЗапуск);

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 мс (быстрые вызовы)
  • Среднее значение было бы искажено и не отражало бы реальное время инициализации