Days
Configuration Settings

Overview

TOML schema, units, runtime scope, and backend boundaries.

Scope: Days AGO and Legacy Days. Days uses one TOML scenario format with two consumers:

  • Days AGO lowers the supported subset in src/scenario/compile.rs into a SimulationImage, then runs it on Scalar, CPU, Metal, or CUDA. Its entry point is the days CLI.
  • Legacy Days validates the complete legacy vocabulary in legacy/src/config.rs and runs the scenario with Nexosim, through the days-legacy CLI.

The pages in this section mark which engine accepts each key.

Units

ValueUnit
Times such as duration, initial_delay, and report_intervalseconds unless the key ends in _ns or the page says otherwise
switch.port_ratebits per second
DCQCN *_rate_gbps valuesgigabits per second
Traffic sizes, packet sizes, and most buffersbytes
Topology and flow identifiersnon-negative integers

Days AGO represents time in integer nanoseconds. It rejects values that cannot be represented exactly in the field's integer scale.

Root keys

The strict legacy loader accepts the following root keys. Unknown root keys fail validation in both engines: Days AGO refuses an unknown key in every table, naming the key and the table it sits in (TOML parse error ... unknown field ... (in [table])), and accepts without reading exactly the twelve root keys that only the legacy engine uses: ui_interval, threading, num_threads, hot_workers, concurrency_level, log_path, csv_logging, report_interval, mailbox_capacity, legacy_e5_metrics, model_host_attachment, and app_source (LEGACY_ENGINE_ROOT_KEYS in src/scenario/compile.rs; a test keeps the list equal to the legacy loader's). Days AGO also requires every arr_dist and pkt_size_dist to be a one-line inline table with no comment and no trailing comma.

KeysPurposeScope
seed, durationDeterminism and stop timeBoth
ui_intervalProgress refresh intervalLegacy
threading, num_threads, hot_workers, concurrency_levelNexosim runtime selectionLegacy
time_quantum_nsNexosim time quantizationLegacy; Days AGO requires zero or omission
mailbox_capacityActor mailbox capacityLegacy
log_path, csv_logging, report_intervalCSV reports and protocol tracesLegacy logger
legacy_e5_metricsOpt-in E5 TCP correctness rowsLegacy
edges, hosts, topologyNetwork graph and host attachmentsBoth; the SpectrumX category is Days AGO only
switchPort rate, queue, scheduler, and AQM policyBoth, with capability differences
linkPFC and propagationBoth, with capability differences
model_host_attachmentExplicit host injection/delivery stagesLegacy
routingScenario-wide ShortestPath, FatTreeEcmp, or SimAiEcmpBoth; SimAiEcmp is Days AGO only
flow, flow_setPoint-to-point trafficBoth, with a smaller exact subset
collective, collective_setCollective trafficBoth, with different algorithm sets
computeDelay-only compute stages that collectives can wait forDays AGO; the legacy loader rejects the key
workloadAn AICB/SimAI training trace as the scenario's trafficDays AGO; the legacy loader rejects the key
app_sourceActor-managed byte buffers for TCP Broadcast/RingAllReduceLegacy

See the pages in this section for field-level constraints. A key can belong to the vocabulary and still fail when its value or combination is inactive. The strict loader rejects examples such as switch.ecn_capacity_bytes without switch.ecn or switch.ecn_by_rate, [link.pfc] without link.mode = "Pfc", and [app_source] without a supported TCP collective.

Minimal scenario

This custom topology runs in Legacy Days and lowers into Days AGO:

seed = 1
duration = 2.0
threading = "single"
csv_logging = false

edges = [[0, 1]]
hosts = [0, 1]

[switch]
port_rate = 1000000000
capacity = 100
discipline = "FIFO"
drop = "TailDrop"

[[flow]]
flow_type = "PacketDistribution"
graph = [[0, 1]]

[flow.traffic]
initial_delay = 0.0
size = 10000
arr_dist = { type = "Uniform", low = 0.001, high = 0.001 }
pkt_size_dist = { type = "DiscreteUniform", low = 512, high = 512 }

threading and csv_logging affect only the legacy run. Days AGO ignores those runtime fields; the caller selects a backend, for example with days --engine.

Cargo features and backend capabilities

Legacy protocol models use Cargo features:

  • flow_type = "DCQCN" requires -p days-legacy --features dcqcn.
  • link.mode = "Pfc" requires -p days-legacy --features l2_pfc.
  • LeanGuard event CSVs require lean plus the protocol feature where applicable.

Days AGO Scalar and CPU execute the full lowered mechanism set. Metal and CUDA accept deterministic packet traffic, exact TCP Reno/CUBIC, DCQCN, RoCE queue pairs, PFC, collective and compute stages, FIFO/SP/WFQ/DRR/WRR, TailDrop, and the ECN ramp, subject to device capacity checks. The error names the unsupported mechanism and directs you to Scalar or CPU.

Reference pages

On this page