From ee0662c1ab5b893c8438573f35c33b879d51b638 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 23 Jul 2026 16:51:28 +0300 Subject: [PATCH 01/12] =?UTF-8?q?docs:=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0?= =?UTF-8?q?=D1=82=D1=8C=20=D0=B1=D0=B5=D0=BD=D1=87=D0=BC=D0=B0=D1=80=D0=BA?= =?UTF-8?q?=D0=B8=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- benchmarks/README.md | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 benchmarks/README.md diff --git a/benchmarks/README.md b/benchmarks/README.md new file mode 100644 index 0000000..aeb44c2 --- /dev/null +++ b/benchmarks/README.md @@ -0,0 +1,37 @@ +# Бенчмарки BenchmarkOneScript + +Каталог содержит короткий набор бенчмарков для контроля накладных расходов и масштабируемости самой библиотеки. + +## Состав + +- `БенчмаркОтносительнойСтатистики.os` — расчёт отношений замеров бенчмарка и эталона. +- `БенчмаркГенерацииКейсов.os` — комбинирование параметров и создание кейсов. +- `БенчмаркРасчетаСтатистики.os` — расчёт среднего, квартилей, отклонения и других показателей. +- `БенчмаркПостроенияОтчета.os` — построение отчёта при росте числа кейсов. +- `БенчмаркСериализацииРезультатов.os` — преобразование результатов в JSON и обратно. +- `БенчмаркНакладныхРасходов.os` — нижняя граница измерений на пустом и контролируемом методах. +- `БенчмаркХолодногоЗапуска.os` — накладные расходы запуска в новом процессе. + +## Устройство бенчмарков + +Все файлы бенчмарков находятся непосредственно в этом каталоге. Каталог не содержит вспомогательных сценариев и подкаталогов. + +Входные данные создаются в обработчиках `&ПередКаждымКейсом`. В измеряемом методе остаётся только целевая операция. Для тяжёлых сценариев задаётся один вызов за итерацию. + +Параметры ограничены коротким профилем: до 10 000 отношений замеров, 1 000 кейсов и строк отчёта, 10 000 замеров для расчёта статистики. + +## Запуск + +Весь набор: + +```bash +oscript src/BenchmarkOneScript/cmd/main.os run benchmarks +``` + +Отдельный бенчмарк: + +```bash +oscript src/BenchmarkOneScript/cmd/main.os run benchmarks/БенчмаркРасчетаСтатистики.os +``` + +В результатах не проверяются жёсткие абсолютные пороги времени. Сравнивать прогоны следует только в одинаковом окружении. From 844dd50a71c6d97492c9d9da5dec974eccbbd95d Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 23 Jul 2026 17:20:34 +0300 Subject: [PATCH 02/12] =?UTF-8?q?perf:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20=D0=B1=D0=B5=D0=BD=D1=87=D0=BC=D0=B0=D1=80?= =?UTF-8?q?=D0=BA=20=D0=BE=D1=82=D0=BD=D0=BE=D1=81=D0=B8=D1=82=D0=B5=D0=BB?= =?UTF-8?q?=D1=8C=D0=BD=D0=BE=D0=B9=20=D1=81=D1=82=D0=B0=D1=82=D0=B8=D1=81?= =?UTF-8?q?=D1=82=D0=B8=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...21\201\321\202\320\270\320\272\320\270.os" | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 "benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\236\321\202\320\275\320\276\321\201\320\270\321\202\320\265\320\273\321\214\320\275\320\276\320\271\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\270.os" diff --git "a/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\236\321\202\320\275\320\276\321\201\320\270\321\202\320\265\320\273\321\214\320\275\320\276\320\271\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\270.os" "b/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\236\321\202\320\275\320\276\321\201\320\270\321\202\320\265\320\273\321\214\320\275\320\276\320\271\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\270.os" new file mode 100644 index 0000000..456521e --- /dev/null +++ "b/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\236\321\202\320\275\320\276\321\201\320\270\321\202\320\265\320\273\321\214\320\275\320\276\320\271\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\270.os" @@ -0,0 +1,60 @@ +&Параметры(15, 50, 100) +Перем КоличествоЗамеров Экспорт; // Число + +Перем _ТекущаяСтатистика; // СтатистикаБенчмарка +Перем _ЭталоннаяСтатистика; // СтатистикаБенчмарка +Перем _Результат; // СтатистикаБенчмарка + +#Область ОбработчикиСобытий + +// Создает бенчмарк расчета относительной статистики. +&КоличествоИтераций(5) +&КоличествоПрогревочныхИтераций(2) +&КоличествоВызововЗаИтерацию(1) +&МониторингПамяти +Процедура ПриСозданииОбъекта() +КонецПроцедуры + +// Подготавливает два независимых набора положительных замеров одинаковой длины. +&ПередКаждымКейсом +Процедура ПодготовитьСтатистику(Контекст) Экспорт + + _ТекущаяСтатистика = СоздатьСтатистику(1.2, 80, 3); + _ЭталоннаяСтатистика = СоздатьСтатистику(1, 64, 1); + +КонецПроцедуры + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +// Рассчитывает отношение текущей статистики к эталонной. +&Бенчмарк +Процедура РассчитатьОтносительнуюСтатистику() Экспорт + _Результат = _ТекущаяСтатистика.Разделить(_ЭталоннаяСтатистика); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция СоздатьСтатистику(МножительВремени, МножительПамяти, Смещение) + + ЗамерыВремени = Новый Массив(КоличествоЗамеров); + ЗамерыПамяти = Новый Массив(КоличествоЗамеров); + + Для Индекс = 0 По КоличествоЗамеров - 1 Цикл + ЗамерыВремени[Индекс] = (Индекс + 1) * МножительВремени + Смещение; + ЗамерыПамяти[Индекс] = (Индекс + 1) * МножительПамяти + Смещение; + КонецЦикла; + + Замеры = Новый Структура( + "ЗамерыВремени, ЗамерыПамяти", + ЗамерыВремени, + ЗамерыПамяти); + + Возврат Новый СтатистикаБенчмарка(Замеры); + +КонецФункции + +#КонецОбласти From 7e5478e5928d59aada072adb54bc586fbe92dbcb Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 23 Jul 2026 17:29:21 +0300 Subject: [PATCH 03/12] =?UTF-8?q?perf:=20=D1=81=D1=82=D0=B0=D0=B1=D0=B8?= =?UTF-8?q?=D0=BB=D0=B8=D0=B7=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D1=82=D1=8C=20?= =?UTF-8?q?=D0=B1=D0=B5=D0=BD=D1=87=D0=BC=D0=B0=D1=80=D0=BA=20=D0=BE=D1=82?= =?UTF-8?q?=D0=BD=D0=BE=D1=81=D0=B8=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D0=BE?= =?UTF-8?q?=D0=B9=20=D1=81=D1=82=D0=B0=D1=82=D0=B8=D1=81=D1=82=D0=B8=D0=BA?= =?UTF-8?q?=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...21\202\320\270\321\201\321\202\320\270\320\272\320\270.os" | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git "a/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\236\321\202\320\275\320\276\321\201\320\270\321\202\320\265\320\273\321\214\320\275\320\276\320\271\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\270.os" "b/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\236\321\202\320\275\320\276\321\201\320\270\321\202\320\265\320\273\321\214\320\275\320\276\320\271\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\270.os" index 456521e..0572889 100644 --- "a/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\236\321\202\320\275\320\276\321\201\320\270\321\202\320\265\320\273\321\214\320\275\320\276\320\271\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\270.os" +++ "b/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\236\321\202\320\275\320\276\321\201\320\270\321\202\320\265\320\273\321\214\320\275\320\276\320\271\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\270.os" @@ -8,8 +8,8 @@ #Область ОбработчикиСобытий // Создает бенчмарк расчета относительной статистики. -&КоличествоИтераций(5) -&КоличествоПрогревочныхИтераций(2) +&КоличествоИтераций(10) +&КоличествоПрогревочныхИтераций(4) &КоличествоВызововЗаИтерацию(1) &МониторингПамяти Процедура ПриСозданииОбъекта() From 3807d3a79ccb07023365a6cc0eefc685ec555fbf Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 23 Jul 2026 17:35:59 +0300 Subject: [PATCH 04/12] =?UTF-8?q?perf:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20=D0=B1=D0=B5=D0=BD=D1=87=D0=BC=D0=B0=D1=80?= =?UTF-8?q?=D0=BA=20=D0=B3=D0=B5=D0=BD=D0=B5=D1=80=D0=B0=D1=86=D0=B8=D0=B8?= =?UTF-8?q?=20=D0=BA=D0=B5=D0=B9=D1=81=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\265\320\271\321\201\320\276\320\262.os" | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 "benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\223\320\265\320\275\320\265\321\200\320\260\321\206\320\270\320\270\320\232\320\265\320\271\321\201\320\276\320\262.os" diff --git "a/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\223\320\265\320\275\320\265\321\200\320\260\321\206\320\270\320\270\320\232\320\265\320\271\321\201\320\276\320\262.os" "b/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\223\320\265\320\275\320\265\321\200\320\260\321\206\320\270\320\270\320\232\320\265\320\271\321\201\320\276\320\262.os" new file mode 100644 index 0000000..507761d --- /dev/null +++ "b/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\223\320\265\320\275\320\265\321\200\320\260\321\206\320\270\320\270\320\232\320\265\320\271\321\201\320\276\320\262.os" @@ -0,0 +1,69 @@ +&Параметры(10, 100, 1000) +Перем КоличествоКомбинаций Экспорт; // Число + +Перем ПараметрА Экспорт; // Число +Перем ПараметрБ Экспорт; // Число + +Перем _Конфигурация; // КонфигурацияБенчмарков +Перем _Комбинатор; // КомбинаторПараметровБенчмарка +Перем _Генератор; // ГенераторКейсовБенчмарков +Перем _Результат; // Массив + +#Область ОбработчикиСобытий + +// Создает бенчмарк генерации кейсов. +&КоличествоИтераций(10) +&КоличествоПрогревочныхИтераций(4) +&КоличествоВызововЗаИтерацию(1) +&МониторингПамяти +Процедура ПриСозданииОбъекта() +КонецПроцедуры + +// Подготавливает синтетическую конфигурацию с заданным количеством комбинаций параметров. +&ПередКаждымКейсом +Процедура ПодготовитьГенерациюКейсов(Контекст) Экспорт + + _Конфигурация = Новый КонфигурацияБенчмарков(); + ДобавитьЗначенияПараметра(_Конфигурация, "ПараметрА", 10); + ДобавитьЗначенияПараметра(_Конфигурация, "ПараметрБ", КоличествоКомбинаций / 10); + + _Комбинатор = Новый КомбинаторПараметровБенчмарка(); + + ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(); + ДескрипторыБенчмарков.Добавить( + Новый ДескрипторБенчмарка(ТипЗнч(ЭтотОбъект), "СгенерироватьКейсы") + ); + + _Генератор = Новый ГенераторКейсовБенчмарков(ДескрипторыБенчмарков, _Конфигурация); + +КонецПроцедуры + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +// Формирует декартово произведение параметров синтетической конфигурации. +&Бенчмарк +Процедура СкомбинироватьПараметры() Экспорт + _Результат = _Комбинатор.Комбинировать(_Конфигурация.Параметры()); +КонецПроцедуры + +// Генерирует все кейсы для синтетической конфигурации. +&Бенчмарк +Процедура СгенерироватьКейсы() Экспорт + _Результат = _Генератор.СгенерироватьВсеКейсы(); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура ДобавитьЗначенияПараметра(Конфигурация, ИмяПараметра, КоличествоЗначений) + + Для Значение = 1 По КоличествоЗначений Цикл + Конфигурация.ДобавитьПараметр(ИмяПараметра, Значение); + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти From 700243a29e349e3527c8fdd0e608fed28dc40c4c Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 23 Jul 2026 17:44:31 +0300 Subject: [PATCH 05/12] =?UTF-8?q?perf:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20=D0=B1=D0=B5=D0=BD=D1=87=D0=BC=D0=B0=D1=80?= =?UTF-8?q?=D0=BA=20=D1=80=D0=B0=D1=81=D1=87=D0=B5=D1=82=D0=B0=20=D1=81?= =?UTF-8?q?=D1=82=D0=B0=D1=82=D0=B8=D1=81=D1=82=D0=B8=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...21\201\321\202\320\270\320\272\320\270.os" | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 "benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\240\320\260\321\201\321\207\320\265\321\202\320\260\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\270.os" diff --git "a/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\240\320\260\321\201\321\207\320\265\321\202\320\260\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\270.os" "b/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\240\320\260\321\201\321\207\320\265\321\202\320\260\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\270.os" new file mode 100644 index 0000000..b3d7de0 --- /dev/null +++ "b/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\240\320\260\321\201\321\207\320\265\321\202\320\260\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\270.os" @@ -0,0 +1,57 @@ +&Параметры(15, 1000, 10000) +Перем КоличествоЗамеров Экспорт; // Число + +Перем _Замеры; // Структура +Перем _Результат; // СтатистикаБенчмарка + +#Область ОбработчикиСобытий + +// Создает бенчмарк расчета статистики. +&КоличествоИтераций(10) +&КоличествоПрогревочныхИтераций(4) +&КоличествоВызововЗаИтерацию(1) +&МониторингПамяти +Процедура ПриСозданииОбъекта() +КонецПроцедуры + +// Подготавливает обратно упорядоченные положительные замеры времени и памяти. +&ПередКаждымКейсом +Процедура ПодготовитьЗамеры(Контекст) Экспорт + + _Замеры = СоздатьЗамеры(); + +КонецПроцедуры + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +// Рассчитывает статистику по подготовленным замерам времени и памяти. +&Бенчмарк +Процедура РассчитатьСтатистику() Экспорт + _Результат = Новый СтатистикаБенчмарка(_Замеры); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция СоздатьЗамеры() + + ЗамерыВремени = Новый Массив(КоличествоЗамеров); + ЗамерыПамяти = Новый Массив(КоличествоЗамеров); + + Для Индекс = 0 По КоличествоЗамеров - 1 Цикл + Значение = КоличествоЗамеров - Индекс; + ЗамерыВремени[Индекс] = Значение; + ЗамерыПамяти[Индекс] = Значение * 64; + КонецЦикла; + + Возврат Новый Структура( + "ЗамерыВремени, ЗамерыПамяти", + ЗамерыВремени, + ЗамерыПамяти); + +КонецФункции + +#КонецОбласти From 80f0e07a2975d499c372e19e1c1b8984b16908b9 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 23 Jul 2026 17:53:11 +0300 Subject: [PATCH 06/12] =?UTF-8?q?perf:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20=D0=B1=D0=B5=D0=BD=D1=87=D0=BC=D0=B0=D1=80?= =?UTF-8?q?=D0=BA=20=D0=BF=D0=BE=D1=81=D1=82=D1=80=D0=BE=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=BE=D1=82=D1=87=D0=B5=D1=82=D0=B0?= 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.os" | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 "benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\237\320\276\321\201\321\202\321\200\320\276\320\265\320\275\320\270\321\217\320\236\321\202\321\207\320\265\321\202\320\260.os" diff --git "a/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\237\320\276\321\201\321\202\321\200\320\276\320\265\320\275\320\270\321\217\320\236\321\202\321\207\320\265\321\202\320\260.os" "b/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\237\320\276\321\201\321\202\321\200\320\276\320\265\320\275\320\270\321\217\320\236\321\202\321\207\320\265\321\202\320\260.os" new file mode 100644 index 0000000..5efb077 --- /dev/null +++ "b/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\237\320\276\321\201\321\202\321\200\320\276\320\265\320\275\320\270\321\217\320\236\321\202\321\207\320\265\321\202\320\260.os" @@ -0,0 +1,67 @@ +&Параметры(10, 100, 1000) +Перем КоличествоКейсов Экспорт; // Число + +Перем _РезультатЗапуска; // РезультатЗапускаБенчмарков +Перем _Отчет; // ОтчетБенчмарков + +#Область ОбработчикиСобытий + +// Создает бенчмарк построения отчета. +&КоличествоИтераций(10) +&КоличествоПрогревочныхИтераций(4) +&КоличествоВызововЗаИтерацию(1) +&МониторингПамяти +Процедура ПриСозданииОбъекта() +КонецПроцедуры + +// Подготавливает синтетический результат запуска с заданным количеством кейсов. +&ПередКаждымКейсом +Процедура ПодготовитьРезультатЗапуска(Контекст) Экспорт + + _РезультатЗапуска = Новый РезультатЗапускаБенчмарков(); + Дескриптор = Новый ДескрипторБенчмарка(ТипЗнч(ЭтотОбъект), "ПостроитьОтчет"); + _РезультатЗапуска.ДескрипторыБенчмарков.Добавить(Дескриптор); + + Для Идентификатор = 1 По КоличествоКейсов Цикл + РезультатКейса = Новый РезультатЗапускаКейса(); + РезультатКейса.Кейс = Новый КейсБенчмарка(Идентификатор, Дескриптор); + РезультатКейса.Статистика = СоздатьСтатистику(); + _РезультатЗапуска.Запуски.Добавить(РезультатКейса); + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +// Формирует отчет по подготовленным результатам запуска кейсов. +&Бенчмарк +Процедура ПостроитьОтчет() Экспорт + _Отчет = Новый ПостроительОтчетаБенчмарков(_РезультатЗапуска).Сформировать(); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция СоздатьСтатистику() + + ЗамерыВремени = Новый Массив(); + ЗамерыПамяти = Новый Массив(); + + Для Значение = 1 По 5 Цикл + ЗамерыВремени.Добавить(Значение); + ЗамерыПамяти.Добавить(Значение * 64); + КонецЦикла; + + Замеры = Новый Структура( + "ЗамерыВремени, ЗамерыПамяти", + ЗамерыВремени, + ЗамерыПамяти); + + Возврат Новый СтатистикаБенчмарка(Замеры); + +КонецФункции + +#КонецОбласти From 066a5234792c85c95c52721298ba93a321f9638b Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 23 Jul 2026 18:11:15 +0300 Subject: [PATCH 07/12] =?UTF-8?q?perf:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20=D0=B1=D0=B5=D0=BD=D1=87=D0=BC=D0=B0=D1=80?= =?UTF-8?q?=D0=BA=20=D1=81=D0=B5=D1=80=D0=B8=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D0=B8=20=D1=80=D0=B5=D0=B7=D1=83=D0=BB=D1=8C=D1=82?= =?UTF-8?q?=D0=B0=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...21\202\320\260\321\202\320\276\320\262.os" | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 "benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\320\270\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262.os" diff --git "a/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\320\270\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262.os" "b/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\320\270\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262.os" new file mode 100644 index 0000000..ab34173 --- /dev/null +++ "b/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\320\270\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262.os" @@ -0,0 +1,76 @@ +&Параметры(1, 100, 1000) +Перем КоличествоКейсов Экспорт; // Число + +Перем _РезультатЗапуска; // РезультатЗапускаБенчмарков +Перем _Json; // Строка +Перем _Результат; // РезультатЗапускаБенчмарков + +#Область ОбработчикиСобытий + +// Создает бенчмарк сериализации результатов. +&КоличествоИтераций(1) +&КоличествоПрогревочныхИтераций(0) +&КоличествоВызововЗаИтерацию(1) +&МониторингПамяти +Процедура ПриСозданииОбъекта() +КонецПроцедуры + +// Подготавливает синтетический результат запуска с заданным количеством кейсов. +&ПередКаждымКейсом +Процедура ПодготовитьРезультатЗапуска(Контекст) Экспорт + + _РезультатЗапуска = Новый РезультатЗапускаБенчмарков(); + Дескриптор = Новый ДескрипторБенчмарка(ТипЗнч(ЭтотОбъект), "Сериализовать"); + _РезультатЗапуска.ДескрипторыБенчмарков.Добавить(Дескриптор); + + Для Идентификатор = 1 По КоличествоКейсов Цикл + РезультатКейса = Новый РезультатЗапускаКейса(); + РезультатКейса.Кейс = Новый КейсБенчмарка(Идентификатор, Дескриптор); + РезультатКейса.Статистика = СоздатьСтатистику(); + _РезультатЗапуска.Запуски.Добавить(РезультатКейса); + КонецЦикла; + + _Json = СериализацияОбъектовБенчмаркинга.ВJson(_РезультатЗапуска); + +КонецПроцедуры + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +// Сериализует подготовленный результат запуска в JSON. +&Бенчмарк +Процедура Сериализовать() Экспорт + _Json = СериализацияОбъектовБенчмаркинга.ВJson(_РезультатЗапуска); +КонецПроцедуры + +// Десериализует подготовленное представление результата запуска из JSON. +&Бенчмарк +Процедура Десериализовать() Экспорт + _Результат = СериализацияОбъектовБенчмаркинга.ИзJson(_Json, Тип("РезультатЗапускаБенчмарков")); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция СоздатьСтатистику() + + ЗамерыВремени = Новый Массив(); + ЗамерыПамяти = Новый Массив(); + + Для Значение = 1 По 5 Цикл + ЗамерыВремени.Добавить(Значение); + ЗамерыПамяти.Добавить(Значение * 64); + КонецЦикла; + + Замеры = Новый Структура( + "ЗамерыВремени, ЗамерыПамяти", + ЗамерыВремени, + ЗамерыПамяти); + + Возврат Новый СтатистикаБенчмарка(Замеры); + +КонецФункции + +#КонецОбласти From 01dbf3a6c51c60911dd613d4007b81a347b5967b Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 23 Jul 2026 18:18:50 +0300 Subject: [PATCH 08/12] =?UTF-8?q?perf:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20=D0=B1=D0=B5=D0=BD=D1=87=D0=BC=D0=B0=D1=80?= =?UTF-8?q?=D0=BA=D0=B8=20=D0=BD=D0=B0=D0=BA=D0=BB=D0=B0=D0=B4=D0=BD=D1=8B?= =?UTF-8?q?=D1=85=20=D1=80=D0=B0=D1=81=D1=85=D0=BE=D0=B4=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...21\205\320\276\320\264\320\276\320\262.os" | 27 +++++++++++++++++++ ...20\277\321\203\321\201\320\272\320\260.os" | 18 +++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 "benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\235\320\260\320\272\320\273\320\260\320\264\320\275\321\213\321\205\320\240\320\260\321\201\321\205\320\276\320\264\320\276\320\262.os" create mode 100644 "benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\245\320\276\320\273\320\276\320\264\320\275\320\276\320\263\320\276\320\227\320\260\320\277\321\203\321\201\320\272\320\260.os" diff --git "a/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\235\320\260\320\272\320\273\320\260\320\264\320\275\321\213\321\205\320\240\320\260\321\201\321\205\320\276\320\264\320\276\320\262.os" "b/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\235\320\260\320\272\320\273\320\260\320\264\320\275\321\213\321\205\320\240\320\260\321\201\321\205\320\276\320\264\320\276\320\262.os" new file mode 100644 index 0000000..fe4d0c3 --- /dev/null +++ "b/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\235\320\260\320\272\320\273\320\260\320\264\320\275\321\213\321\205\320\240\320\260\321\201\321\205\320\276\320\264\320\276\320\262.os" @@ -0,0 +1,27 @@ +Перем _Счетчик; // Число + +#Область ОбработчикиСобытий + +// Создает бенчмарк накладных расходов запуска методов. +&КоличествоИтераций(10) +&КоличествоПрогревочныхИтераций(4) +Процедура ПриСозданииОбъекта() + _Счетчик = 0; +КонецПроцедуры + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +// Измеряет накладные расходы вызова пустого метода. +&Бенчмарк +Процедура ПустойМетод() Экспорт +КонецПроцедуры + +// Измеряет накладные расходы вызова метода с минимальной операцией. +&Бенчмарк +Процедура КонтрольнаяОперация() Экспорт + _Счетчик = _Счетчик + 1; +КонецПроцедуры + +#КонецОбласти diff --git "a/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\245\320\276\320\273\320\276\320\264\320\275\320\276\320\263\320\276\320\227\320\260\320\277\321\203\321\201\320\272\320\260.os" "b/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\245\320\276\320\273\320\276\320\264\320\275\320\276\320\263\320\276\320\227\320\260\320\277\321\203\321\201\320\272\320\260.os" new file mode 100644 index 0000000..8b1a64c --- /dev/null +++ "b/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\245\320\276\320\273\320\276\320\264\320\275\320\276\320\263\320\276\320\227\320\260\320\277\321\203\321\201\320\272\320\260.os" @@ -0,0 +1,18 @@ +#Область ОбработчикиСобытий + +// Создает бенчмарк холодного запуска процесса. +&СтратегияХолодныйЗапуск +&КоличествоИтераций(3) +Процедура ПриСозданииОбъекта() +КонецПроцедуры + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +// Измеряет накладные расходы холодного запуска процесса. +&Бенчмарк +Процедура ХолодныйЗапуск() Экспорт +КонецПроцедуры + +#КонецОбласти From ea8ff34a841db291136dec1413e7d6419363f4b6 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 23 Jul 2026 18:23:20 +0300 Subject: [PATCH 09/12] =?UTF-8?q?docs:=20=D1=83=D1=82=D0=BE=D1=87=D0=BD?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20=D0=B8=D0=B7=D0=BC=D0=B5=D1=80=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=85=D0=BE=D0=BB=D0=BE=D0=B4=D0=BD=D0=BE=D0=B3?= =?UTF-8?q?=D0=BE=20=D0=B7=D0=B0=D0=BF=D1=83=D1=81=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- benchmarks/README.md | 2 +- ...\227\320\260\320\277\321\203\321\201\320\272\320\260.os" | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/benchmarks/README.md b/benchmarks/README.md index aeb44c2..c61c34d 100644 --- a/benchmarks/README.md +++ b/benchmarks/README.md @@ -10,7 +10,7 @@ - `БенчмаркПостроенияОтчета.os` — построение отчёта при росте числа кейсов. - `БенчмаркСериализацииРезультатов.os` — преобразование результатов в JSON и обратно. - `БенчмаркНакладныхРасходов.os` — нижняя граница измерений на пустом и контролируемом методах. -- `БенчмаркХолодногоЗапуска.os` — накладные расходы запуска в новом процессе. +- `БенчмаркХолодногоЗапуска.os` — первый вызов пустого метода в изолированном процессе. ## Устройство бенчмарков diff --git "a/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\245\320\276\320\273\320\276\320\264\320\275\320\276\320\263\320\276\320\227\320\260\320\277\321\203\321\201\320\272\320\260.os" "b/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\245\320\276\320\273\320\276\320\264\320\275\320\276\320\263\320\276\320\227\320\260\320\277\321\203\321\201\320\272\320\260.os" index 8b1a64c..ed7e2c8 100644 --- "a/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\245\320\276\320\273\320\276\320\264\320\275\320\276\320\263\320\276\320\227\320\260\320\277\321\203\321\201\320\272\320\260.os" +++ "b/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\245\320\276\320\273\320\276\320\264\320\275\320\276\320\263\320\276\320\227\320\260\320\277\321\203\321\201\320\272\320\260.os" @@ -1,6 +1,6 @@ #Область ОбработчикиСобытий -// Создает бенчмарк холодного запуска процесса. +// Создает бенчмарк первого вызова пустого метода в изолированном процессе. &СтратегияХолодныйЗапуск &КоличествоИтераций(3) Процедура ПриСозданииОбъекта() @@ -10,9 +10,9 @@ #Область ПрограммныйИнтерфейс -// Измеряет накладные расходы холодного запуска процесса. +// Измеряет первый вызов пустого метода в изолированном процессе. &Бенчмарк -Процедура ХолодныйЗапуск() Экспорт +Процедура ПервыйВызовПустогоМетода() Экспорт КонецПроцедуры #КонецОбласти From 30d083038e8d3121c5e9df52a63cc4bf615eed27 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 23 Jul 2026 18:30:42 +0300 Subject: [PATCH 10/12] =?UTF-8?q?docs:=20=D1=83=D1=82=D0=BE=D1=87=D0=BD?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20=D0=BA=D0=BE=D1=80=D0=BE=D1=82=D0=BA=D0=B8?= =?UTF-8?q?=D0=B9=20=D0=BF=D1=80=D0=BE=D1=84=D0=B8=D0=BB=D1=8C=20=D0=B1?= =?UTF-8?q?=D0=B5=D0=BD=D1=87=D0=BC=D0=B0=D1=80=D0=BA=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- benchmarks/README.md | 2 +- benchmarks/oscript.cfg | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 benchmarks/oscript.cfg diff --git a/benchmarks/README.md b/benchmarks/README.md index c61c34d..d6583f3 100644 --- a/benchmarks/README.md +++ b/benchmarks/README.md @@ -18,7 +18,7 @@ Входные данные создаются в обработчиках `&ПередКаждымКейсом`. В измеряемом методе остаётся только целевая операция. Для тяжёлых сценариев задаётся один вызов за итерацию. -Параметры ограничены коротким профилем: до 10 000 отношений замеров, 1 000 кейсов и строк отчёта, 10 000 замеров для расчёта статистики. +Параметры ограничены коротким профилем: до 100 отношений замеров, 1 000 кейсов и строк отчёта, 10 000 замеров для расчёта статистики. ## Запуск diff --git a/benchmarks/oscript.cfg b/benchmarks/oscript.cfg new file mode 100644 index 0000000..c92701b --- /dev/null +++ b/benchmarks/oscript.cfg @@ -0,0 +1 @@ +lib.system = ../oscript_modules From 8f34492d3947c15b04b79011c915164662095c3a Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Fri, 24 Jul 2026 11:45:46 +0300 Subject: [PATCH 11/12] =?UTF-8?q?tests:=20=D0=BD=D0=B0=D1=81=D1=82=D1=80?= =?UTF-8?q?=D0=BE=D0=B8=D1=82=D1=8C=20=D0=B1=D0=B5=D0=BD=D1=87=D0=BC=D0=B0?= =?UTF-8?q?=D1=80=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...270\320\232\320\265\320\271\321\201\320\276\320\262.os" | 3 +-- ...260\321\201\321\205\320\276\320\264\320\276\320\262.os" | 2 +- ...202\320\270\321\201\321\202\320\270\320\272\320\270.os" | 3 +-- ...217\320\236\321\202\321\207\320\265\321\202\320\260.os" | 6 ++---- ...202\320\270\321\201\321\202\320\270\320\272\320\270.os" | 6 ++---- ...273\321\214\321\202\320\260\321\202\320\276\320\262.os" | 7 +++---- ...227\320\260\320\277\321\203\321\201\320\272\320\260.os" | 3 +-- 7 files changed, 11 insertions(+), 19 deletions(-) diff --git "a/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\223\320\265\320\275\320\265\321\200\320\260\321\206\320\270\320\270\320\232\320\265\320\271\321\201\320\276\320\262.os" "b/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\223\320\265\320\275\320\265\321\200\320\260\321\206\320\270\320\270\320\232\320\265\320\271\321\201\320\276\320\262.os" index 507761d..b879ba1 100644 --- "a/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\223\320\265\320\275\320\265\321\200\320\260\321\206\320\270\320\270\320\232\320\265\320\271\321\201\320\276\320\262.os" +++ "b/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\223\320\265\320\275\320\265\321\200\320\260\321\206\320\270\320\270\320\232\320\265\320\271\321\201\320\276\320\262.os" @@ -14,7 +14,6 @@ // Создает бенчмарк генерации кейсов. &КоличествоИтераций(10) &КоличествоПрогревочныхИтераций(4) -&КоличествоВызововЗаИтерацию(1) &МониторингПамяти Процедура ПриСозданииОбъекта() КонецПроцедуры @@ -40,7 +39,7 @@ #КонецОбласти -#Область ПрограммныйИнтерфейс +#Область Бенчмарки // Формирует декартово произведение параметров синтетической конфигурации. &Бенчмарк diff --git "a/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\235\320\260\320\272\320\273\320\260\320\264\320\275\321\213\321\205\320\240\320\260\321\201\321\205\320\276\320\264\320\276\320\262.os" "b/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\235\320\260\320\272\320\273\320\260\320\264\320\275\321\213\321\205\320\240\320\260\321\201\321\205\320\276\320\264\320\276\320\262.os" index fe4d0c3..5e20d12 100644 --- "a/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\235\320\260\320\272\320\273\320\260\320\264\320\275\321\213\321\205\320\240\320\260\321\201\321\205\320\276\320\264\320\276\320\262.os" +++ "b/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\235\320\260\320\272\320\273\320\260\320\264\320\275\321\213\321\205\320\240\320\260\321\201\321\205\320\276\320\264\320\276\320\262.os" @@ -11,7 +11,7 @@ #КонецОбласти -#Область ПрограммныйИнтерфейс +#Область Бенчмарки // Измеряет накладные расходы вызова пустого метода. &Бенчмарк diff --git "a/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\236\321\202\320\275\320\276\321\201\320\270\321\202\320\265\320\273\321\214\320\275\320\276\320\271\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\270.os" "b/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\236\321\202\320\275\320\276\321\201\320\270\321\202\320\265\320\273\321\214\320\275\320\276\320\271\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\270.os" index 0572889..a52dca7 100644 --- "a/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\236\321\202\320\275\320\276\321\201\320\270\321\202\320\265\320\273\321\214\320\275\320\276\320\271\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\270.os" +++ "b/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\236\321\202\320\275\320\276\321\201\320\270\321\202\320\265\320\273\321\214\320\275\320\276\320\271\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\270.os" @@ -10,7 +10,6 @@ // Создает бенчмарк расчета относительной статистики. &КоличествоИтераций(10) &КоличествоПрогревочныхИтераций(4) -&КоличествоВызововЗаИтерацию(1) &МониторингПамяти Процедура ПриСозданииОбъекта() КонецПроцедуры @@ -26,7 +25,7 @@ #КонецОбласти -#Область ПрограммныйИнтерфейс +#Область Бенчмарки // Рассчитывает отношение текущей статистики к эталонной. &Бенчмарк diff --git "a/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\237\320\276\321\201\321\202\321\200\320\276\320\265\320\275\320\270\321\217\320\236\321\202\321\207\320\265\321\202\320\260.os" "b/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\237\320\276\321\201\321\202\321\200\320\276\320\265\320\275\320\270\321\217\320\236\321\202\321\207\320\265\321\202\320\260.os" index 5efb077..150318c 100644 --- "a/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\237\320\276\321\201\321\202\321\200\320\276\320\265\320\275\320\270\321\217\320\236\321\202\321\207\320\265\321\202\320\260.os" +++ "b/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\237\320\276\321\201\321\202\321\200\320\276\320\265\320\275\320\270\321\217\320\236\321\202\321\207\320\265\321\202\320\260.os" @@ -2,14 +2,12 @@ Перем КоличествоКейсов Экспорт; // Число Перем _РезультатЗапуска; // РезультатЗапускаБенчмарков -Перем _Отчет; // ОтчетБенчмарков #Область ОбработчикиСобытий // Создает бенчмарк построения отчета. &КоличествоИтераций(10) &КоличествоПрогревочныхИтераций(4) -&КоличествоВызововЗаИтерацию(1) &МониторингПамяти Процедура ПриСозданииОбъекта() КонецПроцедуры @@ -33,12 +31,12 @@ #КонецОбласти -#Область ПрограммныйИнтерфейс +#Область Бенчмарки // Формирует отчет по подготовленным результатам запуска кейсов. &Бенчмарк Процедура ПостроитьОтчет() Экспорт - _Отчет = Новый ПостроительОтчетаБенчмарков(_РезультатЗапуска).Сформировать(); + Отчет = Новый ПостроительОтчетаБенчмарков(_РезультатЗапуска).Сформировать(); КонецПроцедуры #КонецОбласти diff --git "a/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\240\320\260\321\201\321\207\320\265\321\202\320\260\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\270.os" "b/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\240\320\260\321\201\321\207\320\265\321\202\320\260\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\270.os" index b3d7de0..f87d2b4 100644 --- "a/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\240\320\260\321\201\321\207\320\265\321\202\320\260\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\270.os" +++ "b/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\240\320\260\321\201\321\207\320\265\321\202\320\260\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\270.os" @@ -2,14 +2,12 @@ Перем КоличествоЗамеров Экспорт; // Число Перем _Замеры; // Структура -Перем _Результат; // СтатистикаБенчмарка #Область ОбработчикиСобытий // Создает бенчмарк расчета статистики. &КоличествоИтераций(10) &КоличествоПрогревочныхИтераций(4) -&КоличествоВызововЗаИтерацию(1) &МониторингПамяти Процедура ПриСозданииОбъекта() КонецПроцедуры @@ -24,12 +22,12 @@ #КонецОбласти -#Область ПрограммныйИнтерфейс +#Область Бенчмарки // Рассчитывает статистику по подготовленным замерам времени и памяти. &Бенчмарк Процедура РассчитатьСтатистику() Экспорт - _Результат = Новый СтатистикаБенчмарка(_Замеры); + Результат = Новый СтатистикаБенчмарка(_Замеры); КонецПроцедуры #КонецОбласти diff --git "a/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\320\270\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262.os" "b/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\320\270\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262.os" index ab34173..3895b31 100644 --- "a/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\320\270\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262.os" +++ "b/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\320\270\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262.os" @@ -3,7 +3,6 @@ Перем _РезультатЗапуска; // РезультатЗапускаБенчмарков Перем _Json; // Строка -Перем _Результат; // РезультатЗапускаБенчмарков #Область ОбработчикиСобытий @@ -36,18 +35,18 @@ #КонецОбласти -#Область ПрограммныйИнтерфейс +#Область Бенчмарки // Сериализует подготовленный результат запуска в JSON. &Бенчмарк Процедура Сериализовать() Экспорт - _Json = СериализацияОбъектовБенчмаркинга.ВJson(_РезультатЗапуска); + Json = СериализацияОбъектовБенчмаркинга.ВJson(_РезультатЗапуска); КонецПроцедуры // Десериализует подготовленное представление результата запуска из JSON. &Бенчмарк Процедура Десериализовать() Экспорт - _Результат = СериализацияОбъектовБенчмаркинга.ИзJson(_Json, Тип("РезультатЗапускаБенчмарков")); + Результат = СериализацияОбъектовБенчмаркинга.ИзJson(_Json, Тип("РезультатЗапускаБенчмарков")); КонецПроцедуры #КонецОбласти diff --git "a/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\245\320\276\320\273\320\276\320\264\320\275\320\276\320\263\320\276\320\227\320\260\320\277\321\203\321\201\320\272\320\260.os" "b/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\245\320\276\320\273\320\276\320\264\320\275\320\276\320\263\320\276\320\227\320\260\320\277\321\203\321\201\320\272\320\260.os" index ed7e2c8..a1cde3d 100644 --- "a/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\245\320\276\320\273\320\276\320\264\320\275\320\276\320\263\320\276\320\227\320\260\320\277\321\203\321\201\320\272\320\260.os" +++ "b/benchmarks/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\245\320\276\320\273\320\276\320\264\320\275\320\276\320\263\320\276\320\227\320\260\320\277\321\203\321\201\320\272\320\260.os" @@ -2,13 +2,12 @@ // Создает бенчмарк первого вызова пустого метода в изолированном процессе. &СтратегияХолодныйЗапуск -&КоличествоИтераций(3) Процедура ПриСозданииОбъекта() КонецПроцедуры #КонецОбласти -#Область ПрограммныйИнтерфейс +#Область Бенчмарки // Измеряет первый вызов пустого метода в изолированном процессе. &Бенчмарк From 45920d51a4ac27d0e2ea4bb219ae735d9254d893 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Fri, 24 Jul 2026 11:51:08 +0300 Subject: [PATCH 12/12] =?UTF-8?q?docs:=20=D1=83=D0=BB=D1=83=D1=87=D1=88?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20=D1=80=D0=B8=D0=B4=D0=BC=D0=B8=20=D0=B1?= =?UTF-8?q?=D0=B5=D0=BD=D1=87=D0=BC=D0=B0=D1=80=D0=BA=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- benchmarks/README.md | 28 +++++++++------------------- 1 file changed, 9 insertions(+), 19 deletions(-) diff --git a/benchmarks/README.md b/benchmarks/README.md index d6583f3..b637879 100644 --- a/benchmarks/README.md +++ b/benchmarks/README.md @@ -4,34 +4,24 @@ ## Состав -- `БенчмаркОтносительнойСтатистики.os` — расчёт отношений замеров бенчмарка и эталона. -- `БенчмаркГенерацииКейсов.os` — комбинирование параметров и создание кейсов. -- `БенчмаркРасчетаСтатистики.os` — расчёт среднего, квартилей, отклонения и других показателей. -- `БенчмаркПостроенияОтчета.os` — построение отчёта при росте числа кейсов. -- `БенчмаркСериализацииРезультатов.os` — преобразование результатов в JSON и обратно. -- `БенчмаркНакладныхРасходов.os` — нижняя граница измерений на пустом и контролируемом методах. -- `БенчмаркХолодногоЗапуска.os` — первый вызов пустого метода в изолированном процессе. - -## Устройство бенчмарков - -Все файлы бенчмарков находятся непосредственно в этом каталоге. Каталог не содержит вспомогательных сценариев и подкаталогов. - -Входные данные создаются в обработчиках `&ПередКаждымКейсом`. В измеряемом методе остаётся только целевая операция. Для тяжёлых сценариев задаётся один вызов за итерацию. - -Параметры ограничены коротким профилем: до 100 отношений замеров, 1 000 кейсов и строк отчёта, 10 000 замеров для расчёта статистики. +- [БенчмаркНакладныхРасходов](БенчмаркНакладныхРасходов.os) — нижняя граница измерений на пустом и контролируемом методах. +- [БенчмаркХолодногоЗапуска](БенчмаркХолодногоЗапуска.os) — первый вызов пустого метода в изолированном процессе. +- [БенчмаркГенерацииКейсов](БенчмаркГенерацииКейсов.os) — комбинирование параметров и создание кейсов. +- [БенчмаркПостроенияОтчета](БенчмаркПостроенияОтчета.os) — построение отчёта при росте числа кейсов. +- [БенчмаркРасчетаСтатистики](БенчмаркРасчетаСтатистики.os) — расчёт среднего, квартилей, отклонения и других показателей. +- [БенчмаркОтносительнойСтатистики](БенчмаркОтносительнойСтатистики.os) — расчёт отношений замеров бенчмарка и эталона. +- [БенчмаркСериализацииРезультатов](БенчмаркСериализацииРезультатов.os) — преобразование результатов в JSON и обратно. ## Запуск Весь набор: ```bash -oscript src/BenchmarkOneScript/cmd/main.os run benchmarks +becnhos run ./benchmarks ``` Отдельный бенчмарк: ```bash -oscript src/BenchmarkOneScript/cmd/main.os run benchmarks/БенчмаркРасчетаСтатистики.os +becnhos run ./benchmarks/БенчмаркНакладныхРасходов.os ``` - -В результатах не проверяются жёсткие абсолютные пороги времени. Сравнивать прогоны следует только в одинаковом окружении.