1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
The scenario of a simulation is defined using a JSON file. A scenario consists of one or more topologies, one or more
workloads, one or more allocation policies, a name and a number of times the simulation is being run.
## Schema
The schema for the scenario file is provided in [schema](ScenarioSchema)
In the following section, we describe the different components of the schema.
### General Structure
| Variable | Type | Required? | Default | Description |
|----------------------|----------------------------------------------|-----------|-------|--------------------------------------------------------------------------|
| name | string | no | "" | Name of the scenario, used for identification and referencing. |
| topologies | List[[Topology](#topology)] | yes | N/A | List of topologies used in the scenario. |
| workloads | List[[Workload](#workload)] | yes | N/A | List of workloads to be executed within the scenario. |
| allocationPolicies | List[[AllocationPolicy](#allocation-policy)] | yes | N/A | Allocation policies used for resource management in the scenario. |
| failureModels | List[[FailureModel](#failuremodel)] | no | empty | List of failure models to simulate various types of failures. |
| exportModels | List[[ExportModel](#exportmodel)] | no | empty | Specifications for exporting data from the simulation. |
| carbonTracePaths | List[string] | no | null | Paths to carbon footprint trace files. |
| outputFolder | string | no | "output" | Directory where the simulation outputs will be stored. |
| initialSeed | integer | no | 0 | Seed used for random number generation to ensure reproducibility. |
| runs | integer | no | 1 | Number of times the scenario should be run. |
### Topology
| Variable | Type | Required? | Default | Description |
|-------------|--------|-----------|---------|---------------------------------------------------------------------|
| pathToFile | string | yes | N/A | Path to the JSON file defining the topology. |
### Workload
| Variable | Type | Required? | Default | Description |
|-------------|--------|-----------|---------|---------------------------------------------------------------------|
| pathToFile | string | yes | N/A | Path to the file containing the workload trace. |
| type | string | yes | N/A | Type of the workload (e.g., "ComputeWorkload"). |
### Allocation Policy
| Variable | Type | Required? | Default | Description |
|-------------|--------|-----------|---------|---------------------------------------------------------------------|
| policyType | string | yes | N/A | Type of allocation policy (e.g., "BestFit", "FirstFit"). |
### FailureModel
| Variable | Type | Required? | Default | Description |
|-------------|--------|-----------|---------|---------------------------------------------------------------------|
| modelType | string | yes | N/A | Type of failure model to simulate specific operational failures. |
### ExportModel
| Variable | Type | Required? | Default | Description |
|-------------|--------|-----------|---------|---------------------------------------------------------------------|
| exportType | string | yes | N/A | Specifies the type of data export model for simulation results. |
## Examples
In the following section, we discuss several examples of Scenario files. Any scenario file can be verified using the
JSON schema defined in [schema](TopologySchema).
### Simple
The simplest scneario that can be provided to OpenDC is shown below:
```json
{
"topologies": [
{
"pathToFile": "topologies/topology1.json"
}
],
"workloads": [
{
"pathToFile": "traces/bitbrains-small",
"type": "ComputeWorkload"
}
],
"allocationPolicies": [
{
"policyType": "Mem"
}
]
}
```
This scenario creates a simulation from file topology1, located in the topologies folder, with a workload trace from the
bitbrains-small file, and an allocation policy of type Mem. The simulation is run once (by default), and the default
name is "".
### Complex
Following is an example of a more complex topology:
```json
{
"topologies": [
{
"pathToFile": "topologies/topology1.json"
},
{
"pathToFile": "topologies/topology2.json"
},
{
"pathToFile": "topologies/topology3.json"
}
],
"workloads": [
{
"pathToFile": "traces/bitbrains-small",
"type": "ComputeWorkload"
},
{
"pathToFile": "traces/bitbrains-large",
"type": "ComputeWorkload"
}
],
"allocationPolicies": [
{
"policyType": "Mem"
},
{
"policyType": "Mem-Inv"
}
]
}
```
This scenario runs a total of 12 experiments. We have 3 topologies (3 datacenter configurations), each simulated with
2 distinct workloads, each using a different allocation policy (either Mem or Mem-Inv).
|