iostat output 之%util 值理解

概要

iostat命令是Linux下监控硬盘性能数据一个很好的工具,%util为iostat命令的一个输出值,从字面意思看该值代表了硬盘的使用率。
因此在一些情况下%util值=100,会被理解为硬盘性能已经达到瓶颈,这是错误的,这篇文章对此进行下介绍。

%util值输出的样例

# iostat -x 1 2
Linux 3.10.0-1127.el7.x86_64 (sr650-1123-9123)  07/10/2000      _x86_64_        (64 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.01    0.00    0.00   99.99

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdc               0.00     0.04    0.02    0.34     0.31     5.72    33.74     0.01   27.52    5.79   28.50   3.19   0.11
sda               0.00     0.00    0.00    0.00     0.00     0.00    51.57     0.00    0.54    0.54    0.00   0.51   0.00
sdb               0.00     0.00    0.00    0.00     0.00     0.00    51.57     0.00    0.82    0.82    0.00   0.80   0.00
dm-0              0.00     0.00    0.01    0.39     0.30     5.71    30.01     0.01   28.84    5.73   29.73   2.85   0.11
dm-1              0.00     0.00    0.00    0.00     0.00     0.00    50.09     0.00    4.39    4.39    0.00   4.16   0.00
dm-2              0.00     0.00    0.00    0.00     0.00     0.00    17.22     0.00    3.49    3.30   27.25   3.31   0.00

%util值代表的具体意思是什么?

这点我们看下Linux系统的man手册,如下:

    # cat /etc/redhat-release 
    CentOS Linux release 8.1.1911 (Core)
    %util
           Percentage  of  elapsed time during which I/O requests were issued to the device (bandwidth utilization for the device). Device saturation
           occurs when this value is close to 100% for devices serving requests serially.  But for devices serving requests in parallel, such as RAID
           arrays and modern SSDs, this number does not reflect their performance limits.
           
    # cat /etc/redhat-release 
    CentOS Linux release 7.9.2009 (Core)
    %util
           Percentage  of  elapsed time during which I/O requests were issued to the device (bandwidth utilization for the device). Device saturation
           occurs when this value is close to 100%.

简单来说,就是硬盘设备上存在io的时间百分比。但有一点需要注意的时,在linux系统手册上特意强调了下:
该值不能作为性能瓶颈的依据。

%util值是怎么统计的

这部分请大家参考下redhat的kb:https://access.redhat.com/articles/4780161,KB中有比较详细的解释。

%util值是否意味这设备达到瓶颈了?

通常100%并不反映磁盘容量的使用情况——它只反映“已使用”的样本时间百分比,即存在一个io的样本时间百分比。例如,下面是本地连接的SATA磁盘的两个不同的iostat示例。两个示例都显示了100%的利用率:

Device:rrqm/s wrqm/s  r/s    w/s      rkB/s  wkB/s avgrq-sz avgqu-sz await svctm %util
sda    0.00   7.00  12654.00 16.00  6327.00  84.00   1.01     1.99   0.16  0.08 100.00
:
sda    0.00   7.00    183.00 22.00 93696.00 116.00 915.24    17.86  85.22  4.88 100.0

再举一个例子,对于不同硬盘在同样的数据类型下,%util值会表现相同,如下所示:

12:00:01 AM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
Average:     dev259-0   1284.63  15831.81  46799.21     48.75      0.12      0.09      0.03      3.57
Average:     dev259-1   1261.96  15874.92  46356.98     49.31      0.12      0.09      0.03      3.52
Average:     dev259-3   1002.16 121002.87 129352.08    249.82      0.51      0.52      0.03      3.17

再举一个例子,对于不同硬盘,不同的数据类型下,可能带宽负载低的硬盘但iops高的硬盘,%util值反而会高,如下所示:

00:00:18          DEV       tps     rkB/s     wkB/s   areq-sz    aqu-sz     await     svctm     %util
Average:     dev259-0     34.85   2308.42   2084.73    126.07      0.02      0.44      0.08      0.26
Average:     dev259-1     34.52   2286.15   2074.46    126.34      0.02      0.45      0.07      0.25
Average:     dev259-2    367.02   3033.19    937.96     10.82      0.06      0.16      0.72     26.35
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容