WPA入门 (三) —— 千变万化的图表

综合编程 2013-12-15

原创文章,转载请标明出处: Soul Orbit

本文链接地址:
WPA入门 (三) —— 千变万化的图表

在前面的两篇文章里,我们已经使用WPA的多个图表找到了两个平时经常遇到的问题的真正原因,但是实际上WPA的图表功能远比我们看上去的强大。这一篇,我们来说一些只和图表有关的内容吧,也许这些内容看上去比较乱,而且没有那么有直接的用处,但是也许通过查看经过你自己调整后的图表,你能更好的了解系统里面发生的事情。

数据表(Data table)

数据表是WPA中非常重要的部分,经过解析后的数据会被存放在各个表中,再通过一定的规则生成各种图来更加直观的展示表格中的数据。在WPA里面,所有的数据表都可以通过Graph Explorer来访问。

和普通的表格一样,数据表中的原始数据只是一行一行的记录,但是这样的数据对我们来说非常的难理解,所以为了方便大家更加容易理解这些数据,在数据表中,WPA通过一根黄线和一根蓝线,将表格分为三种不同的区域,并将数据按照我们的需要组织起来,这三个区域分别是:

  • 关键字(Key Area):这部分在黄线之前,放在这个区域里面的列,如果具有相同的值,会被聚合起来变成一条记录,方便我们查看到底有多少类记录,其数据总量是多少,当然,我们也可以展开被聚合的记录来看里面都有哪些具体的记录。另外这部分还会被当作绘制图形时的分组。
  • 数据区(Data Area):这部分在黄线和蓝线的中间,放在这个区域里面的列不会被聚合,展开时所有的记录会和普通的表一样被平铺开来。
  • 绘图区(Graphing Element Area):这部分在蓝线之后,放在这个区域里面的列会被用来绘制当前表格对应的图形。

现在让我们再打开第一篇中我们使用过的Trace,查看Disk IO,重新看看我们已经看过的数据表吧。

重新组织数据 —— View Editor

在WPA里面,每个原始的数据表都有很多种不同的列表示不同的数据,我们可以按找我们的意愿任意调整他们的位置来查看我们想要的数据。每一个打开的数据表叫做一个视图(View),而每一种列的排列叫一个预设(preset)。为了方便大家查看这些数据,WPA为很多常用的表格都建立了多个预设。在视图的标题的旁边,我们就能看到有一个下拉条,点击展开,可以看到里面有多个预设,如下图。

当然有时候,这些预设对我们来说还是不够,怎么办?使用右键点击表格头部,便可以打开当前视图中所有可用的列的列表,找到你想启用的列,点击即可。启用之后,在列表头上拖拽该列就可以更改其位置了。

如果还是不够用呢?没关系,我们还有最后一招——视图编辑器(View Editor)。点击标题旁边的小齿轮,我们就可以打开它了。其实我们已经使用过这个功能了,现在算是故地重游吧。

可以看到,View Editor分成三个大部分,左侧是所有可以使用的列的类型,中间是当前正在使用的所有的列(不一定是显示的),右侧是当前选中的列的详细信息。在中间的区域,我们还可以看到一条黄线和一条蓝线,这两条线和上面我们提到的分隔表格的线是一样的。他的操作也很简单,如果我们想启用某一个列,那么我们就只要把左侧的列拖拽到中间,并且勾上前面的勾即可,删除则是将中间的某个列拖到左侧就可以了。

保存预设 —— Profile

很多时候,我们在分析Trace时,总会需要一些非常常用的固定的预设,如果能将他们存起来就太好了。当然,需求这么明显的功能,WPA肯定已经提供了,他就是Profile。

保存预设的步骤主要有两步:

  1. 保存预设到当前的Profile:点击View Editor下方的Manage,将当前的视图的配置保存起来。

  2. 导出Profile:点击菜单上的Profile -> Export将当前的Profile导出,预设便保存完了。

需要这个预设的时候,我们可以使用菜单上的Profile -> Apply导入Profile,即可。当然,我们也可以使用Save as Startup Profile,覆盖当前启动的Profile,这样就不用每次都手动导入了。

另外,这里还需要注意的一点是,Profile里面除了会保存当前的预设信息,还会将当前打开的所有视图都保存起来,所以加载Profile的时候,会把保存时打开的所有图一并打开来,如果你只想保存预设,记得关闭所有打开的图表之后再保存哦。

搜索数据表 —— WPA Query

我们在上一篇文章中已经接触过搜索这个功能了,但是实际上WPA的搜索其实远比我们在上一篇中看到的强大,他的搜索功能其实叫做WPA Query,听这名字就霸气侧漏,绝非等闲的Find。没错,WPA Query不仅支持普通的Find,还支持如大于,小于这样的条件判断和逻辑表达式,甚至还支持正则表达式,多种数据单位(如:表示内存的KB, MB和表示时间的s, ms)和多列查询。

让我们在Disk IO的表上来试一试吧,比如:搜索一下记事本发起的,并且IO时间大于100ms的IO。

其实WPA还支持很多其他的表达式,这里就不一一列举了,有兴趣的朋友请移步MSDN: http://msdn.microsoft.com/en-us/library/windows/hardware/hh849535.aspx

筛选数据

由于Trace文件里面记录了系统里面的所有行为,但是在使用WPA的时候,我们一般只关心里面很少的出问题的部分,这个时候,筛选数据就变得非常有用了。一般来说,我们只用选中我们关心的记录后,点选右键菜单中的“Filter To Selection”就可以了。

当然我们也可以使用WPA来筛选,在View Editor的标题旁点击Advanced,打开高级选项,在Filter中填写好用于过滤的Query即可。

图(Graph)

在WPA里面,我们所有看到的图,最后都可以归结为三种类型的图:

  • Line / Stacked-line / Stacked-bar

    这类图是用来统计某个时间点上某一类数据的数量的,比如总时间或者总个数,所以绘制这个图需要一个时间点和一个总数量/时间。这一类图很常见,比如:我们已经接触过的CPU Usage (Sampled)和Disk IO的图就都属于这一类图。

  • Lifetime / Activity type

    这类图是用来统计某个物体的生命周期的,所以绘制这个图需要一个开始时间和一个结束时间,比如:在System下用来记录进程生命周期的Process。

  • Generic events

    这类图是用来显示事件发生的时间点的,所以绘制这种图只需要一个时间点的信息就可以了,比如:在System下用来记录事件的Generic events。

而这三类图之间可以互相转化,因为在WPA中有一个非常强大的绘图引擎,我们只需要设置好用于绘图的数据,他就会按照我们的需要将数据绘制成对应的图形。

设置绘图数据

我们在上面提到,WPA的表格都有一个绘图区,而我们也已经知道绘制每个图的时候需要哪些关键数据,那么按道理来说我们只要设置好这些关键数据对应的列,那么就应该能把图绘制出来了。实际上WPA也确实是这么做的,而这些关键数据就叫做元数据(Metadata)。常用的元数据主要有这么几种:

  • Start Time: 开始时间。
  • End Time: 结束时间。
  • Duration: 完成事件使用的时间,其实有时候Start Time和它的效果是一样的,一般在绘制线段图的时候用,比如CPU Usage。

我们打开View Editor -> Advanced -> Graph Configuration,查看绘图设置,里面就可以看到这些信息了。

来!先爽一把!

现在让我们通过WPA的Graph来看看记事本是怎么将文件读入内存的吧。

我们先看看记事本上的IO都是在什么时候发起和结束的,将End Time设置为Init Time/Complete Time,然后将Count移动到绘图区,这样WPA就会绘制一个线段图了。再做一个筛选,只保留所有记事本的IO,这样我们就得到了两个图,如下。可以看到记事本上的IO发起和结束的趋势基本上都是一样的。

这也就是说,很有可能记事本使用的是同步IO,因为如果是异步的,那么这两个图的关系应该不会这么明显。为了进一步确认,我们再来看看到底是不是这些IO是一个结束之后再发起的第二个。继续调整这个图,将Start Time和End Time设置为Init Time和Complete Time,并将他们放入绘图区,这样WPA就会绘制一个活动图了,我截取了中间一截,如下。

这样,记事本读取数据的方法就非常明显了。

总结

好了,现在我们知道了WPA里面是怎么组织数据表和图的了,因为这两个功能在WPA随处可见,所以虽然这次的文章感觉就和产品说明书一样,但是还是希望能把这两个功能给介绍清楚了。

您可能感兴趣的

一些看了让人很爽的动态图 最近沉迷 IDE 开发,给我的语言 Lice 和老李的语言 CovScript 各自开发了 IntelliJ IDEA 插件,做了一些自己觉得很爽的功能,给引擎加了一些测试。 然后我发现了一个 Linux 下的非常叼的录 gif 的软件,于是就拿来晒一下。 Lice 选中一段代码并执行,然后...
Application blacklisting using management profiles When deploying Macs for use in classrooms or for training, there is occasionally a requirement that certain applications must be blocked from running....
记一次buf溢出的问题 作者: tiankonguse | 更新日期: 2017-08-13 22:24:00 周五帮同事定位了一下,原来是buf溢出导致的。 大家好,这里是tiankonguse的公众号(tiankonguse-code)。 tiankonguse曾是一名ACMer,现在是鹅厂视...
A Detailed Introduction to the Red Black Tree This post is a detailed introduction to the red black tree data structure. For those that are interested in data structures, the red black tree is a s...
ROS下的四旋翼和双旋翼飞行器模拟器 去年上映的动画片《机甲大师》里出现了一个双旋翼的飞行器KAKA(题图)。双旋翼飞行器最早是美国人先发明的,也就是被称为“鱼鹰”的V-22倾转旋翼直升机 这个概念后来在《阿凡达》里也出现过 《机甲大师》动画片上映前后我就计划做一个双旋翼飞...