diff options
| author | Dante Niewenhuis <d.niewenhuis@hotmail.com> | 2024-11-05 14:17:08 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-11-05 14:17:08 +0100 |
| commit | 0f835d57b0e989e25aa0b71fe374a0fb1a94e86f (patch) | |
| tree | 8d777634dbb8a3e03b14ecc4208228f92127f4b5 /site/docs/documentation/Input/FailureModel.md | |
| parent | f3e578a2a43c99997dbf35e09debfde255a4ae22 (diff) | |
Documentation update (#261)
* Updated a lot of documentation, added a new get-started tutorial.
* Applied Spotless
* Applied Spotless Java
* Added bitbrains workload to site
Diffstat (limited to 'site/docs/documentation/Input/FailureModel.md')
| -rw-r--r-- | site/docs/documentation/Input/FailureModel.md | 218 |
1 files changed, 218 insertions, 0 deletions
diff --git a/site/docs/documentation/Input/FailureModel.md b/site/docs/documentation/Input/FailureModel.md new file mode 100644 index 00000000..ecaf7c03 --- /dev/null +++ b/site/docs/documentation/Input/FailureModel.md @@ -0,0 +1,218 @@ +OpenDC provides three types of failure models: [Trace-based](#trace-based-failure-models), [Sample-based](#sample-based-failure-models), +and [Prefab](#prefab-failure-models). + +All failure models have a similar structure containing three simple steps. + +1. The _interval_ time determines the time between two failures. +2. The _duration_ time determines how long a single failure takes. +3. The _intensity_ determines how many hosts are effected by a failure. + +:::info Code +The code that defines the Failure Models can found [here](https://github.com/atlarge-research/opendc/blob/master/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/FailureModelSpec.kt). +::: + +## Trace based failure models +Trace-based failure models are defined by a parquet file. This file defines the interval, duration, and intensity of +several failures. The failures defined in the file are looped. A valid failure model file follows the format defined below: + +| Metric | Datatype | Unit | Summary | +|-------------------|------------|---------------|--------------------------------------------| +| failure_interval | int64 | milli seconds | The duration since the last failure | +| failure_duration | int64 | milli seconds | The duration of the failure | +| failure_intensity | float64 | ratio | The ratio of hosts effected by the failure | + +:::info Code +The code implementation of Trace Based Failure Models can be found [here](https://github.com/atlarge-research/opendc/blob/master/opendc-compute/opendc-compute-failure/src/main/kotlin/org/opendc/compute/failure/models/TraceBasedFailureModel.kt) +::: + +### Example +A trace-based failure model is specified by setting "type" to "trace-based". +After, the user can define the path to the failure trace using "pathToFile": +```json +{ + "type": "trace-based", + "pathToFile": "path/to/your/failure_trace.parquet" +} +``` + +The "repeat" value can be set to false if the user does not want the failures to loop: +```json +{ + "type": "trace-based", + "pathToFile": "path/to/your/failure_trace.parquet", + "repeat": "false" +} +``` + +## Sample based failure models +Sample based failure models sample from three distributions to get the _interval_, _duration_, and _intensity_ of +each failure. Sample-based failure models are effected by randomness and will thus create different results based +on the provided seed. + +:::info Code +The code implementation for the Sample based failure models can be found [here](https://github.com/atlarge-research/opendc/blob/master/opendc-compute/opendc-compute-failure/src/main/kotlin/org/opendc/compute/failure/models/SampleBasedFailureModel.kt) +::: + +### Distributions +OpenDC supports eight different distributions based on java's [RealDistributions](https://commons.apache.org/proper/commons-math/javadocs/api-3.6.1/org/apache/commons/math3/distribution/RealDistribution.html). +Because the different distributions require different variables, they have to be specified with a specific "type". +Next, we show an example of a correct specification of all available distributions in OpenDC. + +#### [ConstantRealDistribution](https://commons.apache.org/proper/commons-math/javadocs/api-3.6.1/org/apache/commons/math3/distribution/ConstantRealDistribution.html) + +```json +{ + "type": "constant", + "value": 10.0 +} +``` + +#### [ExponentialDistribution](https://commons.apache.org/proper/commons-math/javadocs/api-3.6.1/org/apache/commons/math3/distribution/ExponentialDistribution.html) +```json +{ + "type": "exponential", + "mean": 1.5 +} +``` + +#### [GammaDistribution](https://commons.apache.org/proper/commons-math/javadocs/api-3.6.1/org/apache/commons/math3/distribution/GammaDistribution.html) +```json +{ + "type": "gamma", + "shape": 1.0, + "scale": 0.5 +} +``` + +#### [LogNormalDistribution](https://commons.apache.org/proper/commons-math/javadocs/api-3.6.1/org/apache/commons/math3/distribution/LogNormalDistribution.html) +```json +{ + "type": "log-normal", + "scale": 1.0, + "shape": 0.5 +} +``` + +#### [NormalDistribution](https://commons.apache.org/proper/commons-math/javadocs/api-3.6.1/org/apache/commons/math3/distribution/NormalDistribution.html) +```json +{ + "type": "normal", + "mean": 1.0, + "std": 0.5 +} +``` + +#### [ParetoDistribution](https://commons.apache.org/proper/commons-math/javadocs/api-3.6.1/org/apache/commons/math3/distribution/ParetoDistribution.html) +```json +{ + "type": "pareto", + "scale": 1.0, + "shape": 0.6 +} +``` + +#### [UniformRealDistribution](https://commons.apache.org/proper/commons-math/javadocs/api-3.6.1/org/apache/commons/math3/distribution/UniformRealDistribution.html) +```json +{ + "type": "constant", + "lower": 5.0, + "upper": 10.0 +} +``` + +#### [WeibullDistribution](https://commons.apache.org/proper/commons-math/javadocs/api-3.6.1/org/apache/commons/math3/distribution/WeibullDistribution.html) +```json +{ + "type": "constant", + "alpha": 0.5, + "beta": 1.2 +} +``` + +### Example +A sample-based failure model is defined using three distributions for _intensity_, _duration_, and _intensity_. +Distributions can be mixed however the user wants. Note, values for _intensity_ and _duration_ are clamped to be positive. +The _intensity_ is clamped to the range [0.0, 1.0). +To specify a sample-based failure model, the type needs to be set to "custom". + +Example: +```json +{ + "type": "custom", + "iatSampler": { + "type": "exponential", + "mean": 1.5 + }, + "durationSampler": { + "type": "constant", + "alpha": 0.5, + "beta": 1.2 + }, + "nohSampler": { + "type": "constant", + "value": 0.5 + } +} +``` + +## Prefab failure models +The final type of failure models is the prefab models. These are models that are predefined in OpenDC and are based on +research. Currently, OpenDC has 9 prefab models based on [The Failure Trace Archive: Enabling the comparison of failure measurements and models of distributed systems](https://www-sciencedirect-com.vu-nl.idm.oclc.org/science/article/pii/S0743731513000634) +The figure below shows the values used to define the failure models. + + +Each failure model is defined four times, on for each of the four distribution. +The final list of available prefabs is thus: + + G5k06Exp + G5k06Wbl + G5k06LogN + G5k06Gam + Lanl05Exp + Lanl05Wbl + Lanl05LogN + Lanl05Gam + Ldns04Exp + Ldns04Wbl + Ldns04LogN + Ldns04Gam + Microsoft99Exp + Microsoft99Wbl + Microsoft99LogN + Microsoft99Gam + Nd07cpuExp + Nd07cpuWbl + Nd07cpuLogN + Nd07cpuGam + Overnet03Exp + Overnet03Wbl + Overnet03LogN + Overnet03Gam + Pl05Exp + Pl05Wbl + Pl05LogN + Pl05Gam + Skype06Exp + Skype06Wbl + Skype06LogN + Skype06Gam + Websites02Exp + Websites02Wbl + Websites02LogN + Websites02Gam + +:::info Code +The different Prefab models can be found [here](https://github.com/atlarge-research/opendc/tree/master/opendc-compute/opendc-compute-failure/src/main/kotlin/org/opendc/compute/failure/prefab) +::: + +### Example +To specify a prefab model, the "type" needs to be set to "prefab". +After, the prefab can be defined with "prefabName": + +```json +{ + "type": "prefab", + "prefabName": "G5k06Exp" +} +``` + |
