监控 iops 大小

监控 iops 大小

如何监控现代 Linux 上存储 iops 的大小?

我可以使用 iostat 等命令监控存储 iops 的数量。但是我想知道工作负载生成的 iops 的大小。

比如,在最后 X 秒内有:5 iops 4K、10 iops 8K、20 iops 16K ...

我对块设备级别的监视感兴趣(例如:/dev/sda),但是在任何其他级别也很有趣。

答案1

低级

在低级别,您可以从 获取此信息/sys/block/X/stat,该信息已记录在案这里

示例内容如下所示:

   10465     3250   759844    27528     4400     2983   546848    66306        0     9754    93792

我们想要的字段是用于读取的列 1 和 3,以及用于写入的列 5 和 7。两者的计算方法是相同的,所以我只讨论读取。

第 1 列是读取次数(您表示您已经能够监控),第 3 列是读取的扇区数。一个扇区为 512 字节。因此,用这些来计算读取的大小,您只需这样做$col3 * 512 / $col1
该文件中的数字是自磁盘上线以来的总数。因此,要计算一段时间内的平均读取大小,您只需读取文件两次,然后使用以下方法进行计算:($col3_t2 - $col3_t1) * 512 / ($col1_t2 - $col1_t1)

请注意,上述方法为您提供了在应用程序级别执行的 OP 的大小(描述并不准确,但足够接近)。内核可以将多个操作合并在一起,因此在磁盘上执行的操作数量更少。对此的计算是:$col3 * 512 / ($col1 - $col2)。并获取一段时间内的值:($col3_t2 - $col3_t1) * 512 / (($col1_t2 - $col1_t1) - ($col2_t2 - $col2_t1))

高水平

iostat也可以给你价值,但不太准确。它不区分写入或读取,并且仅提供扇区值,而不是字节值(因此再次乘以 512)。但命令是iostat -x -d,要查看的列是avgrq-sz

相关内容