Data contract
What the Goodput agent transmits. There is no workload data — no process names, command lines, env vars, filenames, container images, model or dataset identifiers, or memory contents.
Transport
POST /v1/batches— gzipped MessagePack body (wire.Batch)- Optional
Authorization: Bearer <token> - Optional
X-Goodput-Dropped-Batches— cumulative outbox eviction count
Batch fields
| Field | Meaning |
|---|---|
schema_version | Wire schema version |
cluster_id | Operator-supplied cluster name |
node_id | Node identity (default: hostname) |
agent_version | Agent build string |
intervals[] | Up to four 15s samples packed into one ~60s upload |
Per-interval fields
| Field | Meaning |
|---|---|
ts | Sample timestamp (UTC) |
gpus[] | One entry per GPU |
ib_ports[] | InfiniBand port counters (empty if no IB) |
xids[] | Xid events observed since the previous interval |
Per-GPU fields (NVML)
UUID, name, PCI bus ID, memory used/total, SM clock current/max, throttle reasons (bitmask + supported flag), temperature (°C, if supported), volatile ECC corrected/uncorrected (if supported), PCIe gen/width current/max (if supported), GPU/memory utilisation (if supported).
Fields the driver reports as unsupported are omitted or flagged — never invented as zero.
Per-IB-port fields
Device name, port number, state, link rate (Gbps), counter deltas since the previous sample (wrap-corrected), reason codes (e.g. IB_PORT_DOWN).
Per-Xid fields
Numeric Xid code, PCI bus ID, derived reason code (XID_<n>). Not the raw kernel-log line.
What is never collected
- Process names, PIDs, or command lines
- Environment variables or filenames
- Container or image IDs
- Network payloads
- Model or dataset identifiers
- Tenant names or memory contents
- Any customer workload identity