diff options
| author | Georgios Andreadis <info@gandreadis.com> | 2020-07-25 12:08:59 +0200 |
|---|---|---|
| committer | Fabian Mastenbroek <mail.fabianm@gmail.com> | 2020-08-24 19:48:26 +0200 |
| commit | fcf9147c116de46a57b662f7a84255faf5581d67 (patch) | |
| tree | c50dc8c00ed4048902b489fffa2fabab53b2bfd1 /simulator/opendc/opendc-compute/src | |
| parent | 2892f05baeb79f77586eb36d3506a57b1d20b8aa (diff) | |
| parent | 382a08ea8d80563753e6bdfea1db154a4b44bf35 (diff) | |
Merge pull request #16 from atlarge-research/feat/hpc-sampling
Finish HPC sampler
Diffstat (limited to 'simulator/opendc/opendc-compute/src')
| -rw-r--r-- | simulator/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/core/workload/PerformanceInterferenceModel.kt | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/simulator/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/core/workload/PerformanceInterferenceModel.kt b/simulator/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/core/workload/PerformanceInterferenceModel.kt index f458877b..3f885f89 100644 --- a/simulator/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/core/workload/PerformanceInterferenceModel.kt +++ b/simulator/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/core/workload/PerformanceInterferenceModel.kt @@ -25,8 +25,7 @@ package com.atlarge.opendc.compute.core.workload import com.atlarge.opendc.compute.core.Server -import java.util.SortedSet -import java.util.TreeSet +import java.util.* import kotlin.random.Random /** @@ -44,23 +43,22 @@ class PerformanceInterferenceModel( val random: Random = Random(0) ) { private var intersectingItems: List<PerformanceInterferenceModelItem> = emptyList() - private val colocatedWorkloads = TreeSet<String>() + private val colocatedWorkloads = TreeMap<String, Int>() fun vmStarted(server: Server) { - colocatedWorkloads.add(server.image.name) + colocatedWorkloads.merge(server.image.name, 1, Int::plus) intersectingItems = items.filter { item -> doesMatch(item) } } fun vmStopped(server: Server) { - colocatedWorkloads.remove(server.image.name) + colocatedWorkloads.computeIfPresent(server.image.name) { _, v -> (v - 1).takeUnless { it == 0 } } intersectingItems = items.filter { item -> doesMatch(item) } } private fun doesMatch(item: PerformanceInterferenceModelItem): Boolean { var count = 0 - for (name in item.workloadNames.subSet(colocatedWorkloads.first(), colocatedWorkloads.last() + "\u0000")) { - if (name in colocatedWorkloads) - count++ + for (name in item.workloadNames.subSet(colocatedWorkloads.firstKey(), colocatedWorkloads.lastKey() + "\u0000")) { + count += colocatedWorkloads.getOrDefault(name, 0) if (count > 1) return true } |
