全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网
云服务器 ECS

云盘参数和性能测试方法

更新时间:2017-10-20 10:35:45

云服务器 ECS 的云盘既可以单独使用、又可以组合使用,以满足不同应用场景的需求。阅读本章后,您可以根据自己要求,选择使用合适的数据存储选项。

云盘为 ECS 实例提供数据块级别的云盘,采用三副本的分布式机制,为 ECS 实例提供 99.9999999% 的数据可靠性保证。根据性能的不同,云盘可以分为以下类型:

  • 普通云盘:面向低 I/O 负载的应用场景,为 ECS 实例提供数百 IOPS 的 I/O 性能。
  • 高效云盘:面向中度 I/O 负载的应用,为 ECS 实例提供最高 3000 随机 IOPS 的存储性能。
  • SSD 云盘:面向 I/O 密集型应用,提供稳定的高随机 IOPS 性能。

关于如何挂载云盘的操作步骤,请参见 挂载数据盘

云盘参数对比

参数 SSD 云盘 高效云盘 普通云盘
最大容量 32768 GB 32768 GB 2000 GB
最大 IOPS 20000*
单盘最大 IOPS:min{1200+30*容量, 20000}
3000*
单盘最大 IOPS:min{1000+6*容量, 3000}
数百
最大吞吐量 300 MBps
单盘最大吞吐量:min{80+0.5*容量, 300}MBps
80 MBps
单盘最大吞吐量:min{50+0.1*容量, 80}MBps
30 MBps
访问时延 0.5−2 ms 1−3 ms 5−10 ms
数据可靠性 99.9999999% 99.9999999% 99.9999999%
API 名称 cloud_ssd cloud_efficiency cloud
价格** 1.0 元/GB/月 0.35 元/GB/月 0.3 元/GB/月
典型应用场景
  • I/O 密集型应用
  • 中大型关系型数据库
  • NoSQL 数据库
  • 中小型数据库
  • 大型开发测试
  • Web 服务器日志
不被经常访问或者低 I/O 负载的应用场景

* 关于SSD云盘和高效云盘的 IOPS 性能基准,请参考 云盘的特点和应用场景
** 所示为写作文档时华东 1 地域的价格。最新价格信息请参见 ECS 详细价格

关于本地 SSD 盘的信息,请参考 上一代磁盘

磁盘性能测试方法

您可以使用 fio 测试磁盘性能。在进行下列测试前,请确保磁盘已经 4K 对齐。

警告
测试裸盘可以获得真实的磁盘性能,但直接测试裸盘会破坏文件系统结构,请在测试前提前做好数据备份。建议您只在新购无数据实例上使用 fio 测试磁盘性能,避免造成数据丢失。

  • 测试随机写 IOPS,运行以下命令:

    1. fio -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=iotest -name=Rand_Write_Testing
  • 测试随机读 IOPS,运行以下命令:

    1. fio -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=iotest -name=Rand_Read_Testing
  • 测试顺序写吞吐量,运行以下命令:

    1. fio -direct=1 -iodepth=64 -rw=write -ioengine=libaio -bs=1024k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=iotest -name=Write_PPS_Testing
  • 测试顺序读吞吐量,运行以下命令:

    1. fio -direct=1 -iodepth=64 -rw=read -ioengine=libaio -bs=1024k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=iotest -name=Read_PPS_Testing

下表以测试随机写 IOPS 的命令为例,说明命令中各种参数的含义。

参数 说明
-direct=1 表示测试时忽略 I/O 缓存,数据直写。
-iodepth=128 表示使用 AIO 时,同时发出 I/O 数的上限为 128。
-rw=randwrite 表示测试时的读写策略为随机写(random writes)。作其它测试时可以设置为:
  • randread(随机读 random reads)
  • read(顺序读 sequential reads)
  • write(顺序写 sequential writes)
  • 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 这样的方式一次提交一批 IO 请求,然后等待一批的完成,减少交互的次数,会更有效率。
-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 汇总展示信息。
-filename=iotest 指定测试文件的名称,比如 iotest。测试裸盘可以获得真实的磁盘性能,但直接测试裸盘会破坏文件系统结构,请在测试前提前做好数据备份。
-name=Rand_Write_Testing 表示测试任务名称为 Rand_Write_Testing,可以随意设定。

以下以一块 800 GB SSD 云盘随机读 IOPS 性能的测试结果为例,说明如何理解 fio 测试结果。

  1. Rand_Read_Testing: (g=0): rw=randread, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=128
  2. fio-2.2.8
  3. Starting 1 process
  4. Jobs: 1 (f=1): [r(1)] [21.4% done] [80000KB/0KB/0KB /s] [20.0K/0/0 iops] [eta 00Jobs: 1 (f=1): [r(1)] [28.6% done] [80000KB/0KB/0KB /s] [20.0K/0/0 iops] [eta 00Jobs: 1 (f=1): [r(1)] [35.7% done] [80000KB/0KB/0KB /s] [20.0K/0/0 iops] [eta 00Jobs: 1 (f=1): [r(1)] [42.9% done] [80004KB/0KB/0KB /s] [20.1K/0/0 iops] [eta 00Jobs: 1 (f=1): [r(1)] [50.0% done] [80004KB/0KB/0KB /s] [20.1K/0/0 iops] [eta 00Jobs: 1 (f=1): [r(1)] [57.1% done] [80000KB/0KB/0KB /s] [20.0K/0/0 iops] [eta 00Jobs: 1 (f=1): [r(1)] [64.3% done] [80144KB/0KB/0KB /s] [20.4K/0/0 iops] [eta 00Jobs: 1 (f=1): [r(1)] [71.4% done] [80388KB/0KB/0KB /s] [20.1K/0/0 iops] [eta 00Jobs: 1 (f=1): [r(1)] [78.6% done] [80232KB/0KB/0KB /s] [20.6K/0/0 iops] [eta 00Jobs: 1 (f=1): [r(1)] [85.7% done] [80260KB/0KB/0KB /s] [20.7K/0/0 iops] [eta 00Jobs: 1 (f=1): [r(1)] [92.9% done] [80016KB/0KB/0KB /s] [20.4K/0/0 iops] [eta 00Jobs: 1 (f=1): [r(1)] [100.0% done] [80576KB/0KB/0KB /s] [20.2K/0/0 iops] [eta 00m:00s]
  5. Rand_Read_Testing: (groupid=0, jobs=1): err= 0: pid=9845: Tue Sep 26 20:21:01 2017
  6. read : io=1024.0MB, bw=80505KB/s, iops=20126, runt= 13025msec
  7. slat (usec): min=1, max=674, avg= 4.09, stdev= 6.11
  8. clat (usec): min=172, max=82992, avg=6353.90, stdev=19137.18
  9. lat (usec): min=175, max=82994, avg=6358.28, stdev=19137.16
  10. clat percentiles (usec):
  11. | 1.00th=[ 454], 5.00th=[ 668], 10.00th=[ 812], 20.00th=[ 996],
  12. | 30.00th=[ 1128], 40.00th=[ 1256], 50.00th=[ 1368], 60.00th=[ 1480],
  13. | 70.00th=[ 1624], 80.00th=[ 1816], 90.00th=[ 2192], 95.00th=[79360],
  14. | 99.00th=[81408], 99.50th=[81408], 99.90th=[82432], 99.95th=[82432],
  15. | 99.99th=[82432]
  16. bw (KB /s): min=79530, max=81840, per=99.45%, avg=80064.69, stdev=463.90
  17. lat (usec) : 250=0.04%, 500=1.49%, 750=6.08%, 1000=12.81%
  18. lat (msec) : 2=65.86%, 4=6.84%, 10=0.49%, 20=0.04%, 100=6.35%
  19. cpu : usr=3.19%, sys=10.95%, ctx=23746, majf=0, minf=160
  20. IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, >=64=100.0%
  21. submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
  22. complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.1%
  23. issued : total=r=262144/w=0/d=0, short=r=0/w=0/d=0, drop=r=0/w=0/d=0
  24. latency : target=0, window=0, percentile=100.00%, depth=128
  25. Run status group 0 (all jobs):
  26. READ: io=1024.0MB, aggrb=80504KB/s, minb=80504KB/s, maxb=80504KB/s, mint=13025msec, maxt=13025msec
  27. Disk stats (read/write):
  28. vdb: ios=258422/0, merge=0/0, ticks=1625844/0, in_queue=1625990, util=99.30%

输出结果中,您主要关注以下这行内容:

  1. read : io=1024.0MB, bw=80505KB/s, iops=20126, runt= 13025msec

表示 fio 做了 1 GB I/O,速率约为 80 MB/s,总 IOPS 为 20126,运行时间为 13 秒。由 IOPS 值可知,该 SSD 云盘的 IOPS 性能为 20126,而根据公式计算的数值为:

min{1200+30 ∗ 容量, 20000} = min{1200+30 ∗ 800, 20000} = 20000

测试结果与公式计算结果相近。

本文导读目录