summaryrefslogtreecommitdiff
path: root/opendc-experiments
diff options
context:
space:
mode:
authorFabian Mastenbroek <mail.fabianm@gmail.com>2021-09-09 16:21:41 +0200
committerFabian Mastenbroek <mail.fabianm@gmail.com>2021-09-10 16:13:23 +0200
commitf20d615e3f6e5b9d02526ac033778fb0419fed4e (patch)
tree27f35a6bd2bb9a157bd88755ea567bdeb0eb6156 /opendc-experiments
parent58ac6e203f38ea0122d08c74adf7644c478c3afe (diff)
feat(simulator): Support generic distribution in fault injector
This change adds support for specifying the distribution of the failures, group size and duration for the fault injector.
Diffstat (limited to 'opendc-experiments')
-rw-r--r--opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/ExperimentHelpers.kt11
1 files changed, 7 insertions, 4 deletions
diff --git a/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/ExperimentHelpers.kt b/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/ExperimentHelpers.kt
index 0230409e..3d605300 100644
--- a/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/ExperimentHelpers.kt
+++ b/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/ExperimentHelpers.kt
@@ -26,6 +26,8 @@ import io.opentelemetry.api.metrics.MeterProvider
import io.opentelemetry.sdk.metrics.SdkMeterProvider
import kotlinx.coroutines.*
import kotlinx.coroutines.channels.Channel
+import org.apache.commons.math3.distribution.LogNormalDistribution
+import org.apache.commons.math3.random.Well19937c
import org.opendc.compute.api.*
import org.opendc.compute.service.ComputeService
import org.opendc.compute.service.scheduler.ComputeScheduler
@@ -98,15 +100,16 @@ fun createFaultInjector(
random: Random,
failureInterval: Double
): FaultInjector {
+ val rng = Well19937c(random.nextLong())
+
// Parameters from A. Iosup, A Framework for the Study of Grid Inter-Operation Mechanisms, 2009
// GRID'5000
return CorrelatedFaultInjector(
coroutineScope,
clock,
- iatScale = ln(failureInterval), iatShape = 1.03, // Hours
- sizeScale = ln(2.0), sizeShape = ln(1.0), // Expect 2 machines, with variation of 1
- dScale = ln(60.0), dShape = ln(60.0 * 8), // Minutes
- random = random
+ iat = LogNormalDistribution(rng, ln(failureInterval), 1.03),
+ size = LogNormalDistribution(rng, 1.88, 1.25),
+ duration = LogNormalDistribution(rng, 8.89, 2.71)
)
}