@@ -10,10 +10,11 @@ every PR.
1010| ---| ---| ---|
1111| POSIX syscall semantics | native Python | ~ 10 s |
1212| pjdfstest curated subset | external (` pjdfstest ` ) | ~ 30–60 s |
13- | Read-pattern stress | external (` fio ` ) | ~ 3 min |
13+ | Read-pattern stress | external (` fio ` ) | ~ 4 min |
1414| Read cross-validation | native Python (fsx-style) | ~ 30 s |
1515| Filesystem stressor | external (` stress-ng ` ) | ~ 2 min |
1616| Mount/unmount cycling | native Python | ~ 2 min |
17+ | Active under stress | external (` fio ` ) + native probes | ~ 30 s |
1718| ** Total** | | ** ~ 10–15 min** |
1819
1920Every category mounts biofuse fresh in a subprocess (matching real-user
@@ -44,10 +45,11 @@ uv sync --group fs-tests
4445Run from the repository root:
4546
4647``` bash
47- uv run --group fs-tests python -m fs_tests.harness # all categories
48- uv run --group fs-tests python -m fs_tests.harness --quick # smoke run (skips pjdfstest + large fio)
49- uv run --group fs-tests python -m fs_tests.harness posix # one category
50- uv run --group fs-tests python -m fs_tests.harness fio --large # fio with the 500 MB fixture
48+ uv run --group fs-tests python -m fs_tests.harness # all categories
49+ uv run --group fs-tests python -m fs_tests.harness --quick # smoke run (skips pjdfstest, fio, active-under-stress)
50+ uv run --group fs-tests python -m fs_tests.harness posix # one category
51+ uv run --group fs-tests python -m fs_tests.harness fio --large # fio with the 500 MB fixture
52+ uv run --group fs-tests python -m fs_tests.harness active-under-stress # liveness probes under background fio
5153uv run --group fs-tests python -m fs_tests.harness --results /tmp/biofuse-results all
5254```
5355
@@ -91,6 +93,28 @@ errors" reported by fio. Throughput numbers are recorded in `report.md`
9193for tracking but do not gate on a floor — they depend heavily on the
9294host (page cache, CPU, fixture size).
9395
96+ ** fio gating: streaming vs. static targets.** The fio runner classifies
97+ each job in ` harness/fio_runner.py ` :
98+
99+ - Gated streaming jobs against ` .bed ` : ` seq-read ` , ` rand-read ` ,
100+ ` mmap-read ` , ` parallel-seq-read ` (numjobs=4 sequential). Errors here
101+ fail the runner.
102+ - Informational streaming job: ` multithread ` (numjobs=16, random) is
103+ expected to time out under FUSE backpressure (the kernel returns
104+ EAGAIN); its errors are recorded in the detail line but do not gate
105+ the run. The concurrency-overlap check it drives is still gated.
106+ - Gated static-file jobs: ` static-stress-bim ` / ` static-stress-fam `
107+ hammer the in-memory cached ` .bim ` and ` .fam ` files with
108+ ` numjobs=16 ` random reads. These must always pass.
109+
110+ ** Active under stress.** A separate runner (` active-under-stress ` )
111+ spawns the multithread fio job in the background against ` .bed ` , then
112+ loops foreground probes — ` readdir ` plus 4 KB reads of ` .bim ` and
113+ ` .fam ` — with a per-probe timeout (default 5 s). It exists to confirm
114+ that mount-level operations and static-file reads stay responsive even
115+ while the streaming file is saturated. The streaming file itself is
116+ * not* probed: that is the load.
117+
94118** fsx is read-only mode only.** Apple/LTP/xfstests fsx all assume a
95119writable filesystem (they bootstrap the in-memory model by writing to
96120the file under test). None of them run unmodified against a read-only
0 commit comments