summaryrefslogtreecommitdiff
path: root/opendc-experiments/opendc-experiments-capelin/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'opendc-experiments/opendc-experiments-capelin/src/main')
-rw-r--r--opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/CapelinCli.kt167
-rw-r--r--opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/CapelinRunner.kt105
-rw-r--r--opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/portfolios/CompositeWorkloadPortfolio.kt82
-rw-r--r--opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/portfolios/HorVerPortfolio.kt72
-rw-r--r--opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/portfolios/MoreHpcPortfolio.kt71
-rw-r--r--opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/portfolios/MoreVelocityPortfolio.kt69
-rw-r--r--opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/portfolios/OperationalPhenomenaPortfolio.kt79
-rw-r--r--opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/portfolios/TestPortfolio.kt46
-rw-r--r--opendc-experiments/opendc-experiments-capelin/src/main/resources/bitbrains-small/interference-model.json21
-rw-r--r--opendc-experiments/opendc-experiments-capelin/src/main/resources/bitbrains-small/trace/meta.parquetbin2723 -> 0 bytes
-rw-r--r--opendc-experiments/opendc-experiments-capelin/src/main/resources/bitbrains-small/trace/trace.parquetbin2163354 -> 0 bytes
-rw-r--r--opendc-experiments/opendc-experiments-capelin/src/main/resources/env/multi.txt5
-rw-r--r--opendc-experiments/opendc-experiments-capelin/src/main/resources/env/single.txt3
-rw-r--r--opendc-experiments/opendc-experiments-capelin/src/main/resources/log4j2.xml43
14 files changed, 0 insertions, 763 deletions
diff --git a/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/CapelinCli.kt b/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/CapelinCli.kt
deleted file mode 100644
index 5bec8c6d..00000000
--- a/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/CapelinCli.kt
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Copyright (c) 2022 AtLarge Research
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-@file:JvmName("CapelinCli")
-
-package org.opendc.experiments.capelin
-
-import com.github.ajalt.clikt.core.CliktCommand
-import com.github.ajalt.clikt.parameters.arguments.argument
-import com.github.ajalt.clikt.parameters.options.associate
-import com.github.ajalt.clikt.parameters.options.default
-import com.github.ajalt.clikt.parameters.options.defaultLazy
-import com.github.ajalt.clikt.parameters.options.flag
-import com.github.ajalt.clikt.parameters.options.option
-import com.github.ajalt.clikt.parameters.types.choice
-import com.github.ajalt.clikt.parameters.types.file
-import com.github.ajalt.clikt.parameters.types.int
-import com.github.ajalt.clikt.parameters.types.long
-import me.tongfei.progressbar.ProgressBarBuilder
-import me.tongfei.progressbar.ProgressBarStyle
-import org.opendc.experiments.base.portfolio.model.Scenario
-import org.opendc.experiments.capelin.portfolios.CompositeWorkloadPortfolio
-import org.opendc.experiments.capelin.portfolios.HorVerPortfolio
-import org.opendc.experiments.capelin.portfolios.MoreHpcPortfolio
-import org.opendc.experiments.capelin.portfolios.MoreVelocityPortfolio
-import org.opendc.experiments.capelin.portfolios.OperationalPhenomenaPortfolio
-import org.opendc.experiments.capelin.portfolios.TestPortfolio
-import java.io.File
-import java.util.concurrent.ForkJoinPool
-import java.util.stream.LongStream
-
-/**
- * Main entrypoint of the application.
- */
-fun main(args: Array<String>): Unit = CapelinCommand().main(args)
-
-/**
- * Represents the command for the Capelin experiments.
- */
-internal class CapelinCommand : CliktCommand(name = "capelin") {
- /**
- * The path to the environment directory.
- */
- private val envPath by option("--env-path", help = "path to environment directory")
- .file(canBeDir = true, canBeFile = false)
- .defaultLazy { File("input/environments") }
-
- /**
- * The path to the trace directory.
- */
- private val tracePath by option("--trace-path", help = "path to trace directory")
- .file(canBeDir = true, canBeFile = false)
- .defaultLazy { File("input/traces") }
-
- /**
- * The path to the experiment output.
- */
- private val outputPath by option("-O", "--output", help = "path to experiment output")
- .file(canBeDir = true, canBeFile = false)
- .defaultLazy { File("output") }
-
- /**
- * Disable writing output.
- */
- private val disableOutput by option("--disable-output", help = "disable output").flag()
-
- /**
- * The number of threads to use for parallelism.
- */
- private val parallelism by option("-p", "--parallelism", help = "number of worker threads")
- .int()
- .default(Runtime.getRuntime().availableProcessors() - 1)
-
- /**
- * The number of repeats.
- */
- private val repeats by option("-r", "--repeats", help = "number of repeats")
- .int()
- .default(128)
-
- /**
- * The seed for seeding the random instances.
- */
- private val seed by option("-s", "--seed", help = "initial seed for randomness")
- .long()
- .default(0)
-
- /**
- * The portfolio to replay.
- */
- private val portfolio by argument(help = "portfolio to replay")
- .choice(
- "test" to { TestPortfolio() },
- "composite-workload" to { CompositeWorkloadPortfolio() },
- "hor-ver" to { HorVerPortfolio() },
- "more-hpc" to { MoreHpcPortfolio() },
- "more-velocity" to { MoreVelocityPortfolio() },
- "op-phen" to { OperationalPhenomenaPortfolio() },
- )
-
- /**
- * The base partitions to use for the invocation
- */
- private val basePartitions: Map<String, String> by option("-P", "--base-partitions").associate()
-
- override fun run() {
- val runner = CapelinRunner(envPath, tracePath, outputPath.takeUnless { disableOutput })
- val scenarios = portfolio().scenarios.toList()
-
- val pool = ForkJoinPool(parallelism)
-
- echo("Detected ${scenarios.size} scenarios [$repeats replications]")
-
- for (scenario in scenarios) {
- runScenario(runner, pool, scenario)
- }
-
- pool.shutdown()
- }
-
- /**
- * Run a single scenario.
- */
- private fun runScenario(
- runner: CapelinRunner,
- pool: ForkJoinPool,
- scenario: Scenario,
- ) {
- val pb =
- ProgressBarBuilder()
- .setInitialMax(repeats.toLong())
- .setStyle(ProgressBarStyle.ASCII)
- .setTaskName("Simulating...")
- .build()
-
- pool.submit {
- LongStream.range(0, repeats.toLong())
- .parallel()
- .forEach { repeat ->
- val augmentedScenario = scenario.copy(partitions = basePartitions + scenario.partitions)
- runner.runScenario(augmentedScenario, seed + repeat)
- pb.step()
- }
-
- pb.close()
- }.join()
- }
-}
diff --git a/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/CapelinRunner.kt b/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/CapelinRunner.kt
deleted file mode 100644
index 0de72afa..00000000
--- a/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/CapelinRunner.kt
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright (c) 2022 AtLarge Research
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-package org.opendc.experiments.capelin
-
-import org.opendc.compute.service.ComputeService
-import org.opendc.compute.service.scheduler.createComputeScheduler
-import org.opendc.compute.simulator.failure.grid5000
-import org.opendc.compute.simulator.provisioner.Provisioner
-import org.opendc.compute.simulator.provisioner.registerComputeMonitor
-import org.opendc.compute.simulator.provisioner.setupComputeService
-import org.opendc.compute.simulator.provisioner.setupHosts
-import org.opendc.compute.telemetry.export.parquet.ParquetComputeMonitor
-import org.opendc.compute.topology.clusterTopology
-import org.opendc.compute.workload.ComputeWorkloadLoader
-import org.opendc.experiments.base.portfolio.model.Scenario
-import org.opendc.experiments.base.runner.replay
-import org.opendc.simulator.kotlin.runSimulation
-import java.io.File
-import java.time.Duration
-import java.util.Random
-import kotlin.math.roundToLong
-
-/**
- * Helper class for running the Capelin experiments.
- *
- * @param envPath The path to the directory containing the environments.
- * @param tracePath The path to the directory containing the traces.
- * @param outputPath The path to the directory where the output should be written (or `null` if no output should be generated).
- */
-public class CapelinRunner(
- private val envPath: File,
- tracePath: File,
- private val outputPath: File?,
-) {
- /**
- * The [ComputeWorkloadLoader] to use for loading the traces.
- */
- private val workloadLoader = ComputeWorkloadLoader(tracePath)
-
- /**
- * Run a single [scenario] with the specified seed.
- */
- fun runScenario(
- scenario: Scenario,
- seed: Long,
- ) = runSimulation {
- val serviceDomain = "compute.opendc.org"
- val topology = clusterTopology(File(envPath, "${scenario.topology.name}.txt"))
-
- Provisioner(dispatcher, seed).use { provisioner ->
- provisioner.runSteps(
- setupComputeService(serviceDomain, { createComputeScheduler(scenario.allocationPolicy, Random(it.seeder.nextLong())) }),
- setupHosts(serviceDomain, topology, optimize = true),
- )
-
- if (outputPath != null) {
- val partitions = scenario.partitions + ("seed" to seed.toString())
- val partition = partitions.map { (k, v) -> "$k=$v" }.joinToString("/")
-
- provisioner.runStep(
- registerComputeMonitor(
- serviceDomain,
- ParquetComputeMonitor(
- outputPath,
- partition,
- bufferSize = 4096,
- ),
- ),
- )
- }
-
- val service = provisioner.registry.resolve(serviceDomain, ComputeService::class.java)!!
- val vms = scenario.workload.source.resolve(workloadLoader, Random(seed))
- val operationalPhenomena = scenario.operationalPhenomena
- val failureModel =
- if (operationalPhenomena.failureFrequency > 0) {
- grid5000(Duration.ofSeconds((operationalPhenomena.failureFrequency * 60).roundToLong()))
- } else {
- null
- }
-
- service.replay(timeSource, vms, seed, failureModel = failureModel, interference = operationalPhenomena.hasInterference)
- }
- }
-}
diff --git a/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/portfolios/CompositeWorkloadPortfolio.kt b/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/portfolios/CompositeWorkloadPortfolio.kt
deleted file mode 100644
index 140f0480..00000000
--- a/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/portfolios/CompositeWorkloadPortfolio.kt
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (c) 2022 AtLarge Research
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-package org.opendc.experiments.capelin.portfolios
-
-import org.opendc.compute.workload.composite
-import org.opendc.compute.workload.trace
-import org.opendc.experiments.base.portfolio.Portfolio
-import org.opendc.experiments.base.portfolio.model.OperationalPhenomena
-import org.opendc.experiments.base.portfolio.model.Scenario
-import org.opendc.experiments.base.portfolio.model.Topology
-import org.opendc.experiments.base.portfolio.model.Workload
-
-/**
- * A [Portfolio] that explores the effect of a composite workload.
- */
-public class CompositeWorkloadPortfolio : Portfolio {
- private val topologies =
- listOf(
- Topology("base"),
- Topology("exp-vol-hor-hom"),
- Topology("exp-vol-ver-hom"),
- Topology("exp-vel-ver-hom"),
- )
- private val workloads =
- listOf(
- Workload(
- "all-azure",
- composite(trace("solvinity-short") to 0.0, trace("azure") to 1.0),
- ),
- Workload(
- "solvinity-25-azure-75",
- composite(trace("solvinity-short") to 0.25, trace("azure") to 0.75),
- ),
- Workload(
- "solvinity-50-azure-50",
- composite(trace("solvinity-short") to 0.5, trace("azure") to 0.5),
- ),
- Workload(
- "solvinity-75-azure-25",
- composite(trace("solvinity-short") to 0.75, trace("azure") to 0.25),
- ),
- Workload(
- "all-solvinity",
- composite(trace("solvinity-short") to 1.0, trace("azure") to 0.0),
- ),
- )
- private val operationalPhenomena = OperationalPhenomena(failureFrequency = 24.0 * 7, hasInterference = false)
- private val allocationPolicy = "active-servers"
-
- override val scenarios: Iterable<Scenario> =
- topologies.flatMap { topology ->
- workloads.map { workload ->
- Scenario(
- topology,
- workload,
- operationalPhenomena,
- allocationPolicy,
- mapOf("topology" to topology.name, "workload" to workload.name),
- )
- }
- }
-}
diff --git a/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/portfolios/HorVerPortfolio.kt b/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/portfolios/HorVerPortfolio.kt
deleted file mode 100644
index da884f35..00000000
--- a/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/portfolios/HorVerPortfolio.kt
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (c) 2022 AtLarge Research
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-package org.opendc.experiments.capelin.portfolios
-
-import org.opendc.compute.workload.sampleByLoad
-import org.opendc.compute.workload.trace
-import org.opendc.experiments.base.portfolio.Portfolio
-import org.opendc.experiments.base.portfolio.model.OperationalPhenomena
-import org.opendc.experiments.base.portfolio.model.Scenario
-import org.opendc.experiments.base.portfolio.model.Topology
-import org.opendc.experiments.base.portfolio.model.Workload
-
-/**
- * A [Portfolio] that explores the difference between horizontal and vertical scaling.
- */
-public class HorVerPortfolio : Portfolio {
- private val topologies =
- listOf(
- Topology("base"),
- Topology("rep-vol-hor-hom"),
- Topology("rep-vol-hor-het"),
- Topology("rep-vol-ver-hom"),
- Topology("rep-vol-ver-het"),
- Topology("exp-vol-hor-hom"),
- Topology("exp-vol-hor-het"),
- Topology("exp-vol-ver-hom"),
- Topology("exp-vol-ver-het"),
- )
-
- private val workloads =
- listOf(
- Workload("solvinity-10%", trace("solvinity").sampleByLoad(0.1)),
- Workload("solvinity-25%", trace("solvinity").sampleByLoad(0.25)),
- Workload("solvinity-50%", trace("solvinity").sampleByLoad(0.5)),
- Workload("solvinity-100%", trace("solvinity").sampleByLoad(1.0)),
- )
- private val operationalPhenomena = OperationalPhenomena(failureFrequency = 24.0 * 7, hasInterference = true)
- private val allocationPolicy = "active-servers"
-
- override val scenarios: Iterable<Scenario> =
- topologies.flatMap { topology ->
- workloads.map { workload ->
- Scenario(
- topology,
- workload,
- operationalPhenomena,
- allocationPolicy,
- mapOf("topology" to topology.name, "workload" to workload.name),
- )
- }
- }
-}
diff --git a/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/portfolios/MoreHpcPortfolio.kt b/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/portfolios/MoreHpcPortfolio.kt
deleted file mode 100644
index e060ff14..00000000
--- a/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/portfolios/MoreHpcPortfolio.kt
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (c) 2022 AtLarge Research
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-package org.opendc.experiments.capelin.portfolios
-
-import org.opendc.compute.workload.sampleByHpc
-import org.opendc.compute.workload.sampleByHpcLoad
-import org.opendc.compute.workload.trace
-import org.opendc.experiments.base.portfolio.Portfolio
-import org.opendc.experiments.base.portfolio.model.OperationalPhenomena
-import org.opendc.experiments.base.portfolio.model.Scenario
-import org.opendc.experiments.base.portfolio.model.Topology
-import org.opendc.experiments.base.portfolio.model.Workload
-
-/**
- * A [Portfolio] to explore the effect of HPC workloads.
- */
-public class MoreHpcPortfolio : Portfolio {
- private val topologies =
- listOf(
- Topology("base"),
- Topology("exp-vol-hor-hom"),
- Topology("exp-vol-ver-hom"),
- Topology("exp-vel-ver-hom"),
- )
- private val workloads =
- listOf(
- Workload("hpc-0%", trace("solvinity").sampleByHpc(0.0)),
- Workload("hpc-25%", trace("solvinity").sampleByHpc(0.25)),
- Workload("hpc-50%", trace("solvinity").sampleByHpc(0.5)),
- Workload("hpc-100%", trace("solvinity").sampleByHpc(1.0)),
- Workload("hpc-load-25%", trace("solvinity").sampleByHpcLoad(0.25)),
- Workload("hpc-load-50%", trace("solvinity").sampleByHpcLoad(0.5)),
- Workload("hpc-load-100%", trace("solvinity").sampleByHpcLoad(1.0)),
- )
-
- private val operationalPhenomena = OperationalPhenomena(failureFrequency = 24.0 * 7, hasInterference = true)
- private val allocationPolicy: String = "active-servers"
-
- override val scenarios: Iterable<Scenario> =
- topologies.flatMap { topology ->
- workloads.map { workload ->
- Scenario(
- topology,
- workload,
- operationalPhenomena,
- allocationPolicy,
- mapOf("topology" to topology.name, "workload" to workload.name),
- )
- }
- }
-}
diff --git a/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/portfolios/MoreVelocityPortfolio.kt b/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/portfolios/MoreVelocityPortfolio.kt
deleted file mode 100644
index 0d6e190c..00000000
--- a/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/portfolios/MoreVelocityPortfolio.kt
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (c) 2022 AtLarge Research
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-package org.opendc.experiments.capelin.portfolios
-
-import org.opendc.compute.workload.sampleByLoad
-import org.opendc.compute.workload.trace
-import org.opendc.experiments.base.portfolio.Portfolio
-import org.opendc.experiments.base.portfolio.model.OperationalPhenomena
-import org.opendc.experiments.base.portfolio.model.Scenario
-import org.opendc.experiments.base.portfolio.model.Topology
-import org.opendc.experiments.base.portfolio.model.Workload
-
-/**
- * A [Portfolio] that explores the effect of adding more velocity to a cluster (e.g., faster machines).
- */
-public class MoreVelocityPortfolio : Portfolio {
- private val topologies =
- listOf(
- Topology("base"),
- Topology("rep-vel-ver-hom"),
- Topology("rep-vel-ver-het"),
- Topology("exp-vel-ver-hom"),
- Topology("exp-vel-ver-het"),
- )
-
- private val workloads =
- listOf(
- Workload("solvinity-10%", trace("solvinity").sampleByLoad(0.1)),
- Workload("solvinity-25%", trace("solvinity").sampleByLoad(0.25)),
- Workload("solvinity-50%", trace("solvinity").sampleByLoad(0.5)),
- Workload("solvinity-100%", trace("solvinity").sampleByLoad(1.0)),
- )
-
- private val operationalPhenomena = OperationalPhenomena(failureFrequency = 24.0 * 7, hasInterference = true)
- private val allocationPolicy = "active-servers"
-
- override val scenarios: Iterable<Scenario> =
- topologies.flatMap { topology ->
- workloads.map { workload ->
- Scenario(
- topology,
- workload,
- operationalPhenomena,
- allocationPolicy,
- mapOf("topology" to topology.name, "workload" to workload.name),
- )
- }
- }
-}
diff --git a/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/portfolios/OperationalPhenomenaPortfolio.kt b/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/portfolios/OperationalPhenomenaPortfolio.kt
deleted file mode 100644
index 17c8bb48..00000000
--- a/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/portfolios/OperationalPhenomenaPortfolio.kt
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (c) 2022 AtLarge Research
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-package org.opendc.experiments.capelin.portfolios
-
-import org.opendc.compute.workload.sampleByLoad
-import org.opendc.compute.workload.trace
-import org.opendc.experiments.base.portfolio.Portfolio
-import org.opendc.experiments.base.portfolio.model.OperationalPhenomena
-import org.opendc.experiments.base.portfolio.model.Scenario
-import org.opendc.experiments.base.portfolio.model.Topology
-import org.opendc.experiments.base.portfolio.model.Workload
-
-/**
- * A [Portfolio] that explores the effect of operational phenomena on metrics.
- */
-public class OperationalPhenomenaPortfolio : Portfolio {
- private val topology = Topology("base")
- private val workloads =
- listOf(
- Workload("solvinity-10%", trace("solvinity").sampleByLoad(0.1)),
- Workload("solvinity-25%", trace("solvinity").sampleByLoad(0.25)),
- Workload("solvinity-50%", trace("solvinity").sampleByLoad(0.5)),
- Workload("solvinity-100%", trace("solvinity").sampleByLoad(1.0)),
- )
-
- private val phenomenas =
- listOf(
- OperationalPhenomena(failureFrequency = 24.0 * 7, hasInterference = true),
- OperationalPhenomena(failureFrequency = 0.0, hasInterference = true),
- OperationalPhenomena(failureFrequency = 24.0 * 7, hasInterference = false),
- OperationalPhenomena(failureFrequency = 0.0, hasInterference = false),
- )
-
- private val allocationPolicies =
- listOf(
- "mem",
- "mem-inv",
- "core-mem",
- "core-mem-inv",
- "active-servers",
- "active-servers-inv",
- "random",
- )
-
- override val scenarios: Iterable<Scenario> =
- workloads.flatMap { workload ->
- phenomenas.flatMapIndexed { index, operationalPhenomena ->
- allocationPolicies.map { allocationPolicy ->
- Scenario(
- topology,
- workload,
- operationalPhenomena,
- allocationPolicy,
- mapOf("workload" to workload.name, "scheduler" to allocationPolicy, "phenomena" to index.toString()),
- )
- }
- }
- }
-}
diff --git a/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/portfolios/TestPortfolio.kt b/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/portfolios/TestPortfolio.kt
deleted file mode 100644
index 729fb017..00000000
--- a/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/portfolios/TestPortfolio.kt
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 2022 AtLarge Research
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-package org.opendc.experiments.capelin.portfolios
-
-import org.opendc.compute.workload.sampleByLoad
-import org.opendc.compute.workload.trace
-import org.opendc.experiments.base.portfolio.Portfolio
-import org.opendc.experiments.base.portfolio.model.OperationalPhenomena
-import org.opendc.experiments.base.portfolio.model.Scenario
-import org.opendc.experiments.base.portfolio.model.Topology
-import org.opendc.experiments.base.portfolio.model.Workload
-
-/**
- * A [Portfolio] to perform a simple test run.
- */
-public class TestPortfolio : Portfolio {
- override val scenarios: Iterable<Scenario> =
- listOf(
- Scenario(
- Topology("single"),
- Workload("bitbrains-small", trace("trace").sampleByLoad(1.0)),
- OperationalPhenomena(failureFrequency = 0.0, hasInterference = true),
- "active-servers",
- ),
- )
-}
diff --git a/opendc-experiments/opendc-experiments-capelin/src/main/resources/bitbrains-small/interference-model.json b/opendc-experiments/opendc-experiments-capelin/src/main/resources/bitbrains-small/interference-model.json
deleted file mode 100644
index 51fc6366..00000000
--- a/opendc-experiments/opendc-experiments-capelin/src/main/resources/bitbrains-small/interference-model.json
+++ /dev/null
@@ -1,21 +0,0 @@
-[
- {
- "vms": [
- "141",
- "379",
- "851",
- "116"
- ],
- "minServerLoad": 0.0,
- "performanceScore": 0.8830158730158756
- },
- {
- "vms": [
- "205",
- "116",
- "463"
- ],
- "minServerLoad": 0.0,
- "performanceScore": 0.7133055555552751
- }
-]
diff --git a/opendc-experiments/opendc-experiments-capelin/src/main/resources/bitbrains-small/trace/meta.parquet b/opendc-experiments/opendc-experiments-capelin/src/main/resources/bitbrains-small/trace/meta.parquet
deleted file mode 100644
index 9cded35f..00000000
--- a/opendc-experiments/opendc-experiments-capelin/src/main/resources/bitbrains-small/trace/meta.parquet
+++ /dev/null
Binary files differ
diff --git a/opendc-experiments/opendc-experiments-capelin/src/main/resources/bitbrains-small/trace/trace.parquet b/opendc-experiments/opendc-experiments-capelin/src/main/resources/bitbrains-small/trace/trace.parquet
deleted file mode 100644
index 9d953956..00000000
--- a/opendc-experiments/opendc-experiments-capelin/src/main/resources/bitbrains-small/trace/trace.parquet
+++ /dev/null
Binary files differ
diff --git a/opendc-experiments/opendc-experiments-capelin/src/main/resources/env/multi.txt b/opendc-experiments/opendc-experiments-capelin/src/main/resources/env/multi.txt
deleted file mode 100644
index 6b347bff..00000000
--- a/opendc-experiments/opendc-experiments-capelin/src/main/resources/env/multi.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-ClusterID;ClusterName;Cores;Speed;Memory;numberOfHosts;memoryCapacityPerHost;coreCountPerHost
-A01;A01;32;3.2;2048;1;256;32
-B01;B01;48;2.93;1256;6;64;8
-C01;C01;32;3.2;2048;2;128;16
-
diff --git a/opendc-experiments/opendc-experiments-capelin/src/main/resources/env/single.txt b/opendc-experiments/opendc-experiments-capelin/src/main/resources/env/single.txt
deleted file mode 100644
index 5642003d..00000000
--- a/opendc-experiments/opendc-experiments-capelin/src/main/resources/env/single.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-ClusterID;ClusterName;Cores;Speed;Memory;numberOfHosts;memoryCapacityPerHost;coreCountPerHost
-A01;A01;8;3.2;128;1;128;8
-
diff --git a/opendc-experiments/opendc-experiments-capelin/src/main/resources/log4j2.xml b/opendc-experiments/opendc-experiments-capelin/src/main/resources/log4j2.xml
deleted file mode 100644
index e479f2ca..00000000
--- a/opendc-experiments/opendc-experiments-capelin/src/main/resources/log4j2.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- ~ MIT License
- ~
- ~ Copyright (c) 2020 atlarge-research
- ~
- ~ Permission is hereby granted, free of charge, to any person obtaining a copy
- ~ of this software and associated documentation files (the "Software"), to deal
- ~ in the Software without restriction, including without limitation the rights
- ~ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- ~ copies of the Software, and to permit persons to whom the Software is
- ~ furnished to do so, subject to the following conditions:
- ~
- ~ The above copyright notice and this permission notice shall be included in all
- ~ copies or substantial portions of the Software.
- ~
- ~ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- ~ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- ~ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- ~ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- ~ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- ~ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- ~ SOFTWARE.
- -->
-
-<Configuration status="WARN">
- <Appenders>
- <Console name="Console" target="SYSTEM_OUT">
- <PatternLayout pattern="%d{HH:mm:ss.SSS} [%highlight{%-5level}] %logger{36} - %msg%n" disableAnsi="false"/>
- </Console>
- </Appenders>
- <Loggers>
- <Logger name="org.opendc" level="warn" additivity="false">
- <AppenderRef ref="Console"/>
- </Logger>
- <Logger name="org.apache.hadoop" level="warn" additivity="false">
- <AppenderRef ref="Console"/>
- </Logger>
- <Root level="error">
- <AppenderRef ref="Console"/>
- </Root>
- </Loggers>
-</Configuration>