Skip to main content
OpenDC2 is no longer being developed

This page documents OpenDC2. OpenDC3 can still run OpenDC2 experiment files with opendc --legacy run, but new features are only added to OpenDC3. See the OpenDC3 documentation, or Migrating to OpenDC3.

Workload

A workload defines the tasks that are submitted to the data center, when they are submitted, and how much CPU, GPU and memory they need over time. In OpenDC2, a workload is always read from a workload trace.

FieldTypeDefaultDescription
pathToFilestringrequiredThe directory of the workload trace.
typestringrequiredThe kind of workload. The only kind is ComputeWorkload.
sampleFractionnumber1.0Runs a random sample of the tasks that together have this fraction of the total work of the trace.
submissionTimestringunchangedMoves the workload in time so that the first task is submitted at this time, such as "2024-01-01T00:00:00" (UTC).
deferAllbooleanfalseMakes every task deferrable, with a deadline of its submission time plus three times its duration.
scalingPolicyscaling policyNoDelayWhat happens when a task gets less than it demands.
{
"pathToFile": "traces/bitbrains-small",
"type": "ComputeWorkload"
}

Scaling policies​

PolicyBehaviour
NoDelayThe task keeps its duration. Demand that is not met is lost. This is the default.
PerfectThe task runs longer, so that all of its work is eventually done.

Workload traces​

A workload trace is a directory with two Parquet files: tasks.parquet describes each task, and fragments.parquet describes the demand of each task over time.

tasks.parquet​

ColumnTypeRequiredDescription
idint32yesIdentifier of the task.
namestringnoName of the task.
submission_timetimestamp (milliseconds)yesWhen the task is submitted.
durationint64yesHow long the task runs, in milliseconds.
cpu_countint32yesThe number of CPU cores the task needs.
cpu_capacitydoubleyesThe CPU capacity the task needs, in MHz.
mem_capacityint64yesThe memory the task needs, in MiB.
gpu_countint32noThe number of GPU cores the task needs.
gpu_capacitydoublenoThe GPU capacity the task needs, in MHz.
parentslist of int32noThe tasks that must finish before this task can start.
childrenlist of int32noThe tasks that depend on this task.
deferrablebooleannoWhether a time-shifting scheduler may delay the task.
deadlineint64noThe latest time the task may finish, in milliseconds since the Unix epoch.

fragments.parquet​

Each row is one fragment, during which the demand of a task is constant. The fragments of a task are in order.

ColumnTypeRequiredDescription
idint32yesIdentifier of the task.
durationint64yesHow long the fragment lasts, in milliseconds.
cpu_usagedoubleyesThe CPU demand during the fragment, in MHz.
gpu_usagedoublenoThe GPU demand during the fragment, in MHz.