磁盘性能
主要影响性能的因素
- 存储节点的总磁盘数,磁盘数越多性能越好
- 存储节点的内存,内存越多可以缓存的内容也就越多
- 千兆网络一定会成为瓶颈,至少保证万兆网络
集群配置
因为每个集群的存储系统差异非常大,这里的性能测试都是基于某个正在使用的集群,配置如下:
- 存储节点 4 个
- 两个存储节点有 22 块硬盘 HDD
- 两个存储节点有 24 块硬盘 NVME SSD
- 内网是 100 Gbps 以太网
概念解释
IO 深度(iodepth):一个测试进程的最大「飞行中」请求数(或者说,已经提交但是还没有被处理完毕的请求数)。测试进程不允许在飞行中请求数大于 IO 深度的情况下继续提交请求。
进程数(procs):同时进行测试的进程数。
读写模式(mode):read 表示读,write 表示写,rw 表示读写交替进行。rand 前缀表示随机读写,否则是顺序读写。
块大小(block size、bs):单次 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
| iodepth | IOPS (procs=1) | BW KiB/s (procs=1) | IOPS (procs=4) | BW KiB/s (procs=4) |
|---|---|---|---|---|
| 1 | 126 | 520061 | 426 | 1748030 |
| 2 | 304 | 1248967 | 778 | 3188892 |
| 4 | 559 | 2291090 | 1307 | 5356874 |
| 8 | 969 | 3969714 | 1725 | 7068748 |
| 16 | 1427 | 5848223 | 1909 | 7821321 |
randread-4k
| iodepth | IOPS (procs=1) | BW KiB/s (procs=1) | IOPS (procs=4) | BW KiB/s (procs=4) |
|---|---|---|---|---|
| 1 | 3020 | 12082 | 16193 | 64775 |
| 2 | 7455 | 29820 | 33748 | 134994 |
| 4 | 16418 | 65673 | 55064 | 220256 |
| 8 | 30051 | 120206 | 81464 | 325858 |
| 16 | 46003 | 184013 | 100042 | 400169 |
randwrite-4096k
| iodepth | IOPS (procs=1) | BW KiB/s (procs=1) | IOPS (procs=4) | BW KiB/s (procs=4) |
|---|---|---|---|---|
| 1 | 73 | 302823 | 322 | 1320913 |
| 2 | 165 | 677479 | 573 | 2347111 |
| 4 | 318 | 1306359 | 738 | 3024103 |
| 8 | 560 | 2296298 | 734 | 3006495 |
| 16 | 679 | 2781767 | 712 | 2916747 |
randwrite-4k
| iodepth | IOPS (procs=1) | BW KiB/s (procs=1) | IOPS (procs=4) | BW KiB/s (procs=4) |
|---|---|---|---|---|
| 1 | 1073 | 4295 | 4958 | 19833 |
| 2 | 2538 | 10154 | 10512 | 42051 |
| 4 | 5149 | 20598 | 12185 | 48742 |
| 8 | 10077 | 40310 | 13810 | 55243 |
| 16 | 11860 | 47442 | 13954 | 55816 |
read-4096k
| iodepth | IOPS (procs=1) | BW KiB/s (procs=1) | IOPS (procs=4) | BW KiB/s (procs=4) |
|---|---|---|---|---|
| 1 | 146 | 601991 | 429 | 1760604 |
| 2 | 322 | 1321316 | 757 | 3101721 |
| 4 | 568 | 2329575 | 1336 | 5475449 |
| 8 | 1139 | 4667606 | 1809 | 7411361 |
| 16 | 1623 | 6649143 | 1930 | 7905593 |
read-4k
| iodepth | IOPS (procs=1) | BW KiB/s (procs=1) | IOPS (procs=4) | BW KiB/s (procs=4) |
|---|---|---|---|---|
| 1 | 5915 | 23662 | 21667 | 86669 |
| 2 | 10353 | 41415 | 36118 | 144473 |
| 4 | 13395 | 53582 | 44638 | 178554 |
| 8 | 18197 | 72790 | 45744 | 182978 |
| 16 | 17317 | 69270 | 52815 | 211260 |
write-4096k
| iodepth | IOPS (procs=1) | BW KiB/s (procs=1) | IOPS (procs=4) | BW KiB/s (procs=4) |
|---|---|---|---|---|
| 1 | 79 | 324731 | 305 | 1250987 |
| 2 | 162 | 664409 | 560 | 2297117 |
| 4 | 316 | 1298062 | 742 | 3042146 |
| 8 | 536 | 2198642 | 747 | 3060965 |
| 16 | 689 | 2824581 | 734 | 3007579 |
write-4k
| iodepth | IOPS (procs=1) | BW KiB/s (procs=1) | IOPS (procs=4) | BW KiB/s (procs=4) |
|---|---|---|---|---|
| 1 | 1771 | 7084 | 5591 | 22367 |
| 2 | 2218 | 8872 | 6585 | 26342 |
| 4 | 2291 | 9164 | 7409 | 29639 |
| 8 | 2626 | 10504 | 8351 | 33404 |
| 16 | 2702 | 10810 | 8975 | 35900 |
数据集性能测试命令
在读写绑定的数据集目录(例如 /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
| iodepth | IOPS (procs=1) | BW KiB/s (procs=1) | IOPS (procs=4) | BW KiB/s (procs=4) |
|---|---|---|---|---|
| 1 | 101 | 413804 | 631 | 2587335 |
| 2 | 257 | 1053077 | 1123 | 4603256 |
| 4 | 538 | 2206346 | 1854 | 7597947 |
| 8 | 1013 | 4150740 | 2368 | 9702071 |
| 16 | 1688 | 6916648 | 2533 | 10376288 |
randread-4k
| iodepth | IOPS (procs=1) | BW KiB/s (procs=1) | IOPS (procs=4) | BW KiB/s (procs=4) |
|---|---|---|---|---|
| 1 | 1989 | 7957 | 16994 | 67976 |
| 2 | 5506 | 22027 | 37414 | 149656 |
| 4 | 15275 | 61103 | 72562 | 290250 |
| 8 | 32570 | 130280 | 121578 | 486312 |
| 16 | 51385 | 205543 | 158566 | 634264 |
read-4096k
| iodepth | IOPS (procs=1) | BW KiB/s (procs=1) | IOPS (procs=4) | BW KiB/s (procs=4) |
|---|---|---|---|---|
| 1 | 116 | 477602 | 598 | 2449437 |
| 2 | 296 | 1213209 | 1112 | 4555812 |
| 4 | 624 | 2557389 | 1911 | 7827662 |
| 8 | 1145 | 4693077 | 2390 | 9791759 |
| 16 | 1767 | 7239251 | 2758 | 11298102 |
read-4k
| iodepth | IOPS (procs=1) | BW KiB/s (procs=1) | IOPS (procs=4) | BW KiB/s (procs=4) |
|---|---|---|---|---|
| 1 | 6948 | 27795 | 14518 | 58074 |
| 2 | 11524 | 46099 | 33823 | 135293 |
| 4 | 15004 | 60017 | 45936 | 183744 |
| 8 | 18632 | 74531 | 61008 | 244033 |
| 16 | 22928 | 91715 | 78128 | 312515 |