Dell Lab Validation Checklist
Complete validation on Linux VMs before promoting to v1.0.0. Covers every engine on physical and virtual targets.
See ENGINE-COVERAGE.md for the full matrix (33 profiles).
Quick start
stratabench lab bootstrap -f lab.yaml
stratabench lab check -f lab.yaml
stratabench lab validate -f lab.yaml # print sign-off matrix + readiness
stratabench lab validate -f lab.yaml --smoke # + mock smoke (5 profiles)
stratabench lab validate -f lab.yaml --smoke-all # mock-validate all 33 profiles
stratabench lab validate -f lab.yaml --smoke-sbk # mock-validate SBK app profiles
stratabench lab validate -f lab.yaml --output lab-signoff.json
Override targets with env vars: LAB_BLOCK_TARGET, LAB_AFA_LUNS, LAB_FILE_TARGET, LAB_POSTGRES_DSN, LAB_KAFKA_TARGET, LAB_SPDK_PCI.
Prerequisites
# Jump host + client VMs
sudo apt install fio smartmontools nvme-cli postgresql-client openssh-client
# Optional: vdbench, SPDK perf, elbencho, warp, kafka, rocksdb tools
stratabench inventory collect
0. Hardware validation (per use case)
Before each profile run, validate workload and host hardware:
stratabench validate --profile <name> --target <target> --check-hardware
See HARDWARE-VALIDATION.md for the per-use-case matrix (HDD, NVMe, AFA, S3 RDMA, VM, app). Hardware checks are on by default for validate and run (skipped with --mock).
| Use case |
Hardware checks |
| HDD |
rotational device in inventory |
| NVMe / SSD |
NVMe or non-rotational block device |
| AFA |
2+ block LUNs, vdbench in PATH |
| S3 RDMA |
RDMA NIC (rdma link show) |
| VM |
ssh in PATH; guest device optional |
| App (pgbench/kafka/rocksdb) |
driver binary in PATH, 8GB+ RAM |
1. Inventory and SMART (physical)
stratabench inventory collect
stratabench smart collect
2. Block — fio (physical)
| Profile |
Command |
Pass |
hdd-sequential-read |
stratabench validate --profile hdd-sequential-read --target /dev/sda --check-hardware && stratabench run ... |
|
ssd-random-4k |
stratabench validate --profile ssd-random-4k --target /dev/nvme0n1 --check-hardware && stratabench run ... |
|
nvme-random-oltp |
stratabench validate --profile nvme-random-oltp --target /dev/nvme0n1 --check-hardware && stratabench run ... |
|
nvme-max-stress |
stratabench validate --profile nvme-max-stress --target /dev/nvme0n1 --check-hardware && stratabench run ... |
|
2b. Block — native engine (physical, Linux)
| Profile |
Command |
Pass |
block-native-oltp |
stratabench run --profile block-native-oltp --target /dev/nvme0n1 |
|
block-native-io_uring |
stratabench run --profile block-native-io_uring --target /dev/nvme0n1 |
|
Verify live monitoring: stratabench run --profile block-native-oltp --target /dev/nvme0n1 --async --watch
3. Block — vdbench / SPDK (physical only)
| Profile |
Command |
Pass |
afa-multi-lun |
stratabench run --profile afa-multi-lun --target /dev/sd{b,c,d} |
|
spdk-nvme-peak |
stratabench run --profile spdk-nvme-peak --target 0000:01:00.0 |
|
4. File — elbencho (physical)
| Profile |
Command |
Pass |
file-parallel-read |
stratabench run --profile file-parallel-read --target /mnt/nfs/share |
|
file-parallel-write |
stratabench run --profile file-parallel-write --target /mnt/nfs/share |
|
5. Object — warp (physical)
export WARP_ACCESS_KEY=... WARP_SECRET_KEY=...
| Profile |
Command |
Pass |
s3-put-throughput |
stratabench run --profile s3-put-throughput --target 10.0.1.10:9000 |
|
s3-get-throughput |
stratabench run --profile s3-get-throughput --target 10.0.1.10:9000 |
|
s3-mixed-workload |
stratabench run --profile s3-mixed-workload --target 10.0.1.10:9000 |
|
s3-cluster-put-get |
stratabench run --profile s3-cluster-put-get --target 10.0.1.10:9000 --clients ... |
|
s3-cluster-rdma |
stratabench run --profile s3-cluster-rdma --target 10.0.1.10:9000 |
|
5b. Object — gosbench (physical)
| Profile |
Command |
Pass |
s3-gosbench-write |
stratabench run --profile s3-gosbench-write --target 10.0.1.10:9000 |
|
s3-gosbench-read |
stratabench run --profile s3-gosbench-read --target 10.0.1.10:9000 |
|
6. Application — sbk (physical)
| Profile |
Command |
Pass |
app-postgres-tpc-c |
stratabench run --profile app-postgres-tpc-c --target "postgres://bench@host/db" |
|
app-kafka-producer |
stratabench run --profile app-kafka-producer --target 10.0.1.30:9092 |
|
app-rocksdb-read |
stratabench run --profile app-rocksdb-read --target /data/rocksdb |
|
7. VM block — fio via SSH (virtual)
| Profile |
Command |
Pass |
vm-hdd-sequential |
stratabench run --profile vm-hdd-sequential --target root@10.0.1.20:/dev/vdb |
|
vm-disk-random |
stratabench run --profile vm-disk-random --target root@10.0.1.20:/dev/vdb |
|
vm-disk-sequential |
stratabench run --profile vm-disk-sequential --target root@10.0.1.20:/dev/vdb |
|
vm-nvme-oltp |
stratabench run --profile vm-nvme-oltp --target root@10.0.1.20:/dev/vdb |
|
vm-nvme-passthrough |
stratabench run --profile vm-nvme-passthrough --target root@10.0.1.20:/dev/nvme0n1 |
|
vm-disk-stress |
stratabench run --profile vm-disk-stress --target root@10.0.1.20:/dev/vdb |
|
8. VM AFA — vdbench via SSH (virtual)
| Profile |
Command |
Pass |
vm-afa-multi-lun |
stratabench run --profile vm-afa-multi-lun --target root@10.0.1.20:/dev/sdb,/dev/sdc,/dev/sdd |
|
9. VM file — elbencho via SSH (virtual)
| Profile |
Command |
Pass |
vm-file-parallel-read |
stratabench run --profile vm-file-parallel-read --target root@10.0.1.20:/mnt/data |
|
vm-file-parallel-write |
stratabench run --profile vm-file-parallel-write --target root@10.0.1.20:/mnt/data |
|
10. VM object — warp (virtual)
| Profile |
Command |
Pass |
vm-s3-put-throughput |
stratabench run --profile vm-s3-put-throughput --target 10.0.1.20:9000 |
|
vm-s3-rdma |
stratabench run --profile vm-s3-rdma --target 10.0.1.20:9000 |
|
11. VM application — sbk via agent (virtual)
# On guest VM
stratabench-agent
| Profile |
Command |
Pass |
vm-app-postgres |
stratabench run --profile vm-app-postgres --target "postgres://bench@localhost/db" --clients 10.0.1.20:7777 |
|
vm-app-kafka |
stratabench run --profile vm-app-kafka --target localhost:9092 --clients 10.0.1.20:7777 |
|
12. Live monitoring + regression
stratabench run --profile nvme-random-oltp --target /dev/null --mock --async --watch
stratabench agent "nvme oltp database" --target /dev/nvme0n1 --check-baseline
stratabench baseline set --run-id <uuid>
stratabench run --profile nvme-random-oltp --target /dev/nvme0n1 --check-baseline
13. Kubernetes
kubectl apply -k deploy/k8s/
kubectl apply -f examples/benchmark-mock.yaml
kubectl get benchmarks -n stratabench
Sign-off
| Check |
Pass |
| All engines exercised (fio, vdbench, spdk, elbencho, warp, gosbench, stratabench, sbk, mock) |
|
| Native block engine (pread + io_uring) on NVMe |
|
| Live monitoring (async + watch + SSE) during at least one run |
|
| HDD physical + virtual |
|
| NVMe physical + virtual (incl. passthrough) |
|
| AFA physical + virtual |
|
| S3 RDMA physical + virtual |
|
| Validator catches bad workload design |
|
| Baseline regression alerts on re-run |
|
| Operator sets benchmark status.runId |
|
| HTML report readable |
|