如何对Azure磁盘性能进行测试

Azure的云存储一直是Azure比较自豪的东西,想到AWS的LSA后面有若干个9,搞得大家都以为它的存储最优秀,其实不然,Azure存储到现在没有丢过客户1bit的数据,但是Azure不会去说我们的LSA是100%,因为是自找麻烦,但是实际上无论从performance还是可靠性,Azure的普通存储或者SSD都是很优越的,口说无凭,必须让事实来说话,就是这么自信,好了,不废话了,直接进入主题。

本次测试中,笔者特地去GitHub上搜索了一下,排名第一的是cxcv/iops,所以本次测试我们选用该工具进行测试,在这里笔者说一下,我知道很多人喜欢用DD测试,但我个人并不推崇DD测试,这是DD测试的原理造成的,只能提供一个大概的结果,而且是连续IO而不是随机IO,理论上是文件越大,测试结果越准确,bs是io一次读的规模,理论上是bs越大,测试的性能越高,count为读了多少个bs,这就是DD测试的大致原理,但总感觉有失偏颇,还有很多人在测试的时候,会去测试虚拟机的C盘,我要提醒大家一句,C盘是vm的系统盘,并不适合进行大规模的读写测试,所以很多人问笔者,你们Azure的C盘IO性能好差啊,连普通磁盘的性能都不如,其实这么说是不对的,Azure的C盘是人为进行设定过的,是不支持大规模的读写测试的,但是笔者曾经测试过Azure的D盘,性能却非常优秀,但是D盘只是临时盘,所以笔者不建议将数据放在临时盘,以免丢失。

首先,说一下本次poc环境,先在中国东部起一台vm,如果有读者想测SSD磁盘的性能,笔者的建议是建一台DS系列的虚拟机,然后用DS系列挂载SSD磁盘,测试SSD磁盘(A系列的VM是不支持挂载SSD的),测试完成以后删除附加的SSD,我们将DS虚拟机降为A系列虚拟机,再挂载普通的HDD磁盘,进行测试,有读者不禁会问,那我可以先建一台A系列机,然后再升成DS系列虚拟机,其实真的是这样嘛?使用过Azure的人会发现有时候A系列虚拟机并不能升成DS系列,这是什么原因呢,在这里笔者先卖个关子,会在后续的博文中单独开一章来讲Azure的底层架构中再详细介绍,在本篇博文重点展示方法论,所以只测试HDD磁盘性能

虚拟机的建立这里不再介绍,如果有不会的读者可以自行百度或者翻看我前面的博文,结果如下

如何对Azure磁盘性能进行测试

接下给该台虚拟机附加磁盘

如何对Azure磁盘性能进行测试

点击确定就可以了

这里笔者想说一句,我们看到了IOPS最大为500,吞吐量最大为60MB/s,但是实测结果会有点偏差,有读者不禁会问,你还没测你怎么会知道,废话,我当然测试过了,不然就来写博客了?开个玩笑,还有一个重要的要点大家记得,就是测试的时候,记得关闭主机缓存,很多人不理解,是这样的,开了主机缓存在测试的时候它首先会查找上次的读写的数据源,如果能hit到性能提升,如果hit不到性能下降,所以笔者的建议是在测试的时候关闭,保证测试结果准确性。

SSH登陆虚拟机,输入sudo ls /dev 看到如下结果

如何对Azure磁盘性能进行测试

sda为虚拟机系统盘,sdb为虚拟机临时盘,sdc为刚刚附加的磁盘

输入sudo fdisk -l 看到如下结果

如何对Azure磁盘性能进行测试

磁盘容量为1TB

输入sudo fdisk /dev/sdc看到如下结果

如何对Azure磁盘性能进行测试

输入p

如何对Azure磁盘性能进行测试

按照步骤完成以下操作

如何对Azure磁盘性能进行测试

这样,磁盘就被分好区了,这里为了操作简单,只有一个主分区

接下来格式化磁盘,用mkfs.ext4前,先看一下帮助文件

输入man mkfs.ext4,按空格找到lazy,看到如下截图

如何对Azure磁盘性能进行测试

输入如下命令进行快速格式化

[yangyang@pocvm ~]$ sudo mkfs.ext4 -E lazy_itable_init /dev/sdc1

看到如下结果

如何对Azure磁盘性能进行测试

我们发现1TB的硬盘瞬间就格式化完成

接下来我们挂载磁盘,看到如下结果说明磁盘挂载成功

[yangyang@pocvm ~]$ sudo mkdir /1T
[yangyang@pocvm ~]$ sudo mount /dev/sdc1 /1T
[yangyang@pocvm ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 30G .1G 29G % /
devtmpfs 829M 829M % /dev
tmpfs 839M 839M % /dev/shm
tmpfs 839M 8.3M 831M % /run
tmpfs 839M 839M % /sys/fs/cgroup
/dev/sdb1 69G 53M 66G % /mnt/resource
tmpfs 168M 168M % /run/user/
/dev/sdc1 1007G 77M 956G % /1T
[yangyang@pocvm ~]$ sudo mount /dev/sdc1 /1T

接下来我们开始测试iops,使用cxcv/iops

安装该pyton程序,代码链接

输入vim iops.py  将代码复制进去并保存

修改该文件权限,不然不具备可执行权限

[yangyang@pocvm ~]$ chmod  iops.py
[yangyang@pocvm ~]$ ll
total
-rwxr-xr-x. yangyang yangyang Dec : iops.py
[yangyang@pocvm ~]$ sudo ./iops.py /dev/sdc1
/dev/sdc1, 1.10 T, sectorsize=512B, #threads=, pattern=random:
B blocks: 729.3 IO/s, 373.4 kB/s ( 3.0 Mbit/s)
kB blocks: 405.3 IO/s, 415.1 kB/s ( 3.3 Mbit/s)
kB blocks: 336.6 IO/s, 689.3 kB/s ( 5.5 Mbit/s)
kB blocks: 243.7 IO/s, 998.3 kB/s ( 8.0 Mbit/s)
kB blocks: 246.4 IO/s, 2.0 MB/s ( 16.2 Mbit/s)
kB blocks: 253.7 IO/s, 4.2 MB/s ( 33.3 Mbit/s)
kB blocks: 241.1 IO/s, 7.9 MB/s ( 63.2 Mbit/s)
kB blocks: 177.4 IO/s, 11.6 MB/s ( 93.0 Mbit/s)
kB blocks: 102.3 IO/s, 13.4 MB/s (107.3 Mbit/s)
kB blocks: 105.0 IO/s, 27.5 MB/s (220.3 Mbit/s)
kB blocks: 69.0 IO/s, 36.2 MB/s (289.5 Mbit/s)
MB blocks: 35.7 IO/s, 37.4 MB/s (299.6 Mbit/s)
MB blocks: 21.8 IO/s, 45.7 MB/s (365.3 Mbit/s)
MB blocks: 11.1 IO/s, 46.4 MB/s (371.5 Mbit/s)
MB blocks: 9.7 IO/s, 81.5 MB/s (651.8 Mbit/s)
MB blocks: 4.9 IO/s, 82.7 MB/s (661.5 Mbit/s)
[yangyang@pocvm ~]$

我们可以看到iops峰值可以达到700+,吞吐量可以达到80+,说明azure普通磁盘的性能还是非常优秀的,但是每次测试结果可能会有点偏差,但是基本能保持稳定

接下来我们换成另一个测试工具,就是大家都喜欢的fio,我们可以直接到官网上去下载,这里下载的版本为fio-2.1.10 然后通过SSH将压缩包上传上去,关于如何通过SSH上传本地文件,这里就不再赘述,如果有不会的读者自行百度,当然你也可以通过安装epel源来安装fio。

接下来输入

[yangyang@pocvm ~]$ sudo tar -zxvf  fio-2.1..tar.gz
[yangyang@pocvm ~]$ sudo cd /home/yangyang/fio-2.1.
[yangyang@pocvm ~]$ sudo make
[yangyang@pocvm ~]$ sudo make install
[yangyang@pocvm ~]$ sudo cd /usr/local/bin
[yangyang@pocvm ~]$ ls

看到如下结果,说明安装成功

如何对Azure磁盘性能进行测试

接下来我们开始测试,测试的方式有两种,一种是通过手动输入命令,另一种是通过通过建立配置文件来执行测试,这里我们选择第二种,如果对一种方式感兴趣的读者可以参考如下链接,fio配置测试

输入vim fio.conf  将以下内容拷贝进去并保存

[global]
ioengine=psync
direct=
thread=
norandommap=
randrepeat=
runtime=
ramp_time=
size=1g
directory=/path/to/test [read4k-rand]
stonewall
group_reporting
bs=4k
rw=randread
numjobs=
iodepth= [read64k-seq]
stonewall
group_reporting
bs=64k
rw=read
numjobs=
iodepth= [write4k-rand]
stonewall
group_reporting
bs=4k
rw=randwrite
numjobs=
iodepth= [write64k-seq]
stonewall
group_reporting
bs=64k
rw=write
numjobs=
iodepth=

以上就是各个测试配置的参数

这里共有4个测试,顺序读,随机读,顺序写,随机写,同时采取同步模式进行测试

笔者的习惯是修改一下该文件的权限,以防止因为权限不足不能执行

[yangyang@pocvm ~]$ sudo chmod  fio.conf

这里有一点要注意需要在根目录下建立如下文件夹,否则接下来的测试会找不到路径

[yangyang@pocvm ~]$ sudo mkdir /path/
[yangyang@pocvm ~]$ sudo mkdir /path/to/
[yangyang@pocvm ~]$ sudo mkdir /path/to/test/

接下来的步骤至关重要

输入如下命令

[yangyang@pocvm ~]$ sudo /usr/local/bin/fio fio.conf>sync.txt

这一步其实就是用fio来执行刚刚的配置文件fio.conf 并且将执行的结果写入sync.txt中,但是这里提醒大家一句,执行完该命令以后,会发现有长时间的卡停,这时候不要急于停止,因为在执行配置文件过程是比较漫长的,如果不等待配置文件中的内容执行完毕,会直接影响以下结果的输出!!!

输入如下命令

[yangyang@pocvm ~]$ grep iops sync.txt

显示sync.txt中的测试结果

[yangyang@pocvm ~]$ grep iops sync.txt
read : io=118608KB, bw=.1KB/s, iops=, runt= 60027msec
read : io=.9MB, bw=31403KB/s, iops=, runt= 60027msec
write: io=62180KB, bw=.8KB/s, iops=, runt= 60153msec
write: io=974336KB, bw=16782KB/s, iops=, runt= 58057msec

将配置文件中的ioengine=psync换成ioengine=libaio

[yangyang@pocvm ~]$ sudo /usr/local/bin/fio fio.conf>async.txt
[yangyang@pocvm ~]$ grep iops async.txt
read : io=194248KB, bw=.9KB/s, iops=, runt= 60441msec
read : io=.7MB, bw=36798KB/s, iops=, runt= 60097msec
write: io=66060KB, bw=.74KB/s, iops=, runt= 66211msec
write: io=.2MB, bw=23310KB/s, iops=, runt= 60848msec

我们会发现iops有所增加,主要表现在顺序读和写这两者增加比较多

有笔者在进行libaio测试的时候会遇到如下错误

如何对Azure磁盘性能进行测试

这是由于缺少libaio devel这个安装包造成的

输入sudo yum install libaio-devel即可,但是装完必须重新解压fio 然后再make和make install,否则还是不行!!!

上一篇:基于Metronic的Bootstrap开发框架经验总结(1)-框架总览及菜单模块的处理


下一篇:UOJ#435. 【集训队作业2018】Simple Tree 树链剖分,分块