简介
ceph作为一个成熟的分布式存储系统可以提供对象,块,文件三种形态的存储。它内部不仅提供了很多测试用例还有很多measure性能的工具,此文便用来记录关于ceph性能的测试工具。
OSD性能测试
在有些文章看到有人使用 [dd if=/dev/zero of=/var/lib/ceph/ceph-xx/test bs=1M count=1024] 这种方式来测试OSD的性能。这种做法显然代替不了该OSD的性能,只能测试出该OSD所属次盘的data分区文件系统的性能。该命令所产生的IO是直接进入了XFS文件系统了,而我们期待的是通过librados进入OSD,在进入FileStore/BlueStore再进入磁盘的性能,所以该做法不合理,不过社区为我们提供了一种测试工具可以满足我们的需求。
COMMAND("bench " \
"name=count,type=CephInt,req=false " \
"name=size,type=CephInt,req=false " \
"name=object_size,type=CephInt,req=false " \
"name=object_num,type=CephInt,req=false ", \
"OSD benchmark: write <count> <size>-byte objects, " \
"(default 1G size 4MB). Results in log.",
"osd", "rw", "cli,rest”)
最简单的用法就是使用默认值(default count 1G size 4MB):
ceph tell osd.0 bench
{
"bytes_written": 1073741824,
"blocksize": 4194304,
"elapsed_sec": 7.919381,
"bytes_per_sec": 135584059.016932,
"iops": 32.325759
}
当然也可以按照代码里面的说明,自己定义count size等
存储池性能测试
对于存储池的测试我们可以用rados bench
rados bench -p <pool_name> <seconds> <write|seq|rand> -b <block size> -t --no-cleanup
pool_name:测试所针对的存储池
seconds:测试所持续的秒数
<write|seq|rand>:操作模式,write:写,seq:顺序读;rand:随机读
-b:block size,即块大小,默认为 4M
-t:读/写并行数,默认为 16
--no-cleanup 表示测试完成后不删除测试用数据。在做读测试之前,需要使用该参数来运行一遍写测试来产生测试数据,在全部测试结束后可以运行 rados -p <pool_name> cleanup 来清理所有测试数据。
举例(测试运行600s, 4M的块大小,64线程,不删除测试用数据):
rados bench -p cephfs_data 600 write -b 4M -t 64 --no-cleanup
2019-09-10 01:26:35.468525 min lat: 0.763155 max lat: 4.25305 avg lat: 1.28744
sec Cur ops started finished avg MB/s cur MB/s last lat(s) avg lat(s)
20 63 999 936 187.166 156 1.50761 1.28744
21 63 1033 970 184.726 136 1.68059 1.30101
22 63 1074 1011 183.781 164 1.4625 1.31952
23 63 1110 1047 182.05 144 1.48224 1.3306
24 63 1164 1101 183.462 216 1.03243 1.3374
25 63 1212 1149 183.802 192 1.14344 1.33257
26 63 1252 1189 182.886 160 1.40288 1.33673
27 63 1306 1243 184.111 216 0.966673 1.33462
28 63 1350 1287 183.82 176 1.13416 1.33445
29 63 1404 1341 184.929 216 2.22456 1.33388
...
583 63 21582 21519 147.616 144 1.49628 1.73058
584 63 21615 21552 147.589 132 1.46498 1.73047
585 63 21654 21591 147.603 156 1.60935 1.73044
586 63 21684 21621 147.556 120 4.90418 1.73069
587 63 21718 21655 147.537 136 1.8161 1.73109
588 63 21761 21698 147.578 172 1.38556 1.73121
589 63 21814 21751 147.687 212 1.01166 1.7305
590 63 21870 21807 147.817 224 1.043 1.72912
591 63 21912 21849 147.851 168 1.24735 1.72799
592 63 21946 21883 147.831 136 2.59074 1.72769
593 63 21989 21926 147.871 172 1.49615 1.72771
594 63 22025 21962 147.865 144 1.48981 1.72769
595 63 22080 22017 147.986 220 1.02077 1.72669
596 63 22124 22061 148.033 176 1.31879 1.72591
597 63 22156 22093 147.999 128 1.76057 1.72574
598 63 22191 22128 147.986 140 1.53567 1.72587
599 63 22230 22167 147.999 156 1.45891 1.72583
2019-09-10 01:36:15.575884 min lat: 0.754678 max lat: 11.0531 avg lat: 1.7257
sec Cur ops started finished avg MB/s cur MB/s last lat(s) avg lat(s)
600 64 22263 22199 147.966 128 1.49292 1.7257
Total time run: 601.098917
Total writes made: 22263
Write size: 4194304
Object size: 4194304
Bandwidth (MB/sec): 148.149
Stddev Bandwidth: 39.3063
Max bandwidth (MB/sec): 272
Min bandwidth (MB/sec): 0
Average IOPS: 37
Stddev IOPS: 9
Max IOPS: 68
Min IOPS: 0
Average Latency(s): 1.7269
Stddev Latency(s): 0.797885
Max latency(s): 11.0531
Min latency(s): 0.754678