如何计算通过 WMI 检索的平均磁盘队列长度

如何计算通过 WMI 检索的平均磁盘队列长度

我正在使用 WMI 查询远程计算机的当前和平均磁盘队列长度,以便能够监视硬盘上的负载。查询如下:

    select CurrentDiskQueueLength, AvgDiskQueueLength, Name 
           from win32_perfformatteddata_perfdisk_physicaldisk

我得到的结果令人困惑;我发现我得到的平均磁盘队列长度总结果(即 Name = _Total)始终比当前磁盘队列长度高得多。图表如下:

替代文本

其中紫线对应总平均磁盘队列长度,绿线对应当前磁盘队列长度。

所以我的问题是:平均磁盘队列长度是如何计算的?我假设平均磁盘队列长度是通过获取过去的几个“当前”值并取其平均值来计算的,那么它怎么会比当前磁盘队列长度高这么多呢?平均值是否取决于我运行此查询的频率?

答案1

这确实看起来很奇怪。如果您使用 Perfmon 记录相同的数据,perfmon 返回的值是否与您的 WMI 脚本返回的值相同?如果不是,那么 WMI 存在问题(或者当然是您的脚本 ;-)。

JR

答案2

当您询问当前值时,您将获得当前队列长度:没有其他内容。当您询问平均值时,您将获得 Windows 使用的任何时间段内的队列长度平均值。

如果您所采取的两个“当前”读数之间突然出现活动爆发(短暂而强烈的爆发,或较低但较长的爆发),这可能会反映在平均值中,但除非活动爆发正在发生,否则根本不会反映在当前值中。

即使三、四次读数的平均值很高,但“当前”仍会得到一致的值,这可能有点奇怪,但由于当前有时高于平均值,我认为读数实际上是正确的。

我不确定用于平均值的周期是多少,但如果你在 MSDN 站点中搜索确切的计数器名称,你可能会找到它。

答案3

这些价值观并不是直接而有意义的,需要加以解读。 来自 O'Reilly 关于 Windows 2000 磁盘性能的 6 个常见问题

平均磁盘队列长度计数器由平均磁盘秒/传输乘以磁盘传输/秒得出,后者是设备的平均响应乘以 I/O 速率。同样,这对应于排队理论中一个著名的定理,称为利特尔定律,该定理指出:

N = A * 高级

其中 N 是系统中未完成请求的数量,A 是请求的到达率,Sr 是响应时间。因此,平均磁盘队列长度计数器是对(逻辑或物理)磁盘的未完成请求数量的估计。

相关内容