diff options
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, |
