Problem
Crucible benchmarks have multiplex.json for parameter definitions (presets, validations), but tools have no equivalent metadata. Tool parameters, subtool declarations, and descriptions exist only as bash comments and getopt strings inside *-start scripts — not machine-readable.
This makes it impossible for automation (including AI agents) to discover:
- What tools exist and what they do
- Which tools have subtools (and what those subtools are)
- What parameters each tool accepts and their valid values
- Which tools/subtools produce CDM-indexed metrics vs raw file output only
Current state
| File |
What it has |
What it's missing |
rickshaw.json |
Tool name, start/stop scripts, endpoint whitelist/blacklist |
Description, params, subtools |
workshop.json |
Build dependencies (packages, source tarballs) |
Everything semantic |
*-start scripts |
Params as bash getopt longopts; subtool lists as bash comments |
Not machine-readable |
multiplex.json |
Does not exist for tools (only benchmarks) |
Everything |
Tools with subtools today
Discovered by reading bash scripts — this should be in metadata:
- kernel → turbostat, perf, speed-select-util, trace-cmd, sysfs-trace (params:
--subtools, --interval, --record-opts, --base-freq, --turbo-freq, --core-power, --trace-cmd-record-opts, --sysfs-trace-setup, --sysfs-trace-cleanup)
- sysstat → mpstat, sar, iostat, pidstat (params:
--subtools, --interval)
- ethtool — no subtools (params:
--interval, --interfaces)
- forkstat — no subtools (params:
--events)
- ftrace — no subtools (params:
--record-opts)
- mlxreg — no subtools (params:
--devices, --sensors, --interval)
- nvidia — no subtools (params:
--interval)
- ovs — no subtools (params:
--interval)
- power — no subtools (params:
--interval, --username, --password, --endpoints, --plugin)
- procstat — no subtools (params:
--files, --interval)
- rt-trace-bpf — no subtools (params:
--cpu-list)
Proposed changes
1. Add tool-metadata.json to each tool subproject
New file alongside rickshaw.json and workshop.json:
{
"tool": "kernel",
"description": "Linux kernel performance tools — CPU frequency, power, hardware counters, and tracing",
"subtools": [
{
"name": "turbostat",
"description": "CPU frequency, power, and thermal monitoring via MSR polling",
"cdm_indexed": false,
"output_files": ["turbostat-stdout.txt"]
},
{
"name": "perf",
"description": "Hardware performance counter sampling (IPC, cache misses, branch stats)",
"cdm_indexed": false,
"output_files": ["perf-stat-stdout.txt"]
},
{
"name": "speed-select-util",
"description": "Intel Speed Select Technology configuration and monitoring",
"cdm_indexed": false,
"output_files": ["settings.txt"]
},
{
"name": "trace-cmd",
"description": "Ftrace-based kernel event tracing",
"cdm_indexed": false,
"output_files": ["trace.dat"]
},
{
"name": "sysfs-trace",
"description": "Sysfs attribute polling for hardware-specific counters",
"cdm_indexed": false,
"output_files": []
}
]
}
For tools without subtools:
{
"tool": "procstat",
"description": "Per-process and per-CPU interrupt and softirq statistics from /proc",
"cdm_indexed": true,
"cdm_sources": [
{"source": "procstat", "types": ["interrupts-sec", "processed-sec"]}
]
}
The cdm_indexed and cdm_sources fields tell consumers which metrics will appear in CDM after post-processing, and which will only be available as raw files.
2. Add multiplex.json to each tool subproject
Same format as benchmark multiplex.json:
{
"presets": {
"basic": [
{"arg": "subtools", "vals": ["turbostat"]},
{"arg": "interval", "vals": ["10"]}
]
},
"validations": {
"subtools": {
"description": "comma-separated list of kernel subtools to run",
"args": ["subtools"],
"vals": "^(turbostat|perf|speed-select-util|trace-cmd|sysfs-trace)(,(turbostat|perf|speed-select-util|trace-cmd|sysfs-trace))*$"
},
"positive_integer": {
"description": "a whole number greater than 0",
"args": ["interval"],
"vals": "[1-9][0-9]*"
}
}
}
3. Schema validation
Add JSON schemas for both new files under schema/ so they can be validated alongside existing rickshaw.json and workshop.json schemas.
Files to add/modify
Per tool subproject (11 tools):
- Add
tool-metadata.json
- Add
multiplex.json
Crucible core:
schema/tool-metadata.json — JSON schema for validation
schema/multiplex.json — JSON schema (may already exist for benchmarks)
Problem
Crucible benchmarks have
multiplex.jsonfor parameter definitions (presets, validations), but tools have no equivalent metadata. Tool parameters, subtool declarations, and descriptions exist only as bash comments andgetoptstrings inside*-startscripts — not machine-readable.This makes it impossible for automation (including AI agents) to discover:
Current state
rickshaw.jsonworkshop.json*-startscriptsgetoptlongopts; subtool lists as bash commentsmultiplex.jsonTools with subtools today
Discovered by reading bash scripts — this should be in metadata:
--subtools,--interval,--record-opts,--base-freq,--turbo-freq,--core-power,--trace-cmd-record-opts,--sysfs-trace-setup,--sysfs-trace-cleanup)--subtools,--interval)--interval,--interfaces)--events)--record-opts)--devices,--sensors,--interval)--interval)--interval)--interval,--username,--password,--endpoints,--plugin)--files,--interval)--cpu-list)Proposed changes
1. Add
tool-metadata.jsonto each tool subprojectNew file alongside
rickshaw.jsonandworkshop.json:{ "tool": "kernel", "description": "Linux kernel performance tools — CPU frequency, power, hardware counters, and tracing", "subtools": [ { "name": "turbostat", "description": "CPU frequency, power, and thermal monitoring via MSR polling", "cdm_indexed": false, "output_files": ["turbostat-stdout.txt"] }, { "name": "perf", "description": "Hardware performance counter sampling (IPC, cache misses, branch stats)", "cdm_indexed": false, "output_files": ["perf-stat-stdout.txt"] }, { "name": "speed-select-util", "description": "Intel Speed Select Technology configuration and monitoring", "cdm_indexed": false, "output_files": ["settings.txt"] }, { "name": "trace-cmd", "description": "Ftrace-based kernel event tracing", "cdm_indexed": false, "output_files": ["trace.dat"] }, { "name": "sysfs-trace", "description": "Sysfs attribute polling for hardware-specific counters", "cdm_indexed": false, "output_files": [] } ] }For tools without subtools:
{ "tool": "procstat", "description": "Per-process and per-CPU interrupt and softirq statistics from /proc", "cdm_indexed": true, "cdm_sources": [ {"source": "procstat", "types": ["interrupts-sec", "processed-sec"]} ] }The
cdm_indexedandcdm_sourcesfields tell consumers which metrics will appear in CDM after post-processing, and which will only be available as raw files.2. Add
multiplex.jsonto each tool subprojectSame format as benchmark
multiplex.json:{ "presets": { "basic": [ {"arg": "subtools", "vals": ["turbostat"]}, {"arg": "interval", "vals": ["10"]} ] }, "validations": { "subtools": { "description": "comma-separated list of kernel subtools to run", "args": ["subtools"], "vals": "^(turbostat|perf|speed-select-util|trace-cmd|sysfs-trace)(,(turbostat|perf|speed-select-util|trace-cmd|sysfs-trace))*$" }, "positive_integer": { "description": "a whole number greater than 0", "args": ["interval"], "vals": "[1-9][0-9]*" } } }3. Schema validation
Add JSON schemas for both new files under
schema/so they can be validated alongside existingrickshaw.jsonandworkshop.jsonschemas.Files to add/modify
Per tool subproject (11 tools):
tool-metadata.jsonmultiplex.jsonCrucible core:
schema/tool-metadata.json— JSON schema for validationschema/multiplex.json— JSON schema (may already exist for benchmarks)