一、前言
参考文档:RedHat-Ceph性能基准
本篇主要介绍几种ceph原生基准性能测试工具以及各自对应使用方法
不同于fio、vdbench等上层应用接口测试工具,ceph提供了一些自带的基准性能测试工具,用于测试rados、rbd等底层存储基准性能,可以比对底层基准性能和上层应用基准性能,确定潜在可调优的空间
- rados bench rados bench为ceph自带的基准测试工具,rados bench用于测试rados存储池底层性能,该工具可以测试写、顺序读、随机读三种类型
- rbd bench rbd bench为ceph自带的基准性能测试工具,rbd bench用于测试块设备的吞吐量
二、rados bench
1、测试参数
rados bench -p <pool_name> <seconds> <write|seq|rand> [-b block_size] [-t concurrent_operations] [-k /.../ceph.client.admin.keyring] [-c /.../ceph.conf] [--no-cleanup] [--run-name run_name]
- -p <pool_name>: 测试存储池名称
- <seconds>: 测试运行时长,单位为s
- <write|seq|rand>: 测试读写类型(write:写,seq:顺序读,rand:随机读)
- -b <block_size>: 测试读写块大小,默认为4MB,默认单位为字节 当存储池为纠删存储类型时,则最小测试文件大小与EC Stripe Width(默认4K)值相等 注:当文件大小不满足该值时,程序会自动调整为EC Stripe Width值
- -t concurrent_operation 测试读写并发线程数,默认为16
- -k /…/ceph.client.admin.keyring 指定测试
ceph.client.admin.keyring
配置文件路径 - -c /…/ceph.conf 指定测试
ceph.conf
配置文件路径 - –no-cleanup 表示测试完成后不删除测试数据,只对写有效 通常在读测试之前,需要执行写测试生成测试数据之后,再执行读测试 注:生成的测试文件可通过命令
rados -p {pool_name} cleanup
删除
[root@node21 ~]# ceph df
GLOBAL:
SIZE AVAIL RAW USED %RAW USED
8.84TiB 7.11TiB 1.72TiB 19.51
POOLS:
NAME ID USED %USED MAX AVAIL OBJECTS
data 1 865GiB 20.42 3.29TiB 972426
metadata 2 4.53MiB 0 3.29TiB 23
rbd 3 19B 0 3.29TiB 2
[root@node21 ~]# rados -p data cleanup
Warning: using slow linear search
Removed 910587 objects
[root@node21 ~]# ceph df
GLOBAL:
SIZE AVAIL RAW USED %RAW USED
8.84TiB 8.33TiB 522GiB 5.76
POOLS:
NAME ID USED %USED MAX AVAIL OBJECTS
data 1 242GiB 5.69 3.91TiB 61839
metadata 2 4.53MiB 0 3.91TiB 23
rbd 3 19B 0 3.91TiB 2
- –run-name run_name 表示测试生成的对象名称
2、测试模型
执行性能测试之前,可通过
echo 3 | sudo tee /proc/sys/vm/drop_caches && sudo sync
下刷所有文件系统缓存,以便于保证性能数据准确性
- 1M写测试 1M写、测试时长10分钟、线程数32
rados bench -p rbd 600 write -b 1M -t 32 --run-name 1M-write --no-cleanup
- 1M顺序读测试 1M顺序读、测试时长10分钟、线程数32
rados bench -p rbd 600 seq -b 1M -t 32 --run-name 1M-seq-read
3、结果分析
[root@node55 ~]# rados bench -p rbd 10 write -b 1M -t 32 --run-name 1M-write --no-cleanup
hints = 1
Maintaining 32 concurrent writes of 1048576 bytes to objects of size 1048576 for up to 10 seconds or 0 objects
Object prefix: benchmark_data_node55_866969
sec Cur ops started finished avg MB/s cur MB/s last lat(s) avg lat(s)
0 0 0 0 0 0 - 0
1 32 1451 1419 1418.91 1419 0.0191834 0.0221416
2 32 2650 2618 1308.88 1199 0.01998 0.0242286
3 32 3950 3918 1305.87 1300 0.0454287 0.0243057
4 32 5268 5236 1308.87 1318 0.0220942 0.0242726
5 32 6450 6418 1283.47 1182 0.00952028 0.0246442
6 32 7783 7751 1291.71 1333 0.0304047 0.0247259
7 32 8917 8885 1269.16 1134 0.0424561 0.0251228
8 32 10103 10071 1258.75 1186 0.0349519 0.0253182
9 32 11369 11337 1259.54 1266 0.18918 0.0252901
10 32 12501 12469 1246.78 1132 0.00946298 0.0254759
Total time run: 10.461089
Total writes made: 12502
Write size: 1048576
Object size: 1048576
Bandwidth (MB/sec): 1195.1
Stddev Bandwidth: 95.1227
Max bandwidth (MB/sec): 1419
Min bandwidth (MB/sec): 1132
Average IOPS: 1195
Stddev IOPS: 95
Max IOPS: 1419
Min IOPS: 1132
Average Latency(s): 0.0262649
Stddev Latency(s): 0.0302529
Max latency(s): 0.852841
Min latency(s): 0.00503798
测试结果取最后几行的值,带宽为
Bandwidth (MB/sec)
对应的参数值,IOPS为
Average IOPS
对应参数值,时延为
Average Latency(s)
对应参数值
三、rbd bench
1、测试参数
rbd bench <rbd-name> --io-type <io-type> --io-size <io-size> --io-pattern <io-pattern> --io-threads <io-threads> --io-total <total-size>
- rbd-name:指定测试块设备名称,如rbd/rbd01
- –io-type:指定测试IO类型,可选参数
write
、read
- –io-size:指定测试IO块大小,单位为
byte
,默认参数为4096
(4KB) - –io-pattern:指定测试IO模式,可选参数为
seq
(顺序)、rand
(随机) - –io-threads:指定测试IO线程数,默认参数为
16
- –io-total:指定测试总写入数据量,单位为
byte
,默认参数为1073741824
(1G)
2、测试模型
2.1、大文件带宽测试
- 1M顺序写 指定线程数为32,写入数据量为100G
rbd bench rbd/rbd01 --io-type write --io-size 1M --io-pattern seq --io-threads 32 --io-total 100G
- 1M顺序读 指定线程数为32,写入数据量为100G
rbd bench rbd/rbd01 --io-type read --io-size 1M --io-pattern seq --io-threads 32 --io-total 100G
2.2、小文件IOPS测试
- 4K随机写 指定线程数为32,写入数据量为10G
rbd bench rbd/rbd01 --io-type write --io-size 4K --io-pattern rand --io-threads 32 --io-total 10G
- 4K随机读 指定线程数为32,写入数据量为10G
rbd bench rbd/rbd01 --io-type read --io-size 4K --io-pattern rand --io-threads 32 --io-total 10G
3、结果分析
[root@node55 ~]# rbd bench rbd/rbd01 --io-type write --io-size 1M --io-pattern seq --io-threads 32 --io-total 10G
bench type write io_size 1048576 io_threads 32 bytes 10737418240 pattern sequential
SEC OPS OPS/SEC BYTES/SEC
1 1050 1058.49 1109903644.86
2 2003 1010.63 1059723111.81
3 2960 996.71 1045129203.36
4 4016 1007.09 1056005653.25
5 4998 1004.93 1053750329.33
6 5986 989.95 1038033060.34
7 6990 996.93 1045357363.33
8 8012 1003.24 1051973847.83
9 8934 985.76 1033646506.51
10 9929 985.66 1033543565.56
elapsed: 10 ops: 10240 ops/sec: 990.65 bytes/sec: 1038773030.44
测试结果取最后一行
elapsed
的值,带宽为
bytes/sec
对应参数值(单位为bytes/sec,可根据需要转换为MB/s),IOPS为
ops/sec
对应参数值
版权归原作者 Luxf0 所有, 如有侵权,请联系我们删除。