版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

...

#连续读
fio -filename=/mnt/beegfs/testio -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=16k -size=20G -numjobs=30 -runtime=120 -group_reporting -name=mytest
#随机读
fio -filename=/mnt/beegfs/testio -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=16k -size=20G -numjobs=30 -runtime=120 -group_reporting -name=mytest 
#顺序写
fio -filename=/mnt/beegfs/testio -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=16k -size=20G -numjobs=30 -runtime=60 -group_reporting -name=mytest 
#随机写
fio -filename=/mnt/beegfs/testio -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=16k -size=20G -numjobs=10 -runtime=60 -group_reporting -name=mytest 
#混合读
 fio -filename=/mnt/beegfs/testio -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=16k -size=20G -numjobs=30 -runtime=100 -group_reporting -name=mytest -ioscheduler=noop


压力测试

对beeGFS进行测试

通过sudo beegfs health capacity查看所有储存节点的状态如下:

...

bs=4k代表4k的读取。 -numjobs代表线程数。测试结果如下:

对本地单盘进行测试

执行命令:fio -filename=/data1/zxl_data/testfio -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=4k -size=2G -numjobs=300 -runtime=120 -group_reporting -name=mytest 

测试结果如下:

...

对通过NFS挂载的nasv3进行测试

执行命令:fio -filename=/mnt/nasv3/testfio -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=4k -size=2G -numjobs=300 -runtime=120 -group_reporting -name=mytest 

测试结果如下:

...

进入nasv3,对本地RAID进行测试

执行命令:fio -filename=/data/activemembers/testfio -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs= 4k -size=2G -numjobs=300 -runtime=120 -group_reporting -name=mytest

测试结果如下:

Image Added

注意:测试文件(2GB)相对于 RAID 卡缓存(通常为 1GB-4GB)来说尺寸较小,导致测试结果严重偏向于缓存性能,而不是 24 块物理 HDD 的真实随机读性能。这使得测试结果无法客观反映当工作集(Working Set)超出缓存大小时,系统的实际表现。

增加测试文件的大小到10G,执行命令:fio -filename=/data/activemembers/testfio -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs= 4k -size=10G -numjobs=300 -runtime=120 -group_reporting -name=mytest

测试结果如下:

Image Added



横向对比结果分析

参数说明:

配置项取值配置说明
测试类型randread4K 随机读,对 IOPS 敏感,考验分布式系统的元数据管理与数据分片能力
块大小4k小 IO 场景,是衡量存储系统随机性能的典型指标
队列深度iodepth=1    同步 IO 模式(psync 引擎),每次仅处理一个 IO 请求
并发线程数numjobs=300   超高并发,远超 HDD 和大多数 NAS 的物理处理能力,但可被 BeeGFS 的多盘并行特性分摊压力
IO 引擎psync    同步阻塞式 IO,每个线程都在等待磁盘响应
直接 IOdirect=1    绕过客户端文件系统缓存,直接测试后端存储性能
测试文件大小2G大小适中,避免因文件过小导致数据被 NAS 缓存
测试时长120s测试周期足够长,结果具有统计意义

...

受测试设备IOPS平均延迟优势场景劣势场景
/mnt/beegfs1619184ms高并发随机读写、大规模数据并行处理超高并发下存在长尾延迟,条带化配置需优化
/data1/zxl_data680439ms低并发顺序读写随机读写性能差,无扩展性
/mnt/nasv3609490ms多客户端共享存储网络开销大,随机读写性能低

...

  • 条带化配置未优化 (核心瓶颈)

  • BeeGFS 的性能高度依赖条带大小条带宽度配置:
    • 条带宽度:需设置为等于磁盘数(4),确保数据均匀分布到所有磁盘;
    • 条带大小:4K 随机读场景下,建议条带大小设置为 64K~256K(过小会增加元数据开销,过大则无法充分利用并行 IO)。
    • 当前 2.38 倍的性能提升,低于 4 盘的理论上限,大概率是条带化配置未匹配 4K 随机读场景。
  • 超高并发线程数 (次要瓶颈)

    • 300 线程远超 BeeGFS 的最优并发数(通常分布式文件系统的最优并发线程数为 磁盘数 × 8~16,即 4 盘对应 32~64 线程)。
    • 过多线程导致上下文切换开销增加元数据服务器竞争加剧,是长尾延迟的主要原因。
  • 元数据服务器性能 (潜在瓶颈)

    • 随机读场景下,BeeGFS 需要频繁查询元数据服务器(MDS)获取数据块的物理位置。
    • 如果 MDS 为单节点部署,且未使用 SSD 缓存元数据,会成为高并发下的性能瓶颈,导致尾部延迟升高。

对nas本身的阵列性能分析

IOPS结果分析:

指标10G 文件 2G 文件 性能下降比例
IOPS11.5k29.6k61.2%
吞吐量45.0 MiB/s116 MiB/s61.2%

指标分析:

  • 平均延迟显著升高:平均延迟从 10ms 飙升至 24ms,这直接反映了物理磁盘寻道和旋转延迟的影响。
  • 中位数延迟是关键:中位数延迟从 0.109ms(典型缓存命中)猛增至 12.39ms,这是本次测试最核心的变化。这个数值大致等于物理硬盘的平均寻道时间(~8ms)加上旋转延迟(~4ms),完美印证了测试负载已经从 “缓存主导” 转变为 “物理磁盘主导”。
  • 长尾延迟依然存在:99% 分位延迟为 156ms,说明在高并发下,仍然存在部分 IO 请求需要等待较长时间才能被处理,但整体分布相比上次更加平滑,没有出现上次那种因缓存未命中而导致的极端尖峰。

指标分析:

  • 性能大幅回落:IOPS 和吞吐量均下降了约 60%。这是一个非常明确的信号,表明测试文件大小从 2G 增加到 10G,已经超出了 RAID 卡缓存的覆盖范围。系统不再能依赖高速缓存来响应大部分请求,必须频繁地访问物理硬盘,从而导致性能显著下降。
  • 10G性能更真实:11.5k IOPS 的成绩,是这个 24 盘 RAID5 阵列在 4K 随机读场景下,更接近其物理极限的真实性能表现

平均延迟分析:

指标10G 文件 2G 文件 性能下降比例
平均延迟24.14 ms10.04 ms增加 140%
50% 分位延迟12.39 ms0.109 ms增加约 113 倍

结论

文件系统在高并发下的比较:

  • 4 盘 BeeGFS 系统在相同超高并发配置下,性能显著优于本地单 HDD 和 NFS NAS,充分验证了分布式并行存储的优势;
  • 当前性能未达理论上限,后续可通过调整优化条带化配置,可有 30%~50% 的 IOPS提升空间;
  • BeeGFS 适合高并发、大规模的高性能计算(HPC)和 AI 训练场景,是本地单盘和 NAS 的理想升级方案。

Nasv3的RAID5阵列的性能:

  • RAID5阵列本身的IOPS即使没有命中缓存,也依旧表现优异,理论上不应该出现卡顿。
  • 说明NFS文件系统严重限制了NasV3的并发性能。