Running a benchmark¶
Prerequisites¶
- The device is visible under Devices
- You're logged in as
operatororadmin(viewers cannot start runs) - No other run is in progress (Anvil serializes; one device at a time)
Start via UI¶
- Devices → click your device → New run
- Pick the profile
- For destructive profiles, type the last 6 chars of the serial to confirm
- Click Start
Start via API¶
bash
TOKEN=$(grep ^ANVIL_BEARER_TOKEN .env | cut -d= -f2)
curl -X POST -H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"device_id": "01K...",
"profile_name": "snia_quick_pts",
"confirm_serial_last6": "A1B2C3"
}' \
http://localhost:8080/api/runs
Returns the new run's full record including its id. Poll
GET /api/runs/{id} or subscribe to WS /ws/runs/{id} for live
updates.
What Anvil captures per run¶
- Device fingerprint at run time (model, serial, firmware, capacity, PCIe capability, PCIe actual link)
- Host fingerprint (kernel, CPU, available
fio/nvmeversions) - SMART before the first fio phase, SMART after the last
- Every fio
json+sample (per-second metrics per phase) - Temperature from every SMART sample during the run
Aborting¶
Click Abort run on the Run Detail page. The queue sends SIGTERM
to fio in the runner container; the run finishes its current sample,
then writes status=aborted with error_message="aborted by user".
Thermal auto-abort¶
The endurance_soak profile watches the drive temperature every 5
seconds. If 6 consecutive samples report ≥ 75 °C, the run aborts
itself with:
thermal_abort: temperature ≥ 75 °C for 6 consecutive SMART samples
This is deliberate — throttling kicks in on most NVMes near 75 °C and any data after that point is compromised as a benchmark result.