diff options
| author | Fabian Mastenbroek <mail.fabianm@gmail.com> | 2022-10-04 10:04:50 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-10-04 10:04:50 +0200 |
| commit | 92cc0908b7ad6c94b08e6016f8815ab07cd1714d (patch) | |
| tree | b5edaff69212986265f9edc620e40bb8695f11eb /opendc-experiments/opendc-experiments-capelin/src/jmh | |
| parent | 2d2a3854d355bd4b074ef651f291d34081e70d96 (diff) | |
| parent | bd476d11ab24fe745bb54e97a11133706bb96cb1 (diff) | |
merge: Add provisioning tool for experiments (#104)
This pull request implements a new tool to help provision and manage the
experimental environment.
## Implementation Notes :hammer_and_pick:
* Add service registry for cloud services
* Add provisioning tool for experiments
* Add provisioning step for workflow service
* Add provisioners for FaaS service
* Use experiment base for Capelin experiments
* Use experiment base for web runner
* Integrate compute workload classes
* Remove Topology interface
## Breaking API Changes :warning:
* Removal of the `opendc-compute-workload`, `opendc-faas-workload`,
and `opendc-workflow-workload` modules. These are now located
inside `opendc-experiments`
* Removal of `ComputeServiceHelper`. Use `Provisioner` to provision
a `ComputeService`.
Diffstat (limited to 'opendc-experiments/opendc-experiments-capelin/src/jmh')
| -rw-r--r-- | opendc-experiments/opendc-experiments-capelin/src/jmh/kotlin/org/opendc/experiments/capelin/CapelinBenchmarks.kt | 39 |
1 files changed, 19 insertions, 20 deletions
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..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 @@ -22,15 +22,16 @@ 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 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.* +import org.opendc.experiments.compute.topology.HostSpec +import org.opendc.experiments.provisioner.Provisioner import org.opendc.simulator.core.runBlockingSimulation import org.openjdk.jmh.annotations.* import java.io.File @@ -46,7 +47,7 @@ import java.util.concurrent.TimeUnit @Measurement(iterations = 5, time = 5, timeUnit = TimeUnit.SECONDS) class CapelinBenchmarks { private lateinit var vms: List<VirtualMachine> - private lateinit var topology: Topology + private lateinit var topology: List<HostSpec> @Param("true", "false") private var isOptimized: Boolean = false @@ -54,29 +55,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, optimize = isOptimized) + ) + + val service = provisioner.registry.resolve(serviceDomain, ComputeService::class.java)!! + service.replay(clock, vms, 0L, interference = true) } } } |
