1. 环境介绍
1.1 软件环境
ceph集群:
- mon:ceph-xxx-osd02.ys,ceph-xxx-osd03.ys,ceph-xxx-osd01.ys
- osd: 36
- mds:ceph-xxx-osd04.ys=up:active
ceph版本:
- ceph version 12.2.2.3 (277c813c8cdeb79eba8a11bfe08faf1bf7809f07) luminous (stable)
os系统:
- CentOS Linux release 7.2.1511 (Core)
- 3.10.0-514.16.1.el7.x86_64
1.2 硬件环境
cpu型号: Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz
cpu核数: 40
硬盘: hdd
2. 测试场景
2.1 单个磁盘的能力
下表以测试随机写IOPS的命令为例,说明命令中各种参数的含义。
参数 | 说明 |
---|---|
-direct=1 | 表示测试时忽略I/O缓存,数据直写。 |
-iodepth=128 | 表示使用AIO时,同时发出I/O数的上限为128。 |
-rw=randwrite | 表示测试时的读写策略为随机写(random writes)。作其它测试时可以设置为: 1. randread(随机读random reads) 2. read(顺序读sequential reads) 3. write(顺序写sequential writes 4. randrw(混合随机读写mixed random reads and writes) |
-ioengine=libaio | 表示测试方式为libaio(Linux AIO,异步I/O)。应用使用I/O通常有二种方式:同步和异步。同步的I/O一次只能发出一个I/O请求,等待内核完成才返回。这样对于单个线程iodepth总是小于1,但是可以透过多个线程并发执行来解决。通常会用 16−32 根线程同时工作将iodepth塞满。异步则通常使用libaio这样的方式一次提交一批I/O请求,然后等待一批的完成,减少交互的次数,会更有效率。 |
-bs=4k | 表示单次I/O的块文件大小为4k。未指定该参数时的默认大小也是4k。测试IOPS时,建议将bs设置为一个比较小的值,如本示例中的4k。测试吞吐量时,建议将bs设置为一个较大的值,如本示例中的1024k。 |
-size=1G | 表示测试文件大小为1G。 |
-numjobs=1 | 表示测试线程数为1。 |
-runtime=1000 | 表示测试时间为1000秒。如果未配置,则持续将前述-size指定大小的文件,以每次-bs值为分块大小写完。 |
-group_reporting | 表示测试结果里汇总每个进程的统计信息,而非以不同job汇总展示信息。 |
-name=Rand_Write_Testing | 表示测试任务名称为Rand_Write_Testing,可以随意设定。 |
2.1.1 顺序读(block size 4M)
//block size是4M, 30个线程并发,持续时间200s
测试结果:带宽:377MB/s 平均IOPS: 89 运行时长:2848ms 耗时:1249ms
$ fio -direct=1 -iodepth=128 -rw=read -ioengine=libaio -bs=4M -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/var/lib/ceph/osd/ceph-3/test0012 -name=Read_PPS_Testing
Read_PPS_Testing: (g=0): rw=read, bs=(R) 4096KiB-4096KiB, (W) 4096KiB-4096KiB, (T) 4096KiB-4096KiB, ioengine=libaio, iodepth=128
fio-3.1
Starting 1 process
Jobs: 1 (f=1): [R(1)][30.0%][r=232MiB/s,w=0KiB/s][r=58,w=0 IOPS][eta 00m:07s]
Read_PPS_Testing: (groupid=0, jobs=1): err= 0: pid=26652: Thu Jun 7 16:34:27 2018
read: IOPS=89, BW=360MiB/s (377MB/s)(1024MiB/2848msec)
slat (usec): min=623, max=54269, avg=10938.52, stdev=8604.56
clat (msec): min=46, max=2750, avg=1238.56, stdev=741.72
lat (msec): min=47, max=2751, avg=1249.50, stdev=743.03
clat percentiles (msec):
| 1.00th=[ 48], 5.00th=[ 56], 10.00th=[ 65], 20.00th=[ 342],
| 30.00th=[ 802], 40.00th=[ 1200], 50.00th=[ 1401], 60.00th=[ 1586],
| 70.00th=[ 1787], 80.00th=[ 1972], 90.00th=[ 2140], 95.00th=[ 2165],
| 99.00th=[ 2198], 99.50th=[ 2198], 99.90th=[ 2735], 99.95th=[ 2735],
| 99.99th=[ 2735]
bw ( KiB/s): min=155648, max=253952, per=57.11%, avg=210261.33, stdev=50053.95, samples=3
iops : min= 38, max= 62, avg=51.33, stdev=12.22, samples=3
lat (msec) : 50=1.95%, 100=13.67%, 250=3.12%, 500=5.08%, 750=5.08%
lat (msec) : 1000=5.86%, 2000=46.48%, >=2000=18.75%
cpu : usr=0.00%, sys=9.41%, ctx=188, majf=0, minf=802
IO depths : 1=0.4%, 2=0.8%, 4=1.6%, 8=3.1%, 16=6.2%, 32=12.5%, >=64=75.4%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=99.2%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.8%
issued rwt: total=256,0,0, short=0,0,0, dropped=0,0,0
latency : target=0, window=0, percentile=100.00%, depth=128
Run status group 0 (all jobs):
READ: bw=360MiB/s (377MB/s), 360MiB/s-360MiB/s (377MB/s-377MB/s), io=1024MiB (1074MB), run=2848-2848msec
Disk stats (read/write):
sde: ios=6616/0, merge=0/0, ticks=359717/0, in_queue=366490, util=96.03%
2.1.2 随机读(block size 4M)
//block size是4M, 30个线程并发,持续时间200s
测试结果:带宽:289MB/s 平均IOPS: 68 运行时长:3717ms 耗时:1423ms
$ fio -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -bs=4M -siz