summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--opendc-compute/opendc-compute-simulator/src/main/java/org/opendc/compute/simulator/service/ComputeService.java17
-rw-r--r--opendc-compute/opendc-compute-simulator/src/main/java/org/opendc/compute/simulator/service/ServiceTask.java5
-rw-r--r--opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/provisioner/ComputeMonitorProvisioningStep.kt2
-rw-r--r--opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/provisioner/ComputeSteps.kt3
-rw-r--r--opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/telemetry/ComputeMetricReader.kt5
-rw-r--r--opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/ComputeWorkloadLoader.kt2
-rw-r--r--opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/Task.kt5
-rw-r--r--opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/WorkloadLoader.kt22
-rw-r--r--opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/ExportModelSpec.kt1
-rw-r--r--opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioReplayer.kt2
-rw-r--r--opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioRunner.kt5
-rw-r--r--opendc-experiments/opendc-experiments-base/src/test/kotlin/org/opendc/experiments/base/TestingUtils.kt6
-rw-r--r--opendc-web/opendc-web-runner/src/main/kotlin/org/opendc/web/runner/OpenDCRunner.kt2
13 files changed, 34 insertions, 43 deletions
diff --git a/opendc-compute/opendc-compute-simulator/src/main/java/org/opendc/compute/simulator/service/ComputeService.java b/opendc-compute/opendc-compute-simulator/src/main/java/org/opendc/compute/simulator/service/ComputeService.java
index 1fb9c6a2..eb8d3377 100644
--- a/opendc-compute/opendc-compute-simulator/src/main/java/org/opendc/compute/simulator/service/ComputeService.java
+++ b/opendc-compute/opendc-compute-simulator/src/main/java/org/opendc/compute/simulator/service/ComputeService.java
@@ -34,7 +34,6 @@ import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import java.util.Objects;
import java.util.Set;
import java.util.SplittableRandom;
import java.util.UUID;
@@ -594,15 +593,16 @@ public final class ComputeService implements AutoCloseable {
}
@NotNull
- public Flavor newFlavor(@NotNull String name, int cpuCount, long memorySize, @NotNull Map<String, ?> meta) {
+ public ServiceFlavor newFlavor(
+ @NotNull String name, int cpuCount, long memorySize, @NotNull Map<String, ?> meta) {
checkOpen();
final ComputeService service = this.service;
UUID uid = new UUID(service.clock.millis(), service.random.nextLong());
ServiceFlavor flavor = new ServiceFlavor(service, uid, name, cpuCount, memorySize, meta);
- service.flavorById.put(uid, flavor);
- service.flavors.add(flavor);
+ // service.flavorById.put(uid, flavor);
+ // service.flavors.add(flavor);
return flavor;
}
@@ -642,7 +642,7 @@ public final class ComputeService implements AutoCloseable {
@NotNull
public ServiceTask newTask(
@NotNull String name,
- @NotNull Flavor flavor,
+ @NotNull ServiceFlavor flavor,
@NotNull Workload workload,
@NotNull Map<String, ?> meta) {
checkOpen();
@@ -650,10 +650,11 @@ public final class ComputeService implements AutoCloseable {
final ComputeService service = this.service;
UUID uid = new UUID(service.clock.millis(), service.random.nextLong());
- final ServiceFlavor internalFlavor =
- Objects.requireNonNull(service.flavorById.get(flavor.getUid()), "Unknown flavor");
+ // final ServiceFlavor internalFlavor =
+ // Objects.requireNonNull(service.flavorById.get(flavor.getUid()), "Unknown flavor");
- ServiceTask task = new ServiceTask(service, uid, name, internalFlavor, workload, meta);
+ // ServiceTask task = new ServiceTask(service, uid, name, internalFlavor, workload, meta);
+ ServiceTask task = new ServiceTask(service, uid, name, flavor, workload, meta);
service.taskById.put(uid, task);
diff --git a/opendc-compute/opendc-compute-simulator/src/main/java/org/opendc/compute/simulator/service/ServiceTask.java b/opendc-compute/opendc-compute-simulator/src/main/java/org/opendc/compute/simulator/service/ServiceTask.java
index 06d6535d..dac65d67 100644
--- a/opendc-compute/opendc-compute-simulator/src/main/java/org/opendc/compute/simulator/service/ServiceTask.java
+++ b/opendc-compute/opendc-compute-simulator/src/main/java/org/opendc/compute/simulator/service/ServiceTask.java
@@ -49,7 +49,7 @@ public class ServiceTask {
private final UUID uid;
private final String name;
- private final ServiceFlavor flavor;
+ private ServiceFlavor flavor;
public Workload workload;
private Map<String, ?> meta; // TODO: remove this
@@ -181,6 +181,9 @@ public class ServiceTask {
}
service.delete(this);
+ this.workload = null;
+ this.flavor = null;
+
this.setState(TaskState.DELETED);
}
diff --git a/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/provisioner/ComputeMonitorProvisioningStep.kt b/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/provisioner/ComputeMonitorProvisioningStep.kt
index cec664b6..e1ce0dbd 100644
--- a/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/provisioner/ComputeMonitorProvisioningStep.kt
+++ b/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/provisioner/ComputeMonitorProvisioningStep.kt
@@ -45,6 +45,7 @@ public class ComputeMonitorProvisioningStep(
OutputFiles.POWER_SOURCE to true,
OutputFiles.BATTERY to true,
),
+ private val printFrequency: Int? = null,
) : ProvisioningStep {
override fun apply(ctx: ProvisioningContext): AutoCloseable {
val service =
@@ -59,6 +60,7 @@ public class ComputeMonitorProvisioningStep(
exportInterval,
startTime,
filesToExport,
+ printFrequency,
)
return metricReader
}
diff --git a/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/provisioner/ComputeSteps.kt b/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/provisioner/ComputeSteps.kt
index c72e8944..a18856f8 100644
--- a/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/provisioner/ComputeSteps.kt
+++ b/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/provisioner/ComputeSteps.kt
@@ -68,8 +68,9 @@ public fun registerComputeMonitor(
OutputFiles.POWER_SOURCE to true,
OutputFiles.BATTERY to true,
),
+ printFrequency: Int? = null,
): ProvisioningStep {
- return ComputeMonitorProvisioningStep(serviceDomain, monitor, exportInterval, startTime, filesToExport)
+ return ComputeMonitorProvisioningStep(serviceDomain, monitor, exportInterval, startTime, filesToExport, printFrequency)
}
/**
diff --git a/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/telemetry/ComputeMetricReader.kt b/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/telemetry/ComputeMetricReader.kt
index c88b98ea..83899678 100644
--- a/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/telemetry/ComputeMetricReader.kt
+++ b/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/telemetry/ComputeMetricReader.kt
@@ -64,6 +64,7 @@ public class ComputeMetricReader(
OutputFiles.BATTERY to true,
OutputFiles.SERVICE to true,
),
+ private val printFrequency: Int? = null,
) : AutoCloseable {
private val logger = KotlinLogging.logger {}
private val scope = CoroutineScope(dispatcher.asCoroutineDispatcher())
@@ -156,6 +157,7 @@ public class ComputeMetricReader(
}
for (task in this.service.tasksToRemove) {
+ this.taskTableReaders.remove(task)
task.delete()
}
this.service.clearTasksToRemove()
@@ -197,7 +199,7 @@ public class ComputeMetricReader(
monitor.record(this.serviceTableReader.copy())
}
- if (loggCounter >= 24) {
+ if (printFrequency != null && loggCounter % printFrequency == 0) {
var loggString = "\n\t\t\t\t\tMetrics after ${now.toEpochMilli() / 1000 / 60 / 60} hours:\n"
loggString += "\t\t\t\t\t\tTasks Total: ${this.serviceTableReader.tasksTotal}\n"
loggString += "\t\t\t\t\t\tTasks Active: ${this.serviceTableReader.tasksActive}\n"
@@ -206,7 +208,6 @@ public class ComputeMetricReader(
loggString += "\t\t\t\t\t\tTasks Terminated: ${this.serviceTableReader.tasksTerminated}\n"
this.logger.warn { loggString }
- loggCounter = 0
}
} catch (cause: Throwable) {
this.logger.warn(cause) { "Exporter threw an Exception" }
diff --git a/opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/ComputeWorkloadLoader.kt b/opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/ComputeWorkloadLoader.kt
index 2b8b589f..cbff5fb9 100644
--- a/opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/ComputeWorkloadLoader.kt
+++ b/opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/ComputeWorkloadLoader.kt
@@ -126,7 +126,7 @@ public class ComputeWorkloadLoader(
continue
}
- val submissionTime = reader.getInstant(submissionTimeCol)!!
+ val submissionTime = reader.getInstant(submissionTimeCol)!!.toEpochMilli()
val duration = reader.getLong(durationCol)
val cpuCount = reader.getInt(cpuCountCol)
val cpuCapacity = reader.getDouble(cpuCapacityCol)
diff --git a/opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/Task.kt b/opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/Task.kt
index 7a5089b9..d32c84f6 100644
--- a/opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/Task.kt
+++ b/opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/Task.kt
@@ -23,7 +23,6 @@
package org.opendc.compute.workload
import org.opendc.simulator.compute.workload.trace.TraceWorkload
-import java.time.Instant
import java.util.UUID
/**
@@ -45,7 +44,7 @@ public data class Task(
val cpuCapacity: Double,
val memCapacity: Long,
val totalLoad: Double,
- var submissionTime: Instant,
+ var submissionTime: Long,
val duration: Long,
- val trace: TraceWorkload,
+ var trace: TraceWorkload,
)
diff --git a/opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/WorkloadLoader.kt b/opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/WorkloadLoader.kt
index ecb98ba2..6b9c3753 100644
--- a/opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/WorkloadLoader.kt
+++ b/opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/WorkloadLoader.kt
@@ -22,7 +22,6 @@
package org.opendc.compute.workload
import mu.KotlinLogging
-import java.time.Instant
import java.time.LocalDateTime
import java.time.ZoneOffset
@@ -34,13 +33,13 @@ public abstract class WorkloadLoader(private val submissionTime: String? = null)
return
}
- val workloadSubmissionTime = workload.minOf({ it.submissionTime }).toEpochMilli()
+ val workloadSubmissionTime = workload.minOf({ it.submissionTime })
val submissionTimeLong = LocalDateTime.parse(submissionTime).toInstant(ZoneOffset.UTC).toEpochMilli()
val timeShift = submissionTimeLong - workloadSubmissionTime
for (task in workload) {
- task.submissionTime = Instant.ofEpochMilli(task.submissionTime.toEpochMilli() + timeShift)
+ task.submissionTime += timeShift
}
}
@@ -54,10 +53,6 @@ public abstract class WorkloadLoader(private val submissionTime: String? = null)
reScheduleTasks(workload)
-// if (fraction >= 1.0) {
-// return workload
-// }
-
if (fraction <= 0.0) {
throw Error("The fraction of tasks to load cannot be 0.0 or lower")
}
@@ -75,19 +70,6 @@ public abstract class WorkloadLoader(private val submissionTime: String? = null)
currentLoad += entry.totalLoad
}
-// val shuffledWorkload = workload.shuffled()
-// for (entry in shuffledWorkload) {
-// val entryLoad = entry.totalLoad
-//
-// // TODO: ask Sacheen
-// if ((currentLoad + entryLoad) / totalLoad > fraction) {
-// break
-// }
-//
-// currentLoad += entryLoad
-// res += entry
-// }
-
logger.info { "Sampled ${workload.size} VMs (fraction $fraction) into subset of ${res.size} VMs" }
return res
diff --git a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/ExportModelSpec.kt b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/ExportModelSpec.kt
index a345fcb9..6d1ee0f0 100644
--- a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/ExportModelSpec.kt
+++ b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/ExportModelSpec.kt
@@ -37,6 +37,7 @@ public data class ExportModelSpec(
val computeExportConfig: ComputeExportConfig = ComputeExportConfig.ALL_COLUMNS,
val filesToExport: List<OutputFiles> = OutputFiles.entries.toList(),
var filesToExportDict: MutableMap<OutputFiles, Boolean> = OutputFiles.entries.associateWith { false }.toMutableMap(),
+ var printFrequency: Int? = 24,
) {
init {
require(exportInterval > 0) { "The Export interval has to be higher than 0" }
diff --git a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioReplayer.kt b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioReplayer.kt
index 45fedd0d..5664e0cb 100644
--- a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioReplayer.kt
+++ b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioReplayer.kt
@@ -104,7 +104,7 @@ public suspend fun ComputeService.replay(
for (entry in trace.sortedBy { it.submissionTime }) {
val now = clock.millis()
- val start = entry.submissionTime.toEpochMilli()
+ val start = entry.submissionTime
// Set the simulationOffset based on the starting time of the first task
if (simulationOffset == Long.MIN_VALUE) {
diff --git a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioRunner.kt b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioRunner.kt
index 683bd5b6..4da035ec 100644
--- a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioRunner.kt
+++ b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioRunner.kt
@@ -93,9 +93,9 @@ public fun runScenario(
checkpointIntervalScaling,
scalingPolicy,
)
- val workload = workloadLoader.sampleByLoad(scenario.workloadSpec.sampleFraction)
+ var workload = workloadLoader.sampleByLoad(scenario.workloadSpec.sampleFraction)
- val startTimeLong = workload.minOf { it.submissionTime }.toEpochMilli()
+ val startTimeLong = workload.minOf { it.submissionTime }
val startTime = Duration.ofMillis(startTimeLong)
val topology = clusterTopology(scenario.topologySpec.pathToFile)
@@ -153,6 +153,7 @@ public fun addExportModel(
Duration.ofSeconds(scenario.exportModelSpec.exportInterval),
startTime,
scenario.exportModelSpec.filesToExportDict,
+ scenario.exportModelSpec.printFrequency,
),
)
}
diff --git a/opendc-experiments/opendc-experiments-base/src/test/kotlin/org/opendc/experiments/base/TestingUtils.kt b/opendc-experiments/opendc-experiments-base/src/test/kotlin/org/opendc/experiments/base/TestingUtils.kt
index 408e1496..68de1773 100644
--- a/opendc-experiments/opendc-experiments-base/src/test/kotlin/org/opendc/experiments/base/TestingUtils.kt
+++ b/opendc-experiments/opendc-experiments-base/src/test/kotlin/org/opendc/experiments/base/TestingUtils.kt
@@ -80,7 +80,7 @@ fun createTestTask(
fragments.maxOf { it.cpuUsage },
memCapacity,
1800000.0,
- LocalDateTime.parse(submissionTime).toInstant(ZoneOffset.UTC),
+ LocalDateTime.parse(submissionTime).toInstant(ZoneOffset.UTC).toEpochMilli(),
duration,
TraceWorkload(
fragments,
@@ -108,7 +108,7 @@ fun runTest(
val seed = 0L
Provisioner(dispatcher, seed).use { provisioner ->
- val startTimeLong = workload.minOf { it.submissionTime }.toEpochMilli()
+ val startTimeLong = workload.minOf { it.submissionTime }
val startTime = Duration.ofMillis(startTimeLong)
provisioner.runSteps(
@@ -121,7 +121,7 @@ fun runTest(
service.setTasksExpected(workload.size)
service.setMetricReader(provisioner.getMonitor())
- service.replay(timeSource, workload, failureModelSpec = failureModelSpec)
+ service.replay(timeSource, ArrayDeque(workload), failureModelSpec = failureModelSpec)
}
}
diff --git a/opendc-web/opendc-web-runner/src/main/kotlin/org/opendc/web/runner/OpenDCRunner.kt b/opendc-web/opendc-web-runner/src/main/kotlin/org/opendc/web/runner/OpenDCRunner.kt
index 2f23d33b..7c5c6290 100644
--- a/opendc-web/opendc-web-runner/src/main/kotlin/org/opendc/web/runner/OpenDCRunner.kt
+++ b/opendc-web/opendc-web-runner/src/main/kotlin/org/opendc/web/runner/OpenDCRunner.kt
@@ -274,7 +274,7 @@ public class OpenDCRunner(
// val vms = workload.resolve(workloadLoader, Random(seed))
val vms = workloadLoader.sampleByLoad(scenario.workload.samplingFraction)
- val startTime = vms.minOf { it.submissionTime }.toEpochMilli()
+ val startTime = vms.minOf { it.submissionTime }
provisioner.runSteps(
setupComputeService(