一、pyserial_1.0(16years ago )

图片 15
  • 1、windows自带系统资源监控工具
  • 2、Windows监控的数据来源:Performance
    Counters

    • 2.1 Performance
      Counter架构
    • 2.2 Performance
      Counter数据结构
    • 2.3 消费Performance
      Counter数据
  • 3、使用基于PDH的python客户端

一、概述

我看最新的pyserial代码发现看不懂~Σ( ° △
°|||)︴,尝试用跑跑看一看效果,debug跟一跟流程的方式来熟悉理解,发现·····特么~转太多弯啦~根本就hold不过来啊!脑容量跟基本功都不够啊!于是想着怎么从侧面来攻破这个堡垒…………

 

性能监视,是Windows NT提供的一种系统功能。Windows
NT一直以来总是集成了性能监视工具,它提供有关操作系统当前运行状况的信息,针对各种对象提供了数百个性能计数器。性能对象,就是被监视的对象,典型例子有Processor、Process、Memory、TCP/UDP/IP/ICMP、PhysicalDisk等。计数器通常提供操作系统、应用程序、服务、驱动程序等的性能相关信息,以此来分析系统瓶颈和对系统及应用程序性能进行诊断和调优。性能计数器机制让应用程序和操作系统组件可以向性能监视应用程序,比如性能监视器(Performance
Monitor),报告一些与性能有关的统计信息。PerfMon.exe中可以查看性能对象、性能计数器和对象实例,可通过添加计数器来查看相关描述信息。

然后在网上找学习经验,突然想到这个包当初肯定是有个起点的,起点是容易理解且不复杂的,解决一个单一问题的,就像我自己写框架一样(即先快速做出功能、原型,然后再反复迭代改进)。

 

实际上,可以通过编写程序来访问所有的Windows性能计数器。Windows中,注册表是访问性能计数器的一种机制。性能信息并不实际存在于注册表中,在注册表编辑器RegEdit.exe中是无法查看的,但可以通过注册表函数来访问,利用注册表键来获得从性能数据提供者那里提供的数据。打开名为HKEY_PERFORMANCE_DATA的特殊键,利用RegQueryValueEx函数查询键下面的值,就可以直接访问注册表性能计数器信息。当然,也可以利用性能数据帮助器(PDH,
Performance Data Helper) API (Pdh.dll)来访问性能计数器信息。

然后就在github官网找到了它的各个版本:

1、Windows自带系统资源监控工具

我们都知道,Windows自带有系统资源监视器。主要有3个地方:

1)
Windows的任务管理器的性能页签,包括了CPU,内存,磁盘,网络等系统资源的监控。它主要监控系统资源的总体使用情况,使用它,我们可以发现是否有资源达到瓶颈了等等。

 图片 1

 

2) Windows资源监视器

这个工具可以看出系统资源到底是由哪些进程消耗的。通过它,可以快速查看到到底哪些进程占用了你的系统资源。

 图片 2

3) 性能监视器

前两种工具已经提供你要监控的大部分功能,在某些情况下,可能仍然不能定位问题,这时候就需要你更进一步的了解系统的运行状况。那么这个工具就是一个不错的选择。

 图片 3

 

性能日志和警报是作为 Windows
操作系统的一部分发行的一种管理性能监控工具。它依靠由各种 Windows
组件、子系统和应用程序发布的性能计数器,使您可以跟踪资源使用情况以及针对时间以图形方式绘制它们。您可以使用
Performance Logs and Alerts
来监控标准的性能计数器(例如,内存使用情况或处理器使用情况),或者您可以定义您自己的自定义计数器来监控应用程序特定的活动。

图片 4

2、Windows 监控的数据来源:Performance Counters

      
Windows的这些监控工具之所以能够展示这些资源的情况,它们的数据来源都是一个叫Performance
Counter的东东。

 

二、HKEY_PERFORMANCE_DATA数据组织

各个发行版本

2.1 PerformanceCounter 架构

PerformanceCounter架构如下:

 图片 5

 

 

采用了Producer / Consumer 架构,支持多种客户端从Registry消费数据。

上图中,A 使用Registry接口来消费数据,而B 和 Performance
Monitor两个客户端则使用了pdh.dll来消费数据。

 

 

 

性能数据的头部是一个PERF_DATA_BLOCK结构(如图1所示),它描述系统和性能数据总体信息,可从Global键值处查询得到该结构数据。PERF_DATA_BLOCK之后,定义了系统中的全部性能对象类型(PERF_OBJECT_TYPE),其中每个对象类型头部中描述了下一个性能对象类型的偏移量Offset。

其中最底下三个貌似是有点问题的,比如release0_1和2是并口的文件,last-svn-state是无法运行的,因此从release1_0下手,

2.2 Performance Counter 数据结构

如果你想用程序来消费Counter的数据,不论使用哪种API来消费数据,不论使用哪种工具来消费数据,都需要了解Performance
Counter的领域语言,也就是说要了解它内部的数据是如何组织的。

 

它的基本概念如下:

Machine:机器,这个没什么好说的,支持消费本机的监控数据,也可以消费其他其他的监控数据。

perfObject:可以理解为监控哪种资源,譬如说处理器,磁盘

instance:监控的资源可能有多个实例,多个网卡,多个CPU,多块磁盘等

counter:计数器,每一个instance都会有多个计数器,例如cpu的idle,user,interrupt都是一个counter

 

更直观的理解这些概念: 

 图片 6

 

 

图片 7
图1图片 8
图2

图片 9

2.3 消费Performance Counter数据

       从上面的架构图来看可以使用registry API或者 PDH.dll
,或者wmi等3种方式来消费数据。这两种API是C或者C++开发的。

 

1)Registry API :

 

2)WMI:

 

3)PDH API:

目前已知了两个版本:

C++:

 

Python :

Pywin32中有一个win32pdh的模块,就是python版本的pdh。

 

 

其他工具:

4)windows自带的typeperf命令

5)nsclient++

 

性能对象有两种:一种是单实例对象,另一种是多实例对象。图2和图3分别描述了这两种性能对象的数据组织方式。每个对象数据块包含了一个PERF_OBJECT_TYPE结构,描述对象的性能数据。紧随其后是PERF_COUNTER_DEFINITION结构列表,描述了性能对象的全部计数器定义。对于单实例对象,计数器定义列表后是一个PERF_COUNTER_BLOCK结构,计数器数据紧随其后。每个PERF_COUNTER_DEFINITION结构中定义了计数器数据相对于PERF_COUNTER_BLOCK的偏移量,因此可以非常方便地获得全部计数器的值。对支持多实例性能对象来说,PERF_COUNTER_DEFINITION结构列表之后是一组实例信息数据块,每个表示代表一个对象实例。每个实例信息数据块由一个PERF_INSTANCE_DEFINITION结构体、实例名和一个PERF_COUNTER_BLOCK结构体组成。后面是计数器值数据,与单实例对象相同。

文件结构

3、使用基于PDH的python客户端

 

Win32pdh API说明:

使用win32pdh API的一个简易教程:

 

基于win32pdh 封装的一套API:

 图片 10

 

 

 

最右侧是win32pdh模块,从python的仓库里下载即可。

Windows_collector是我封装的核心代码,用于通过简单的代码,即可监控到系统资源。

最左边的则是来使用这套API的。使用这套API的好处是,不必去再花时间学习win32pdh这套API就可以轻松的获取你要的监控数据。

 

这套API的源码:

 图片 11

图片 12

图片 13

图片 14

 代码的命名规范不是 python的,想必看起来,也不会有太多的困难。

使用这套API,只需要简单的代码即可对系统资源进行监控,例如:

ObjectCollector("Memory").collect()

 

图片 15

_init_.py负责实现平台兼容,其实就是在导入这个包的时候根据平台来选择不同的处理类,我的是windows系统因此跑到serialwin32.py文件下去跟踪源码,第一行代码就是

图3

import    win32file   #The base COM port and file IO functions.

三、性能计数器的架构

win32file是个啥?包文件夹里面并没有这个文件,那么是在在哪导入的呢?

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图