基准测试方法
BrewFS 如何测量和报告文件系统性能。
BrewFS 将性能视为特定负载和 profile下的结果,而不是文件系统的普适排名。每个公开结果都应说明后端、缓存状态、挂载行为、负载形态、主机、软件版本和完整 runner 命令。
当前 Redis + RustFS 参考环境
公开的 2026 年 7 月 24 日对比快照让两个文件系统运行在同一台主机上:
| 项目 | 配置 |
|---|---|
| 元数据 | Redis |
| 对象存储 | RustFS,S3 兼容 |
| 压缩 | 双方均关闭 |
| fio 访问方式 | Buffered fio I/O(direct=0)、io_uring、iodepth=1 |
| fio block 大小 | 已公开吞吐 profile 使用 4 MiB |
| 每 job 大小 / 时长 | PERF_FIO_SIZE=512m;time-based 负载运行 20 秒 |
| 负载形态 | 匹配的 fio job 形态;Large read/write 以 8 个 job 传输 4 GiB |
| 主机 | Intel Xeon Platinum、8 vCPU、14 GiB 可用内存、Linux 6.8.0 |
| 存储 | 130 GiB 虚拟块设备 |
BrewFS Redis 使用 commit_before_upload、2 GiB 读/写内存缓存、8 GiB 持久读缓存、
4 GiB SSD 写回缓存、6 个写回上传 worker、S3 并发 8、上传并发 16。JuiceFS 使用
writeback=true、4 GiB buffer、8 GiB 持久缓存、cache-large-write、4 个上传连接与
4 个 stage-write 线程。读结果基于持久预填充与保留本地缓存的重新挂载;写结果同时报告
应用可见的 tool-wall 吞吐,以及队列归零后的完整排空吞吐。
代表性 Redis 结果
在 14 项应用可见数据结果与 10 项元数据结果中,BrewFS 领先 24 项匹配结果里的 15 项 (数据面 10/14,元数据 5/10)。稳定持久缓存 Large read 基本持平。JuiceFS 仍在顺序读、 严格排空纯写,以及 TiKV create/open/rename 上领先。
| 负载 | BrewFS | JuiceFS | 优势 |
|---|---|---|---|
| 随机读 | 1,726.10 MiB/s | 1,256.80 MiB/s | 快 37%(约 1.37x) |
| 前台混合随机 I/O | 495.54 MiB/s | 328.76 MiB/s | 快 51%(约 1.51x) |
| 前台大文件写 | 195.05 MiB/s | 102.40 MiB/s | 快 90%(约 1.90x) |
| 完整排空混合随机 I/O | 218.60 MiB/s | 113.86 MiB/s | 快 92%(约 1.92x) |
| 热本地缓存大文件读 | 2,395.32 MiB/s | 2,356.73 MiB/s | 约快 2% |
| 元数据 create | 1,004.61 ops/s | 549.01 ops/s | 快 83%(约 1.83x) |
| Readdir | 28,634.94 ops/s | 16,020.25 ops/s | 约 1.79x |
完整排空吞吐按 fio 实际字节数除以 active I/O 时间与 post-write drain 之和计算,避免 更大的未排空队列反而抬高写入成绩。本快照不发布几何平均汇总。
这些数值只适用于所列的配置和负载,不能预测冷缓存、超出缓存大小的数据集、远程网络或不同调优方式下的表现。
复现 profile
# BrewFS 对比 profile
PERF_LOG_TO_CONSOLE=false PERF_FIO_SIZE=512m PERF_FIO_RUNTIME=20 \
bash docker/compose-xfstests/run_redis_perf.sh --s3 --writeback-throughput-profile
# JuiceFS 对比 profile
JUICEFS_META_BACKEND=redis PERF_LOG_TO_CONSOLE=false \
PERF_FIO_SIZE=512m PERF_FIO_RUNTIME=20 \
bash docker/compose-xfstests/run_juicefs_perf.sh --writeback-throughput-profileCompose runner 会在 docker/compose-xfstests/artifacts/ 下写入原始报告和日志。发布结果时应保留这些产物,使每条性能结论都可追溯到输入和输出。
公平比较规则
- 分开报告冷缓存和热缓存;微秒级读可能只是缓存命中,而不是对象存储读取。
- 明确负载形态、数据集、后端、主机、挂载选项、压缩与 runtime 设置。
- 标注所有语义取舍。
commit-before-upload、只读 direct I/O 与 write-open cache 都是 opt-in profile,不是默认保证。 - 目标负载至少运行三次,并报告中位数。
- 非目标 fio 与元数据项目的回退保持在 5% 预算以内。
- 只要热路径改动可能影响文件系统行为,就重新运行 POSIX 套件;见 POSIX 测试。
如何解读结果
不要把结果直接归因于 Rust。缓存热度、dirty overlay、元数据往返、批处理和 FUSE runtime 都是被测变量。只有这些变量被记录、对齐和允许证伪时,性能数据才有解释力。

