diff options
| author | Fabian Mastenbroek <mail.fabianm@gmail.com> | 2020-03-23 11:41:22 +0100 |
|---|---|---|
| committer | Fabian Mastenbroek <mail.fabianm@gmail.com> | 2020-03-23 11:41:22 +0100 |
| commit | f4ee29bb97aed68329e72710dd3049c23f592f25 (patch) | |
| tree | 765610632bd14ee835c26d4e9092f95029b2ec00 /opendc | |
| parent | 22b3568118493f2b3d18b37406e169f19b47a311 (diff) | |
| parent | a465f3eac0fb2718859f1adea8cce0fe69bd18f7 (diff) | |
Merge branch '2.x-args-extension' into '2.x'
Extend SC20 arguments with performance interference and selected VMs file
See merge request opendc/opendc-simulator!46
Diffstat (limited to 'opendc')
| -rw-r--r-- | opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/TestExperiment.kt | 46 |
1 files changed, 33 insertions, 13 deletions
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 415a7628..f0d3fc8d 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 @@ -44,25 +44,40 @@ import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking import java.io.File +import java.io.FileInputStream +import java.io.FileReader import java.util.ServiceLoader import kotlin.math.max class ExperimentParameters(parser: ArgParser) { val traceDirectory by parser.storing("path to the trace directory") val environmentFile by parser.storing("path to the environment file") + val performanceInterferenceFile by parser.storing("path to the performance interference file").default { null } val outputFile by parser.storing("path to where the output should be stored") .default { "sc20-experiment-results.csv" } - val selectedVms by parser.storing("the VMs to run") { - // Handle case where VM list contains a VM name with an (escaped) single-quote in it - val string = this.replace("\\'", "\\\\[") - .replace("'", "\"") - .replace("\\\\[", "'") - val vms: List<String> = jacksonObjectMapper().readValue(string) - vms - } - .default { - emptyList() + val selectedVms by parser.storing("the VMs to run") { parseVMs(this) } + .default { emptyList() } + val selectedVmsFile by parser.storing("path to a file containing the VMs to run") { + parseVMs(FileReader(File(this)).readText()) + } + .default { emptyList() } + + fun getSelectedVmList(): List<String> { + return if (selectedVms.isEmpty()) { + selectedVmsFile + } else { + selectedVms } + } + + private fun parseVMs(string: String): List<String> { + // Handle case where VM list contains a VM name with an (escaped) single-quote in it + val sanitizedString = string.replace("\\'", "\\\\[") + .replace("'", "\"") + .replace("\\\\[", "'") + val vms: List<String> = jacksonObjectMapper().readValue(sanitizedString) + return vms + } } /** @@ -85,9 +100,14 @@ fun main(args: Array<String>) { val environment = Sc20ClusterEnvironmentReader(File(environmentFile)) .use { it.construct(root) } - val performanceInterferenceModel = Sc20PerformanceInterferenceReader( + val performanceInterferenceStream = if (performanceInterferenceFile != null) { + FileInputStream(File(performanceInterferenceFile!!)) + } else { object {}.javaClass.getResourceAsStream("/env/performance-interference.json") - ).construct() + } + + val performanceInterferenceModel = Sc20PerformanceInterferenceReader(performanceInterferenceStream) + .construct() println(simulationContext.clock.instant()) @@ -98,7 +118,7 @@ fun main(args: Array<String>) { hypervisorMonitor ) - val reader = Sc20TraceReader(File(traceDirectory), performanceInterferenceModel, selectedVms) + val reader = Sc20TraceReader(File(traceDirectory), performanceInterferenceModel, getSelectedVmList()) while (reader.hasNext()) { val (time, workload) = reader.next() delay(max(0, time - simulationContext.clock.millis())) |
