Benchmarks

pjdfstest

The POSIX conformance suite FreeBSD and many FUSE filesystems test against: 238 test files and 8,798 assertions over chmod, chown, link, mkdir, open, rename, symlink, truncate, unlink, utimensat and more. We run every file through sandbox.exec in a LayerFS v1.0.0 Workspace, and again on the kernel's own overlayfs as the reference.

LayerFS against kernel overlayfs

vs kernel overlayfs
KindCorrectnessPOSIXindustry standard
LayerFSv1.0.0
Ran on
LayerFS
core at main e5c7aaae05, through the JS SDK
Tool
pjdfstest 85a8aea9 (classic C suite), as uid 501
Reference
kernel overlayfs, the same Sandbox's own /tmp (no FUSE)
Host
arm64 Mac · Docker Desktop, linux/arm64, 8 CPUs, 8.3 GB
Load
6.3–15.8 (1 min)

Against the kernel reference

LayerFS v1.0.0

0 unexpected failures

all 275 direct LayerFS-only failures trace to 3 deliberate format limits

reference passes LayerFS keeps

2,296 of 3,003

the rest meet a format limit

stability

0 hangs

238 files, no crash, no lost data

As recorded: 707 assertions fail only on LayerFS, 275 directly and 432 as knock-on (a later check on a FIFO or socket that was never created). The four classes below hold 273 direct rows; the other 2 (chown/00.t #1199, #1262) are knock-ons of the FIFO limit the harness labels direct. Root-only cases fail on both arms as uid 501 and are not counted.

The limits pjdfstest meets, on purpose

A Workspace stores portable metadata (type, permission bits, mtime, content) so every Commit restores the same on any host. pjdfstest probes outside that, in four places:

FIFO and UNIX socket nodes

214 direct

mkfifo, mknod … f, bind: LayerFS EPERM, kernel overlayfs 0

Three node types · Regular files, directories and symlinks. FIFO, socket and device nodes are refused (EPERM).

The canonical format has regular files, directories and symlinks only. layerfs-fuse/src/operations/unsupported.rs

Set-id and sticky bits for the owner

37 direct

create 04777, chmod 06555, chmod 01700: LayerFS EPERM, kernel overlayfs 0

Portable mode bits · 0o777 on files, 0o1777 on directories. Set-id bits, and sticky on files, are refused; the mount is nosuid.

Only portable mode values are stored, so a Commit restores the same bits on any host. layerfs-content/src/filesystem/attributes/portable.rs

atime kept apart from mtime

16 direct

utimensat, then lstat atime: LayerFS atime = mtime, kernel overlayfs as set

One stored time · mtime is stored; atime, ctime and birth time are reported as it. The mount is noatime.

mtime is the only time in the portable metadata; reads never write it. layerfs-fuse/src/attributes.rs

ctime on chmod, link, unlink, rename

6 direct

chmod, link, unlink of another link, rename onto a linked target: LayerFS unchanged, kernel overlayfs +1 s

One stored time · mtime is stored; atime, ctime and birth time are reported as it. The mount is noatime.

mtime is the only time in the portable metadata; reads never write it. layerfs-fuse/src/attributes.rs

Assertions passed, by test directory

Both arms on one scale. Most of each directory is root-only and fails on both; the gaps sit where the limits above apply (mkfifo, mknod, chmod, utimensat).

  1. chmod135 / 199 of 327
  2. chown280 / 425 of 1,497
  3. ftruncate71 / 71 of 89
  4. link162 / 225 of 359
  5. mkdir69 / 77 of 118
  6. mkfifo42 / 84 of 120
  7. mknod56 / 106 of 186
  8. open113 / 133 of 337
  9. rename1,106 / 1,207 of 4,857
  10. rmdir77 / 83 of 145
  11. symlink72 / 76 of 95
  12. truncate68 / 68 of 84
  13. unlink124 / 154 of 440
  14. utimensat69 / 95 of 122
■ LayerFS■ Kernel overlayfs

Read with care

  • Never root

    sandbox.exec runs as uid 501 and the classic suite expects root, so most of both arms fails. Only assertions that fail on LayerFS and pass on the reference are counted.

  • Knock-on is a heuristic

    A failure after an earlier one in the same file is labelled knock-on by the harness, not proven; the direct failures are each reproduced.

  • The reverse also happens

    141 assertions fail only on the reference, because they check a node LayerFS never created.

  • This host

    Docker Desktop on an arm64 Mac, LayerFS at main e5c7aaae05, pjdfstest 85a8aea9, one run per arm.

Data: benchmark/data/pjdfstest/v1.0.0/ in the LayerFS repository (per file, per directory, every LayerFS-only assertion, receipts with every TAP log, and the run record).