From 74ef70b5f31b881e3a3f8a88f17c0047e1a47d9e Mon Sep 17 00:00:00 2001 From: Valentyn Sobol Date: Wed, 29 Nov 2023 20:18:14 +0300 Subject: [PATCH 1/2] Use jacodb persistence --- .../org/utbot/contest/usvm/ContestUsvm.kt | 3 ++ .../org/utbot/contest/usvm/jc/JcContainer.kt | 28 +++++++++++++++++-- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/utbot-junit-contest/src/main/kotlin/org/utbot/contest/usvm/ContestUsvm.kt b/utbot-junit-contest/src/main/kotlin/org/utbot/contest/usvm/ContestUsvm.kt index b8a6e15b3f..6bd5b81249 100644 --- a/utbot-junit-contest/src/main/kotlin/org/utbot/contest/usvm/ContestUsvm.kt +++ b/utbot-junit-contest/src/main/kotlin/org/utbot/contest/usvm/ContestUsvm.kt @@ -12,6 +12,7 @@ import org.jacodb.approximation.Approximations import org.jacodb.impl.features.InMemoryHierarchy import org.objectweb.asm.Type import org.usvm.PathSelectionStrategy +import org.usvm.PathSelectorFairnessStrategy import org.usvm.SolverType import org.usvm.UMachineOptions import org.usvm.api.targets.JcTarget @@ -85,12 +86,14 @@ fun runUsvmGeneration( val jcContainer by lazy { JcContainer( + usePersistence = true, classpath = classpathFiles, machineOptions = UMachineOptions( // TODO usvm-sbft: if we have less than CONTEST_TEST_EXECUTION_TIMEOUT time left, we should try execute // with smaller timeout, but instrumentation currently doesn't allow to change timeout for individual runs timeout = generationTimeoutMillisWithoutCodegen.milliseconds - CONTEST_TEST_EXECUTION_TIMEOUT, pathSelectionStrategies = listOf(PathSelectionStrategy.CLOSEST_TO_UNCOVERED_RANDOM), + pathSelectorFairnessStrategy = PathSelectorFairnessStrategy.COMPLETELY_FAIR, solverType = SolverType.YICES, ) ) { diff --git a/utbot-junit-contest/src/main/kotlin/org/utbot/contest/usvm/jc/JcContainer.kt b/utbot-junit-contest/src/main/kotlin/org/utbot/contest/usvm/jc/JcContainer.kt index b9728c6935..bd615852e4 100644 --- a/utbot-junit-contest/src/main/kotlin/org/utbot/contest/usvm/jc/JcContainer.kt +++ b/utbot-junit-contest/src/main/kotlin/org/utbot/contest/usvm/jc/JcContainer.kt @@ -19,6 +19,7 @@ private val logger = KotlinLogging.logger {} // TODO usvm-sbft-refactoring: copied from `usvm/usvm-jvm/test`, extract this class back to USVM project class JcContainer private constructor( + usePersistence: Boolean, classpath: List, machineOptions: UMachineOptions, builder: JcSettings.() -> Unit, @@ -29,8 +30,27 @@ class JcContainer private constructor( val runner: UTestConcreteExecutor init { + val cpPath = classpath.map { it.absolutePath }.sorted() + + /** + * Persist jacodb cp to achieve: + * 1. Faster concrete executor initialization + * 2. Faster analysis for classes from the same cp + * */ + val persistenceLocation = if (usePersistence) { + "jcdb-persistence-${cpPath.hashCode()}" + } else { + null + } + val (db, cp) = runBlocking { - val db = jacodb(builder) + val db = jacodb { + builder() + + if (persistenceLocation != null) { + persistent(location = persistenceLocation, clearOnStart = false) + } + } val cp = db.classpathWithApproximations(classpath, listOf(UnknownClasses)) db to cp } @@ -39,8 +59,9 @@ class JcContainer private constructor( this.machine = JcMachine(cp, machineOptions) this.runner = UTestConcreteExecutor( JcRuntimeTraceInstrumenterFactory::class, - classpath.map { it.absolutePath }, + cpPath, cp, + persistenceLocation, CONTEST_TEST_EXECUTION_TIMEOUT ) runBlocking { @@ -61,6 +82,7 @@ class JcContainer private constructor( private val cache = HashMap, UMachineOptions>, JcContainer>() operator fun invoke( + usePersistence: Boolean, classpath: List, machineOptions: UMachineOptions, builder: JcSettings.() -> Unit, @@ -70,7 +92,7 @@ class JcContainer private constructor( // TODO usvm-sbft: right now max cache size is 1, do we need to increase it? logger.info { "JcContainer cache miss" } close() - JcContainer(classpath, machineOptions, builder).also { cache[cacheKey] = it } + JcContainer(usePersistence, classpath, machineOptions, builder).also { cache[cacheKey] = it } } } From 833aba957e059ab01ee6c14043285da99c437c25 Mon Sep 17 00:00:00 2001 From: Valentyn Sobol Date: Wed, 29 Nov 2023 22:24:01 +0300 Subject: [PATCH 2/2] Update usvm version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index a26875249d..e6677cf1ec 100644 --- a/gradle.properties +++ b/gradle.properties @@ -104,7 +104,7 @@ jakartaVersion=3.1.0 jacoDbVersion=1.4.1 # TODO left outdated here to avoid exceeding GitHub packages drive space, # TODO run `gradle publishToMavenLocal -Pversion={usvmVersion}` locally in usvm project and update {usvmVersion} locally -usvmVersion=comp-231128-22 +usvmVersion=comp-231129-22 # use latest Java 8 compaitable Spring and Spring Boot versions springVersion=5.3.28