Skip to main content

Topology

The topology of a datacenter defines all available hardware. Topologies are defined using a JSON file. A topology consist of one or more clusters. Each cluster consist of at least one host on which jobs can be executed. Each host consist of one or more CPUs, a memory unit and a power model.

Code

The code related to reading and processing topology files can be found here

In the following section, we describe the different components of a topology file.

Cluster​

variabletyperequired?defaultdescription
namestringnoClusterThe name of the cluster. This is only important for debugging and post-processing
countintegerno1The amount of clusters of this type are in the data center
hostsList[Host]yesN/AA list of the hosts in a cluster.
powerSourcePowerSourcenoN/AThe power source used by all hosts connected to this cluster.
batteryBatterynonullThe battery used by a cluster to store energy. When null, no batteries are used.

Hosts, power sources and batteries all require objects to use. See their respective pages for more information.

Examples​

In the following section, we discuss several examples of topology files.

Simple​

The simplest data center that can be provided to OpenDC is shown below:

{
"clusters": [
{
"hosts": [
{
"cpu":
{
"coreCount": 16,
"coreSpeed": 1000
},
"memory": {
"memorySize": 100000
}
}
],
"powerSource": {
"carbonTracePath": "carbon_traces/AT_2021-2024.parquet"
}
}
]
}

This creates a data center with a single cluster containing a single host. This host consist of a single 16 core CPU with a speed of 1 Ghz, and 100 MiB RAM memory.

Count​

Duplicating clusters, hosts, or CPUs is easy using the "count" keyword:

{
"clusters": [
{
"count": 2,
"hosts": [
{
"count": 5,
"cpu":
{
"coreCount": 16,
"coreSpeed": 1000,
"count": 10
},
"memory":
{
"memorySize": 100000
}
}
],
"powerSource": {
"carbonTracePath": "carbon_traces/AT_2021-2024.parquet"
}
}
]
}

This topology creates a datacenter consisting of 2 clusters, both containing 5 hosts. Each host contains 10 16 core CPUs. Using "count" saves a lot of copying.

Complex​

Following is an example of a more complex topology:

{
"clusters": [
{
"name": "C01",
"count": 2,
"hosts": [
{
"name": "H01",
"count": 2,
"cpus": [
{
"coreCount": 16,
"coreSpeed": 1000
}
],
"memory": {
"memorySize": 1000000
},
"powerModel": {
"modelType": "linear",
"idlePower": 200.0,
"maxPower": 400.0
}
},
{
"name": "H02",
"count": 2,
"cpus": [
{
"coreCount": 8,
"coreSpeed": 3000
}
],
"memory": {
"memorySize": 100000
},
"powerModel": {
"modelType": "square",
"idlePower": 300.0,
"maxPower": 500.0
}
}
]
}
]
}

This topology defines two types of hosts with different coreCount, and coreSpeed. Both types of hosts are created twice.

With Units of Measure​

Aside from using number to indicate values it is also possible to define values using strings. This allows the user to define the unit of the input parameter.

{
"clusters": [
{
"count": 2,
"hosts" :
[
{
"name": "H01",
"cpuModel":
{
"coreCount": 8,
"coreSpeed": "3.2 Ghz"
},
"memory": {
"memorySize": "128e3 MiB",
"memorySpeed": "1 Mhz"
},
"powerModel": {
"modelType": "linear",
"power": "400 Watts",
"maxPower": "1 KW",
"idlePower": "0.4 W"
}
}
]
}
]
}