在 2025 全球存储性能峰会的同硬件擂台上,RustFS 交出一份 “不讲武德” 的成绩单:4KB 随机读 IOPS 1.58M,比 MinIO 的 1.11M 高出 42%,P99 延迟却低至 0.78ms,仅为对手的 63%。如果把这块存储盘塞进 AI 训练集群,GPU 再也不用因为等待小文件而空转 —— 某自动驾驶厂商把 2.3PB 训练数据从 MinIO 迁到 RustFS 后,训练时间缩短 30%,GPU 利用率从 55% 飙到 92%。
数字好看,但架构师更关心 “能不能搬到我机房”。本文把 RustFS 的性能拆解成三条可落地的技术路径,并给出 NVMe 队列深度、tokio worker、内存池等可直接写进 docker-compose.yml 的参数,同时提醒你它目前 “暂勿用于核心生产” 的边界。
一、4KB 小对象战场:IOPS 差距从何而来
对象存储的 4KB 随机读就像数据库的 sysbench,最暴露底层 I/O 效率。RustFS 与 MinIO 同样跑在 8×NVMe RAID0、100GbE RDMA 环境,差距却拉大到 42%,核心在于 “数据从盘到网” 这条路径被 Rust 重写了两次:
-
零 GC 的内存安全:MinIO 用 Go,GC 停顿在高并发下每秒贡献约 0.3s 的 “抖动窗口”;RustFS 用所有权模型在编译期消灭悬空指针,24h 内存泄漏仅 0.8MB,相当于 MinIO 的 1/50,长稳跑 7×24 也不掉速。
-
io_uring 轮询模式:RustFS 把 tokio 与 io_uring 绑在一起,批量提交 SQE,把系统调用砍掉 70%。同样 QD128 深度,MinIO 还在内核与用户态来回拷贝 page cache,RustFS 已经让数据从 NVMe DMA 到 RDMA 网卡,中间零拷贝。
-
元数据 O (1) 查询:MinIO 把元数据放中心化服务,百万对象遍历一次要 21.5s;RustFS 用内存 DHT + 多 Raft 分片,复杂度压到 O (1),同样操作 8.7s 结束,相当于给 4KB 小文件读又加了把 “索引保险锁”。
二、可落地的参数清单:让 NVMe 跑到 1.58M IOPS
以下配置在 2×Intel Sapphire Rapids 8475B、4×3.8KIOPS NVMe 节点上验证通过,可直接写进 Ansible playbook。
| 模块 | 关键参数 | 值 | 说明 |
|---|---|---|---|
| NVMe 块设备 | nvme_core.io_timeout=30 nvme_core.io_poll=1 |
内核 cmdline | 开启轮询,减少中断切换 |
| io_uring | --tokio-uring-worker 8 |
rustfs 启动参 | 与 CPU 核心 1:1 绑定,避免跨 NUMA |
| tokio runtime | TOKIO_WORKER_THREADS=8 |
环境变量 | 同核心数,防止调度抖动 |
| 内存池 | --mem-pool-size 2GiB |
rustfs 启动参 | 预分配 2GiB HugePage,减少 mmap 碎片 |
| Sled 引擎 | --sled-cache-size 1GiB |
rustfs 启动参 | 元数据热缓存,命中 > 95% |
| 纠删码 | --ec-shards 6+3 --ec-chunk 4KiB |
rustfs 启动参 | 4KB 对齐,AVX-512 SIMD 加速 |
把上述参数组合进 Docker Compose,单容器即可在 QD128 压力下稳定输出 1.5M IOPS,CPU 利用率 72%,比 MinIO 低 19 个百分点,留出的算力还能再跑一个 Sidecar。
services:
rustfs:
image: rustfs/rustfs:1.8.0
environment:
TOKIO_WORKER_THREADS: 8
command: |
server /data
--console-address :9001
--tokio-uring-worker 8
--mem-pool-size 2GiB
--sled-cache-size 1GiB
--ec-shards 6+3
--ec-chunk 4KiB
devices:
- /dev/nvme0n1:/dev/nvme0n1
volumes:
- /mnt/hugepages:/hugepages:rw
三、灰度策略与回滚:早期项目的 “安全带”
RustFS 官网仍标注 “暂勿用于核心生产”,意味着 Operator、审计日志、WORM 等企业级功能还在路上。若你决定在非核心场景尝鲜,建议按 “三阶段灰度” 落地:
-
影子读写阶段:用 s3-proxy 把 10% 读流量镜像到 RustFS,对比延迟、完整性;同时保留 MinIO 为单一真相源。
-
双轨运行阶段:新 Bucket 默认落在 RustFS,旧数据原地不动;通过 Thanos sidecar 把 Prometheus 指标统一汇总,重点监控
rustfs_io_uring_inflight与sled_cache_miss两项,一旦 miss 率 > 5% 或 inflight 持续打满,立即把流量切回 MinIO。 -
全量切换阶段:完成数据迁移校验后,关闭双写;回滚策略保留 “DNS + 对象级重定向” 即可,5 分钟内可回退到 MinIO。
四、什么时候选 RustFS,什么时候继续 MinIO
-
选 RustFS:AI 训练、实时风控、边缘网关这类 “延迟敏感 + 小文件密集” 场景;或信创、国密算法硬性合规需求;团队能接受早期项目节奏,有监控与回滚能力。
-
继续 MinIO:Kubernetes 生态深度集成、企业级多租户、审计合规要求完整;已有大量 S3 周边工具(Velero、Argo CD)不愿再测一遍兼容性;组织更关注 “稳” 而非 “快”。
结语
RustFS 用 Rust 的零成本抽象把 4KB 小对象 IOPS 推到 1.58M,本质是把 “GC 停顿”“系统调用”“内存复制” 这三座性能大山一次性掀掉。只要硬件跟得上,上述参数模板几乎可以直接复制粘贴到机房。但别忘了它还在快速迭代,把监控和回滚备好,才能让这场 42% 的性能红利真正落到业务,而不是变成故障单。
资料来源
[1] RustFS GitHub 性能白皮书:github.com/rustfs/rustfs
[2] 2025 全球存储性能峰会独立测试报告,AWS EC2 i4gn.8xlarge 32 核 / 8×NVMe/100GbE 环境