PDH数据扩展-帮助文档

  1. 简介
    1. 什么是PDH数据扩展
    2. 什么是PDH
    3. 什么是性能计数器
  2. 前置需求
    1. 系统需求
    2. SAO Utils需求
  3. 使用方法
    1. 启用扩展
    2. 选择计数器
    3. 设置取值范围
  4. 常用性能计数器参考
  5. Q&A
  6. 反馈

 

1 简介

1.1 什么是PDH数据扩展

PDH数据扩展是为SAO Utils开发的第三方扩展插件,其开发目标是在尽可能多的为SAO Utils获取来自计算机的性能数据(硬件、系统、驱动、网络、服务等)。通过NERvGear SDK封装,可为SAO Utils以标准数据源的形式提供选定数据的整数值、小数值。而本扩展获取性能数据的原理,是采用Windows原生提供的PDH性能计数器。

1.2 什么是PDH

PDH,全称Performance Data Helper(性能数据助手),是微软开发在Windows平台上用于收集性能数据的一套API。这套工具从Windows 2000开始就已经集成在Windows系统中,可以通过通常所说的“性能监视器”(perfmon.exe)进行查看。

1.3 什么是性能计数器

提供性能数据的工具。每当您通过PDH数据扩展添加了一个数据,即是指定了一条PDH表达式、启用了一个新的性能计数器。您只需要关注于PDH表达式,剩下的事由扩展来帮您完成。

PDH表达式=[计算机名]\[性能对象]([实例])\[计数器]

  • 注:计算机名若省略则表示本机,有的PDH表达式不需指明实例。

2 前置需求

2.1 系统需求

 x86x64
Windows 2000-
Windows XP
Windows Vista
Windows 7
Windows 8
Windows 8.1
Windows ⑨--
Windows 10

2.2 SAO Utils需求

SAO Utils版本不低于Alpha 3/Beta 1,NERvGear版本不低于0.3.0。

 

3 使用方法

3.1 启用扩展

3.2 选择计数器

这里用SAO Utils自带的GGO Widget挂件做演示,目标是在下图红框处显示当前计算机的Wifi下载速率。

右击上图红框标识的项目,单击“编辑项目”进入“项目设定”对话框。

在对话框的“类型选项”中选择“数字或文本”,指明该项目使用来自扩展的数据,单击下方“点击选择数据”按钮进入“选择数值…”对话框。

在左侧的所有数据中找到“PDH数据集”->“性能计数器数据”,若希望显示小数值则选取“小数值”项,若仅希望显示整数部分则选取“整数值”项。此处作为示范选择小数值。

单击更新参数右侧的“…”按钮选择所需的性能计数器。由于此时我们需要的是Wifi下载速率,所以我们找到“Network Interface”(网络接口)项下的“Bytes Received/sec”(每秒接收字节数)。在下方的实例中选择本机的无线网络适配器,本例中的无线适配器是图中“Broadcom 802.11n 网络适配器”。选择完毕后单击确定,此时更新参数已经自动填充为“\Network Interface(Broadcom 802.11n 网络适配器)\Bytes Received/sec”,此字符串即是所谓PDH表达式,若您已知所需的PDH表达式,可直接粘贴于更新参数中。【友情提示:勾上“显示描述”可以查看对应PDH项的含义】

由于PDH提供的原始数据是以Byte/s(字节/秒)为单位,可能导致数值过大不够直观,所以此处我们可以对数值选择合适的单位进行转化如KB/s或MB/s等,本例以KB/s为单位。单击“数值单位”右侧下拉框,选择单位“K”,即可将数值缩小1K倍由B/s转化为KB/s。右侧的“显示为”可以指定单位的显示方式,这里更改为“KB/s”。在上方的“预览”我们可以看到数值成为了我们期望的格式。

单击确认,数据选择完毕。再次单击确认,项目设置完毕。我们可以看到Wifi下载速率已经可以正确的显示在GGO Widget中。至此,本例PDH数据设置完成。

 

3.3 设置取值范围

3.2所示方法已经可以获取某个性能计数器的数据,但有时仅仅只获取数据用于显示还不够,像下图所示的GGO Widget条形图与直方图、HP-Bar这类图形化数据,还需要指定数值的最大值、最小值。由于PDH数据来源多样,不同性能计数器取值范围均不同,无法确定一个通用的取值范围,好在PDH数据扩展为您预留了指定取值范围的方式。下面以HP-Bar做演示,目标是在下图红框处显示当前空余内存量。

首先按照3.2步骤选择PDH表达式为“\Memory\Available MBytes”,此性能计数器提供的数据是当前空余内存量,默认单位是MB。本例中的计算机内存总量设为8GB,即为8192MB,因此空余内存量的取值范围设为0MB~8192MB。

在PDH表达式前端按照“[最小值,最大值]”的格式插入相应的取值范围,在本例中应当插入的取值范围为“[0,8192]”。若您不确定当前设置取值范围是否生效,可以在图示的下拉框中将“当前值”更改为“最小值”或“最大值”,若上方预览正确则表示取值范围设置生效。

确认所有操作后,HP-Bar已经可以按照正常比例显示当前空余内存量。至此,本例PDH数据取值范围设置完成。

 

4 常用性能计数器参考

【友情提示:勾上PDH对话框中的“显示描述”可以查看对应PDH项的含义】

4.1 CPU相关

性能对象计数器描述备注
Processor% Idle Time处理器空闲时间百分比
% Interrupt Time处理器中断时间百分比
% Processor Time处理器执行时间百分比
% User Time处理器用户模式时间百分比
% Privileged Time处理器特权模式时间百分比
Interrupts/sec处理器每秒中断次数
Processor InformationProcessor Frequency线程频率(MHz)

4.2 内存相关

性能对象计数器描述备注
MemoryAvailable Bytes空余物理内存
Cache Bytes已缓存内存
Cache Faults/sec每秒缓存中断次数
Committed Bytes虚拟内存使用量

4.3 存储相关

性能对象计数器描述备注
LogicDisk% Disk Read Time分区读取时间百分比
% Disk Write Time分区写入时间百分比
% Disk Time分区读写时间百分比
% Free Space分区可用空间百分比
% Idle Time分区空闲时间百分比
Disk Read Bytes/sec分区读取速率
Disk Write Bytes/sec分区写入速率
Free Megabytes分区可用空间(MB)
PhysicalDisk% Disk Read Time磁盘读取时间百分比
% Disk Write Time磁盘写入时间百分比
% Disk Time磁盘读写时间百分比
% Idle Time磁盘空闲时间百分比
Disk Read Bytes/sec磁盘读取速率
Disk Write Bytes/sec磁盘写入速率

4.4 网络相关

性能对象计数器描述备注
Network Adapter或Network InterfaceBytes Received/sec下载网速,单位B/s
Bytes Sent/sec上传网速,单位B/s

 

5 Q&A

Q:为何我选择性能计数器时会提示“不能添加这些计数器”?

A:这可能是由于性能监视器的注册表损坏或者无法正确读取导致,尝试以管理员权限运行“lodctr /R”修复(任务管理器->文件->运行新任务->填入“lodctr /R”,勾选“管理权限”->确定)。

 

Q:为何我能选的计算机与其他计算机的性能计数器不太一样?

A:性能计数器受系统版本、组件影响,可选性能计数器的数量、形式都会不同。

 

6 反馈

若此扩展在使用中出现任何异常、错误,欢迎在此页留言或发送邮件至feedback@debug.moe

《PDH数据扩展-帮助文档》有41个想法

      1. 果然没有此命令。。。。唉,不过还是希望可以贴出PDH的一些使用方法或者CMD可以运行的命令。。不知道为什么有些命令在运行里可以使用,但在SAO程序命令中就失效了。。。

      1. 我看了一下,第一个是百分比,第二个是实际温度,第三个是性能限制的方式。而且和aida对比了下,也看不出来是哪个的温度。。。

  1. 有Thermalzone information, 里面有三个项目%passive limit,temperature和throttlereasons。选择温度的话是什么的温度呢?我看见上面的图片有显示CPU和GPU温度详细怎么设置能告诉一下吗

          1. 但它显示的是机子的内部温度吧,单一的cpu和gpu温度还是看不到

  2. 大大我问一下……为什么我没办法用HP bar显示硬盘剩余空间总量啊,不是LogicalDisk(_Total)% Free Space这项代表硬盘剩余总量么?然后范围定义为[0,100]LogicalDisk(_Total)% Free Space,哪里出问题了

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>