【简介】
本文章将在Azure VM Linux 中使用FIO工具测试块存储性能,包括IOPS、吞吐量、时延等。因不同工具测试的硬盘基准性能会有差异,如dd、sysbench、iometer等工具可能会受到测试参数配置和文件系统影响,难以反映真实性能。本示例的性能参数,均为Linux系统下采用FIO工具的测试结果,以此作为存储性能测试的指标参考。
【一.性能指标概述】
衡量存储的性能指标主要包括IOPS、吞吐量和访问时延。
- IOPS(Input/Output Operations per Second)
IOPS指每秒能处理的I/O个数,表示块存储处理读写(输出/输入)的能力,单位为次,常用的IOPS指标包括顺序操作和随机操作,如下表所示
指标 | 描述 | 数据访问方式 |
总IOPS | 每秒执行的I/O操作总次数 | 对硬盘存储位置的不连续访问和连续访问 |
随机读IOPS | 每秒执行的随机读I/O操作的平均次数 | 对硬盘存储位置的不连续访问 |
随机写IOPS | 每秒执行的随机写I/O操作的平均次数 | 对硬盘存储位置的不连续访问 |
顺序读IOPS | 每秒执行的顺序读I/O操作的平均次数 | 对硬盘存储位置的连续访问 |
顺序写IOPS | 每秒执行的顺序写I/O操作的平均次数 | 对硬盘存储位置的连续访问 |
- 吞吐量(Throughput)
吞吐量是指单位时间内可以成功传输的数据数量,单位为MB/s。如果您需要部署大量顺序读写的应用,例如Hadoop离线计算型业务等典型场景,需要关注吞吐量。 - 访问时延(Latency)
访问时延是指块存储处理一个I/O需要的时间,单位为s、ms或者μs。过高的时延会导致应用性能下降或报错。
二.创建Azure VM虚拟机
三. 远程连接云服务器
3.1 使用远程工具登陆到服务器中
3.2 切换至root用户账号,执行命令安装FIO工具进行测试
3.3通过Fdisk命令查看当前分区
四.云盘性能测试
4.1. 随机写IOPS测试
注意:本示例中,使用的设备名为/dev/sdc,需要根据实际情况替换。例如需要测试的云盘为/dev/sdb,则将以下示例命令中的/dev/sdc替换为/dev/sdb。
①执行命令如下进行随机写IOPS测试:
fio -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/sdc -name=Rand_Write_Testing
②执行完毕对结果进行输出如下内容:
③测试总结:
WRITE: bw=13.4MiB/s (14.0MB/s), 13.4MiB/s-13.4MiB/s (14.0MB/s-14.0MB/s), io=1024MiB (1074MB), run=76465-76465msec
Disk stats (read/write): sdc: ios=38/261925, merge=0/0, ticks=2630/9752563, in_queue=9755193, util=99.94%
4.2 随机读IOPS测试:
①执行命令如下对随机读IOPS测试:
fio -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/sdc -name=Rand_Read_Testing
②执行完毕对结果进行输出如下内容:
③测试总结:
Run status group 0 (all jobs):WRITE: bw=162MiB/s (170MB/s), 162MiB/s-162MiB/s (170MB/s-170MB/s), io=1024MiB (1074MB), run=6307-6307msec
Disk stats (read/write): sdc: ios=42/1991, merge=0/0, ticks=87/751662, in_queue=751749, util=98.32%
4.3 顺序写吞吐量测试
①执行命令如下进行
fio -direct=1 -iodepth=64 -rw=write -ioengine=libaio -bs=1024k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/sdc -name=Write_PPS_Testing
②执行完毕对结果进行输出如下内容:
③测试总结:
Run status group 0 (all jobs):
WRITE: bw=163MiB/s (171MB/s), 163MiB/s-163MiB/s (171MB/s-171MB/s), io=1024MiB (1074MB), run=6266-6266msec
Disk stats (read/write): sdc: ios=42/1993, merge=0/0, ticks=69/746895, in_queue=746964, util=97.42%
4.4 顺序读吞吐量测试:
①执行命令如下进行顺序读吞吐量测试
fio -direct=1 -iodepth=64 -rw=read -ioengine=libaio -bs=1024k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/sdc -name=Read_PPS_Testing
②执行完毕对结果进行输出如下内容:
③测试结果:
Run status group 0 (all jobs):READ: bw=163MiB/s (171MB/s), 163MiB/s-163MiB/s (171MB/s-171MB/s), io=1024MiB (1074MB), run=6281-6281msec
Disk stats (read/write): sdc: ios=2008/0, merge=0/0, ticks=752877/0, in_queue=752877, util=96.54%
4.5.随机写时延测试
①执行命令如下进行随机写时延测试
fio -direct=1 -iodepth=1 -rw=randwrite -ioengine=libaio -bs=4k -size=1G -numjobs=1 -group_reporting -filename=/dev/sdc-name=Rand_Write_Latency_Testing
②执行完毕对结果进行输出如下内容:
③测试结果:
Run status group 0 (all jobs): WRITE: bw=1755KiB/s (1797kB/s), 1755KiB/s-1755KiB/s (1797kB/s-1797kB/s), io=1024MiB (1074MB), run=597520-597520msec
Disk stats (read/write): sdc: ios=31/262087, merge=0/0, ticks=53/307205, in_queue=307258, util=93.31%
4.6.随机读时延测试:
①执行命令如下进行随机读时延测试
fio -direct=1 -iodepth=1 -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=1 -group_reporting -filename=/dev/sdc -name=Rand_Read_Latency_Testing
②执行完毕对结果进行输出如下内容:
③测试结果:
Run status group 0 (all jobs): READ: bw=979KiB/s (1002kB/s), 979KiB/s-979KiB/s (1002kB/s-1002kB/s), io=1024MiB (1074MB), run=1071206-1071206msec
Disk stats (read/write): sdc: ios=262097/0, merge=0/0, ticks=467710/0, in_queue=467710, util=65.17%