diff options
| author | Fabian Mastenbroek <mail.fabianm@gmail.com> | 2020-05-06 15:24:57 +0200 |
|---|---|---|
| committer | Fabian Mastenbroek <mail.fabianm@gmail.com> | 2020-05-06 15:24:57 +0200 |
| commit | e2e7e1abaf70d7e49e2e4af04648796f01ba6492 (patch) | |
| tree | da7ece74fea9e3924a7b3240dbde9dd48c5f8c18 | |
| parent | 171d9948af5f14243da7aa140a231dbf9ae8df15 (diff) | |
| parent | b157ed2791917dd512fd356a573f611ab4de24e9 (diff) | |
Merge branch 'failures-configurable' into '2.x'
Make failure interval configurable
Closes #59
See merge request opendc/opendc-simulator!64
2 files changed, 17 insertions, 8 deletions
diff --git a/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/Sc20Experiment.kt b/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/Sc20Experiment.kt index fc4b9058..b1964197 100644 --- a/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/Sc20Experiment.kt +++ b/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/Sc20Experiment.kt @@ -67,9 +67,9 @@ import kotlinx.coroutines.runBlocking import kotlinx.coroutines.withContext import java.io.File import java.io.FileReader -import java.lang.IllegalArgumentException import java.util.ServiceLoader import java.util.TreeSet +import kotlin.math.ln import kotlin.math.max import kotlin.random.Random @@ -89,6 +89,8 @@ class ExperimentParameters(parser: ArgParser) { val seed by parser.storing("the random seed") { toInt() } .default(0) val failures by parser.flagging("-x", "--failures", help = "enable (correlated) machine failures") + val failureInterval by parser.storing("expected number of hours between failures") { toInt() } + .default(24 * 7) // one week val allocationPolicy by parser.storing("name of VM allocation policy to use").default("core-mem") fun getSelectedVmList(): List<String> { @@ -112,7 +114,12 @@ class ExperimentParameters(parser: ArgParser) { /** * Construct the failure domain for the experiments. */ -suspend fun createFailureDomain(seed: Int, bareMetalProvisioner: ProvisioningService, chan: Channel<Unit>): Domain { +suspend fun createFailureDomain( + seed: Int, + failureInterval: Int, + bareMetalProvisioner: ProvisioningService, + chan: Channel<Unit> +): Domain { val root = simulationContext.domain val domain = root.newDomain(name = "failures") domain.launch { @@ -121,7 +128,8 @@ suspend fun createFailureDomain(seed: Int, bareMetalProvisioner: ProvisioningSer val injectors = mutableMapOf<String, FaultInjector>() for (node in bareMetalProvisioner.nodes()) { val cluster = node.metadata[NODE_CLUSTER] as String - val injector = injectors.getOrPut(cluster) { createFaultInjector(simulationContext.domain, random) } + val injector = + injectors.getOrPut(cluster) { createFaultInjector(simulationContext.domain, random, failureInterval) } injector.enqueue(node.metadata["driver"] as FailureDomain) } } @@ -131,11 +139,12 @@ suspend fun createFailureDomain(seed: Int, bareMetalProvisioner: ProvisioningSer /** * Obtain the [FaultInjector] to use for the experiments. */ -fun createFaultInjector(domain: Domain, random: Random): FaultInjector { +fun createFaultInjector(domain: Domain, random: Random, failureInterval: Int): FaultInjector { // Parameters from A. Iosup, A Framework for the Study of Grid Inter-Operation Mechanisms, 2009 // GRID'5000 - return CorrelatedFaultInjector(domain, - iatScale = -1.39, iatShape = 1.03, // Hours + return CorrelatedFaultInjector( + domain, + iatScale = ln(failureInterval.toDouble()), iatShape = 1.03, // Hours sizeScale = 1.88, sizeShape = 1.25, dScale = 9.51, dShape = 3.21, // Minutes random = random @@ -341,7 +350,7 @@ fun main(args: Array<String>) { val failureDomain = if (cli.failures) { println("ENABLING failures") - createFailureDomain(cli.seed, bareMetalProvisioner, chan) + createFailureDomain(cli.seed, cli.failureInterval, bareMetalProvisioner, chan) } else { null } diff --git a/opendc/opendc-experiments-sc20/src/test/kotlin/com/atlarge/opendc/experiments/sc20/Sc20IntegrationTest.kt b/opendc/opendc-experiments-sc20/src/test/kotlin/com/atlarge/opendc/experiments/sc20/Sc20IntegrationTest.kt index dd0931e4..2bf6bcf3 100644 --- a/opendc/opendc-experiments-sc20/src/test/kotlin/com/atlarge/opendc/experiments/sc20/Sc20IntegrationTest.kt +++ b/opendc/opendc-experiments-sc20/src/test/kotlin/com/atlarge/opendc/experiments/sc20/Sc20IntegrationTest.kt @@ -101,7 +101,7 @@ class Sc20IntegrationTest { val failureDomain = if (failures) { println("ENABLING failures") - createFailureDomain(seed, bareMetalProvisioner, chan) + createFailureDomain(seed, 24 * 7, bareMetalProvisioner, chan) } else { null } |
