Skip to main content

Service level objectives

Issue #17. Numbers marked Target are design goals. Numbers marked Measured come from benchmarks/ on the hardware named in the baseline file. FluxVM-dependent figures must be labeled as such.

Control plane (zyvor-fabricd)​

SLOTargetWindowMeasured
GET /health availability99.9%30 dnot yet from production telemetry
GET /readyz success when store + FluxVM up99.9%30 dCI smoke only
API p99 (auth'd JSON, in-process / local)≤ 50 ms5 min benchsee benchmarks/baselines/
Concurrent inventory list (GET /api/vms) p99≤ 200 ms at 500 VMsbenchharness inventory mode

VM lifecycle (FluxVM-dependent — label every published number)​

SLOTargetNotes
Cold start (pre-pulled qcow2, 2 vCPU / 2 GiB)p50 ≤ 8 s, p99 ≤ 20 sFluxVM + image cache
Stop → stoppedp99 ≤ 10 sACPI then force
Snapshot disk-only (qcow2 internal)p99 ≤ 30 snot full memory dump
Backup create 10 GiB disk, local, gzipp99 ≤ 180 sbackup crate path

Failover / maintenance​

ObjectiveTargetEvidence
Host evacuate plan (no I/O)deterministic, largest-firsthost-lifecycle unit tests
Mid-migration failurejob failed, source stays cordonedmigration_failure_marks_job_failed_and_leaves_host_cordoned
Quorum loss (file heartbeat majority)check_quorum → false at ≤ majorityfault-tolerance::quorum tests
RTO after node death with shared storage + FT enabledunmeasured — do not quoteneeds chaos lab (#15 live track)
RPO for incremental backuplast successful backup timestampmetadata in backup crate

Error budget policy​

  • Publish a baseline JSON before claiming a number in README or sales decks.
  • FluxVM-dependent rows must include fluxvm_version and labeled_fluxvm_dependent: true.
  • If a live bench cannot run (no daemon), the harness writes status: offline and must not be copied into FEATURES.md as a measurement.