Repository navigation
Feature/solver profiler impl - #182
Closed
DaniilVarezkin wants to merge 9 commits into
Closed
DaniilVarezkin wants to merge 9 commits into
DaniilVarezkin wants to merge 9 commits into
Conversation
A repeated close keeps the closed state. Recording steps swallow only Exception, not Error. Add close and exception tests and restore SimpleProfilerTest.
No behavior change. The helpers have no locks and stay guarded by the profiler lock.
(cherry picked from commit 51c4c19)
Number and store every call under one lock, keep interrupt outside it, track active assertions in a counter. Add concurrency tests.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Реализация профилировщика - обёрки над KSolvwer, которая ведёт журнал: что и в каком порядке у солвера вызывали (
push,assert,check,pop, запрос модели и так далее), сколько это заняло и чем закончилось. Журнал можно забрать черезsnapshot()как неизменяемый объект. Он нужен, чтобы потомksmt-mlмог на этих данных учиться подбирать настройки солвера. Сама обёртка ничего не знает про cvc5, поэтому подойдёт к любому солверу.Какие были доработки
Строгий порядок событий при многопоточной работе. Порядковый номер события и его запись в журнал выполняются в одной критической секции (
synchronized). Порядок номеров гарантированно совпадает с порядком записи. Отдельная сортировка вsnapshot()и атомарный счётчик больше не нужны. Вызовinterrupt()не захватывает блокировку, поэтому его можно выполнить из другого потока во время идущегоcheck. Событиеinterruptзаписывается после вызова.Корректное завершение сессии (
close). Наблюдаемая длительность профиля фиксируется на первом завершённомcloseи дальше не растёт. Повторныйcloseне переводит состояниеCLOSEDвCLOSE_FAILED. Неудачныйcloseу активного профиля помечается отдельно.Сужена обработка ошибок записи. Сбой при формировании или записи события (
Exception) не нарушает работу обёрнутого солвера. Ошибки уровня JVM (Error, напримерOutOfMemoryError) больше не подавляются и передаются вызывающему коду. Исключения самого солвера пробрасываются тем же объектом и фиксируются в профиле.Структура кода. Журнал событий с ограничением по количеству (
EventLog) и счётчики утверждений (AssertionStack: глубина стека, активные и общее число утверждений) вынесены во вложенные классы. Собственных блокировок они не имеют, синхронизацию обеспечивает внешний класс. Поведение при этом не менялось.Привязка результатов к проверке. Обращения к
model,unsatCoreиreasonOfUnknownсвязываются с последней успешной проверкой. Эта связь сохраняется послеassert,pushиpop, поскольку, согласно кодуKCvc5Solver, cvc5 сбрасывает результат только при следующемcheck.Тесты, измерения, документация.
close, обработка ошибок, вложенные задачи, привязка результатов.ProfilerOverheadBenchmark). По умолчанию отключён, включается переменной окруженияKSMT_PROFILING_BENCHMARK=true. В последнем прогоне на очень лёгких вызовах замедление составило около 15–19%, на нагрузке с настоящимcheckоколо 1% (в пределах разброса).README.mdмодуля с инструкцией по сборке, запуску тестов и бенчмарка.