diff options
| author | Georgios Andreadis <g.andreadis@student.tudelft.nl> | 2020-05-17 22:00:20 +0200 |
|---|---|---|
| committer | Georgios Andreadis <g.andreadis@student.tudelft.nl> | 2020-05-17 22:00:20 +0200 |
| commit | c78d99c198e48dfa1b9f0f22f936ebc9457e5a5b (patch) | |
| tree | 633cfa8c2331c34c3572ee8e404ff80567010d5a /opendc/opendc-format/src | |
| parent | 210ca9d4b82cda82d0651e539c38d36eb61aec1e (diff) | |
| parent | 2211cc2af7fced34921055e8d5fb5516457b4cc0 (diff) | |
Merge branch 'feat/database-metrics' into '2.x'
Implement experiment runner in Kotlin
Closes #63
See merge request opendc/opendc-simulator!66
Diffstat (limited to 'opendc/opendc-format/src')
4 files changed, 22 insertions, 15 deletions
diff --git a/opendc/opendc-format/src/main/kotlin/com/atlarge/opendc/format/trace/PerformanceInterferenceModelReader.kt b/opendc/opendc-format/src/main/kotlin/com/atlarge/opendc/format/trace/PerformanceInterferenceModelReader.kt index a653e643..407bc0b4 100644 --- a/opendc/opendc-format/src/main/kotlin/com/atlarge/opendc/format/trace/PerformanceInterferenceModelReader.kt +++ b/opendc/opendc-format/src/main/kotlin/com/atlarge/opendc/format/trace/PerformanceInterferenceModelReader.kt @@ -26,6 +26,7 @@ package com.atlarge.opendc.format.trace import com.atlarge.opendc.compute.core.workload.PerformanceInterferenceModel import java.io.Closeable +import kotlin.random.Random /** * An interface for reading descriptions of performance interference models into memory. @@ -34,5 +35,5 @@ interface PerformanceInterferenceModelReader : Closeable { /** * Construct a [PerformanceInterferenceModel]. */ - fun construct(): PerformanceInterferenceModel + fun construct(random: Random): Map<String, PerformanceInterferenceModel> } diff --git a/opendc/opendc-format/src/main/kotlin/com/atlarge/opendc/format/trace/bitbrains/BitbrainsTraceReader.kt b/opendc/opendc-format/src/main/kotlin/com/atlarge/opendc/format/trace/bitbrains/BitbrainsTraceReader.kt index 5220af9b..2a8fefeb 100644 --- a/opendc/opendc-format/src/main/kotlin/com/atlarge/opendc/format/trace/bitbrains/BitbrainsTraceReader.kt +++ b/opendc/opendc-format/src/main/kotlin/com/atlarge/opendc/format/trace/bitbrains/BitbrainsTraceReader.kt @@ -125,7 +125,7 @@ class BitbrainsTraceReader( val relevantPerformanceInterferenceModelItems = PerformanceInterferenceModel( - performanceInterferenceModel.items.filter { it.workloadNames.contains(vmId.toString()) }.toSet() + performanceInterferenceModel.items.filter { it.workloadNames.contains(vmId.toString()) }.toSortedSet() ) val vmWorkload = VmWorkload( diff --git a/opendc/opendc-format/src/main/kotlin/com/atlarge/opendc/format/trace/sc20/Sc20PerformanceInterferenceReader.kt b/opendc/opendc-format/src/main/kotlin/com/atlarge/opendc/format/trace/sc20/Sc20PerformanceInterferenceReader.kt index 8562cefe..0e8e1fd2 100644 --- a/opendc/opendc-format/src/main/kotlin/com/atlarge/opendc/format/trace/sc20/Sc20PerformanceInterferenceReader.kt +++ b/opendc/opendc-format/src/main/kotlin/com/atlarge/opendc/format/trace/sc20/Sc20PerformanceInterferenceReader.kt @@ -32,6 +32,7 @@ import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import com.fasterxml.jackson.module.kotlin.readValue import java.io.InputStream import java.util.TreeSet +import kotlin.random.Random /** * A parser for the JSON performance interference setup files used for the SC20 paper. @@ -42,20 +43,25 @@ import java.util.TreeSet class Sc20PerformanceInterferenceReader(input: InputStream, mapper: ObjectMapper = jacksonObjectMapper()) : PerformanceInterferenceModelReader { /** - * The environment that was read from the file. + * The computed value from the file. */ - private val performanceInterferenceModel: List<PerformanceInterferenceEntry> = mapper.readValue(input) + private val items: Map<String, TreeSet<PerformanceInterferenceModelItem>> - override fun construct(): PerformanceInterferenceModel { - return PerformanceInterferenceModel( - performanceInterferenceModel.map { item -> - PerformanceInterferenceModelItem( - TreeSet(item.vms), - item.minServerLoad, - item.performanceScore - ) - }.toSet() - ) + init { + val entries: List<PerformanceInterferenceEntry> = mapper.readValue(input) + val res = mutableMapOf<String, TreeSet<PerformanceInterferenceModelItem>>() + for (entry in entries) { + val item = PerformanceInterferenceModelItem(TreeSet(entry.vms), entry.minServerLoad, entry.performanceScore) + for (workload in entry.vms) { + res.computeIfAbsent(workload) { TreeSet() }.add(item) + } + } + + items = res + } + + override fun construct(random: Random): Map<String, PerformanceInterferenceModel> { + return items.mapValues { PerformanceInterferenceModel(it.value, Random(random.nextInt())) } } override fun close() {} diff --git a/opendc/opendc-format/src/main/kotlin/com/atlarge/opendc/format/trace/sc20/Sc20TraceReader.kt b/opendc/opendc-format/src/main/kotlin/com/atlarge/opendc/format/trace/sc20/Sc20TraceReader.kt index c53cd569..076274d5 100644 --- a/opendc/opendc-format/src/main/kotlin/com/atlarge/opendc/format/trace/sc20/Sc20TraceReader.kt +++ b/opendc/opendc-format/src/main/kotlin/com/atlarge/opendc/format/trace/sc20/Sc20TraceReader.kt @@ -160,7 +160,7 @@ class Sc20TraceReader( val relevantPerformanceInterferenceModelItems = PerformanceInterferenceModel( - performanceInterferenceModel.items.filter { it.workloadNames.contains(vmId) }.toSet(), + performanceInterferenceModel.items.filter { it.workloadNames.contains(vmId) }.toSortedSet(), Random(random.nextInt()) ) val vmWorkload = VmWorkload( |
