You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MinIO增加NVMe驱动器数量后性能不升反降的技术咨询

MinIO多磁盘配置性能反向下降问题排查与解决

我们计划采用MinIO作为二进制存储方案,但测试中发现异常:增加磁盘数量后性能反而大幅下降,具体细节如下:

环境配置

  • 3台Ubuntu 22.04服务器,每台配置:32核CPU、192GB内存、4块NVMe磁盘
  • 所有磁盘已禁用写缓存,执行命令:
    sudo echo "write through" | sudo tee /sys/block/<disk>/queue/write_cache
    

测试场景与结果

场景1:单服务器启用4块NVMe磁盘

使用1个warp客户端发起PUT请求,命令:

warp put --duration=3m --warp-client=localhost:7761 --host=test0{1...3}.ddc.lan:9000 --obj.size=8192 --concurrent=256

测试结果:

Throughput by host:
 * http://test01.ddc.lan:9000: Avg: 30.85 MiB/s, 3948.59 obj/s
 * http://test02.ddc.lan:9000: Avg: 30.75 MiB/s, 3936.18 obj/s
 * http://test03.ddc.lan:9000: Avg: 29.41 MiB/s, 3764.50 obj/s
PUT Average: 11369 Obj/s, 88.8MiB/s; 

场景2:单服务器仅启用1块NVMe磁盘

重复相同测试命令,结果:

Throughput by host:
* http://test01.ddc.lan:9000: Avg: 74.20 MiB/s, 9498.18 obj/s
* http://test02.ddc.lan:9000: Avg: 73.76 MiB/s, 9440.70 obj/s
* http://test03.ddc.lan:9000: Avg: 72.48 MiB/s, 9278.03 obj/s
PUT Average: 27570 Obj/s, 215.4MiB/s;

按文档预期,增加驱动器数量应提升性能,但实际磁盘数增至4倍后,性能反而下降约2.5倍,求排查方向和解决方案。


可能的原因与排查方向

1. MinIO部署模式配置错误

如果是把4块磁盘作为独立的单盘实例(而非纠删码池或分布式池的一部分),MinIO会为每个磁盘启动单独的进程/线程,反而会引发CPU/内存上下文切换开销,尤其是8KB小对象场景下,调度成本会远超磁盘并行收益。

2. 磁盘IO调度器不匹配

NVMe磁盘默认可能使用mq-deadline或kyber调度器,但如果系统默认调度器不适合多盘并行场景,会导致IO队列阻塞,抵消多盘并行的优势。

3. 小对象的元数据瓶颈

8KB属于极小对象,MinIO的元数据操作(本地磁盘存储或etcd)会成为核心瓶颈。多盘场景下,元数据的同步、写入开销会被放大,反而拖累整体性能。

4. 网络并发限制

虽然客户端设置了256并发,但多盘场景下MinIO的网络线程池可能未充分利用,或者服务器TCP参数未优化,导致请求排队阻塞。


解决方案步骤

1. 修正MinIO部署模式

确保4块磁盘被配置为单个纠删码集,启动命令示例:

minio server /data{1...4}

这种模式下MinIO会合理分配对象到不同磁盘,真正利用多盘并行IO能力,而非启动多个独立实例。

2. 优化磁盘IO调度器

NVMe磁盘推荐使用none调度器(无调度,直接透传IO),执行命令:

echo none | sudo tee /sys/block/<disk>/queue/scheduler

验证当前调度器:

cat /sys/block/<disk>/queue/scheduler

3. 调整MinIO小对象优化参数

针对8KB小对象场景,修改MinIO启动参数:

  • 启用--etcd集群存储元数据,减少本地磁盘元数据IO竞争
  • 设置--batch参数合并小对象写入,降低磁盘IO次数
  • 调整--disk-cache-threshold至大于8KB,让小对象先写入内存缓存再批量落盘

4. 优化系统与网络参数

  • 调整TCP参数,提升并发处理能力:
    echo 1024 | sudo tee /proc/sys/net/core/somaxconn
    echo 4096 | sudo tee /proc/sys/net/ipv4/tcp_max_syn_backlog
    
  • 关闭服务器swap分区,避免内存交换导致的性能波动:
    sudo swapoff -a
    

5. 调整warp测试参数

尝试增加客户端并发数(如--concurrent=512),或者使用多客户端分布式测试,避免单客户端成为性能瓶颈。


内容的提问来源于stack exchange,提问作者Andrey Yesyev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 13:26:18