跳到主要内容

磁盘性能

主要影响性能的因素

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

集群配置

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

  • 存储节点 4 个
  • 两个存储节点有 22 块硬盘 HDD
  • 两个存储节点有 24 块硬盘 NVME SSD
  • 内网是 100 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

临时存储空间性能原始数据(Markdown Table)

randread-4096k

iodepthIOPS (procs=1)BW KiB/s (procs=1)IOPS (procs=4)BW KiB/s (procs=4)
11265200614261748030
230412489677783188892
4559229109013075356874
8969396971417257068748
161427584822319097821321

randread-4k

iodepthIOPS (procs=1)BW KiB/s (procs=1)IOPS (procs=4)BW KiB/s (procs=4)
13020120821619364775
274552982033748134994
4164186567355064220256
83005112020681464325858
1646003184013100042400169

randwrite-4096k

iodepthIOPS (procs=1)BW KiB/s (procs=1)IOPS (procs=4)BW KiB/s (procs=4)
1733028233221320913
21656774795732347111
431813063597383024103
856022962987343006495
1667927817677122916747

randwrite-4k

iodepthIOPS (procs=1)BW KiB/s (procs=1)IOPS (procs=4)BW KiB/s (procs=4)
110734295495819833
22538101541051242051
45149205981218548742
810077403101381055243
1611860474421395455816

read-4096k

iodepthIOPS (procs=1)BW KiB/s (procs=1)IOPS (procs=4)BW KiB/s (procs=4)
11466019914291760604
232213213167573101721
4568232957513365475449
81139466760618097411361
161623664914319307905593

read-4k

iodepthIOPS (procs=1)BW KiB/s (procs=1)IOPS (procs=4)BW KiB/s (procs=4)
15915236622166786669
2103534141536118144473
4133955358244638178554
8181977279045744182978
16173176927052815211260

write-4096k

iodepthIOPS (procs=1)BW KiB/s (procs=1)IOPS (procs=4)BW KiB/s (procs=4)
1793247313051250987
21626644095602297117
431612980627423042146
853621986427473060965
1668928245817343007579

write-4k

iodepthIOPS (procs=1)BW KiB/s (procs=1)IOPS (procs=4)BW KiB/s (procs=4)
117717084559122367
222188872658526342
422919164740929639
8262610504835133404
16270210810897535900

数据集性能测试命令

读写绑定的数据集目录(例如 /input0)下进行测试,避免只读挂载导致写入测试结果失真或失败。

先在绑定目录中生成测试文件:

TEST_FILE_SIZE=2G
fallocate -l "$TEST_FILE_SIZE" /input0/storage-perf-test.bin

然后使用该文件进行 fio 压测:

fio --name=disktest \
--ioengine=libaio \
--iodepth=$IODEPTH \
--numjobs=$PROCS \
--rw=$MODE \
--bs=$BLOCK_SIZE \
--direct=1 --buffered=0 \
--filename=/input0/storage-perf-test.bin \
--runtime=30 \
--time_based \
--group_reporting \
--output-format=json

数据集性能原始数据(Markdown Table)

randread-4M

iodepthIOPS (procs=1)BW KiB/s (procs=1)IOPS (procs=4)BW KiB/s (procs=4)
11014138046312587335
2257105307711234603256
4538220634618547597947
81013415074023689702071
1616886916648253310376288

randread-4k

iodepthIOPS (procs=1)BW KiB/s (procs=1)IOPS (procs=4)BW KiB/s (procs=4)
1198979571699467976
255062202737414149656
4152756110372562290250
832570130280121578486312
1651385205543158566634264

read-4096k

iodepthIOPS (procs=1)BW KiB/s (procs=1)IOPS (procs=4)BW KiB/s (procs=4)
11164776025982449437
2296121320911124555812
4624255738919117827662
81145469307723909791759
1617677239251275811298102

read-4k

iodepthIOPS (procs=1)BW KiB/s (procs=1)IOPS (procs=4)BW KiB/s (procs=4)
16948277951451858074
2115244609933823135293
4150046001745936183744
8186327453161008244033
16229289171578128312515