产品性能

性能指标

评估云硬盘性能有3个重要的指标数据:

  • IOPS:每秒读写次数。
  • 吞吐量:每秒读写IO流量。
  • IO时延:IO提交到IO完成的时间。

理论上, IOPS与吞吐量越大越好,时延越低越好。

IOPS
IOPS(Input/Output Operations Per Second)是一个用于计算机存储设备(如硬盘(HDD)、固态硬盘(SSD)或存储区域网络(SAN))性能测试的量测方式,可以视为是每秒的读写次数。 IOPS根据测试倾向性的不同,主要包括4种类型的IOPS指标:随机读IOPS、随机写IOPS、顺序读IOPS、顺序写IOPS。

IOPS类型 说明
随机读IOPS 每秒平均的随机读取次数
随机写IOPS 每秒平均的随机写入次数
顺序读IOPS 每秒平均的顺序读取次数
顺序写IOPS 每秒平均的顺序写入次数

吞吐量

吞吐量是磁盘在单位时间内能成功传递的平均数据量。吞吐量的单位通常表示为MB每秒(MB/s或MBps)。

IO时延

IO时延是指一次IO请求发出,到该IO请求完成所耗费的时间。

性能对比

UDisk主要包括2种类型的产品:SSD云盘和普通云盘

  • SSD云盘: 底层以Nvme固态硬盘作为存储介质
  • 普通云盘: 底层以HDD机械磁盘作为存储介质

两种产品的云盘的性能对比如下表所示:

参数 SSD云盘 普通云盘
单盘IOPS min{1200+30*容量,24000} 1000(峰值)
单盘吞吐量 min{80+0.5*容量,260}MBps 100MB/s(最大)
平均时延 0.5-3ms 10ms

性能测试

测试工具
使用fio工具,建议使用libaio引擎测试

安装方法
Linux: yum install fio.x86_64

测试方法

  • 随机读
    fio -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -bs=4k -size=200G -numjobs=1 -runtime=1000 -group_reporting -name=test -filename=/data/test
  • 随机写
    fio -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio -bs=4k -size=200G -numjobs=1 -runtime=1000 -group_reporting -name=test -filename=/data/test
  • 顺序读
    fio -direct=1 -iodepth=128 -rw=read -ioengine=libaio -bs=4k -size=200G -numjobs=1 -runtime=1000 -group_reporting -name=test -filename=/data/test
  • 顺序写
    fio -direct=1 -iodepth=128 -rw=write -ioengine=libaio -bs=4k -size=200G -numjobs=1 -runtime=1000 -group_reporting -name=test -filename=/data/test

fio参数说明

参数 说明
-direct=1 忽略缓存,直接写入磁盘
-iodepth=128 请求的IO队列深度
-rw=write 读写策略,可选值randread(随机读),randwrite(随机写),read(顺序读),write(顺序写),randrw(混合随机读写)
-ioengine=libaio IO引擎配置,建议使用libaio
-bs=4k 块大小配置,可以使用4k,8k,16k等
-size=200G 测试生成文件的大小
-numjobs=1 线程数配置
-numtime=1000 测试运行时长,单位秒
-group_reporting 测试结果汇总展示
-name=test 测试任务名称
-filename=/data/test 测试输出的路径与文件名

常见测试用例如下:

  • 时延性能测试:

fio -direct=1 -iodepth=1 -rw=read -ioengine=libaio -bs=4k -size=200G -numjobs=1 -runtime=1000 -group_reporting -name=test -filename=/data/test

  • 吞吐性能测试:

fio -direct=1 -iodepth=128 -rw=write -ioengine=libaio -bs=256k -size=200G -numjobs=1 -runtime=1000 -group_reporting -name=test -filename=/data/test

fio -direct=1 -iodepth=128 -rw=read -ioengine=libaio -bs=256k -size=200G -numjobs=1 -runtime=1000 -group_reporting -name=test -filename=/data/test

  • IOPS性能测试(4k,128队列,顺序读写):

fio -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio -bs=4k -size=200G -numjobs=1 -runtime=1000 -group_reporting -name=test -filename=/data/test

fio -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -bs=4k -size=200G -numjobs=1 -runtime=1000 -group_reporting -name=test -filename=/data/test