暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

磁盘IO监测方法,了解一下?

洪文聊架构 2021-03-03
5372

一、磁盘IO核心指标

在磁盘测试中最关心的几个指标分别为:iops(每秒执行的IO次数)、bw(带宽,每秒的吞吐量)、lat(每次IO操作的延迟)。


磁盘的 IOPS:就是在一秒内,磁盘进行多少次 I/O 读写。

磁盘的吞吐量BW:就是每秒磁盘 I/O 的流量,即磁盘写入加上读出的数据的大小。


当每次IO操作的block较小时,如512bytes/4k/8k等,此时更能体现的是磁盘读写的频率特性,即磁盘的IOPS,所以这时测试的是性能指标IOPS。


当每次IO操作的block较大时,如256k/512k/1M等,此时更能体现的是磁盘最大允许的带宽流量特性,即磁盘的吞吐量bw,所以这时测试的是性能指标BW。


因此,我们会认为 IOPS 和吞吐量的数值越高越好。实际上,对于一个磁盘来讲,这两个参数均有其最大值,而且这两个参数也存在着一定的关系。


二、IOPS测试的影响因素

另外,对于同一个磁盘(或者 LUN),随着每次 I/O 读写数据的大小不同,IOPS 的数值也不是固定不变的。


例如,每次 I/O 写入或者读出的都是连续的大数据块,此时 IOPS 相对会低一些;在不频繁换道的情况下,每次写入或者读出的数据块小,相对来讲 IOPS 就会高一些。


也就是说,IOPS 也取决于I/O块的大小,采用不同I/O块的大小测出的IOPS值是不同的。对一个具体的IOPS, 可以了解它当时测试的I/O块的尺寸。


三、监控linux磁盘IO工具:iostat

Linux系统中的 iostat是I/O statistics(输入/输出统计)的缩写,iostat工具具备对系统磁盘操作活动监视的功能呢。它可以采集并统计磁盘活动情况,同时会汇报出CPU的使用情况。


iostat是sysstat工具集的一个工具,安装方式如下:

    #Centos的安装方式是:
    yum install sysstat


    #Ubuntu的安装方式是:
    apt install sysstat


    安装成功后使用下列命令查看磁盘使用情况:

      iostat -dx

      结果如下:

        Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
        loop0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
        vda 0.00 1.00 0.00 4.00 0.00 20.00 10.00 0.02 5.00 0.00 5.00 5.00 2.00



        结果分析:

          rrqm/s:   每秒进行 merge 的读操作数目。即 delta(rmerge)/s
          wrqm/s: 每秒进行 merge 的写操作数目。即 delta(wmerge)/s
          r/s: 每秒完成的读 I/O 设备次数。即 delta(rio)/s
          w/s: 每秒完成的写 I/O 设备次数。即 delta(wio)/s
          rsec/s: 每秒读扇区数。即 delta(rsect)/s
          wsec/s: 每秒写扇区数。即 delta(wsect)/s
          rkB/s: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。(需要计算)
          wkB/s: 每秒写K字节数。是 wsect/s 的一半。(需要计算)
          avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。delta(rsect+wsect)/delta(rio+wio)
          avgqu-sz: 平均I/O队列长度。即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)。
          await: 平均每次设备I/O操作的等待时间 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)
          svctm: 平均每次设备I/O操作的服务时间 (毫秒)。即 delta(use)/delta(rio+wio)
          %util: 一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。即 delta(use)/s/1000 (因为use的单位为毫秒)
          如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。
          %util高于30,IO压力就较大了,一般读取速度有较多的wait.



          如果想连续测试多次磁盘IO的情况,可用如下命令:

            iostat -dkx 1 5 
            #参数1:每隔1s统计一次 
            #参数5:统计5次



            接下来,我们用实际的例子来测试一下磁盘实时使用情况和性能,并实际使用iostat进行分析。


            四、测试磁盘读写性能并利用iostat实时获取磁盘使用情况

            1、写入性能

            首先开一个控制台利用dd命令进行文件写入:

              root@27-58:~# dd if=/dev/zero of=./a.dat bs=8k count=1M oflag=direct

              此时,再开一个控制台利用iostat命令查看磁盘的使用情况

                root@27-58:~#iostat -dkx 1 5

                结果如下:

                  Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
                  loop0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
                  vda 0.00 0.00 0.00 1057.00 0.00 8456.00 16.00 0.90 0.86 0.00 0.86 0.85 92.00


                  可以看到磁盘的利用率已经达到92%(%util=92%),每秒写入8456K字节数据。


                  性能测试结果:

                    root@27-58:~# dd if=/dev/zero of=./a.dat bs=8k count=1M oflag=direct 
                    ^C469480+0 records in
                    469480+0 records out
                    3845980160 bytes (3.8 GB, 3.6 GiB) copied, 272.613 s, 14.1 MB/s



                    2、读性能

                    同样在一个控制台利用dd命令进行一直读文件测试,此时在另一个控制台用:iostat -dkx 1 5 命令进行测试:

                      Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
                      loop0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
                      vda 0.00 16.00 352.00 8.00 2816.00 88.00 16.13 1.07 3.01 2.85 10.00 2.74 98.80

                      结果如下:


                      看到持续的读文件时,磁盘IO利用率达到98%,磁盘处于满负荷状态。


                      读性能的最终测试结果:

                        root@27-58:~# dd if=./a.dat of=/dev/null bs=8k count=1M iflag=direct
                        469480+0 records in
                        469480+0 records out
                        3845980160 bytes (3.8 GB, 3.6 GiB) copied, 164.976 s, 23.3 MB/s


                        总结:以上只是测IOPS,因为设置的block比较小,调大之后就可以测试磁盘IO的bw了。


                        —————END—————

                        喜欢本文的朋友,欢迎关注公众号 洪文聊架构,收看更多的精彩内容!

                        文章转载自洪文聊架构,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                        评论