From ac8c2bd72cf6408a4f8325529a9d67be47637b9f Mon Sep 17 00:00:00 2001 From: Fabian Mastenbroek Date: Thu, 14 May 2020 20:01:49 +0200 Subject: feat: Add option for specifying failure interval --- opendc/opendc-experiments-sc20/schema.sql | 2 +- .../opendc/experiments/sc20/ExperimentHelpers.kt | 6 +++--- .../atlarge/opendc/experiments/sc20/Portfolios.kt | 22 ++++++++++++---------- .../atlarge/opendc/experiments/sc20/Scenario.kt | 9 ++++----- .../opendc/experiments/sc20/util/DatabaseHelper.kt | 4 ++-- .../opendc/experiments/sc20/Sc20IntegrationTest.kt | 2 +- 6 files changed, 23 insertions(+), 22 deletions(-) (limited to 'opendc') 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 ): 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 abstract val workloads: List - abstract val operationalPhenomena: List> + abstract val operationalPhenomena: List> abstract val allocationPolicies: List open val repetitions = 8 @@ -35,7 +35,7 @@ abstract class AbstractSc20Portfolio(name: String) : Portfolio(name) { override val scenarios: Sequence = 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 } -- cgit v1.2.3