我读过很多关于在 Linux 上捕获磁盘 IO 的方法的帖子,但是没有一个能解答我困惑的根源。
就我而言,我使用 SNMP (diskIOTable) 监视 Linux 上的磁盘 IO,它从系统返回多个设备的数据。例如,在我的参考系统上,我有磁盘sda
、引导分区sda1
、根分区sda2
、LVM 逻辑卷dm-0
和交换区的 LVM 逻辑卷的记录dm-1
。
在计算系统的磁盘 IO 时,这些不同的元素如何相互作用?我最初假设磁盘的统计信息sda
将包括分区报告的统计信息sda1
,但是我发现报告的统计信息之间存在很大差异sda
,甚至sda1
是sda1
磁盘上唯一的分区。当我开始研究具有多个分区的系统时,这一点更加明显,例如,人们会假设sda1 + sda2 == sda
,但情况似乎并不总是如此(尽管在某些系统上情况很接近)。磁盘报告的统计信息几乎总是超过分区报告的统计信息,或者磁盘所有分区报告的统计信息的总和。
设备如何dm-*
影响?
假设忽略分区和逻辑设备(如dm-*
、md*
、loop*
、ram*
)并仅对真实磁盘的 IO 统计数据进行求和,我可以准确地描述给定系统的聚合 IO(针对每个字节和操作),这样的假设是否合理?
reads(sda) + reads(sdb) + reads(sdc) == reads(host)
或者我错过了什么?