设为首页 收藏本站
查看: 1234|回复: 0

[经验分享] 如何对Azure磁盘性能进行测试

[复制链接]

尚未签到

发表于 2017-6-30 08:45:05 | 显示全部楼层 |阅读模式
  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磁盘性能
  虚拟机的建立这里不再介绍,如果有不会的读者可以自行百度或者翻看我前面的博文,结果如下
DSC0000.png

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

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

  sda为虚拟机系统盘,sdb为虚拟机临时盘,sdc为刚刚附加的磁盘
  输入sudo fdisk -l 看到如下结果
DSC0003.png

  磁盘容量为1TB
  输入sudo fdisk /dev/sdc看到如下结果
DSC0004.png

  输入p
DSC0005.png

  按照步骤完成以下操作
DSC0006.png

  这样,磁盘就被分好区了,这里为了操作简单,只有一个主分区
  接下来格式化磁盘,用mkfs.ext4前,先看一下帮助文件
  输入man mkfs.ext4,按空格找到lazy,看到如下截图
DSC0007.png

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



[yangyang@pocvm ~]$ sudo mkfs.ext4 -E lazy_itable_init /dev/sdc1
  看到如下结果
DSC0008.png

  我们发现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  1.1G   29G   4% /
devtmpfs        829M     0  829M   0% /dev
tmpfs           839M     0  839M   0% /dev/shm
tmpfs           839M  8.3M  831M   1% /run
tmpfs           839M     0  839M   0% /sys/fs/cgroup
/dev/sdb1        69G   53M   66G   1% /mnt/resource
tmpfs           168M     0  168M   0% /run/user/1000
/dev/sdc1      1007G   77M  956G   1% /1T
[yangyang@pocvm ~]$ sudo  mount /dev/sdc1 /1T
  接下来我们开始测试iops,使用cxcv/iops
  安装该pyton程序,代码链接
  输入vim iops.py  将代码复制进去并保存
  修改该文件权限,不然不具备可执行权限



[yangyang@pocvm ~]$ chmod 755 iops.py
[yangyang@pocvm ~]$ ll
total 12
-rwxr-xr-x. 1 yangyang yangyang 10104 Dec 12 06:19 iops.py
[yangyang@pocvm ~]$ sudo ./iops.py /dev/sdc1
/dev/sdc1,   1.10 T, sectorsize=512B, #threads=32, pattern=random:
512  B blocks:  729.3 IO/s, 373.4 kB/s (  3.0 Mbit/s)
1 kB blocks:  405.3 IO/s, 415.1 kB/s (  3.3 Mbit/s)
2 kB blocks:  336.6 IO/s, 689.3 kB/s (  5.5 Mbit/s)
4 kB blocks:  243.7 IO/s, 998.3 kB/s (  8.0 Mbit/s)
8 kB blocks:  246.4 IO/s,   2.0 MB/s ( 16.2 Mbit/s)
16 kB blocks:  253.7 IO/s,   4.2 MB/s ( 33.3 Mbit/s)
32 kB blocks:  241.1 IO/s,   7.9 MB/s ( 63.2 Mbit/s)
65 kB blocks:  177.4 IO/s,  11.6 MB/s ( 93.0 Mbit/s)
131 kB blocks:  102.3 IO/s,  13.4 MB/s (107.3 Mbit/s)
262 kB blocks:  105.0 IO/s,  27.5 MB/s (220.3 Mbit/s)
524 kB blocks:   69.0 IO/s,  36.2 MB/s (289.5 Mbit/s)
1 MB blocks:   35.7 IO/s,  37.4 MB/s (299.6 Mbit/s)
2 MB blocks:   21.8 IO/s,  45.7 MB/s (365.3 Mbit/s)
4 MB blocks:   11.1 IO/s,  46.4 MB/s (371.5 Mbit/s)
8 MB blocks:    9.7 IO/s,  81.5 MB/s (651.8 Mbit/s)
16 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.10.tar.gz
[yangyang@pocvm ~]$ sudo cd /home/yangyang/fio-2.1.10
[yangyang@pocvm ~]$ sudo make
[yangyang@pocvm ~]$ sudo make install
[yangyang@pocvm ~]$ sudo cd /usr/local/bin
[yangyang@pocvm ~]$ ls
  看到如下结果,说明安装成功
DSC0009.png

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



[global]
ioengine=psync
direct=1
thread=1
norandommap=1
randrepeat=0
runtime=60
ramp_time=6
size=1g
directory=/path/to/test

[read4k-rand]
stonewall
group_reporting
bs=4k
rw=randread
numjobs=8
iodepth=32

[read64k-seq]
stonewall
group_reporting
bs=64k
rw=read
numjobs=4
iodepth=8

[write4k-rand]
stonewall
group_reporting
bs=4k
rw=randwrite
numjobs=2
iodepth=4

[write64k-seq]
stonewall
group_reporting
bs=64k
rw=write
numjobs=2
iodepth=4
  以上就是各个测试配置的参数
  这里共有4个测试,顺序读,随机读,顺序写,随机写,同时采取同步模式进行测试
  笔者的习惯是修改一下该文件的权限,以防止因为权限不足不能执行



[yangyang@pocvm ~]$ sudo chmod 777 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=1975.1KB/s, iops=493, runt= 60027msec
read : io=1840.9MB, bw=31403KB/s, iops=490, runt= 60027msec
write: io=62180KB, bw=1033.8KB/s, iops=258, runt= 60153msec
write: io=974336KB, bw=16782KB/s, iops=262, 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=3213.9KB/s, iops=799, runt= 60441msec
read : io=2159.7MB, bw=36798KB/s, iops=574, runt= 60097msec
write: io=66060KB, bw=997.74KB/s, iops=249, runt= 66211msec
write: io=1385.2MB, bw=23310KB/s, iops=364, runt= 60848msec
  我们会发现iops有所增加,主要表现在顺序读和写这两者增加比较多
  有笔者在进行libaio测试的时候会遇到如下错误
DSC00010.png

  这是由于缺少libaio devel这个安装包造成的
  输入sudo yum install libaio-devel即可,但是装完必须重新解压fio 然后再make和make install,否则还是不行!!!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-389591-1-1.html 上篇帖子: 【Azure】Windows Azure 不能ping通的解决方案 下篇帖子: Azure ARM (6) ARM Template简单介绍
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表