磁盘性能

最后更新于

主要影响性能的因素

  • 存储节点的总磁盘数,磁盘数越多性能越好
  • 存储节点的内存,内存越多可以缓存的内容也就越多
  • 千兆网络一定会成为瓶颈,至少保证万兆网络

集群配置

因为每个集群的存储系统差异非常大,这里的性能测试都是基于某个正在使用的集群,配置如下:

  • 存储节点 2 个
  • 每个存储节点有 22 块硬盘
  • 无 SSD 存储和 SSD 缓存
  • 内网是 40 Gbps 以太网

概念解释

IO 深度(iodepth):一个测试进程的最大「飞行中」请求数(或者说,已经提交但是还没有被处理完毕的请求数)。测试进程不允许在飞行中请求数大于 IO 深度的情况下继续提交请求。

进程数(procs):同时进行测试的进程数。

读写模式(mode):read 表示读,write 表示写,rw 表示读写交替进行。rand 前缀表示随机读写,否则是顺序读写。

块大小(block sizebs):单次 IO 请求的数据块的大小。4k 的情况出现在读写配置文件,读写细碎的小文件时会出现。4M 的情况会在读写大型压缩包,视频文件等等情况出现。

IOPS: IO per second,每秒钟处理的请求数。

吞吐:每秒钟取/写入的数据量

临时存储空间性能测试命令

fio --name=disktest \
    --ioengine=libaio \
    --iodepth=$IODEPTH \
    --numjobs=$PROCS \
    --rw=$MODE \
    --bs=$BLOCK_SIZE \
    --direct=1 --buffered=0 \
    --size=2G \
    --runtime=30 \
    --time_based \
    --group_reporting \
    --output-format=json

临时存储空间性能测试图表

数据集性能测试命令

fio --name=disktest \
    --ioengine=libaio \
    --iodepth=$IODEPTH \
    --numjobs=$PROCS \
    --rw=$MODE \
    --bs=$BLOCK_SIZE \
    --direct=1 --buffered=0 \
    --filename=/input0/train.zip \   # 一个 14G 的文件
    --runtime=30 \
    --time_based \
    --group_reporting \
    --output-format=json

数据集性能测试图表