zoukankan      html  css  js  c++  java
  • 如何对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磁盘性能

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

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

    点击确定就可以了

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

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

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

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

    磁盘容量为1TB

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

    输入p

    按照步骤完成以下操作

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

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

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

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

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

    看到如下结果

    我们发现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

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

    接下来我们开始测试,测试的方式有两种,一种是通过手动输入命令,另一种是通过通过建立配置文件来执行测试,这里我们选择第二种,如果对一种方式感兴趣的读者可以参考如下链接,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测试的时候会遇到如下错误

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

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

  • 相关阅读:
    Problem E. Matrix from Arrays(杭电2018年多校第四场+思维+打表找循环节)
    Reachability from the Capital(Codeforces Round #490 (Div. 3)+tarjan有向图缩点)
    Network of Schools(POJ1326+有向图进行缩点)
    John's trip(POJ1041+欧拉回路+打印路径)
    Watchcow(POJ2230+双向欧拉回路+打印路径)
    Network(POJ3694+边双连通分量+LCA)
    Problem L. Visual Cube(杭电多校2018年第三场+模拟)
    floyd骚操作——传递闭包
    Remmarguts' Date(POJ2449+最短路+A*算法)
    Transformation(线段树+HDU4578+多种操作+鬼畜的代码)
  • 原文地址:https://www.cnblogs.com/chenjie520/p/6145682.html
Copyright © 2011-2022 走看看