diff options
| author | Fabian Mastenbroek <mail.fabianm@gmail.com> | 2020-05-14 20:01:49 +0200 |
|---|---|---|
| committer | Fabian Mastenbroek <mail.fabianm@gmail.com> | 2020-05-14 20:01:49 +0200 |
| commit | ac8c2bd72cf6408a4f8325529a9d67be47637b9f (patch) | |
| tree | e67b4b1ba286a1d3524d4de481036bc7b793997d /opendc | |
| parent | 94e34d41eb384731333819a1dbe10539f9a5a14b (diff) | |
feat: Add option for specifying failure interval
Diffstat (limited to 'opendc')
6 files changed, 23 insertions, 22 deletions
diff --git a/opendc/opendc-experiments-sc20/schema.sql b/opendc/opendc-experiments-sc20/schema.sql index 515348c6..92cb5d1f 100644 --- a/opendc/opendc-experiments-sc20/schema.sql +++ b/opendc/opendc-experiments-sc20/schema.sql @@ -30,7 +30,7 @@ CREATE TABLE scenarios workload_name TEXT NOT NULL, workload_fraction DOUBLE PRECISION NOT NULL, allocation_policy TEXT NOT NULL, - failures BOOLEAN NOT NULL, + failure_frequency DOUBLE PRECISION NOT NULL, interference BOOLEAN NOT NULL, FOREIGN KEY (portfolio_id) REFERENCES portfolios (id) diff --git a/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/ExperimentHelpers.kt b/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/ExperimentHelpers.kt index 2c41dd7b..1bc463c3 100644 --- a/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/ExperimentHelpers.kt +++ b/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/ExperimentHelpers.kt @@ -70,7 +70,7 @@ private val logger = KotlinLogging.logger {} */ suspend fun createFailureDomain( seed: Int, - failureInterval: Int, + failureInterval: Double, bareMetalProvisioner: ProvisioningService, chan: Channel<Unit> ): Domain { @@ -93,12 +93,12 @@ suspend fun createFailureDomain( /** * Obtain the [FaultInjector] to use for the experiments. */ -fun createFaultInjector(domain: Domain, random: Random, failureInterval: Int): FaultInjector { +fun createFaultInjector(domain: Domain, random: Random, failureInterval: Double): FaultInjector { // Parameters from A. Iosup, A Framework for the Study of Grid Inter-Operation Mechanisms, 2009 // GRID'5000 return CorrelatedFaultInjector( domain, - iatScale = ln(failureInterval.toDouble()), iatShape = 1.03, // Hours + iatScale = ln(failureInterval), iatShape = 1.03, // Hours sizeScale = 1.88, sizeShape = 1.25, dScale = 9.51, dShape = 3.21, // Minutes random = random diff --git a/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/Portfolios.kt b/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/Portfolios.kt index 7e54f40f..668304b6 100644 --- a/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/Portfolios.kt +++ b/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/Portfolios.kt @@ -27,7 +27,7 @@ package com.atlarge.opendc.experiments.sc20 abstract class AbstractSc20Portfolio(name: String) : Portfolio(name) { abstract val topologies: List<Topology> abstract val workloads: List<Workload> - abstract val operationalPhenomena: List<Pair<Boolean, Boolean>> + abstract val operationalPhenomena: List<Pair<Double, Boolean>> abstract val allocationPolicies: List<String> open val repetitions = 8 @@ -35,7 +35,7 @@ abstract class AbstractSc20Portfolio(name: String) : Portfolio(name) { override val scenarios: Sequence<Scenario> = sequence { for (topology in topologies) { for (workload in workloads) { - for ((hasFailures, hasInterference) in operationalPhenomena) { + for ((failureFrequency, hasInterference) in operationalPhenomena) { for (allocationPolicy in allocationPolicies) { yield( Scenario( @@ -44,7 +44,7 @@ abstract class AbstractSc20Portfolio(name: String) : Portfolio(name) { topology, workload, allocationPolicy, - hasFailures, + failureFrequency, hasInterference ) ) @@ -55,6 +55,8 @@ abstract class AbstractSc20Portfolio(name: String) : Portfolio(name) { } } +private val defaultFailureInterval = 24.0 * 7 + object HorVerPortfolio : AbstractSc20Portfolio("horizontal_vs_vertical") { override val topologies = listOf( Topology("base"), @@ -76,7 +78,7 @@ object HorVerPortfolio : AbstractSc20Portfolio("horizontal_vs_vertical") { ) override val operationalPhenomena = listOf( - true to true + defaultFailureInterval to true ) override val allocationPolicies = listOf( @@ -101,7 +103,7 @@ object MoreVelocityPortfolio : AbstractSc20Portfolio("more_velocity") { ) override val operationalPhenomena = listOf( - true to true + defaultFailureInterval to true ) override val allocationPolicies = listOf( @@ -125,7 +127,7 @@ object MoreHpcPortfolio : AbstractSc20Portfolio("more_hpc") { ) override val operationalPhenomena = listOf( - true to true + defaultFailureInterval to true ) override val allocationPolicies = listOf( @@ -145,10 +147,10 @@ object OperationalPhenomenaPortfolio : AbstractSc20Portfolio("operational_phenom ) override val operationalPhenomena = listOf( - true to true, - false to true, - true to false, - true to true + defaultFailureInterval to true, + 0.0 to true, + defaultFailureInterval to false, + defaultFailureInterval to true ) override val allocationPolicies = listOf( diff --git a/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/Scenario.kt b/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/Scenario.kt index 66a8babf..457255cb 100644 --- a/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/Scenario.kt +++ b/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/Scenario.kt @@ -62,9 +62,8 @@ public class Scenario( val topology: Topology, val workload: Workload, val allocationPolicy: String, - val hasFailures: Boolean, - val hasInterference: Boolean, - val failureInterval: Int = 24 * 7 + val failureFrequency: Double, + val hasInterference: Boolean ) { /** * The runs this scenario consists of. @@ -101,9 +100,9 @@ public class Scenario( root.launch { val (bareMetalProvisioner, scheduler) = createProvisioner(root, environment, allocationPolicy) - val failureDomain = if (hasFailures) { + val failureDomain = if (failureFrequency > 0) { logger.debug("ENABLING failures") - createFailureDomain(seeder.nextInt(), failureInterval, bareMetalProvisioner, chan) + createFailureDomain(seeder.nextInt(), failureFrequency, bareMetalProvisioner, chan) } else { null } diff --git a/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/util/DatabaseHelper.kt b/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/util/DatabaseHelper.kt index 0292a2e3..4fcfdb6b 100644 --- a/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/util/DatabaseHelper.kt +++ b/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/util/DatabaseHelper.kt @@ -48,7 +48,7 @@ class DatabaseHelper(val conn: Connection) : Closeable { /** * Prepared statement for creating a scenario */ - private val createScenario = conn.prepareStatement("INSERT INTO scenarios (portfolio_id, repetitions, topology, workload_name, workload_fraction, allocation_policy, failures, interference) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", arrayOf("id")) + private val createScenario = conn.prepareStatement("INSERT INTO scenarios (portfolio_id, repetitions, topology, workload_name, workload_fraction, allocation_policy, failure_frequency, interference) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", arrayOf("id")) /** * Prepared statement for creating a run. @@ -96,7 +96,7 @@ class DatabaseHelper(val conn: Connection) : Closeable { createScenario.setString(4, scenario.workload.name) createScenario.setDouble(5, scenario.workload.fraction) createScenario.setString(6, scenario.allocationPolicy) - createScenario.setBoolean(7, scenario.hasFailures) + createScenario.setDouble(7, scenario.failureFrequency) createScenario.setBoolean(8, scenario.hasInterference) val affectedRows = createScenario.executeUpdate() 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 1edb7bc2..fd617115 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 @@ -102,7 +102,7 @@ class Sc20IntegrationTest { val failureDomain = if (failures) { println("ENABLING failures") - createFailureDomain(seed, 24 * 7, bareMetalProvisioner, chan) + createFailureDomain(seed, 24.0 * 7, bareMetalProvisioner, chan) } else { null } |
