From f6c988c6abaa2ccecd2d8e144332d1256d326a07 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 1 May 2025 13:57:06 +0300 Subject: [PATCH 01/20] =?UTF-8?q?Create=20=D0=97=D0=B0=D0=BF=D1=83=D1=81?= =?UTF-8?q?=D0=BA=D0=91=D0=B5=D0=BD=D1=87=D0=BC=D0=B0=D1=80=D0=BA=D0=BE?= =?UTF-8?q?=D0=B2.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\260\321\200\320\272\320\276\320\262.md" | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 "docs/\320\227\320\260\320\277\321\203\321\201\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.md" diff --git "a/docs/\320\227\320\260\320\277\321\203\321\201\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.md" "b/docs/\320\227\320\260\320\277\321\203\321\201\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.md" new file mode 100644 index 0000000..fb19d0a --- /dev/null +++ "b/docs/\320\227\320\260\320\277\321\203\321\201\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.md" @@ -0,0 +1,45 @@ +# Запуск бенчмарков + +## CLI + +```bash +benchos run [FILE] +``` + +`FILE` - имя файла класса бенчмарков в текущем каталоге, либо полный путь к нему + +**Примеры:** + +```bash +# По имени класса, который находится в текущем каталоге +benchos run МойКласс + +# По имени файла класса, который находится в текущем каталоге +benchos run МойКласс.os + +# По полному пути к файлу класса +benchos run /path/to/МойКласс.os +``` + +## API + +```bsl +#Использовать benchmark +#Использовать "." + +// Через тип +Результат = Бенчмаркинг.Запустить(Тип("МойКласс")); + +// Через объект +Результат = Бенчмаркинг.Запустить(Новый МойКласс); + +// Конкретный бенчмарк класса +ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип("МойКласс")); +ДескрипторБенчмарка = ДескрипторыБенчмарков.НайтиПоИмени("МойБенчмарк"); +Бенчмаркинг.Запустить(ДескрипторБенчмарка); + +// Выброчные бенчмарки класса +ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип("МойКласс")); +ДескрипторыБенчмарков.Фильтровать("Элемент -> Элемент.Категория() = ""МояКатегория"""); +Бенчмаркинг.Запустить(ДескрипторыБенчмарков); +``` From 4650442efee8290de1e3c051812b4a521cbddeea Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 1 May 2025 14:30:44 +0300 Subject: [PATCH 02/20] =?UTF-8?q?Create=20=D0=92=D1=8B=D0=B1=D0=BE=D1=80?= =?UTF-8?q?=D0=A1=D1=82=D1=80=D0=B0=D1=82=D0=B5=D0=B3=D0=B8=D0=B8=D0=97?= =?UTF-8?q?=D0=B0=D0=BF=D1=83=D1=81=D0=BA=D0=B0.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\277\321\203\321\201\320\272\320\260.md" | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 "docs/\320\222\321\213\320\261\320\276\321\200\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\320\270\320\227\320\260\320\277\321\203\321\201\320\272\320\260.md" diff --git "a/docs/\320\222\321\213\320\261\320\276\321\200\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\320\270\320\227\320\260\320\277\321\203\321\201\320\272\320\260.md" "b/docs/\320\222\321\213\320\261\320\276\321\200\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\320\270\320\227\320\260\320\277\321\203\321\201\320\272\320\260.md" new file mode 100644 index 0000000..1525d37 --- /dev/null +++ "b/docs/\320\222\321\213\320\261\320\276\321\200\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\320\270\320\227\320\260\320\277\321\203\321\201\320\272\320\260.md" @@ -0,0 +1,36 @@ +# Выбор стратегии запуска + +### ПропускнаяСпособность + +Стратегия используется по умолчанию. Оптимальна для микробенчмаркинга. +Автоматическии подбирает количество вызовов за итерацию. Выполняет прогревочные итерации для стабилизации результатов. + +**Аннотация** + +```bsl +&СтратегияПропускнаяСпособность +Процедура ПриСозданииОбъекта() +``` + +**API** + +```bsl +Конфигурация.УстановитьСтратегию(СтратегииЗапускаБенчмарка.ПропускнаяСпособность) +``` + +### ХолодныйЗапуск + +Стратегия для оценки производительности при первом запуске без предварительной оптимизации (Отключает оценочные и прогревочные итерации). + +**Аннотация** + +```bsl +&СтратегияХолодныйЗапуск +Процедура ПриСозданииОбъекта() +``` + +**API** + +```bsl +Конфигурация.УстановитьСтратегию(СтратегииЗапускаБенчмарка.ХолодныйЗапуск) +``` From 45914c0bc6072086792ec35494ea616314a5a968 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 1 May 2025 14:33:34 +0300 Subject: [PATCH 03/20] =?UTF-8?q?Update=20=D0=92=D1=8B=D0=B1=D0=BE=D1=80?= =?UTF-8?q?=D0=A1=D1=82=D1=80=D0=B0=D1=82=D0=B5=D0=B3=D0=B8=D0=B8=D0=97?= =?UTF-8?q?=D0=B0=D0=BF=D1=83=D1=81=D0=BA=D0=B0.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\227\320\260\320\277\321\203\321\201\320\272\320\260.md" | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git "a/docs/\320\222\321\213\320\261\320\276\321\200\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\320\270\320\227\320\260\320\277\321\203\321\201\320\272\320\260.md" "b/docs/\320\222\321\213\320\261\320\276\321\200\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\320\270\320\227\320\260\320\277\321\203\321\201\320\272\320\260.md" index 1525d37..bb4e2f7 100644 --- "a/docs/\320\222\321\213\320\261\320\276\321\200\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\320\270\320\227\320\260\320\277\321\203\321\201\320\272\320\260.md" +++ "b/docs/\320\222\321\213\320\261\320\276\321\200\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\320\270\320\227\320\260\320\277\321\203\321\201\320\272\320\260.md" @@ -1,6 +1,6 @@ # Выбор стратегии запуска -### ПропускнаяСпособность +## ПропускнаяСпособность Стратегия используется по умолчанию. Оптимальна для микробенчмаркинга. Автоматическии подбирает количество вызовов за итерацию. Выполняет прогревочные итерации для стабилизации результатов. @@ -18,7 +18,7 @@ Конфигурация.УстановитьСтратегию(СтратегииЗапускаБенчмарка.ПропускнаяСпособность) ``` -### ХолодныйЗапуск +## ХолодныйЗапуск Стратегия для оценки производительности при первом запуске без предварительной оптимизации (Отключает оценочные и прогревочные итерации). From d820c597f698fd425bdcb11f64dedd17c88ea017 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 1 May 2025 14:39:46 +0300 Subject: [PATCH 04/20] =?UTF-8?q?Update=20=D0=92=D1=8B=D0=B1=D0=BE=D1=80?= =?UTF-8?q?=D0=A1=D1=82=D1=80=D0=B0=D1=82=D0=B5=D0=B3=D0=B8=D0=B8=D0=97?= =?UTF-8?q?=D0=B0=D0=BF=D1=83=D1=81=D0=BA=D0=B0.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\277\321\203\321\201\320\272\320\260.md" | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git "a/docs/\320\222\321\213\320\261\320\276\321\200\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\320\270\320\227\320\260\320\277\321\203\321\201\320\272\320\260.md" "b/docs/\320\222\321\213\320\261\320\276\321\200\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\320\270\320\227\320\260\320\277\321\203\321\201\320\272\320\260.md" index bb4e2f7..5a92277 100644 --- "a/docs/\320\222\321\213\320\261\320\276\321\200\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\320\270\320\227\320\260\320\277\321\203\321\201\320\272\320\260.md" +++ "b/docs/\320\222\321\213\320\261\320\276\321\200\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\320\270\320\227\320\260\320\277\321\203\321\201\320\272\320\260.md" @@ -34,3 +34,61 @@ ```bsl Конфигурация.УстановитьСтратегию(СтратегииЗапускаБенчмарка.ХолодныйЗапуск) ``` + +### Пример + +```bsl +Перем ЭтоПервыйВызов; + +&СтратегияХолодныйЗапуск +&КоличествоИтераций(5) +&КолонкаМин +&КолонкаМакс +Процедура ПриСозданииОбъекта() + ЭтоПервыйВызов = Истина; +КонецПроцедуры + +&Бенчмарк +Процедура Бенчмарк() Экспорт + + Если ЭтоПервыйВызов Тогда + ЭтоПервыйВызов = Ложь; + Приостановить(1000); + Иначе + Приостановить(10); + КонецЕсли; + +КонецПроцедуры +``` + +### Вывод + +```bash +// Бенчмарк: БенчмаркСтратегияХолодныйЗапуск.Бенчмарк + +Измерение 1 : 1 op, 1.001 s, 1.001 s/op +Измерение 2 : 1 op, 10.34 ms, 10.34 ms/op +Измерение 3 : 1 op, 10.48 ms, 10.48 ms/op +Измерение 4 : 1 op, 10.19 ms, 10.19 ms/op +Измерение 5 : 1 op, 10.67 ms, 10.67 ms/op + +// Сводка + +BenchmarkOneScript v0.1.0, OneScript v2.0.0.567-rc7-29039316, Microsoft Windows NT 10.0.20348.0 \ +Intel Core i7-8700 CPU 3.20GHz (Max: 3.19GHz) (Coffee Lake), 1 CPU, 12 logical and 6 physical cores + +| Method | Mean | StdErr | StdDev | Min | Median | Max | Op/s | +|----------|---------:|---------:|---------:|---------:|---------:|--------:|------:| +| Бенчмарк | 208.6 ms | 88.62 ms | 198.2 ms | 10.19 ms | 10.48 ms | 1.001 s | 4.794 | + +// Легенда +Mean : Арифметическое среднее всех измерений +StdErr : Стандартная ошибка всех измерений +StdDev : Стандартное отклонение всех измерений +Min : Минимум +Median : Значение, разделяющее упорядоченные измерения на две равные части +Max : Максимум +Op/s : Операций в секунду +1 ms : 1 Миллисекунда +1 s : 1 Секунда +``` From 9aac613151116e987fd6d43ac60aa639edf05123 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 1 May 2025 14:53:25 +0300 Subject: [PATCH 05/20] =?UTF-8?q?Update=20=D0=92=D1=8B=D0=B1=D0=BE=D1=80?= =?UTF-8?q?=D0=A1=D1=82=D1=80=D0=B0=D1=82=D0=B5=D0=B3=D0=B8=D0=B8=D0=97?= =?UTF-8?q?=D0=B0=D0=BF=D1=83=D1=81=D0=BA=D0=B0.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\320\227\320\260\320\277\321\203\321\201\320\272\320\260.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/docs/\320\222\321\213\320\261\320\276\321\200\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\320\270\320\227\320\260\320\277\321\203\321\201\320\272\320\260.md" "b/docs/\320\222\321\213\320\261\320\276\321\200\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\320\270\320\227\320\260\320\277\321\203\321\201\320\272\320\260.md" index 5a92277..f3a33d2 100644 --- "a/docs/\320\222\321\213\320\261\320\276\321\200\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\320\270\320\227\320\260\320\277\321\203\321\201\320\272\320\260.md" +++ "b/docs/\320\222\321\213\320\261\320\276\321\200\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\320\270\320\227\320\260\320\277\321\203\321\201\320\272\320\260.md" @@ -64,7 +64,7 @@ ### Вывод ```bash -// Бенчмарк: БенчмаркСтратегияХолодныйЗапуск.Бенчмарк +// Бенчмарк: МойКласс.Бенчмарк Измерение 1 : 1 op, 1.001 s, 1.001 s/op Измерение 2 : 1 op, 10.34 ms, 10.34 ms/op From 188769aa779c673e10fad0669ecbef4402e7f82e Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 1 May 2025 15:10:24 +0300 Subject: [PATCH 06/20] =?UTF-8?q?Create=20=D0=9F=D0=B0=D1=80=D0=B0=D0=BC?= =?UTF-8?q?=D0=B5=D1=82=D1=80=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\267\320\260\321\206\320\270\321\217.md" | 100 ++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 "docs/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\270\320\267\320\260\321\206\320\270\321\217.md" diff --git "a/docs/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\270\320\267\320\260\321\206\320\270\321\217.md" "b/docs/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\270\320\267\320\260\321\206\320\270\321\217.md" new file mode 100644 index 0000000..ed0cf2b --- /dev/null +++ "b/docs/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\270\320\267\320\260\321\206\320\270\321\217.md" @@ -0,0 +1,100 @@ +# Параметризация + +С помощью аннотации `&Параметры` можно задать параметры для полей класса и методов бенчмарков. + +**API** + +```bsl +// Поле класса +Конфигурация.ДобавитьПараметр("ИмяПоля", 100); +``` + +```bsl +// Параметры метода бенчмарка +Параметры = Новый Массив(); +Параметры.Добавить(100); +Параметры.Добавить(Ложь); +ДескрипторБенчмарка.ДобавитьПараметры(Параметры); +``` + +### Пример + +```bsl +&Параметры(5, 0) +Перем ДобавляемаяЗадержка Экспорт; // Число + +&Бенчмарк +&Параметры(100, 10) +&Параметры(100, 20) +&Параметры(200, 10) +&Параметры(200, 20) +Процедура Бенчмарк(Задержка1, Задержка2) Экспорт + Приостановить(Задержка1 + Задержка2 + ДобавляемаяЗадержка); +КонецПроцедуры +``` + +### Вывод + +```md +// Бенчмарк: МойКласс.Бенчмарк +// Параметры: ДобавляемаяЗадержка=5, Задержка1=100, Задержка2=10 + +Оценка 1 : 4 op, 464.1 ms, 116.0 ms/op +Оценка 2 : 4 op, 463.9 ms, 116.0 ms/op + +Прогрев 1 : 4 op, 463.3 ms, 115.8 ms/op +Прогрев 2 : 4 op, 463.8 ms, 116.0 ms/op +Прогрев 3 : 4 op, 463.7 ms, 115.9 ms/op +Прогрев 4 : 4 op, 463.1 ms, 115.8 ms/op +Прогрев 5 : 4 op, 463.8 ms, 115.9 ms/op +Прогрев 6 : 4 op, 463.6 ms, 115.9 ms/op + +Измерение 1 : 4 op, 464.1 ms, 116.0 ms/op +Измерение 2 : 4 op, 463.5 ms, 115.9 ms/op +Измерение 3 : 4 op, 463.0 ms, 115.8 ms/op +Измерение 4 : 4 op, 463.7 ms, 115.9 ms/op +Измерение 5 : 4 op, 463.3 ms, 115.8 ms/op +Измерение 6 : 4 op, 462.9 ms, 115.7 ms/op +Измерение 7 : 4 op, 463.8 ms, 115.9 ms/op +Измерение 8 : 4 op, 463.4 ms, 115.9 ms/op +Измерение 9 : 4 op, 464.1 ms, 116.0 ms/op +Измерение 10: 4 op, 463.7 ms, 115.9 ms/op +Измерение 11: 4 op, 463.7 ms, 115.9 ms/op +Измерение 12: 4 op, 464.0 ms, 116.0 ms/op +Измерение 13: 4 op, 463.6 ms, 115.9 ms/op +Измерение 14: 4 op, 463.1 ms, 115.8 ms/op +Измерение 15: 4 op, 463.8 ms, 116.0 ms/op + +// Бенчмарк: МойКласс.Бенчмарк +// Параметры: ДобавляемаяЗадержка=0, Задержка1=100, Задержка2=10 + +... + +// Сводка + +BenchmarkOneScript v0.1.0, OneScript v2.0.0.567-rc7-29039316, Microsoft Windows NT 10.0.20348.0 \ +Intel Core i7-8700 CPU 3.20GHz (Max: 3.19GHz) (Coffee Lake), 1 CPU, 12 logical and 6 physical cores + +| Method | ДобавляемаяЗадержка | Задержка1 | Задержка2 | Mean | StdErr | StdDev | Median | Op/s | +|----------|--------------------:|----------:|----------:|---------:|---------:|---------:|---------:|------:| +| Бенчмарк | 0 | 100 | 10 | 110.9 ms | 5.608 us | 21.72 us | 110.9 ms | 9.018 | +| Бенчмарк | 0 | 100 | 20 | 120.9 ms | 6.286 us | 24.35 us | 120.9 ms | 8.272 | +| Бенчмарк | 0 | 200 | 10 | 210.8 ms | 9.394 us | 36.38 us | 210.8 ms | 4.743 | +| Бенчмарк | 0 | 200 | 20 | 220.9 ms | 5.035 us | 19.50 us | 220.9 ms | 4.526 | +| Бенчмарк | 5 | 100 | 10 | 115.9 ms | 6.362 us | 24.64 us | 115.9 ms | 8.628 | +| Бенчмарк | 5 | 100 | 20 | 126.0 ms | 4.250 us | 16.46 us | 126.0 ms | 7.939 | +| Бенчмарк | 5 | 200 | 10 | 215.9 ms | 8.525 us | 33.02 us | 215.9 ms | 4.632 | +| Бенчмарк | 5 | 200 | 20 | 225.9 ms | 5.786 us | 22.41 us | 225.9 ms | 4.427 | + +// Легенда +ДобавляемаяЗадержка : Значение параметра 'ДобавляемаяЗадержка' +Задержка1 : Значение параметра 'Задержка1' +Задержка2 : Значение параметра 'Задержка2' +Mean : Арифметическое среднее всех измерений +StdErr : Стандартная ошибка всех измерений +StdDev : Стандартное отклонение всех измерений +Median : Значение, разделяющее упорядоченные измерения на две равные части +Op/s : Операций в секунду +1 ms : 1 Миллисекунда +1 us : 1 Микросекунда +``` From ba9d1fb0fc714189077e956e5a75363ad78371c4 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 1 May 2025 15:10:51 +0300 Subject: [PATCH 07/20] =?UTF-8?q?Update=20=D0=92=D1=8B=D0=B1=D0=BE=D1=80?= =?UTF-8?q?=D0=A1=D1=82=D1=80=D0=B0=D1=82=D0=B5=D0=B3=D0=B8=D0=B8=D0=97?= =?UTF-8?q?=D0=B0=D0=BF=D1=83=D1=81=D0=BA=D0=B0.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\320\227\320\260\320\277\321\203\321\201\320\272\320\260.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/docs/\320\222\321\213\320\261\320\276\321\200\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\320\270\320\227\320\260\320\277\321\203\321\201\320\272\320\260.md" "b/docs/\320\222\321\213\320\261\320\276\321\200\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\320\270\320\227\320\260\320\277\321\203\321\201\320\272\320\260.md" index f3a33d2..9ffec76 100644 --- "a/docs/\320\222\321\213\320\261\320\276\321\200\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\320\270\320\227\320\260\320\277\321\203\321\201\320\272\320\260.md" +++ "b/docs/\320\222\321\213\320\261\320\276\321\200\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\320\270\320\227\320\260\320\277\321\203\321\201\320\272\320\260.md" @@ -63,7 +63,7 @@ ### Вывод -```bash +```md // Бенчмарк: МойКласс.Бенчмарк Измерение 1 : 1 op, 1.001 s, 1.001 s/op From 5994383dec0ffad4a9c60bbc5db9a48401ed114d Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 1 May 2025 16:20:37 +0300 Subject: [PATCH 08/20] =?UTF-8?q?Update=20=D0=9F=D0=B0=D1=80=D0=B0=D0=BC?= =?UTF-8?q?=D0=B5=D1=82=D1=80=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\267\320\260\321\206\320\270\321\217.md" | 53 ------------------- 1 file changed, 53 deletions(-) diff --git "a/docs/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\270\320\267\320\260\321\206\320\270\321\217.md" "b/docs/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\270\320\267\320\260\321\206\320\270\321\217.md" index ed0cf2b..74c503f 100644 --- "a/docs/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\270\320\267\320\260\321\206\320\270\321\217.md" +++ "b/docs/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\270\320\267\320\260\321\206\320\270\321\217.md" @@ -35,46 +35,6 @@ ### Вывод -```md -// Бенчмарк: МойКласс.Бенчмарк -// Параметры: ДобавляемаяЗадержка=5, Задержка1=100, Задержка2=10 - -Оценка 1 : 4 op, 464.1 ms, 116.0 ms/op -Оценка 2 : 4 op, 463.9 ms, 116.0 ms/op - -Прогрев 1 : 4 op, 463.3 ms, 115.8 ms/op -Прогрев 2 : 4 op, 463.8 ms, 116.0 ms/op -Прогрев 3 : 4 op, 463.7 ms, 115.9 ms/op -Прогрев 4 : 4 op, 463.1 ms, 115.8 ms/op -Прогрев 5 : 4 op, 463.8 ms, 115.9 ms/op -Прогрев 6 : 4 op, 463.6 ms, 115.9 ms/op - -Измерение 1 : 4 op, 464.1 ms, 116.0 ms/op -Измерение 2 : 4 op, 463.5 ms, 115.9 ms/op -Измерение 3 : 4 op, 463.0 ms, 115.8 ms/op -Измерение 4 : 4 op, 463.7 ms, 115.9 ms/op -Измерение 5 : 4 op, 463.3 ms, 115.8 ms/op -Измерение 6 : 4 op, 462.9 ms, 115.7 ms/op -Измерение 7 : 4 op, 463.8 ms, 115.9 ms/op -Измерение 8 : 4 op, 463.4 ms, 115.9 ms/op -Измерение 9 : 4 op, 464.1 ms, 116.0 ms/op -Измерение 10: 4 op, 463.7 ms, 115.9 ms/op -Измерение 11: 4 op, 463.7 ms, 115.9 ms/op -Измерение 12: 4 op, 464.0 ms, 116.0 ms/op -Измерение 13: 4 op, 463.6 ms, 115.9 ms/op -Измерение 14: 4 op, 463.1 ms, 115.8 ms/op -Измерение 15: 4 op, 463.8 ms, 116.0 ms/op - -// Бенчмарк: МойКласс.Бенчмарк -// Параметры: ДобавляемаяЗадержка=0, Задержка1=100, Задержка2=10 - -... - -// Сводка - -BenchmarkOneScript v0.1.0, OneScript v2.0.0.567-rc7-29039316, Microsoft Windows NT 10.0.20348.0 \ -Intel Core i7-8700 CPU 3.20GHz (Max: 3.19GHz) (Coffee Lake), 1 CPU, 12 logical and 6 physical cores - | Method | ДобавляемаяЗадержка | Задержка1 | Задержка2 | Mean | StdErr | StdDev | Median | Op/s | |----------|--------------------:|----------:|----------:|---------:|---------:|---------:|---------:|------:| | Бенчмарк | 0 | 100 | 10 | 110.9 ms | 5.608 us | 21.72 us | 110.9 ms | 9.018 | @@ -85,16 +45,3 @@ Intel Core i7-8700 CPU 3.20GHz (Max: 3.19GHz) (Coffee Lake), 1 CPU, 12 logical a | Бенчмарк | 5 | 100 | 20 | 126.0 ms | 4.250 us | 16.46 us | 126.0 ms | 7.939 | | Бенчмарк | 5 | 200 | 10 | 215.9 ms | 8.525 us | 33.02 us | 215.9 ms | 4.632 | | Бенчмарк | 5 | 200 | 20 | 225.9 ms | 5.786 us | 22.41 us | 225.9 ms | 4.427 | - -// Легенда -ДобавляемаяЗадержка : Значение параметра 'ДобавляемаяЗадержка' -Задержка1 : Значение параметра 'Задержка1' -Задержка2 : Значение параметра 'Задержка2' -Mean : Арифметическое среднее всех измерений -StdErr : Стандартная ошибка всех измерений -StdDev : Стандартное отклонение всех измерений -Median : Значение, разделяющее упорядоченные измерения на две равные части -Op/s : Операций в секунду -1 ms : 1 Миллисекунда -1 us : 1 Микросекунда -``` From bd3cdcccd4226a82f381cd05a5736388b7b3f073 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 1 May 2025 16:39:26 +0300 Subject: [PATCH 09/20] =?UTF-8?q?Create=20=D0=AD=D1=82=D0=B0=D0=BB=D0=BE?= =?UTF-8?q?=D0=BD=D1=8B.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\260\320\273\320\276\320\275\321\213.md" | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 "docs/\320\255\321\202\320\260\320\273\320\276\320\275\321\213.md" diff --git "a/docs/\320\255\321\202\320\260\320\273\320\276\320\275\321\213.md" "b/docs/\320\255\321\202\320\260\320\273\320\276\320\275\321\213.md" new file mode 100644 index 0000000..647ee31 --- /dev/null +++ "b/docs/\320\255\321\202\320\260\320\273\320\276\320\275\321\213.md" @@ -0,0 +1,77 @@ +# Эталоны + +Для обозначения эталонного метода бенчмарка используйте аннотацию `&Эталон`. +Это позволяет сравнивать производительность других методов с выбранным эталоном. + +### Пример + +```bsl +&Бенчмарк +Процедура Задержка50() Экспорт + Приостановить(50); +КонецПроцедуры + +&Бенчмарк +&Эталон +Процедура Задержка100() Экспорт + Приостановить(100); +КонецПроцедуры + +&Бенчмарк +Процедура Задержка150() Экспорт + Приостановить(150); +КонецПроцедуры +``` + +### Вывод + +В отчете автоматически добавляется колонка `Ratio`, показывающая отношение среднего времени выполнения (Mean) к эталону. + +| Method | Baseline | Mean | StdErr | StdDev | Ratio | Median | Op/s | +|-------------|----------|---------:|---------:|---------:|------:|---------:|------:| +| Задержка100 | true | 100.9 ms | 7.983 us | 30.92 us | 1 | 100.9 ms | 9.911 | +| Задержка150 | false | 150.9 ms | 8.829 us | 34.19 us | 1.495 | 150.9 ms | 6.628 | +| Задержка50 | false | 50.92 ms | 5.239 us | 20.29 us | 0.505 | 50.93 ms | 19.64 | + +## Эталоны по категориям + +Для использования нескольких эталонов в одном классе применяйте категории. Каждая категория может иметь собственный эталон. + +### Пример + +```bsl +&Бенчмарк +&Категория("Быстрый") +&Эталон +Процедура Задержка50() Экспорт + Приостановить(50); +КонецПроцедуры + +&Бенчмарк +&Категория("Быстрый") +Процедура Задержка100() Экспорт + Приостановить(100); +КонецПроцедуры + +&Бенчмарк +&Категория("Медленный") +&Эталон +Процедура Задержка300() Экспорт + Приостановить(300); +КонецПроцедуры + +&Бенчмарк +&Категория("Медленный") +Процедура Задержка350() Экспорт + Приостановить(350); +КонецПроцедуры +``` + +### Вывод + +| Method | Categories | Baseline | Mean | StdErr | StdDev | Ratio | Median | Op/s | +|-------------|------------|----------|---------:|---------:|---------:|------:|---------:|------:| +| Задержка50 | Быстрый | true | 50.90 ms | 6.702 us | 25.96 us | 1 | 50.92 ms | 19.65 | +| Задержка100 | Быстрый | false | 100.9 ms | 7.711 us | 29.86 us | 1.983 | 100.9 ms | 9.910 | +| Задержка300 | Медленный | true | 300.8 ms | 8.119 us | 31.44 us | 1 | 300.8 ms | 3.324 | +| Задержка350 | Медленный | false | 350.9 ms | 5.142 us | 19.91 us | 1.166 | 350.9 ms | 2.850 | From e5aebf45f47c9cfb3a1b0c685a2b47dcba4d6df9 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 1 May 2025 16:59:10 +0300 Subject: [PATCH 10/20] =?UTF-8?q?Update=20=D0=92=D1=8B=D0=B1=D0=BE=D1=80?= =?UTF-8?q?=D0=A1=D1=82=D1=80=D0=B0=D1=82=D0=B5=D0=B3=D0=B8=D0=B8=D0=97?= =?UTF-8?q?=D0=B0=D0=BF=D1=83=D1=81=D0=BA=D0=B0.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...27\320\260\320\277\321\203\321\201\320\272\320\260.md" | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git "a/docs/\320\222\321\213\320\261\320\276\321\200\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\320\270\320\227\320\260\320\277\321\203\321\201\320\272\320\260.md" "b/docs/\320\222\321\213\320\261\320\276\321\200\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\320\270\320\227\320\260\320\277\321\203\321\201\320\272\320\260.md" index 9ffec76..8776412 100644 --- "a/docs/\320\222\321\213\320\261\320\276\321\200\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\320\270\320\227\320\260\320\277\321\203\321\201\320\272\320\260.md" +++ "b/docs/\320\222\321\213\320\261\320\276\321\200\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\320\270\320\227\320\260\320\277\321\203\321\201\320\272\320\260.md" @@ -5,14 +5,14 @@ Стратегия используется по умолчанию. Оптимальна для микробенчмаркинга. Автоматическии подбирает количество вызовов за итерацию. Выполняет прогревочные итерации для стабилизации результатов. -**Аннотация** +### Аннотация ```bsl &СтратегияПропускнаяСпособность Процедура ПриСозданииОбъекта() ``` -**API** +### API ```bsl Конфигурация.УстановитьСтратегию(СтратегииЗапускаБенчмарка.ПропускнаяСпособность) @@ -22,14 +22,14 @@ Стратегия для оценки производительности при первом запуске без предварительной оптимизации (Отключает оценочные и прогревочные итерации). -**Аннотация** +### Аннотация ```bsl &СтратегияХолодныйЗапуск Процедура ПриСозданииОбъекта() ``` -**API** +### API ```bsl Конфигурация.УстановитьСтратегию(СтратегииЗапускаБенчмарка.ХолодныйЗапуск) From 7fb955c7d4ca8b17046fbdb8c088474bff539a6c Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 1 May 2025 16:59:31 +0300 Subject: [PATCH 11/20] =?UTF-8?q?Update=20=D0=9F=D0=B0=D1=80=D0=B0=D0=BC?= =?UTF-8?q?=D0=B5=D1=82=D1=80=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\321\200\320\270\320\267\320\260\321\206\320\270\321\217.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/docs/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\270\320\267\320\260\321\206\320\270\321\217.md" "b/docs/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\270\320\267\320\260\321\206\320\270\321\217.md" index 74c503f..85ae3c7 100644 --- "a/docs/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\270\320\267\320\260\321\206\320\270\321\217.md" +++ "b/docs/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\270\320\267\320\260\321\206\320\270\321\217.md" @@ -2,7 +2,7 @@ С помощью аннотации `&Параметры` можно задать параметры для полей класса и методов бенчмарков. -**API** +### API ```bsl // Поле класса From 10cf6b38a7b21027c28981ea3298a33a6a529451 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 1 May 2025 17:19:27 +0300 Subject: [PATCH 12/20] =?UTF-8?q?Create=20=D0=9E=D0=B1=D1=80=D0=B0=D0=B1?= =?UTF-8?q?=D0=BE=D1=82=D1=87=D0=B8=D0=BA=D0=B8=D0=A1=D0=BE=D0=B1=D1=8B?= =?UTF-8?q?=D1=82=D0=B8=D0=B9.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\261\321\213\321\202\320\270\320\271.md" | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 "docs/\320\236\320\261\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272\320\270\320\241\320\276\320\261\321\213\321\202\320\270\320\271.md" diff --git "a/docs/\320\236\320\261\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272\320\270\320\241\320\276\320\261\321\213\321\202\320\270\320\271.md" "b/docs/\320\236\320\261\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272\320\270\320\241\320\276\320\261\321\213\321\202\320\270\320\271.md" new file mode 100644 index 0000000..0803907 --- /dev/null +++ "b/docs/\320\236\320\261\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272\320\270\320\241\320\276\320\261\321\213\321\202\320\270\320\271.md" @@ -0,0 +1,69 @@ +# Обработчики событий + +Для изоляции логики подготовки и завершения от измеряемого кода в тестах производительности предусмотрен механизм обработчиков событий. +Используйте специальные аннотации, чтобы определить методы, которые будут выполняться в разных фазах жизненного цикла бенчмарков: + +#### &ПередВсеми +Аннотация `&ПередВсеми` помечает метод, который выполняется **один раз** перед запуском всех бенчмарков. +Этот метод предназначен для глобальной подготовки данных, инициализации ресурсов (например, подключение к базе, загрузка файлов) или настройки окружения. + +#### &ПослеВсех +Метод с аннотацией `&ПослеВсех` вызывается **после завершения всех бенчмарков**. +Он используется для финализации: освобождения ресурсов (закрытие соединений), записи итоговых отчетов или выполнения других действий. + +#### &ПередКаждым +Аннотация `&ПередКаждым` указывает, что метод должен выполняться **перед каждым запуском бенчмарка**. +Это позволяет подготовить контекст для отдельного теста — например, сбросить состояние объекта, сгенерировать тестовые данные или выполнить предварительные проверки. + +#### &ПослеКаждого +Метод с аннотацией `&ПослеКаждого` вызывается **после каждого выполнения бенчмарка**. +Он используется для постобработки: валидации результатов, сброса временных значений или освобождения ресурсов, которые создавались для конкретного теста. + +### API + +```bsl +// Регистрация обработчика из произвольного объекта через делегат +Конфигурация.ДобавитьОбработчикСобытия( + СобытияБенчмарков.ПередВсеми, + Новый Делегат(Объект, "Инициализация") +); + +// Регистрация обработчика из класса бенчмарка +Конфигурация.ДобавитьОбработчикСобытия + СобытияБенчмарков.ПослеВсех, + "Завершение" +); + +// Удаление всех обработчиков для события +Конфигурация.УдалитьОбработчикиСобытия(СобытияБенчмарков.ПередКаждым); +``` + +### Пример + +```bsl +Перем ДвоичныеДанные; + +&ПередВсеми +Процедура Инициализация(Контекст) Экспорт + ДвоичныеДанные = ПолучитьДвоичныеДанныеИзСтроки("Много данных"); +КонецПроцедуры + +&ПослеВсех +Процедура Завершение(Контекст) Экспорт + ДвоичныеДанные = Неопределено; +КонецПроцедуры + +&Бенчмарк +Процедура SHA256() Экспорт + ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.SHA256); + ХешированиеДанных.Добавить(ДвоичныеДанные); + ХешСумма = ХешированиеДанных.ХешСумма; +КонецПроцедуры + +&Бенчмарк +Процедура MD5() Экспорт + ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.MD5); + ХешированиеДанных.Добавить(ДвоичныеДанные); + ХешСумма = ХешированиеДанных.ХешСумма; +КонецПроцедуры +``` From ec83da55ef3519ec2121a6f5e3d920b093bc8057 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 1 May 2025 17:24:01 +0300 Subject: [PATCH 13/20] =?UTF-8?q?Update=20=D0=AD=D1=82=D0=B0=D0=BB=D0=BE?= =?UTF-8?q?=D0=BD=D1=8B.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...321\202\320\260\320\273\320\276\320\275\321\213.md" | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git "a/docs/\320\255\321\202\320\260\320\273\320\276\320\275\321\213.md" "b/docs/\320\255\321\202\320\260\320\273\320\276\320\275\321\213.md" index 647ee31..933fbd7 100644 --- "a/docs/\320\255\321\202\320\260\320\273\320\276\320\275\321\213.md" +++ "b/docs/\320\255\321\202\320\260\320\273\320\276\320\275\321\213.md" @@ -3,6 +3,16 @@ Для обозначения эталонного метода бенчмарка используйте аннотацию `&Эталон`. Это позволяет сравнивать производительность других методов с выбранным эталоном. +### API + +```bsl +// Установка текущего бенчмарка в качестве эталона +ДескрипторБенчмарка.ИспользоватьКакЭталон(); + +// Снятие эталонного статуса с бенчмарка +ДескрипторБенчмарка.ИспользоватьКакЭталон(Ложь); +``` + ### Пример ```bsl From c764e501741faf49dd66af25bdc2dc66b212d5ea Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 1 May 2025 17:49:32 +0300 Subject: [PATCH 14/20] =?UTF-8?q?Create=20=D0=A1=D1=82=D0=B0=D1=82=D0=B8?= =?UTF-8?q?=D1=81=D1=82=D0=B8=D0=BA=D0=B0.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...21\201\321\202\320\270\320\272\320\260.md" | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 "docs/\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\260.md" diff --git "a/docs/\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\260.md" "b/docs/\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\260.md" new file mode 100644 index 0000000..f3aea31 --- /dev/null +++ "b/docs/\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\260.md" @@ -0,0 +1,77 @@ +# Статистика + +Для детального анализа производительности предусмотрено добавление специализированных статистических показателей. + +## Min и Max + +#### Аннотации + +```bsl +&КолонкаМин +&КолонкаМакс +Процедура ПриСозданииОбъекта() +``` + +#### API + +```bsl +Конфигурация.ДобавитьКолонку(КолонкиОтчетаБенчмарков.Мин); +Конфигурация.ДобавитьКолонку(КолонкиОтчетаБенчмарков.Макс); +``` + +### Пример вывода + +| Method | Mean | StdErr | StdDev | Min | Median | Max | Op/s | +|----------|---------:|---------:|---------:|---------:|---------:|--------:|------:| +| Бенчмарк | 208.6 ms | 88.62 ms | 198.2 ms | 10.19 ms | 10.48 ms | 1.001 s | 4.794 | + +## Квартили + +#### Аннотации + +```bsl +&КолонкаНижнийКвартиль +&КолонкаВерхнийКвартиль +Процедура ПриСозданииОбъекта() +``` + +#### API + +```bsl +Конфигурация.ДобавитьКолонку(КолонкиОтчетаБенчмарков.НижнийКвартиль); +Конфигурация.ДобавитьКолонку(КолонкиОтчетаБенчмарков.ВерхнийКвартиль); +``` + +### Пример вывода + +| Method | Mean | StdErr | StdDev | Q1 | Median | Q3 | Op/s | +|----------|---------:|---------:|---------:|---------:|---------:|---------:|------:| +| Бенчмарк | 26.55 ms | 1.849 ms | 7.160 ms | 7.625 us | 18.34 ms | 58.42 ms | 37.67 | + +## Процентили + +#### Аннотации + +```bsl +// Процентили по умолчанию +&КолонкаПроцентиль +Процедура ПриСозданииОбъекта() + +// Пользовательские процентили +&КолонкаПроцентиль(10, 40, 60, 80) +Процедура ПриСозданииОбъекта() +``` + +#### API + +```bsl +Конфигурация.ДобавитьКолонку(КолонкиОтчетаБенчмарков.Процентиль); // Процентили по умолчанию +Конфигурация.ДобавитьКолонку(КолонкиОтчетаБенчмарков.Процентиль(10)); // 10-й процентиль +Конфигурация.ДобавитьКолонку(КолонкиОтчетаБенчмарков.Процентиль(40)); // 40-й процентиль +``` + +### Пример вывода + +| Method | Mean | StdErr | StdDev | Median | P0 | P50 | P80 | P85 | P95 | P100 | Op/s | +|----------|---------:|---------:|---------:|---------:|---------:|---------:|---------:|---------:|---------:|---------:|------:| +| Бенчмарк | 27.07 ms | 356.8 us | 1.382 ms | 28.69 ms | 15.30 ms | 28.69 ms | 30.03 ms | 30.49 ms | 33.69 ms | 33.70 ms | 36.94 | From cb80ed9f04ca5b39b619045e4c61c99db957f878 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 1 May 2025 18:09:18 +0300 Subject: [PATCH 15/20] =?UTF-8?q?Create=20=D0=A1=D0=BE=D1=80=D1=82=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=D0=9E=D1=82=D1=87=D0=B5=D1=82?= =?UTF-8?q?=D0=B0.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...21\202\321\207\320\265\321\202\320\260.md" | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 "docs/\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260.md" diff --git "a/docs/\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260.md" "b/docs/\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260.md" new file mode 100644 index 0000000..9cba8e0 --- /dev/null +++ "b/docs/\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260.md" @@ -0,0 +1,59 @@ +# Сортировка отчета + +### Аннотации + +```bsl +// Сортировка результатов по убыванию производительности (от лучшего к худшему) +&СортировкаОтБыстрыхКМедленным +Процедура ПриСозданииОбъекта() + +// Сортировка результатов по возрастанию времени выполнения (от худшего к лучшему) +&СортировкаОтМедленныхКБыстрым +Процедура ПриСозданииОбъекта() + +// Сортировка результатов по наименованию метода бенчмарка +&СортировкаПоМетоду +Процедура ПриСозданииОбъекта() +``` + +### API + +```bsl +Конфигурация.УстановитьСортировкуОтчета(СортировкиОтчетаБенчмарков.ПоУмолчанию); +Конфигурация.УстановитьСортировкуОтчета(СортировкиОтчетаБенчмарков.ОтБыстрыхКМедленным); +Конфигурация.УстановитьСортировкуОтчета(СортировкиОтчетаБенчмарков.ОтМедленныхКБыстрым); +Конфигурация.УстановитьСортировкуОтчета(СортировкиОтчетаБенчмарков.ПоМетоду); +``` + +### Пример + +```bsl +&Параметры(1, 2, 3) +Перем Множитель Экспорт; + +&СортировкаОтБыстрыхКМедленным +Процедура ПриСозданииОбъекта() +КонецПроцедуры + +&Бенчмарк +Процедура Медленный() Экспорт + Приостановить(Множитель * 20); +КонецПроцедуры + +&Бенчмарк +Процедура Быстрый() Экспорт + Приостановить(Множитель * 10); +КонецПроцедуры +``` + +### Вывод + +| Method | Множитель | Mean | StdErr | StdDev | Median | Op/s | +|-----------|----------:|---------:|---------:|---------:|---------:|------:| +| Быстрый | 1 | 10.99 ms | 3.825 us | 14.82 us | 10.99 ms | 90.99 | +| Медленный | 1 | 21.00 ms | 15.74 us | 60.97 us | 20.97 ms | 47.61 | +| Быстрый | 2 | 21.03 ms | 24.79 us | 96.00 us | 20.92 ms | 47.54 | +| Быстрый | 3 | 30.92 ms | 6.393 us | 24.76 us | 30.97 ms | 32.35 | +| Медленный | 2 | 40.90 ms | 7.477 us | 28.96 us | 40.95 ms | 24.45 | +| Медленный | 3 | 60.89 ms | 5.775 us | 22.37 us | 60.91 ms | 16.42 | + From 9c2a15d8dc794058684e04d89e731dbc63d7421c Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 1 May 2025 18:43:08 +0300 Subject: [PATCH 16/20] =?UTF-8?q?Create=20=D0=9C=D0=BE=D0=BD=D0=B8=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=B8=D0=BD=D0=B3=D0=9F=D0=B0=D0=BC=D1=8F=D1=82?= =?UTF-8?q?=D0=B8.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\260\320\274\321\217\321\202\320\270.md" | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 "docs/\320\234\320\276\320\275\320\270\321\202\320\276\321\200\320\270\320\275\320\263\320\237\320\260\320\274\321\217\321\202\320\270.md" diff --git "a/docs/\320\234\320\276\320\275\320\270\321\202\320\276\321\200\320\270\320\275\320\263\320\237\320\260\320\274\321\217\321\202\320\270.md" "b/docs/\320\234\320\276\320\275\320\270\321\202\320\276\321\200\320\270\320\275\320\263\320\237\320\260\320\274\321\217\321\202\320\270.md" new file mode 100644 index 0000000..6f6dc45 --- /dev/null +++ "b/docs/\320\234\320\276\320\275\320\270\321\202\320\276\321\200\320\270\320\275\320\263\320\237\320\260\320\274\321\217\321\202\320\270.md" @@ -0,0 +1,41 @@ +# Мониторинг памяти + +Для анализа аллокаций предусмотрена аннотация `&МониторингПамяти`. + +### Аннотация + +```bsl +&МониторингПамяти +Процедура ПриСозданииОбъекта() +``` + +### API + +```bsl +Конфигурация.ДобавитьМониторингПамяти(); +``` + +### Пример + +```bsl +&МониторингПамяти +Процедура ПриСозданииОбъекта() +КонецПроцедуры + +&Бенчмарк +&Параметры(100) +&Параметры(1000) +Процедура Бенчмарк(Количество) Экспорт + Строка = ""; + Для к = 1 По Количество Цикл + Строка = Строка + "Просто текст"; + КонецЦикла; +КонецПроцедуры +``` + +### Вывод + +| Method | Количество | Mean | StdErr | StdDev | Median | Op/s | Allocated | +|----------|-----------:|-----------:|-----------:|------------:|-----------:|---------:|------------:| +| Бенчмарк | 100 | 43.81 us | 97.74 ns | 535.4 ns | 42.87 us | 22,826.5 | 126.9 KB | +| Бенчмарк | 1,000 | 1,298.2 us | 5,433.7 ns | 29,761.8 ns | 1,252.7 us | 770.3 | 11,809.4 KB | From 41f151f27f29fd02123a64600c9d4e60d452f62a Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 1 May 2025 18:52:13 +0300 Subject: [PATCH 17/20] =?UTF-8?q?Create=20=D0=91=D1=8B=D1=81=D1=82=D1=80?= =?UTF-8?q?=D1=8B=D0=B9=D0=A1=D1=82=D0=B0=D1=80=D1=82.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\241\321\202\320\260\321\200\321\202.md" | 92 +++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 "docs/\320\221\321\213\321\201\321\202\321\200\321\213\320\271\320\241\321\202\320\260\321\200\321\202.md" diff --git "a/docs/\320\221\321\213\321\201\321\202\321\200\321\213\320\271\320\241\321\202\320\260\321\200\321\202.md" "b/docs/\320\221\321\213\321\201\321\202\321\200\321\213\320\271\320\241\321\202\320\260\321\200\321\202.md" new file mode 100644 index 0000000..eacd050 --- /dev/null +++ "b/docs/\320\221\321\213\321\201\321\202\321\200\321\213\320\271\320\241\321\202\320\260\321\200\321\202.md" @@ -0,0 +1,92 @@ +# Быстрый старт + +## 1. Установка + +```bash +opm install benchmark +``` + +## 2. Создание бенчмарка + +Создайте класс с методами, помеченными аннотацией `&Бенчмарк`, где каждый метод реализует тестируемую логику. +В следующем примере мы сравниваем алгоритмы конкатенации строк через оператор `+` и метод `СтрСоединить`: + +```bsl +// КонкатенацияСтрок.os + +&Параметры(100, 1000) +Перем Количество Экспорт; +Перем Подстрока; + +&МониторингПамяти +Процедура ПриСозданииОбъекта() + Подстрока = "Просто текст"; +КонецПроцедуры + +&Бенчмарк +&Эталон +Процедура ОператорСложения() Экспорт + Текст = ""; + Для НомерПодстроки = 1 По Количество Цикл + Текст = Текст + Подстрока; + КонецЦикла; +КонецПроцедуры + +&Бенчмарк +Процедура МассивПодстрок() Экспорт + МассивПодстрок = Новый Массив(); + Для НомерПодстроки = 1 По Количество Цикл + МассивПодстрок.Добавить(Подстрока); + КонецЦикла; + + Текст = СтрСоединить(МассивПодстрок); +КонецПроцедуры +``` +## 3. Запуск бенчмарков + +Запустите бенчмарки одним из следующих способов: + +**CLI:** + +```bash +benchos run [FILE] +``` + +`FILE` - имя файла класса бенчмарков в текущем каталоге, либо полный путь к нему + +**API:** + +```bsl +#Использовать benchmark +#Использовать "." + +Результат = Бенчмаркинг.Запустить(Тип("КонкатенацияСтрок")); +``` + +## 4. Просмотр результатов + +После завершения тестов в консоли будет отображена подробная сводная таблица, оформленная в формате Markdown: + +``` +BenchmarkOneScript v0.1.0, OneScript v2.0.0.567-rc7-29039316, Microsoft Windows NT 10.0.20348.0 \ +Intel Core i7-8700 CPU 3.20GHz (Max: 3.19GHz) (Coffee Lake), 1 CPU, 12 logical and 6 physical cores + +| Method | Количество | Baseline | Mean | StdErr | StdDev | Median | Ratio | Op/s | Allocated | +|------------------|-----------:|----------|-----------:|-----------:|------------:|-----------:|------:|---------:|------------:| +| МассивПодстрок | 100 | false | 75.44 us | 66.16 ns | 362.4 ns | 74.74 us | 1.624 | 13,256.1 | 17.77 KB | +| ОператорСложения | 100 | true | 46.51 us | 88.31 ns | 483.7 ns | 45.90 us | 1 | 21,499.5 | 126.5 KB | +| МассивПодстрок | 1,000 | false | 686.0 us | 691.6 ns | 3,787.9 ns | 680.1 us | 0.505 | 1,457.8 | 165.4 KB | +| ОператорСложения | 1,000 | true | 1,365.8 us | 4,913.6 ns | 26,912.8 ns | 1,341.6 us | 1 | 732.1 | 11,809.0 KB | + +// Легенда +Количество : Значение параметра 'Количество' +Mean : Арифметическое среднее всех измерений +StdErr : Стандартная ошибка всех измерений +StdDev : Стандартное отклонение всех измерений +Ratio : Среднее коэффициентов отношений ([Mean] / [Baseline Mean]) +Median : Значение, разделяющее упорядоченные измерения на две равные части +Op/s : Операций в секунду +Allocated : Выделяемая память на одну операцию +1 us : 1 Микросекунда +1 ns : 1 Наносекунда +``` From 3debe2e9daea9c454587244f7b9e85560615e7d8 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 1 May 2025 21:20:21 +0300 Subject: [PATCH 18/20] =?UTF-8?q?Update=20=D0=97=D0=B0=D0=BF=D1=83=D1=81?= =?UTF-8?q?=D0=BA=D0=91=D0=B5=D0=BD=D1=87=D0=BC=D0=B0=D1=80=D0=BA=D0=BE?= =?UTF-8?q?=D0=B2.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\260\321\200\320\272\320\276\320\262.md" | 47 +++++++++++++------ 1 file changed, 32 insertions(+), 15 deletions(-) diff --git "a/docs/\320\227\320\260\320\277\321\203\321\201\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.md" "b/docs/\320\227\320\260\320\277\321\203\321\201\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.md" index fb19d0a..94e6ff9 100644 --- "a/docs/\320\227\320\260\320\277\321\203\321\201\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.md" +++ "b/docs/\320\227\320\260\320\277\321\203\321\201\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.md" @@ -8,38 +8,55 @@ benchos run [FILE] `FILE` - имя файла класса бенчмарков в текущем каталоге, либо полный путь к нему -**Примеры:** +**Примеры использования:** ```bash -# По имени класса, который находится в текущем каталоге +# Запуск по имени класса (файл МойКласс.os должен существовать в текущей директории) benchos run МойКласс -# По имени файла класса, который находится в текущем каталоге +# Запуск по имени файла в текущей директории benchos run МойКласс.os -# По полному пути к файлу класса +# Запуск по абсолютному пути benchos run /path/to/МойКласс.os ``` ## API -```bsl -#Использовать benchmark -#Использовать "." +### Базовый сценарий -// Через тип +```bsl +// Запуск по типу класса бенчмарков Результат = Бенчмаркинг.Запустить(Тип("МойКласс")); -// Через объект +// Запуск через экземпляр класса бенчмарков Результат = Бенчмаркинг.Запустить(Новый МойКласс); +``` -// Конкретный бенчмарк класса +### Запуск отдельных бенчмарков + +```bsl ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип("МойКласс")); + +// Запуск конкретного бенчмарка ДескрипторБенчмарка = ДескрипторыБенчмарков.НайтиПоИмени("МойБенчмарк"); -Бенчмаркинг.Запустить(ДескрипторБенчмарка); +Результат = Бенчмаркинг.Запустить(ДескрипторБенчмарка); -// Выброчные бенчмарки класса -ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип("МойКласс")); -ДескрипторыБенчмарков.Фильтровать("Элемент -> Элемент.Категория() = ""МояКатегория"""); -Бенчмаркинг.Запустить(ДескрипторыБенчмарков); +// Запуск отфильтрованного списка +ДескрипторыБенчмарков.Фильтровать("Элемент -> Элемент.Категория() = ""Б"""); +Результат = Бенчмаркинг.Запустить(ДескрипторыБенчмарков); +``` + +### Передача конфигурации + +```bsl +// Создание новой конфигурации +Конфигурация = Новый КонфигурацияБенчмарков(); +Конфигурация.УстановитьКоличествоИтераций(10); +Результат = Бенчмаркинг.Запустить(Тип("МойКласс"), Конфигурация); + +// Модификация существующей конфигурации +Конфигурация = Новый КонфигурацияБенчмарков(Тип("МойКласс")); +Конфигурация.УстановитьКоличествоИтераций(10); +Результат = Бенчмаркинг.Запустить(Тип("МойКласс"), Конфигурация); ``` From 57241da52921d57ca6cfb5e1130c96a90f3c9cf0 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 1 May 2025 21:36:10 +0300 Subject: [PATCH 19/20] Create README.md --- docs/README.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 docs/README.md diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..e169b1c --- /dev/null +++ b/docs/README.md @@ -0,0 +1,16 @@ +# Документация + +## Темы +- [Быстрый старт](БыстрыйСтарт.md) +- [Запуск бенчмарков](ЗапускБенчмарков.md) +- [Выбор стратегии запуска](ВыборСтратегииЗапуска.md) +- [Параметризация](Параметризация.md) +- [Эталоны](Эталоны.md) +- [Мониторинг памяти](МониторингПамяти.md) +- [Обработчики событий](ОбработчикиСобытий.md) +- [Статистика](Статистика.md) +- [Сортировка отчета](СортировкаОтчета.md) + +## Примеры +- [Бенчмарки](../samples/benchmarks/Классы) +- [API](../samples/api) From 0d659e558a76f01db2674e445fc0a30532a0bd34 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 1 May 2025 21:38:04 +0300 Subject: [PATCH 20/20] Update README.md --- docs/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/README.md b/docs/README.md index e169b1c..d5b15ac 100644 --- a/docs/README.md +++ b/docs/README.md @@ -10,6 +10,7 @@ - [Обработчики событий](ОбработчикиСобытий.md) - [Статистика](Статистика.md) - [Сортировка отчета](СортировкаОтчета.md) +- [Аннотации](../src/BenchmarkOneScript/annotations/Классы) ## Примеры - [Бенчмарки](../samples/benchmarks/Классы)