Synthetic timing records / no device measurements
Storage latency: synthetic arrival cohorts
390 synthetic request records compare independent and completion-driven arrivals during one pause; downloadable timestamps reproduce the p99 calculation.
Download CSV390 requests / 7 columnsFull JSON records / Metadata and hashes / Research explanation and plot
Method
One FIFO server; 2000 ms half-open arrival window; 10 ms open interval; 1 ms normal service; first service has a 100 ms added pause. Closed loop: one client with 9 ms think time after completion. All cohort requests drain; nearest-rank empirical quantiles.
These are two separate runs of the same constructed server, not a faster and a slower SSD. Independent arrivals keep accumulating during the pause; the one-client closed loop stops asking until completion. A row is one admitted request. The unique key is the pair (mode, index).
| Mode | Requests | Offered requests/s | p99, ms | Maximum, ms | Above 10 ms |
|---|---|---|---|---|---|
| open | 200 | 100 | 83 | 101 | 11 / 200 |
| closed | 190 | 95 | 1 | 101 | 1 / 190 |
Read the timestamps
The second open-loop request arrives at 10 ms but cannot start until 101 ms. It completes at 102 ms: 91 ms waiting plus 1 ms service gives 92 ms response time. The second closed-loop request arrives only at 110 ms and finishes at 111 ms. Selecting only service time would erase the queueing delay in the open case.
The maximum is 101 ms in both cohorts. Their nearest-rank p99 values differ because both the observations and the populations differ. Do not average the two p99 values or combine the 390 rows into a purported single-device benchmark.
Reproduce
Place the model, tests and generator together in a research/ directory. Run the following commands there with Node.js; no packages or storage-device access are needed. The generator writes full records beside itself and CSV/metadata into ../data/datasets/.
node --test latency-measurement.test.mjs
node build-latency-measurement.mjsCSV and numeric records reproduce exactly. Generation timestamps and the recorded Node.js version describe the actual run and can differ. Metadata hashes bind the downloads to the model, tests and generator used; hashes are integrity checks, not independent validation of the method.
Column definitions
- mode
- Separate synthetic scenario: open or closed; not a device label.
- index
- Zero-based request number within its scenario.
- arrivalMs
- Arrival and submission time in ms, inside [0, 2000).
- startMs
- FIFO service start in ms; may follow arrival because of queueing.
- completedMs
- Completion time in ms; all admitted requests are drained.
- queueMs
- startMs minus arrivalMs, in ms.
- responseMs
- completedMs minus arrivalMs, in ms; not device service time.
Limits
- Not hardware data, not a fio run, not a paper reproduction, no device ranking or population inference. No random sampling, timeout, drop, retry, parallelism or cache. No confidence interval is applicable to these deterministic inputs.
- The open and closed cohorts have unequal loads and sizes. Do not pool them as one benchmark or infer a speedup.
- Each request is one row. Request indices restart for each mode; (mode, index) is the unique key.
Sources and license
CC0-1.0 for Hesela's original synthetic records and calculation code; cited publications retain their own rights.
- Schroeder, Wierman and Harchol-Balter. Open Versus Closed: A Cautionary Tale. USENIX NSDI 2006. Workload-model context, not the source of these synthetic records.
- Hesela: Storage latency: when the benchmark stops asking
Corpus: coordinated omission, open-loop load, closed-loop load and queue depth.