Windows磁盘性能分析原理和方法

news/2025/2/26 5:07:01

这次我主要给大家介绍一下Windows磁盘性能分析的原理和主要参考指标的一些计算方法。 希望对大家有一些借鉴意义。

Windows磁盘性能主要依赖于其内核驱动partmgr.sys(partition manager)。该驱动在整个存储设备堆栈中处于中间位置,在Disk Class Driver (disk.sys)和文件系统驱动中间。如下图:

image

这意味着每个发向磁盘的IO (在Windows系统中又IRP代表),都会经过partmgr.sys。那么该驱动也就有机会记录很多关于磁盘的统计信息。

举个例子,当某个IO发向磁盘之后,经过partmgr.sys的时候驱动就会记录该IO的一些信息,比如经过的时间。而当IO完成的时候,最后会调用partmgr.sys的completion routine,该驱动也就有机会记录IO完成的时间,两者相减就可以得到单个IO的处理时间,对大量IO来说就可以得出统计意义上的平均数据 - Disk sec/Transfer。

再举个例子,对于单个IO,当经过partmgr.sys的时候,驱动就会对其内部计数器加1,当IO完成的时间内部计数器就会减1。那么在平时我们就可以从该计数器得知一共有多少IO尚未完成,平均以后就得到了性能监视器中的平均队列长度 - Avg. Disk Queue Length。

那么我们再来谈一谈所有性能监视器(perfmon)中那些关于磁盘的计数器对象,究竟那些指标代表了磁盘性能:

Disk Bytes/sec

该计数器代表了磁盘的吞吐量,也就是每秒钟有多少字节读写磁盘。他其实取决于两个方面:

从应用或者系统层面产生了多少IO压力。
磁盘性能。
也就是说如果应用或者系统层面没有对磁盘产生压力,它的数值也不会上升。即使它的数值很高,也很有可能是因为应用产生了大量的IO,而不能因此判断磁盘的性能存在问题。

% Idle Time

该技术器代表了磁盘的空闲程度,我们之前提到内部计数器来跟踪磁盘有多少未完成的IO,当该数值为非0时,性能监视器就认为磁盘的繁忙的。为0时,自然就认为磁盘是空闲的。但是即使磁盘一直有未能完成的IO,磁盘依然有可能及时地完成每一个IO,这样也就谈不上磁盘的性能问题。

Avg. Disk Queue Length

这个数值也就是从我们之前提到的内部计数器得来的,试想这样一种情况,磁盘的IO压力很大,如果我们的内部计数器数值很高,也就代表没有完成的IO很多,但是磁盘能够快速地完成每一个IO,这种情况我们能否认为磁盘性能是有问题的?答案是不能,如果磁盘能够快速地完成每一个IO,自然磁盘性能是正常的。

Disk sec/Transfer

根据我们之前的所有分析,这个数值是真正代表磁盘性能的。说如果该数值很高(一般超过50ms),那么应用会很明显地感受每一个交给磁盘的IO回复得很慢,也就会导致应用产生性能问题。


http://www.niftyadmin.cn/n/4133263.html

相关文章

python学习笔记第五节(函数,名称空间,作用域)

python2中 默认存为unicode需要再字符串前加u 循环打印每一行 循环打印整个文件内容方式二下面这种同一时间取一行 先定义后执行 函数定义的时候,只检测语法错误,不执行 函数返回值,默认是元组模式return 只能返回一次 形参与实参 形参就是变…

Js竟然能夠用到這種程度,佩服

请使用IE9 beta,Chrome7, Safari5, FF3.6 如果觉得卡,请设置缩放为1x,如果还觉得卡,请选中autoSkipFrame。 http://ie9.onlinevoc.cn/contest/Admin/uploads/codeproduct/64c32335-c04b-4391-8d63-83bc515a021b/index.html

SAPI 包含sphelper.h编译错误解决方案

原文连接地址:http://blog.csdn.net/believenow_notfuture/article/details/52191229 【转】SAPI 包含sphelper.h编译错误解决方案 在使用Microsoft Speech SDK 5.1开发语音识别程序时,包含了头文件“sphelper.h”和库文件“sapi.lib”。编译时出错&…

JQuery实现页面随滚动条滚动而动态加载内容的效果

新浪微博有这个功能,刚才思考一下 ,简单的写了一下实现方法,代码是Js的. 无可否认,这种方式应该算是web2.0的产物,在用户体验上具备很好的感受,除了微博在使用该方式外,另外我还发现有几个其他性质的网站也在用这种方式,原因是他们的网站页面比较长,所以用户在浏览的时候随…

fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include stdafx.h...

atal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "stdafx.h 错误描述:fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "stdafx.h"”? 错误分析:此错…

JavaScript实现类与继承的方法(全面整理)

JavaScript定义类的4种方法 工厂方法 function creatPerson(name, age) {var obj new Object();obj.name name;obj.age age;obj.sayName function() {window.alert(this.name);};return obj; } 构造函数方法 function Person(name, age) {this.name name;this.age age;th…

caffe源码学习之Proto数据格式【1】

前言: 由于业务需要,接触caffe已经有接近半年,一直忙着阅读各种论文,重现大大小小的模型. 期间也总结过一些caffe源码学习笔记,断断续续,这次打算系统的记录一下caffe源码学习笔记,巩固一下C&a…

浏览器内打开QQ

浏览器内可以用a标签打开QQ应用: 普通浏览器: <a href"mqqwpa://im/chat?chat_typewpa&uin{{qq}}&version1&src_typeweb"></a> 微信浏览器: <a href"http://wpa.qq.com/msgrd?v3&uin{{qq}}&siteqq&menuyes">&…