summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--opendc/opendc-core/src/main/kotlin/com/atlarge/opendc/core/workload/PerformanceInterferenceModel.kt6
-rw-r--r--opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/TestExperiment.kt2
-rw-r--r--opendc/opendc-experiments-sc20/src/main/resources/env/performance-interference.json4
-rw-r--r--opendc/opendc-format/src/main/kotlin/com/atlarge/opendc/format/trace/vm/VmTraceReader.kt21
4 files changed, 28 insertions, 5 deletions
diff --git a/opendc/opendc-core/src/main/kotlin/com/atlarge/opendc/core/workload/PerformanceInterferenceModel.kt b/opendc/opendc-core/src/main/kotlin/com/atlarge/opendc/core/workload/PerformanceInterferenceModel.kt
index 310b3a27..54052a0e 100644
--- a/opendc/opendc-core/src/main/kotlin/com/atlarge/opendc/core/workload/PerformanceInterferenceModel.kt
+++ b/opendc/opendc-core/src/main/kotlin/com/atlarge/opendc/core/workload/PerformanceInterferenceModel.kt
@@ -1,5 +1,6 @@
package com.atlarge.opendc.core.workload
+import com.atlarge.opendc.core.resource.Resource
import java.util.UUID
/**
@@ -10,9 +11,10 @@ import java.util.UUID
data class PerformanceInterferenceModel(
val items: Set<PerformanceInterferenceModelItem>
) {
- fun apply(colocatedWorkloads: Set<Workload>): Double {
+ fun apply(colocatedWorkloads: Set<Resource>): Double {
+ val colocatedWorkloadIds = colocatedWorkloads.map { it.uid }
val intersectingItems = items.filter { item ->
- colocatedWorkloads.map { it.uid }.intersect(item.workloadIds).size > 1
+ colocatedWorkloadIds.intersect(item.workloadIds).size > 1
}
if (intersectingItems.isEmpty()) {
diff --git a/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/TestExperiment.kt b/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/TestExperiment.kt
index 7a67fc23..f4be75fa 100644
--- a/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/TestExperiment.kt
+++ b/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/TestExperiment.kt
@@ -81,7 +81,7 @@ fun main(args: Array<String>) {
Sc20HypervisorMonitor()
)
- val reader = VmTraceReader(File(args[0]))
+ val reader = VmTraceReader(File(args[0]), performanceInterferenceModel)
delay(1376314846 * 1000L)
while (reader.hasNext()) {
val (time, workload) = reader.next()
diff --git a/opendc/opendc-experiments-sc20/src/main/resources/env/performance-interference.json b/opendc/opendc-experiments-sc20/src/main/resources/env/performance-interference.json
index 0d4f101c..e2437693 100644
--- a/opendc/opendc-experiments-sc20/src/main/resources/env/performance-interference.json
+++ b/opendc/opendc-experiments-sc20/src/main/resources/env/performance-interference.json
@@ -1,2 +1,6 @@
[
+ {
+ "vms": [545, 223],
+ "performanceScore": 0.6
+ }
]
diff --git a/opendc/opendc-format/src/main/kotlin/com/atlarge/opendc/format/trace/vm/VmTraceReader.kt b/opendc/opendc-format/src/main/kotlin/com/atlarge/opendc/format/trace/vm/VmTraceReader.kt
index 2e881a6c..2867e993 100644
--- a/opendc/opendc-format/src/main/kotlin/com/atlarge/opendc/format/trace/vm/VmTraceReader.kt
+++ b/opendc/opendc-format/src/main/kotlin/com/atlarge/opendc/format/trace/vm/VmTraceReader.kt
@@ -28,6 +28,7 @@ import com.atlarge.opendc.compute.core.image.FlopsHistoryFragment
import com.atlarge.opendc.compute.core.image.VmImage
import com.atlarge.opendc.compute.core.workload.VmWorkload
import com.atlarge.opendc.core.User
+import com.atlarge.opendc.core.workload.PerformanceInterferenceModel
import com.atlarge.opendc.format.trace.TraceEntry
import com.atlarge.opendc.format.trace.TraceReader
import java.io.BufferedReader
@@ -39,8 +40,12 @@ import java.util.UUID
* A [TraceReader] for the VM workload trace format.
*
* @param traceDirectory The directory of the traces.
+ * @param performanceInterferenceModel The performance model covering the workload in the VM trace.
*/
-class VmTraceReader(traceDirectory: File) : TraceReader<VmWorkload> {
+class VmTraceReader(
+ traceDirectory: File,
+ performanceInterferenceModel: PerformanceInterferenceModel
+) : TraceReader<VmWorkload> {
/**
* The internal iterator to use for this reader.
*/
@@ -115,9 +120,21 @@ class VmTraceReader(traceDirectory: File) : TraceReader<VmWorkload> {
}
val uuid = UUID(0L, vmId)
+
+ val relevantPerformanceInterferenceModelItems = PerformanceInterferenceModel(
+ performanceInterferenceModel.items.filter { it.workloadIds.contains(uuid) }.toSet()
+ )
+
val vmWorkload = VmWorkload(
uuid, "VM Workload $vmId", UnnamedUser,
- VmImage(uuid, vmId.toString(), emptyMap(), flopsHistory, cores, requiredMemory)
+ VmImage(
+ uuid,
+ vmId.toString(),
+ mapOf("performance-interference" to relevantPerformanceInterferenceModelItems),
+ flopsHistory,
+ cores,
+ requiredMemory
+ )
)
entries[vmId] = TraceEntryImpl(
flopsHistory.firstOrNull()?.tick ?: -1,