From ab0ae4779a674dd07d85ded4a812332d93888bc1 Mon Sep 17 00:00:00 2001 From: Fabian Mastenbroek Date: Fri, 30 Sep 2022 20:33:37 +0200 Subject: refactor(exp/capelin): Use experiment base for Capelin experiments This change updates the Capelin experiments to use the new `opendc-experiments-base` module for setting up the experimental environment and simulate the workloads. --- .../experiments/capelin/CapelinBenchmarks.kt | 35 +++++++++++----------- 1 file changed, 18 insertions(+), 17 deletions(-) (limited to 'opendc-experiments/opendc-experiments-capelin/src/jmh') diff --git a/opendc-experiments/opendc-experiments-capelin/src/jmh/kotlin/org/opendc/experiments/capelin/CapelinBenchmarks.kt b/opendc-experiments/opendc-experiments-capelin/src/jmh/kotlin/org/opendc/experiments/capelin/CapelinBenchmarks.kt index c09ce96a..378c3833 100644 --- a/opendc-experiments/opendc-experiments-capelin/src/jmh/kotlin/org/opendc/experiments/capelin/CapelinBenchmarks.kt +++ b/opendc-experiments/opendc-experiments-capelin/src/jmh/kotlin/org/opendc/experiments/capelin/CapelinBenchmarks.kt @@ -22,6 +22,7 @@ package org.opendc.experiments.capelin +import org.opendc.compute.service.ComputeService import org.opendc.compute.service.scheduler.FilterScheduler import org.opendc.compute.service.scheduler.filters.ComputeFilter import org.opendc.compute.service.scheduler.filters.RamFilter @@ -29,8 +30,10 @@ import org.opendc.compute.service.scheduler.filters.VCpuFilter import org.opendc.compute.service.scheduler.weights.CoreRamWeigher import org.opendc.compute.workload.* import org.opendc.compute.workload.topology.Topology -import org.opendc.compute.workload.topology.apply import org.opendc.experiments.capelin.topology.clusterTopology +import org.opendc.experiments.compute.setupComputeService +import org.opendc.experiments.compute.setupHosts +import org.opendc.experiments.provisioner.Provisioner import org.opendc.simulator.core.runBlockingSimulation import org.openjdk.jmh.annotations.* import java.io.File @@ -54,29 +57,27 @@ class CapelinBenchmarks { @Setup fun setUp() { val loader = ComputeWorkloadLoader(File("src/test/resources/trace")) - val source = trace("bitbrains-small") vms = trace("bitbrains-small").resolve(loader, Random(1L)) topology = checkNotNull(object {}.javaClass.getResourceAsStream("/topology.txt")).use { clusterTopology(it) } } @Benchmark fun benchmarkCapelin() = runBlockingSimulation { - val computeScheduler = FilterScheduler( - filters = listOf(ComputeFilter(), VCpuFilter(16.0), RamFilter(1.0)), - weighers = listOf(CoreRamWeigher(multiplier = 1.0)) - ) - val runner = ComputeServiceHelper( - coroutineContext, - clock, - computeScheduler, - seed = 0L - ) + val serviceDomain = "compute.opendc.org" - try { - runner.apply(topology, isOptimized) - runner.run(vms, interference = true) - } finally { - runner.close() + Provisioner(coroutineContext, clock, seed = 0).use { provisioner -> + val computeScheduler = FilterScheduler( + filters = listOf(ComputeFilter(), VCpuFilter(16.0), RamFilter(1.0)), + weighers = listOf(CoreRamWeigher(multiplier = 1.0)) + ) + + provisioner.runSteps( + setupComputeService(serviceDomain, { computeScheduler }), + setupHosts(serviceDomain, topology.resolve(), optimize = isOptimized) + ) + + val service = provisioner.registry.resolve(serviceDomain, ComputeService::class.java)!! + service.replay(clock, vms, 0L, interference = true) } } } -- cgit v1.2.3 From 448b4cafe3c757812138a8ca7580975191ac2f9c Mon Sep 17 00:00:00 2001 From: Fabian Mastenbroek Date: Fri, 30 Sep 2022 20:57:16 +0200 Subject: refactor(exp/compute): Integrate compute workload classes This change integrates the classes from the old `opendc-compute-workload` module into the `opendc-experiments-compute` module. This new module contains helper classes for setting up experiments with the OpenDC compute service. --- .../jmh/kotlin/org/opendc/experiments/capelin/CapelinBenchmarks.kt | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'opendc-experiments/opendc-experiments-capelin/src/jmh') diff --git a/opendc-experiments/opendc-experiments-capelin/src/jmh/kotlin/org/opendc/experiments/capelin/CapelinBenchmarks.kt b/opendc-experiments/opendc-experiments-capelin/src/jmh/kotlin/org/opendc/experiments/capelin/CapelinBenchmarks.kt index 378c3833..db56f75d 100644 --- a/opendc-experiments/opendc-experiments-capelin/src/jmh/kotlin/org/opendc/experiments/capelin/CapelinBenchmarks.kt +++ b/opendc-experiments/opendc-experiments-capelin/src/jmh/kotlin/org/opendc/experiments/capelin/CapelinBenchmarks.kt @@ -28,11 +28,9 @@ import org.opendc.compute.service.scheduler.filters.ComputeFilter import org.opendc.compute.service.scheduler.filters.RamFilter import org.opendc.compute.service.scheduler.filters.VCpuFilter import org.opendc.compute.service.scheduler.weights.CoreRamWeigher -import org.opendc.compute.workload.* -import org.opendc.compute.workload.topology.Topology import org.opendc.experiments.capelin.topology.clusterTopology -import org.opendc.experiments.compute.setupComputeService -import org.opendc.experiments.compute.setupHosts +import org.opendc.experiments.compute.* +import org.opendc.experiments.compute.topology.Topology import org.opendc.experiments.provisioner.Provisioner import org.opendc.simulator.core.runBlockingSimulation import org.openjdk.jmh.annotations.* -- cgit v1.2.3 From bd476d11ab24fe745bb54e97a11133706bb96cb1 Mon Sep 17 00:00:00 2001 From: Fabian Mastenbroek Date: Mon, 3 Oct 2022 17:20:34 +0200 Subject: refactor(exp/compute): Remove Topology interface This change removes the Topology interface from the `opendc-experiments-compute` module, which was meant for provisioning the experimental topology. Howerver, with the stateless `HostSpec` class, it is not needed to resolve the topology everytime. --- .../jmh/kotlin/org/opendc/experiments/capelin/CapelinBenchmarks.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'opendc-experiments/opendc-experiments-capelin/src/jmh') diff --git a/opendc-experiments/opendc-experiments-capelin/src/jmh/kotlin/org/opendc/experiments/capelin/CapelinBenchmarks.kt b/opendc-experiments/opendc-experiments-capelin/src/jmh/kotlin/org/opendc/experiments/capelin/CapelinBenchmarks.kt index db56f75d..f021e223 100644 --- a/opendc-experiments/opendc-experiments-capelin/src/jmh/kotlin/org/opendc/experiments/capelin/CapelinBenchmarks.kt +++ b/opendc-experiments/opendc-experiments-capelin/src/jmh/kotlin/org/opendc/experiments/capelin/CapelinBenchmarks.kt @@ -30,7 +30,7 @@ import org.opendc.compute.service.scheduler.filters.VCpuFilter import org.opendc.compute.service.scheduler.weights.CoreRamWeigher import org.opendc.experiments.capelin.topology.clusterTopology import org.opendc.experiments.compute.* -import org.opendc.experiments.compute.topology.Topology +import org.opendc.experiments.compute.topology.HostSpec import org.opendc.experiments.provisioner.Provisioner import org.opendc.simulator.core.runBlockingSimulation import org.openjdk.jmh.annotations.* @@ -47,7 +47,7 @@ import java.util.concurrent.TimeUnit @Measurement(iterations = 5, time = 5, timeUnit = TimeUnit.SECONDS) class CapelinBenchmarks { private lateinit var vms: List - private lateinit var topology: Topology + private lateinit var topology: List @Param("true", "false") private var isOptimized: Boolean = false @@ -71,7 +71,7 @@ class CapelinBenchmarks { provisioner.runSteps( setupComputeService(serviceDomain, { computeScheduler }), - setupHosts(serviceDomain, topology.resolve(), optimize = isOptimized) + setupHosts(serviceDomain, topology, optimize = isOptimized) ) val service = provisioner.registry.resolve(serviceDomain, ComputeService::class.java)!! -- cgit v1.2.3