searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

云硬盘性能指标解读及测试方法

2023-06-30 06:46:00
126
0

1 云硬盘性能指标

云硬盘性能的主要指标包括:

  • IOPS:云硬盘每秒进行读写的操作次数。
  • 吞吐量:云硬盘每秒成功传送的数据量,即读取和写入的数据量。
  • IO读写时延:云硬盘连续两次进行读写操作所需要的最小时间间隔。

公有云数据,仅供参考:

参数 普通IO 高IO 通用型SSD
单个云硬盘的最大IOPS 2000 5000 20000
单个云硬盘的基线IOPS 300 1800 1500
每GB云硬盘的IOPS 2 8 8
云硬盘IOPS计算公式 min (2000, 300 + 2 × 容量) min (5000, 1800 + 8 × 容量) min (20000, 1500 + 8 × 容量)
单个云硬盘最大吞吐量(MB/s) 150 200 250
单个云硬盘的基线吞吐量(MB/s) 100 130 100
每GB云硬盘的吞吐量(MB/s) 0.1 0.1 0.5
云硬盘吞吐量计算公式(MB/s) min (150, 100 + 0.1 × 容量) min (200, 130 + 0.1 × 容量) min (250, 100 + 0.5 × 容量)
单队列访问时延(ms) 5~ 10 1~ 3 1

与云硬盘性能相关的因素:

  • 环境因素:硬盘类型、组网、服务器配置等。
  • 云硬盘的容量:云硬盘的性能与容量相关,在一定的容量范围内,性能是随着容量线性增长的,达到最大后,无法再增长,见云硬盘IOPS计算公式、云硬盘吞吐量计算公式。
  • 业务模型:对于小数据块,例如4KB和8KB,一定并发场景下,性能可达到最大IOPS;对于≥16KB的大数据块,性能可达到最大吞吐量;所以测试不同性能指标需要使用不同的业务模型。

2 云硬盘性能测试方法

2.1 工具安装

需要在虚拟机上安装工具,使用工具对数据盘进行读写性能测试,Windows场景通常使用IOmeter工具,Linux场景通常使用FIO工具,下面以Linux使用FIO工具场景为例。

2.2 常用参数

详细参数可在网上查资料,这里只列出基本参数:

参数名 参数说明 参数取值
ioengine IO引擎,及发起IO的方式 sync、libaio、solarisaio、windowsaio等,linux下性能测试通常使用libaio(Linux专有的异步IO)
direct 是否使用机器自带的buffer bool类型,默认为0,设置为1时绕过机器自带的buffer,使测试结果更真实。
filename 测试文件名称,通常选择需要测试的盘的data目录 如/dev/vdb
rw IO类型 read 顺序读
write 顺序写
randwrite 随机写
randread 随机读
rw,readwrite 顺序混合读写
randrw 随机混合读写
rwmixread 混合读写中,读占的百分比 int类型,比如rwmixread=70,则读写比例为7:3
bs 单次io的块文件大小,单次io的块文件大小 可以是一个值,如4k,也可以是一个范围
size 将会读/写多少数据 可以是一个容量值,如1g,也可以是百分比,如100%
numjobs 线程数,即启动多个并行任务 int类型,默认为1
iodepth IO深度,即一次性提交几个IO int类型,默认为1
thread 使用pthread_create来创建线程 bool类型,默认为0
runtime 运行时长 int类型,单位s,如果不设置,则将文件/盘读写完为止
time_based 如果设置的话,即使file已被完全读写或写完,也要执行完runtime规定的时间。 N/A
ramp_time 记录性能信息前的等待时间,防止前期性能不稳定。 int类型,单位s
group_reporting 打印group的统计值,而不是一个单独的job N/A
log_avg_msec fio每完成一个IO将会记录一个日志(iops,latency,bw log)。当向磁盘写日志的时候,将会很快变的很大。设置这个选项的话,fio将会在一定的时期内平均这些值,指少日志的数量 int类型,默认为0,建议设置为50

2.3 运行方法

运行方式1:命令行

4k随机写:
fio -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio -bs=4k -size=10G -numjobs=1 -runtime=600 -group_reporting -filename=/dev/vdc -name=Rand_Write_IOPS_Test
1M顺序写: 
fio -direct=1 -iodepth=32 -rw=write -ioengine=libaio -bs=1024k -size=10G -numjobs=1 -runtime=600 -group_reporting -filename=/dev/vdc -name=Write_BandWidth_Test

运行方式2:配置文件

1、vim Rand_Write_IOPS_Test 编写一个测试文件,文件内容示例如下:
[global]
ioengine=libaio
direct=1
thread=1
runtime=300
ramp_time=10
filename=/dev/vdb
bs=4k
size=100%
numjobs=1
iodepth=128
group_reporting
time_based
log_avg_msec=50
rw=randwrite
2、执行命令,启动fio任务 fio Rand_Write_IOPS_Test 3、可以编写多个测试文件,运行shell脚本串行执行多个测试文件,如tesh.sh编写如下内容: 
#!/bin/bash
a=1 
while (( $a <= 10 ))
do 
fio $a >> result_$a.txt 2>&1
let "a++"
sleep 30
done

即串行执行1~10这10个测试文件,每个测试文件结果输出到result_$a.txt文件。

2.4 报告详解

-----------------------------------
BS 4KB read test: (g=0): rw=read, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=16
fio-3.7
Starting 1 thread
Jobs: 1 (f=1): [R(1)][100.0%][r=89.4MiB/s,w=0KiB/s][r=23.9k,w=0 IOPS][eta 00m:00s]
BS 4KB read test: (groupid=0, jobs=1): err= 0: pid=18957: Thu Apr 13 14:08:11 2022
   read: IOPS=22.7k, BW=88.5MiB/s (92.8MB/s)(5313MiB/60001msec)           //关键数据:读IOPS、吞吐量,如果存在写,也会列出数据write: ……
    slat (nsec): min=901, max=168330, avg=6932.34, stdev=1348.82  
    clat (usec): min=90, max=63760, avg=698.08, stdev=240.83          
     lat (usec): min=97, max=63762, avg=705.17, stdev=240.81          //关键数据:时延(响应时间)
    clat percentiles (usec):  //clat (提交延时)的排名分布
     |  1.00th=[  619],  5.00th=[  627], 10.00th=[  627], 20.00th=[  635],
     | 30.00th=[  635], 40.00th=[  685], 50.00th=[  717], 60.00th=[  725],
     | 70.00th=[  725], 80.00th=[  725], 90.00th=[  734], 95.00th=[  816],
     | 99.00th=[ 1004], 99.50th=[ 1020], 99.90th=[ 1057], 99.95th=[ 1057],
     | 99.99th=[ 1860]
   bw (  KiB/s): min=62144, max=91552, per=100.00%, avg=90669.02, stdev=3533.77, samples=120
   iops        : min=15536, max=22888, avg=22667.27, stdev=883.44, samples=120
  lat (usec)   : 100=0.01%, 250=0.01%, 500=0.01%, 750=93.85%, 1000=5.14%
  lat (msec)   : 2=0.99%, 4=0.01%, 10=0.01%, 50=0.01%, 100=0.01%
  cpu          : usr=5.35%, sys=23.17%, ctx=1359692, majf=0, minf=17
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=100.0%, 32=0.0%, >=64=0.0%    
      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=100.0%, 8=0.0%, 16=0.1%, 32=0.0%, 64=0.0%, >=64=0.0% 
      issued rwts: total=1360097,0,0,0 short=0,0,0,0 dropped=0,0,0,0
      latency   : target=0, window=0, percentile=100.00%, depth=16 
 
Run status group 0 (all jobs):
   READ: bw=88.5MiB/s (92.8MB/s), 88.5MiB/s-88.5MiB/s (92.8MB/s-92.8MB/s), io=5313MiB (5571MB), run=60001-60001msec
 
Disk stats (read/write):
  sda: ios=1357472/0, merge=70/0, ticks=949141/0, in_queue=948776, util=99.88%                //磁盘利用率等信息
-----------------------------------

2.5 注意事项

1、默认开启了硬盘限速,如果取消限速或提高限速阈值,性能优于第1章节所列性能数据;

2、为了达到稳定的性能结果,测试性能数据前需要先预埋数据,可用1M大小的IO对预测试的数据盘顺序写一遍,参考命令:

fio -direct=1 -iodepth=32 -rw=write -ioengine=libaio -bs=1024k -size=100% -numjobs=1 -group_reporting -filename=/dev/vdc -name=yumai

3、同一集群下如果并行访问数据盘,性能会互相影响,所以如果要测最大性能,建议集群内无其他业务,且串行执行测试场景;

0条评论
0 / 1000
small倩
2文章数
0粉丝数
small倩
2 文章 | 0 粉丝
small倩
2文章数
0粉丝数
small倩
2 文章 | 0 粉丝
原创

云硬盘性能指标解读及测试方法

2023-06-30 06:46:00
126
0

1 云硬盘性能指标

云硬盘性能的主要指标包括:

  • IOPS:云硬盘每秒进行读写的操作次数。
  • 吞吐量:云硬盘每秒成功传送的数据量,即读取和写入的数据量。
  • IO读写时延:云硬盘连续两次进行读写操作所需要的最小时间间隔。

公有云数据,仅供参考:

参数 普通IO 高IO 通用型SSD
单个云硬盘的最大IOPS 2000 5000 20000
单个云硬盘的基线IOPS 300 1800 1500
每GB云硬盘的IOPS 2 8 8
云硬盘IOPS计算公式 min (2000, 300 + 2 × 容量) min (5000, 1800 + 8 × 容量) min (20000, 1500 + 8 × 容量)
单个云硬盘最大吞吐量(MB/s) 150 200 250
单个云硬盘的基线吞吐量(MB/s) 100 130 100
每GB云硬盘的吞吐量(MB/s) 0.1 0.1 0.5
云硬盘吞吐量计算公式(MB/s) min (150, 100 + 0.1 × 容量) min (200, 130 + 0.1 × 容量) min (250, 100 + 0.5 × 容量)
单队列访问时延(ms) 5~ 10 1~ 3 1

与云硬盘性能相关的因素:

  • 环境因素:硬盘类型、组网、服务器配置等。
  • 云硬盘的容量:云硬盘的性能与容量相关,在一定的容量范围内,性能是随着容量线性增长的,达到最大后,无法再增长,见云硬盘IOPS计算公式、云硬盘吞吐量计算公式。
  • 业务模型:对于小数据块,例如4KB和8KB,一定并发场景下,性能可达到最大IOPS;对于≥16KB的大数据块,性能可达到最大吞吐量;所以测试不同性能指标需要使用不同的业务模型。

2 云硬盘性能测试方法

2.1 工具安装

需要在虚拟机上安装工具,使用工具对数据盘进行读写性能测试,Windows场景通常使用IOmeter工具,Linux场景通常使用FIO工具,下面以Linux使用FIO工具场景为例。

2.2 常用参数

详细参数可在网上查资料,这里只列出基本参数:

参数名 参数说明 参数取值
ioengine IO引擎,及发起IO的方式 sync、libaio、solarisaio、windowsaio等,linux下性能测试通常使用libaio(Linux专有的异步IO)
direct 是否使用机器自带的buffer bool类型,默认为0,设置为1时绕过机器自带的buffer,使测试结果更真实。
filename 测试文件名称,通常选择需要测试的盘的data目录 如/dev/vdb
rw IO类型 read 顺序读
write 顺序写
randwrite 随机写
randread 随机读
rw,readwrite 顺序混合读写
randrw 随机混合读写
rwmixread 混合读写中,读占的百分比 int类型,比如rwmixread=70,则读写比例为7:3
bs 单次io的块文件大小,单次io的块文件大小 可以是一个值,如4k,也可以是一个范围
size 将会读/写多少数据 可以是一个容量值,如1g,也可以是百分比,如100%
numjobs 线程数,即启动多个并行任务 int类型,默认为1
iodepth IO深度,即一次性提交几个IO int类型,默认为1
thread 使用pthread_create来创建线程 bool类型,默认为0
runtime 运行时长 int类型,单位s,如果不设置,则将文件/盘读写完为止
time_based 如果设置的话,即使file已被完全读写或写完,也要执行完runtime规定的时间。 N/A
ramp_time 记录性能信息前的等待时间,防止前期性能不稳定。 int类型,单位s
group_reporting 打印group的统计值,而不是一个单独的job N/A
log_avg_msec fio每完成一个IO将会记录一个日志(iops,latency,bw log)。当向磁盘写日志的时候,将会很快变的很大。设置这个选项的话,fio将会在一定的时期内平均这些值,指少日志的数量 int类型,默认为0,建议设置为50

2.3 运行方法

运行方式1:命令行

4k随机写:
fio -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio -bs=4k -size=10G -numjobs=1 -runtime=600 -group_reporting -filename=/dev/vdc -name=Rand_Write_IOPS_Test
1M顺序写: 
fio -direct=1 -iodepth=32 -rw=write -ioengine=libaio -bs=1024k -size=10G -numjobs=1 -runtime=600 -group_reporting -filename=/dev/vdc -name=Write_BandWidth_Test

运行方式2:配置文件

1、vim Rand_Write_IOPS_Test 编写一个测试文件,文件内容示例如下:
[global]
ioengine=libaio
direct=1
thread=1
runtime=300
ramp_time=10
filename=/dev/vdb
bs=4k
size=100%
numjobs=1
iodepth=128
group_reporting
time_based
log_avg_msec=50
rw=randwrite
2、执行命令,启动fio任务 fio Rand_Write_IOPS_Test 3、可以编写多个测试文件,运行shell脚本串行执行多个测试文件,如tesh.sh编写如下内容: 
#!/bin/bash
a=1 
while (( $a <= 10 ))
do 
fio $a >> result_$a.txt 2>&1
let "a++"
sleep 30
done

即串行执行1~10这10个测试文件,每个测试文件结果输出到result_$a.txt文件。

2.4 报告详解

-----------------------------------
BS 4KB read test: (g=0): rw=read, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=16
fio-3.7
Starting 1 thread
Jobs: 1 (f=1): [R(1)][100.0%][r=89.4MiB/s,w=0KiB/s][r=23.9k,w=0 IOPS][eta 00m:00s]
BS 4KB read test: (groupid=0, jobs=1): err= 0: pid=18957: Thu Apr 13 14:08:11 2022
   read: IOPS=22.7k, BW=88.5MiB/s (92.8MB/s)(5313MiB/60001msec)           //关键数据:读IOPS、吞吐量,如果存在写,也会列出数据write: ……
    slat (nsec): min=901, max=168330, avg=6932.34, stdev=1348.82  
    clat (usec): min=90, max=63760, avg=698.08, stdev=240.83          
     lat (usec): min=97, max=63762, avg=705.17, stdev=240.81          //关键数据:时延(响应时间)
    clat percentiles (usec):  //clat (提交延时)的排名分布
     |  1.00th=[  619],  5.00th=[  627], 10.00th=[  627], 20.00th=[  635],
     | 30.00th=[  635], 40.00th=[  685], 50.00th=[  717], 60.00th=[  725],
     | 70.00th=[  725], 80.00th=[  725], 90.00th=[  734], 95.00th=[  816],
     | 99.00th=[ 1004], 99.50th=[ 1020], 99.90th=[ 1057], 99.95th=[ 1057],
     | 99.99th=[ 1860]
   bw (  KiB/s): min=62144, max=91552, per=100.00%, avg=90669.02, stdev=3533.77, samples=120
   iops        : min=15536, max=22888, avg=22667.27, stdev=883.44, samples=120
  lat (usec)   : 100=0.01%, 250=0.01%, 500=0.01%, 750=93.85%, 1000=5.14%
  lat (msec)   : 2=0.99%, 4=0.01%, 10=0.01%, 50=0.01%, 100=0.01%
  cpu          : usr=5.35%, sys=23.17%, ctx=1359692, majf=0, minf=17
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=100.0%, 32=0.0%, >=64=0.0%    
      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=100.0%, 8=0.0%, 16=0.1%, 32=0.0%, 64=0.0%, >=64=0.0% 
      issued rwts: total=1360097,0,0,0 short=0,0,0,0 dropped=0,0,0,0
      latency   : target=0, window=0, percentile=100.00%, depth=16 
 
Run status group 0 (all jobs):
   READ: bw=88.5MiB/s (92.8MB/s), 88.5MiB/s-88.5MiB/s (92.8MB/s-92.8MB/s), io=5313MiB (5571MB), run=60001-60001msec
 
Disk stats (read/write):
  sda: ios=1357472/0, merge=70/0, ticks=949141/0, in_queue=948776, util=99.88%                //磁盘利用率等信息
-----------------------------------

2.5 注意事项

1、默认开启了硬盘限速,如果取消限速或提高限速阈值,性能优于第1章节所列性能数据;

2、为了达到稳定的性能结果,测试性能数据前需要先预埋数据,可用1M大小的IO对预测试的数据盘顺序写一遍,参考命令:

fio -direct=1 -iodepth=32 -rw=write -ioengine=libaio -bs=1024k -size=100% -numjobs=1 -group_reporting -filename=/dev/vdc -name=yumai

3、同一集群下如果并行访问数据盘,性能会互相影响,所以如果要测最大性能,建议集群内无其他业务,且串行执行测试场景;

文章来自个人专栏
云硬盘性能
1 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0