summaryrefslogtreecommitdiff
path: root/opendc-experiments/opendc-experiments-m3sa/src/test
diff options
context:
space:
mode:
authorRadu Nicolae <rnicolae04@gmail.com>2025-06-16 18:01:07 +0200
committerGitHub <noreply@github.com>2025-06-16 18:01:07 +0200
commit0df3d9ced743ac3385dd710c7133a6cf369b051c (patch)
treeeff5d6d67c275643e229731ba08c5fe7dc4ccd0a /opendc-experiments/opendc-experiments-m3sa/src/test
parentc7e303ad1b5217e2ff24cee9538ac841d6149706 (diff)
integrated M3SA, updated with tests and CpuPowerModels
Diffstat (limited to 'opendc-experiments/opendc-experiments-m3sa/src/test')
-rw-r--r--opendc-experiments/opendc-experiments-m3sa/src/test/kotlin/org/opendc/experiments/m3sa/M3SARunnerTest.kt50
-rw-r--r--opendc-experiments/opendc-experiments-m3sa/src/test/resources/carbonTraces/experiment1/co2.parquetbin0 -> 633218 bytes
-rw-r--r--opendc-experiments/opendc-experiments-m3sa/src/test/resources/m3saSetups/experiment1/m3saSetup.json28
-rw-r--r--opendc-experiments/opendc-experiments-m3sa/src/test/resources/scenarios/experiment1/scenario_metamodel.json36
-rw-r--r--opendc-experiments/opendc-experiments-m3sa/src/test/resources/topologies/experiment1/topology_asymptotic1.json31
-rw-r--r--opendc-experiments/opendc-experiments-m3sa/src/test/resources/topologies/experiment1/topology_asymptotic2.json31
-rw-r--r--opendc-experiments/opendc-experiments-m3sa/src/test/resources/topologies/experiment1/topology_mse.json30
-rw-r--r--opendc-experiments/opendc-experiments-m3sa/src/test/resources/topologies/experiment1/topology_sqrt.json29
-rw-r--r--opendc-experiments/opendc-experiments-m3sa/src/test/resources/workloadTraces/experiment1/fragments.parquetbin0 -> 1647901 bytes
-rw-r--r--opendc-experiments/opendc-experiments-m3sa/src/test/resources/workloadTraces/experiment1/tasks.parquetbin0 -> 115791 bytes
10 files changed, 235 insertions, 0 deletions
diff --git a/opendc-experiments/opendc-experiments-m3sa/src/test/kotlin/org/opendc/experiments/m3sa/M3SARunnerTest.kt b/opendc-experiments/opendc-experiments-m3sa/src/test/kotlin/org/opendc/experiments/m3sa/M3SARunnerTest.kt
new file mode 100644
index 00000000..8d8bae5f
--- /dev/null
+++ b/opendc-experiments/opendc-experiments-m3sa/src/test/kotlin/org/opendc/experiments/m3sa/M3SARunnerTest.kt
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2025 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.m3sa
+
+import org.junit.jupiter.api.Assertions.assertDoesNotThrow
+import org.junit.jupiter.api.Assertions.assertTrue
+import org.junit.jupiter.api.Test
+import org.opendc.experiments.m3sa.runner.main
+import java.io.File
+
+class M3SARunnerTest {
+ @Test
+ fun `Run M3SA-OpenDC full integration 1`() {
+ val scenarioJson = "src/test/resources/scenarios/experiment1/scenario_metamodel.json"
+ val outDir = "src/test/resources/outputs/"
+ val m3saPath = "src/test/resources/m3saSetups/experiment1/m3saSetup.json"
+ val m3saExecPath = "src/main/python"
+ File(outDir).deleteRecursively()
+
+ assertDoesNotThrow {
+ main(
+ arrayOf("--experiment-path", scenarioJson, "--m3sa-setup-path", m3saPath, "--m3sa-exec-path", m3saExecPath),
+ )
+ }
+
+ assertTrue(File(outDir).exists(), "Expected simulation to create $outDir")
+ assertTrue(File("$outDir/trackr.json").exists(), "Expected trackr.json to be created in $outDir")
+ assertTrue(File("$outDir/trackr.json").readText().isNotEmpty(), "Expected trackr.json to contain data")
+ }
+}
diff --git a/opendc-experiments/opendc-experiments-m3sa/src/test/resources/carbonTraces/experiment1/co2.parquet b/opendc-experiments/opendc-experiments-m3sa/src/test/resources/carbonTraces/experiment1/co2.parquet
new file mode 100644
index 00000000..0e4b241a
--- /dev/null
+++ b/opendc-experiments/opendc-experiments-m3sa/src/test/resources/carbonTraces/experiment1/co2.parquet
Binary files differ
diff --git a/opendc-experiments/opendc-experiments-m3sa/src/test/resources/m3saSetups/experiment1/m3saSetup.json b/opendc-experiments/opendc-experiments-m3sa/src/test/resources/m3saSetups/experiment1/m3saSetup.json
new file mode 100644
index 00000000..b70dfa15
--- /dev/null
+++ b/opendc-experiments/opendc-experiments-m3sa/src/test/resources/m3saSetups/experiment1/m3saSetup.json
@@ -0,0 +1,28 @@
+{
+ "multimodel": true,
+ "metamodel": true,
+ "metric": "power_draw",
+ "window_size": 10,
+ "window_function": "mean",
+ "meta_function": "mean",
+ "samples_per_minute": 2,
+ "plot_type": "time_series",
+ "y_ticks_count": 4,
+ "x_ticks_count": 5,
+ "y_min": 0,
+ "y_max": 33,
+ "y_label": "Power Draw [kw]",
+ "x_label": "Time [day/month]",
+ "current_unit": "",
+ "unit_scaling_magnitude": 3,
+ "figsize": [15, 5],
+ "plot_colors": [
+ "#B1B1B100",
+ "#B1B1B100",
+ "#B1B1B100",
+ "#B1B1B100",
+ "#0277BB",
+ "#EE7833"
+ ],
+ "figure_export_name": "figure-9C"
+}
diff --git a/opendc-experiments/opendc-experiments-m3sa/src/test/resources/scenarios/experiment1/scenario_metamodel.json b/opendc-experiments/opendc-experiments-m3sa/src/test/resources/scenarios/experiment1/scenario_metamodel.json
new file mode 100644
index 00000000..aace3d93
--- /dev/null
+++ b/opendc-experiments/opendc-experiments-m3sa/src/test/resources/scenarios/experiment1/scenario_metamodel.json
@@ -0,0 +1,36 @@
+{
+ "name": "outputs/",
+ "topologies": [
+ {
+ "pathToFile": "src/test/resources/topologies/experiment1/topology_mse.json"
+ },
+ {
+ "pathToFile": "src/test/resources/topologies/experiment1/topology_sqrt.json"
+ },
+ {
+ "pathToFile": "src/test/resources/topologies/experiment1/topology_asymptotic1.json"
+ },
+ {
+ "pathToFile": "src/test/resources/topologies/experiment1/topology_asymptotic2.json"
+ }
+ ],
+ "workloads": [
+ {
+ "pathToFile": "src/test/resources/workloadTraces/experiment1",
+ "type": "ComputeWorkload"
+ }
+ ],
+ "allocationPolicies": [
+ {
+ "policyName": "Mem",
+ "type": "prefab"
+ }
+ ],
+ "exportModels": [
+ {
+ "exportInterval": 30000
+ }
+ ],
+ "outputFolder": "src/test/resources/",
+ "runs": 1
+}
diff --git a/opendc-experiments/opendc-experiments-m3sa/src/test/resources/topologies/experiment1/topology_asymptotic1.json b/opendc-experiments/opendc-experiments-m3sa/src/test/resources/topologies/experiment1/topology_asymptotic1.json
new file mode 100644
index 00000000..884d27a4
--- /dev/null
+++ b/opendc-experiments/opendc-experiments-m3sa/src/test/resources/topologies/experiment1/topology_asymptotic1.json
@@ -0,0 +1,31 @@
+{
+ "clusters": [
+ {
+ "name": "A01",
+ "hosts": [
+ {
+ "name": "A01",
+ "count": 277,
+ "cpu": {
+ "coreCount": 16,
+ "coreSpeed": 2100
+ },
+ "memory": {
+ "memorySize": 128000000
+ },
+ "powerModel": {
+ "modelType": "asymptotic",
+ "power": 400.0,
+ "idlePower": 32.0,
+ "maxPower": 180.0,
+ "asymUtil": 0.3,
+ "dvfs": false
+ }
+ }
+ ],
+ "powerSource": {
+ "carbonTracePath": "src/test/resources/carbonTraces/experiment1/co2.parquet"
+ }
+ }
+ ]
+}
diff --git a/opendc-experiments/opendc-experiments-m3sa/src/test/resources/topologies/experiment1/topology_asymptotic2.json b/opendc-experiments/opendc-experiments-m3sa/src/test/resources/topologies/experiment1/topology_asymptotic2.json
new file mode 100644
index 00000000..612d5e5a
--- /dev/null
+++ b/opendc-experiments/opendc-experiments-m3sa/src/test/resources/topologies/experiment1/topology_asymptotic2.json
@@ -0,0 +1,31 @@
+{
+ "clusters": [
+ {
+ "name": "A01",
+ "hosts": [
+ {
+ "name": "A01",
+ "count": 277,
+ "cpu": {
+ "coreCount": 16,
+ "coreSpeed": 2100
+ },
+ "memory": {
+ "memorySize": 128000000
+ },
+ "powerModel": {
+ "modelType": "asymptotic",
+ "power": 400.0,
+ "idlePower": 32.0,
+ "maxPower": 180.0,
+ "asymUtil": 0.3,
+ "dvfs": true
+ }
+ }
+ ],
+ "powerSource": {
+ "carbonTracePath": "src/test/resources/carbonTraces/experiment1/co2.parquet"
+ }
+ }
+ ]
+}
diff --git a/opendc-experiments/opendc-experiments-m3sa/src/test/resources/topologies/experiment1/topology_mse.json b/opendc-experiments/opendc-experiments-m3sa/src/test/resources/topologies/experiment1/topology_mse.json
new file mode 100644
index 00000000..0cfef148
--- /dev/null
+++ b/opendc-experiments/opendc-experiments-m3sa/src/test/resources/topologies/experiment1/topology_mse.json
@@ -0,0 +1,30 @@
+{
+ "clusters": [
+ {
+ "name": "A01",
+ "hosts": [
+ {
+ "name": "A01",
+ "count": 277,
+ "cpu": {
+ "coreCount": 16,
+ "coreSpeed": 2100
+ },
+ "memory": {
+ "memorySize": 128000000
+ },
+ "powerModel": {
+ "modelType": "mse",
+ "power": 400.0,
+ "idlePower": 32.0,
+ "maxPower": 180.0,
+ "calibrationFactor": 10.0
+ }
+ }
+ ],
+ "powerSource": {
+ "carbonTracePath": "src/test/resources/carbonTraces/experiment1/co2.parquet"
+ }
+ }
+ ]
+}
diff --git a/opendc-experiments/opendc-experiments-m3sa/src/test/resources/topologies/experiment1/topology_sqrt.json b/opendc-experiments/opendc-experiments-m3sa/src/test/resources/topologies/experiment1/topology_sqrt.json
new file mode 100644
index 00000000..c02c8b80
--- /dev/null
+++ b/opendc-experiments/opendc-experiments-m3sa/src/test/resources/topologies/experiment1/topology_sqrt.json
@@ -0,0 +1,29 @@
+{
+ "clusters": [
+ {
+ "name": "A01",
+ "hosts": [
+ {
+ "name": "A01",
+ "count": 277,
+ "cpu": {
+ "coreCount": 16,
+ "coreSpeed": 2100
+ },
+ "memory": {
+ "memorySize": 128000000
+ },
+ "powerModel": {
+ "modelType": "sqrt",
+ "power": 400.0,
+ "idlePower": 32.0,
+ "maxPower": 180.0
+ }
+ }
+ ],
+ "powerSource": {
+ "carbonTracePath": "src/test/resources/carbonTraces/experiment1/co2.parquet"
+ }
+ }
+ ]
+}
diff --git a/opendc-experiments/opendc-experiments-m3sa/src/test/resources/workloadTraces/experiment1/fragments.parquet b/opendc-experiments/opendc-experiments-m3sa/src/test/resources/workloadTraces/experiment1/fragments.parquet
new file mode 100644
index 00000000..07fb97d4
--- /dev/null
+++ b/opendc-experiments/opendc-experiments-m3sa/src/test/resources/workloadTraces/experiment1/fragments.parquet
Binary files differ
diff --git a/opendc-experiments/opendc-experiments-m3sa/src/test/resources/workloadTraces/experiment1/tasks.parquet b/opendc-experiments/opendc-experiments-m3sa/src/test/resources/workloadTraces/experiment1/tasks.parquet
new file mode 100644
index 00000000..1e35963b
--- /dev/null
+++ b/opendc-experiments/opendc-experiments-m3sa/src/test/resources/workloadTraces/experiment1/tasks.parquet
Binary files differ