summaryrefslogtreecommitdiff
path: root/opendc-experiments/opendc-experiments-capelin/src/test
diff options
context:
space:
mode:
authorFabian Mastenbroek <mail.fabianm@gmail.com>2022-04-22 21:55:32 +0200
committerGitHub <noreply@github.com>2022-04-22 21:55:32 +0200
commita7a5362c52274e4fef377cf68b53b4399679d304 (patch)
tree91b01df54833017b94e5a1b2d43dd1dfcbf29c62 /opendc-experiments/opendc-experiments-capelin/src/test
parent0f1be7a820d5e3b279e68209a5bb6219d176b732 (diff)
parentb6698d96fb1313909705604be2daf1170ea40d68 (diff)
merge: Improve discovery of interference models (#76)
This pull request intends to improve discovery of interference models. Previously, interference models were not tied to the workload trace, meaning they had to be resolved separately from the workload trace. In reality, the interference model is always tied to the particular workload trace. With this pull request, we integrate the interference model into the `odcvm` trace format and make it available through the `opendc-trace` library. This has as additional benefit that we can support different interference formats in the future using the same API. Furthermore, this change allows us to ship the interference model with the workload traces and resolve them automatically in the future using some form of package manager. ## Implementation Notes :hammer_and_pick: * Incorporate interference model in trace format * Load interference model via trace library * Move conventions into separate package ## External Dependencies :four_leaf_clover: * N/A ## Breaking API Changes :warning: * `VmInterferenceModelReader` has been removed from `opendc-compute-workload` * Table and column conventions have been moved in `org.opendc.trace.conv` package
Diffstat (limited to 'opendc-experiments/opendc-experiments-capelin/src/test')
-rw-r--r--opendc-experiments/opendc-experiments-capelin/src/test/kotlin/org/opendc/experiments/capelin/CapelinIntegrationTest.kt18
-rw-r--r--opendc-experiments/opendc-experiments-capelin/src/test/resources/trace/bitbrains-small/interference-model.json (renamed from opendc-experiments/opendc-experiments-capelin/src/test/resources/bitbrains-perf-interference.json)0
2 files changed, 6 insertions, 12 deletions
diff --git a/opendc-experiments/opendc-experiments-capelin/src/test/kotlin/org/opendc/experiments/capelin/CapelinIntegrationTest.kt b/opendc-experiments/opendc-experiments-capelin/src/test/kotlin/org/opendc/experiments/capelin/CapelinIntegrationTest.kt
index 891fc8be..01b2a8fe 100644
--- a/opendc-experiments/opendc-experiments-capelin/src/test/kotlin/org/opendc/experiments/capelin/CapelinIntegrationTest.kt
+++ b/opendc-experiments/opendc-experiments-capelin/src/test/kotlin/org/opendc/experiments/capelin/CapelinIntegrationTest.kt
@@ -35,7 +35,6 @@ import org.opendc.compute.workload.*
import org.opendc.compute.workload.telemetry.SdkTelemetryManager
import org.opendc.compute.workload.topology.Topology
import org.opendc.compute.workload.topology.apply
-import org.opendc.compute.workload.util.VmInterferenceModelReader
import org.opendc.experiments.capelin.topology.clusterTopology
import org.opendc.simulator.core.runBlockingSimulation
import org.opendc.telemetry.compute.ComputeMetricExporter
@@ -85,7 +84,7 @@ class CapelinIntegrationTest {
*/
@Test
fun testLarge() = runBlockingSimulation {
- val workload = createTestWorkload(1.0)
+ val (workload, _) = createTestWorkload(1.0)
val telemetry = SdkTelemetryManager(clock)
val runner = ComputeServiceHelper(
coroutineContext,
@@ -135,7 +134,7 @@ class CapelinIntegrationTest {
@Test
fun testSmall() = runBlockingSimulation {
val seed = 1
- val workload = createTestWorkload(0.25, seed)
+ val (workload, _) = createTestWorkload(0.25, seed)
val telemetry = SdkTelemetryManager(clock)
val runner = ComputeServiceHelper(
coroutineContext,
@@ -180,12 +179,7 @@ class CapelinIntegrationTest {
@Test
fun testInterference() = runBlockingSimulation {
val seed = 0
- val workload = createTestWorkload(1.0, seed)
- val perfInterferenceInput = checkNotNull(CapelinIntegrationTest::class.java.getResourceAsStream("/bitbrains-perf-interference.json"))
- val performanceInterferenceModel =
- VmInterferenceModelReader()
- .read(perfInterferenceInput)
- .withSeed(seed.toLong())
+ val (workload, interferenceModel) = createTestWorkload(1.0, seed)
val telemetry = SdkTelemetryManager(clock)
val simulator = ComputeServiceHelper(
@@ -193,7 +187,7 @@ class CapelinIntegrationTest {
clock,
telemetry,
computeScheduler,
- interferenceModel = performanceInterferenceModel
+ interferenceModel = interferenceModel?.withSeed(seed.toLong())
)
val topology = createTopology("single")
@@ -240,7 +234,7 @@ class CapelinIntegrationTest {
grid5000(Duration.ofDays(7))
)
val topology = createTopology("single")
- val workload = createTestWorkload(0.25, seed)
+ val (workload, _) = createTestWorkload(0.25, seed)
telemetry.registerMetricReader(CoroutineMetricReader(this, exporter))
@@ -274,7 +268,7 @@ class CapelinIntegrationTest {
/**
* Obtain the trace reader for the test.
*/
- private fun createTestWorkload(fraction: Double, seed: Int = 0): List<VirtualMachine> {
+ private fun createTestWorkload(fraction: Double, seed: Int = 0): ComputeWorkload.Resolved {
val source = trace("bitbrains-small").sampleByLoad(fraction)
return source.resolve(workloadLoader, Random(seed.toLong()))
}
diff --git a/opendc-experiments/opendc-experiments-capelin/src/test/resources/bitbrains-perf-interference.json b/opendc-experiments/opendc-experiments-capelin/src/test/resources/trace/bitbrains-small/interference-model.json
index 51fc6366..51fc6366 100644
--- a/opendc-experiments/opendc-experiments-capelin/src/test/resources/bitbrains-perf-interference.json
+++ b/opendc-experiments/opendc-experiments-capelin/src/test/resources/trace/bitbrains-small/interference-model.json