summaryrefslogtreecommitdiff
path: root/opendc/opendc-experiments-sc20/src
diff options
context:
space:
mode:
authorFabian Mastenbroek <mail.fabianm@gmail.com>2020-05-14 20:01:49 +0200
committerFabian Mastenbroek <mail.fabianm@gmail.com>2020-05-14 20:01:49 +0200
commitac8c2bd72cf6408a4f8325529a9d67be47637b9f (patch)
treee67b4b1ba286a1d3524d4de481036bc7b793997d /opendc/opendc-experiments-sc20/src
parent94e34d41eb384731333819a1dbe10539f9a5a14b (diff)
feat: Add option for specifying failure interval
Diffstat (limited to 'opendc/opendc-experiments-sc20/src')
-rw-r--r--opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/ExperimentHelpers.kt6
-rw-r--r--opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/Portfolios.kt22
-rw-r--r--opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/Scenario.kt9
-rw-r--r--opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/util/DatabaseHelper.kt4
-rw-r--r--opendc/opendc-experiments-sc20/src/test/kotlin/com/atlarge/opendc/experiments/sc20/Sc20IntegrationTest.kt2
5 files changed, 22 insertions, 21 deletions
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
}