Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Fleet status

Measured on the four-node lab (swift1–swift4, one etcd, one Swift). Live prefix /swiftfuse/etcdfs/ at /mnt/swift-etcd. G2 is the scratch mount. Live never gets NVMe.

Closed gates

GateVerdictNotes
G1 / 006 / 035PASSOfficial fstests
G3 LTPPASS
G4a / G4bPASS
G5PASS
G6PASSOfficial
R1 inodePASS
R2 fencing100/100
R3 live packPASSdelta=1, then pack_target=0
R4PASS
R5 watch 10kPASSNot 几万
R6 failpointPASS
R7 swiftfuseMEASUREDG2 small-file 1000/1000
R7 cache-hitPASS/opt/detect/results/r7-cache-hit-20260902-021100/ window hits=+1 misses=+1
R7 s3api compareMEASUREDhttps://10.0.0.10:8085 RegionOne path-style
R8 NVMe 10GPASS50G / 100G / 1TB deferred
Porcupine 2-mountLINEARIZABLESame-mount writeback is illegal
G7 full faultPASSQuorum remount is not seamless failover

R7 comparators, client-cache column (2026-09-02)

Swift on this lab exposes S3 (s3api + s3token on :8085, not :8080). /info does not advertise s3api; that was a false negative.

/opt/detect/results/r7-s3-fs-20260902-025444/ MEASURED. Dedicated buckets s3://r7-geese-cmp and s3://r7-juice-cmp only. No keys in logs.

GeeseFS mem 256, JuiceFS cache 256. benchmark.sh cold seq-read used to seed seq.bin and read it without a remount, so userspace caches stayed hot.

Backendseq-write coldseq-read coldseq-read warmsmall-file cold
swiftfuse (G2, 2026-09-01)34.6 MiB/s21.3 MiB/s135.6 MiB/s100/100 in 92s
swift CLI21.9 MiB/s45.2 MiB/s70.9 MiB/s71s
rclone :swift:25.1 MiB/s33.9 MiB/s33.4 MiB/s7.6s
GeeseFS s3api69.4 MiB/s587 MiB/s318 MiB/s0.48s
JuiceFS s3api55.2 MiB/s31.5 MiB/s1306 MiB/s7.9s

GeeseFS 587 and JuiceFS 1306 are client cache, not Swift line rate.

R7 fair remount + drop_caches (2026-09-02)

/opt/detect/results/r7-s3-fs-fair-20260902-031641/ MEASURED. FAIR_REMOUNT=1: write → persist → umount → wipe JuiceFS --cache-dir → drop_caches → remount → read-cold → read-warm.

GeeseFS persist on this proxy needs --single-part 80. Default multipart never completed, so a 64 MiB file stayed dirty in RAM and vanished on umount.

Backendseq-writeseq-read cold (S3 miss)seq-read warm (client cache after refill)
GeeseFS s3api16.5 MiB/s50.2 MiB/s675 MiB/s
JuiceFS s3api34.4 MiB/s8.87 MiB/s5029 MiB/s

Fair cold is the column to put next to swiftfuse G2 seq-read cold 21.3. Warm after remount is still client cache; it is not a Swift number.

Daemon fields

File /run/swiftfuse/<fs_name>.stats.json (HTTP /metrics if stats_listen is free; 9102 is statsd_exporter here). R7 scrape: EXPOSED.

  • fuse_op_latency_us p50/p99
  • etcd_txn_latency_us p50/p99
  • cache_hit_ratio
  • network_bytes

Live bin md5 756c4c16f2cacbdd9fbaafa650e2e51c. kernel_ttl=0 write_back=true pack_target=0.

Live policy

kernel_ttl=0 write_back=true pack_target=0 lease=true. No NVMe. Numeric PIDs only. Never pkill -f.