From 94e34d41eb384731333819a1dbe10539f9a5a14b Mon Sep 17 00:00:00 2001 From: Fabian Mastenbroek Date: Thu, 14 May 2020 18:30:26 +0200 Subject: perf: Improve performance interference model construction performance --- .../compute/core/workload/PerformanceInterferenceModel.kt | 12 +++++++++++- .../opendc/experiments/sc20/trace/Sc20ParquetTraceReader.kt | 2 +- 2 files changed, 12 insertions(+), 2 deletions(-) (limited to 'opendc') diff --git a/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/core/workload/PerformanceInterferenceModel.kt b/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/core/workload/PerformanceInterferenceModel.kt index 45024a49..fab4ae9d 100644 --- a/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/core/workload/PerformanceInterferenceModel.kt +++ b/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/core/workload/PerformanceInterferenceModel.kt @@ -58,10 +58,20 @@ class PerformanceInterferenceModel( lhs.hashCode().compareTo(rhs.hashCode()) } val items = TreeSet(comparator) + val workloadToItem: Map> private val colocatedWorkloads = TreeSet() init { - this.items.addAll(items) + val workloadToItem = mutableMapOf>() + + for (item in items) { + for (workload in item.workloadNames) { + workloadToItem.getOrPut(workload) { mutableSetOf() }.add(item) + } + this.items.add(item) + } + + this.workloadToItem = workloadToItem } fun vmStarted(server: Server) { diff --git a/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/trace/Sc20ParquetTraceReader.kt b/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/trace/Sc20ParquetTraceReader.kt index 17b42f3d..28026fde 100644 --- a/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/trace/Sc20ParquetTraceReader.kt +++ b/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/trace/Sc20ParquetTraceReader.kt @@ -64,7 +64,7 @@ class Sc20ParquetTraceReader( val id = image.name val relevantPerformanceInterferenceModelItems = PerformanceInterferenceModel( - performanceInterferenceModel.items.filter { id in it.workloadNames }.toSet(), + performanceInterferenceModel.workloadToItem[id] ?: emptySet(), Random(random.nextInt()) ) val newImage = -- cgit v1.2.3