Files
erofs-freebsd-out-tree/docs/pre9-cache-final-manual-validation.md
T
2026-08-18 09:20:44 +02:00

6.1 KiB

Pre9 decoded extent cache final manual validation

Date: 2026-08-13

Scope

This run validated the mount-scoped decoded LZMA extent cache at enclosing repository commit cdcf276d12169a672d2de42996532a470ac061d9.

Controlled identities:

  • repo-pre-9 tree: 9d7eaf63a1c5d07320af3ef39930fc0a3530dd11
  • repo-pre-9/src tree: e657e8a63b097b061670f75ca01947a568ef33d5
  • guest-built KLD SHA-256: 473a6205f43905972f2417609d43f67ab2cb51ea79bc1716fffa5c1914ff85af
  • LZMA image SHA-256: 32107a084b27362a093768b88746c37c2e99a74b9f1301a9d4046988479defe9
  • LZMA source SHA-256: ddda39737f0f6093e828a032ec161511fefbb1fa361bc6cbffdbc91e48e4c461

The existing fresh QEMU process on host port 10030 was reused. No second VM was created. The guest used FreeBSD 15.0-RELEASE-p8 under QEMU TCG with 6 GiB RAM and four virtual CPUs. The KLD was built in the guest with make WITH_ZSTDIO=0.

The VM used the existing base image /work/tests-dev/lfs/freebsd-15-dev-src-20260811.bp. Its previously audited SHA-256 is 67f359621f23a1d745f0889370cbb99a096cee3e99a0b2f3bb18fc7a91bf6fef. This run relied on that established integrity record and did not repeat the approximately 16 GiB image hash, so base-image hashing did not block the final validation.

Verdict

Area Verdict Result
Guest build, KLD load and fixture mounts PASS Build returned zero, kldload returned zero and both LZMA and LZ4 images mounted read-only.
LZMA single-read correctness PASS 4 KiB, 16 KiB, 64 KiB and 1 MiB single pread() calls returned the requested bytes with errno=0; every output range matched the source range SHA-256.
LZMA full-file correctness PASS Cold and warm full SHA-256 runs returned zero and matched the 8 MiB source hash.
LZMA liveness and performance PASS Cold full SHA completed in 2.16 seconds and warm full SHA in 1.44 seconds, both below the 120-second host hard limit.
LZMA concurrency PASS Two simultaneous full SHA processes both returned zero and the expected hash; guest real times were 22.52 and 21.97 seconds.
Non-LZMA regression PASS The 8 MiB LZ4 fixture returned the expected SHA-256 in 9.03 seconds.
Cleanup and guard integrity PASS Test QEMU PID 812999 exited, port 10030 closed, its overlay was deleted, and guard PID 26318/port 9222 remained alive and reachable.

Overall verdict: PASS for the required final manual smoke scope.

Single pread() evidence

Each probe program performs one target-file pread(). Truss confirmed one target call at offset zero for every requested length. Dynamic-loader reads are not counted.

Length Returned Probe command wall time Output/source range hash Verdict
4 KiB 4 KiB 2.696 s 1c3c59331a4849514667bbc51c078327577b98f75a62996bbc2fe310b014dd79 PASS
16 KiB 16 KiB 2.140 s 2433ce7c2ea151f487a319447ce4fe14e1a2c2af9f0e5113fe47fc74b6138eee PASS
64 KiB 64 KiB 1.369 s 2bb87afd3b9fab420cbe55b782d69a7342150e8816a35efacf22d2ab3012815d PASS
1 MiB 1 MiB 3.838 s 52e806509e5dfeb523904f167fca765d001ea749351ecf51738e61a5352a1ba3 PASS

These wall times include SSH and truss overhead and are not pure kernel read times.

Full-file SHA evidence

The 8 MiB LZMA source hash is:

ddda39737f0f6093e828a032ec161511fefbb1fa361bc6cbffdbc91e48e4c461

Run Exit Guest real time Captured hash Verdict
Cold, fresh mount 0 2.16 s expected hash PASS
Warm, same mount 0 1.44 s expected hash PASS
Concurrent process 1 0 22.52 s expected hash PASS
Concurrent process 2 0 21.97 s expected hash PASS

The concurrency result shows substantial contention compared with a single reader, but it completed correctly and stayed well inside the 120-second hard limit. This run does not claim concurrency performance is optimized.

Baseline comparison

The preceding controlled Pre7/Pre8/Pre9 run sampled each full SHA after about eight seconds. Each process was still inside the LZMA decompression path and had advanced only about 1.0-1.25 MiB; no final hash was captured. That report therefore classified full-read liveness as failed and correctness as blocked.

With the mount-scoped decoded extent cache, the same 8 MiB fixture completed with the correct hash in 2.16 seconds cold and 1.44 seconds warm. This closes the previous full-file correctness block for this fixture and demonstrates a material liveness improvement. It does not establish a precise speedup ratio, because the baseline process was terminated at the observation point rather than allowed to finish.

Non-LZMA result

The LZ4 compact-64k image contained compressed.bin with expected SHA-256:

3ff012b76087c4da65ce0b69813a76f47ea367e95782edf8b8cd6cd3ec4d1880

The mounted file produced the same hash, returned zero and completed in 9.03 seconds of guest real time.

Kernel and cleanup observations

No EROFS panic, assertion, mount error or decompression error was found in the captured dmesg tail. The image emitted pre-existing root-filesystem directory warnings during boot; they occurred before the test KLD was loaded and are not attributed to EROFS.

All test-specific mounts and md providers were explicitly detached before VM shutdown. A final generic cleanup command contained an awk quoting error, but it ran only after the explicit LZMA and LZ4 unmount/md detach operations had already returned zero. Host-side cleanup independently confirmed:

  • PID 812999 absent;
  • port 10030 closed;
  • test overlay absent;
  • guard PID 26318 alive;
  • guard port 9222 open.

Uncovered cases

This is a targeted final smoke validation, not a full feature suite. It did not exercise partial-reference LZMA, metadata tailpacking, fragments, multi-device images, forced unmount under active I/O, repeated mount/unmount under memory pressure, or deliberate allocation failure. Those remain separate regression and stress-test work.

Concise machine-readable evidence is stored in docs/pre9-manual-evidence/pre9-cache-final-result.json. Target syscall lines are stored in docs/pre9-manual-evidence/pre9-cache-final-probes.txt.