剖析数据可视化的制作方法

文档序号:6533410阅读:222来源:国知局
剖析数据可视化的制作方法
【专利摘要】剖析数据以许多种方式被可视化以视觉传达程序性能问题并便利于对其分析。在一个实例中,可以呈现提供了不同类型的程序剖析数据的视图的多个相关的可视化。而且,可以呈现逻辑分组的剖析数据以允许对程序执行的有意义的分析。可视化还可以反映关于所指定的性能目标的剖析数据的状态,以及提供机制以允许剖析数据的记录和回放等等。
【专利说明】剖析数据可视化
[0001]背景
[0002]剖析使得对程序行为的检查能够聚焦性能调整。剖析器是根据在程序执行期间收集的信息来生成程序剖析的自动化工具。剖析捕捉程序的行为特性。可从剖析标识程序的一个或多个部分作为优化的候选项。例如,剖析可以指示在执行特定的函数上花费了过量的时间。换言之,剖析有助于理解程序行为,以允许集中优化努力。剖析通常基于它们的收集数据的方法等来分类。
[0003]存在两种不同类型的收集剖析数据的方法,即检测(instrumentat1n)和采样。在检测方法中,向程序添加在执行期间收集信息的代码。此处,被添加的代码是在程序执行时测量程序行为的工具。例如,可测量函数调用的频率和持续时间。在采样方法中,使用操作系统功能周期性地停止正在执行的程序并对该程序采样以确定执行的当前状态。因此,可以注意到,程序花费20%的时间执行特定的代码点。因此,采样方法提供统计近似,而非确切的数据。
[0004]剖析数据通常被呈现为分解程序执行的调用树(也称为调用图)。例如,调用树可示出在程序中被遍历的函数执行路径。调用树的根节点可指向程序的入口点,并且树中的每个其他节点可标识被调用的函数以及性能数据,诸如被调用函数的执行时间。节点之间的边可表示函数调用,并且圈可指示递归调用。调用树可由开发者来分析,以标识程序热点,诸如占用一大部分执行时间的函数等。
[0005]概述
[0006]下面呈现了简化的
【发明内容】
,以便提供对所公开主题的某些方面的基本概念。本
【发明内容】
不是广泛性的概观。它并不旨在标识关键/重要元素,也不旨在划定所要求保护主题的范围。其唯一的目的是要以简化形式给出一些概念以为稍后给出的更加具体的说明之序。
[0007]简言之,本发明涉及剖析数据的可视化。可以呈现一组一个或多个可视化以便利于使用要么实时要么历史剖析数据的程序性能分析。根据一个方面,可以呈现提供了不同类型的剖析数据的视图的多个相关的可视化。根据另一方面,一组可视化可以相对于逻辑分组的剖析数据操作以允许对程序执行的有意义的分析。在此,剖析数据可以被归结为例如基于组织方案来传达关于程序或子系统以及其他内容的高级语义函数的信息。还提供了机制以允许记录并回放剖析数据并控制其粒度或范围。而且,可视化可以提供基于指定的性能目标的反馈。
[0008]为实现上述及相关目的,在此结合以下描述和附图描述了所要求保护主题的某些说明性方面。这些方面指示可实践本主题的各种方式,它们均落在所要求保护主题的范围之内。当结合附图阅读以下详细描述时,本发明的其他优点和新颖特征将变得显而易见。
[0009]附图简述
[0010]图1是可视化系统的框图。
[0011]图2是代表性可视化引擎的框图。
[0012]图3是一组剖析数据的可视化的示例性屏幕截图。
[0013]图4是一组剖析数据的可视化的示例性屏幕截图。
[0014]图5是剖析数据的报告可视化的示例性屏幕截图。
[0015]图6是两个剖析数据的图表可视化的示例性屏幕截图。
[0016]图7是剖析数据的表格可视化的示例性屏幕截图。
[0017]图8是剖析数据的图表可视化的示例性屏幕截图。
[0018]图9是剖析数据的图表可视化的两个示例性屏幕截图。
[0019]图10是包括两个图表的剖析数据的可视化的示例性屏幕截图。
[0020]图11是示例性的程序用户界面的屏幕截图。
[0021]图12是程序剖析系统的框图。
[0022]图13是程序剖析系统的框图。
[0023]图14是代表性数据收集组件的框图。
[0024]图15示出用于开始/停止事件对的数据收集。
[0025]图16示出用于栈样本的数据收集。
[0026]图17是程序剖析的方法的流程图。
[0027]图18是分组剖析数据的方法的流程图。
[0028]图19是可视化剖析数据的方法的流程图。
[0029]图20是示出用于本公开各方面的合适的操作环境的示意性框图。
[0030]详细描述
[0031]剖析数据的可视化常规地受到几个问题的困扰。第一,数据是以太过粒度和抽象的方式来表示的。就是说,数据是以不能与用户的动作和/或有意义的程序执行语义(例如刷新窗口)相关联的时间标度来呈现的。导航以时间线呈现的完整的剖析会话因此变得困难或面对标识性能问题是无效的。第二,剖析器传统上针对历史信息操作。作为示例,可以开始一个程序,启动收集,训练程序,停止收集并后续分析所捕获的数据。虽然存在一些可以提供实时应用监视的性能工具,但是由于这些工具不能以灵活的方式来开始和停止、各种计数器不能彼此相关以及在所提供的分析和可视化方面存在受限的完善度,所以,它们受到很大限制。
[0032]下述的细节通常针对以各种方式的剖析数据的可视化以便利于程序性能分析。根据一个方面,可以呈现提供了不同类型的剖析数据的视图的多个相关的可视化。根据一个特定实施例,剖析数据的至少一部分可以是逻辑上分组的剖析数据以允许对程序执行的有意义的分析。在此,剖析数据可以被归结为例如基于组织方案来传达关于程序或子系统以及其他内容的高级语义函数的信息。可视化还可以反映相对于指定的性能目标的剖析数据的状态,并且提供机制来允许记录和回放剖析数据并控制剖析数据的范围。在一个实例中,该组可视化可以随程序执行同时被呈现。或者,该组可视化可以在历史数据上操作。
[0033]现在参考附图更详细地描述本发明的各个方面,在全部附图中用相似的标记来指示相似或相应的元素。然而应该理解,附图及其相关详细描述不旨在将所要求保护的主题限于所公开的具体形式。相反,其意图是覆盖落在所要求保护主题的精神和范围之内的所有修改、等价物和替换的方案。
[0034]最初参考图1,示出了便利于经由可视化组和与其的用户交互的程序执行分析的可视化系统100。可视化系统100可以将任意收集和/或计算的剖析数据(又称程序-剖析数据)作为输入接受,并相对于其进行操作。而且,剖析数据可以是来自目前正在执行的程序实况流传送的实时数据或来自例如持久存储的日志所提供的历史数据。根据一个实施例,可视化系统100被配置为在逻辑上分组的剖析数据上接收或检索并操作。如下将进一步描述地,剖析数据可以被归结为根据组织方案的组,所述组织方案以独立于执行路径的方式定义了组以及组之间的关系。因此,剖析数据可以以逻辑上有意义的层级被显示,而不是以粒度函数层级被呈现。例如,剖析数据可以被归结为传送关于程序或其子系统的高级语义函数(例如打开文档、重新计算布局、在窗口中呈现内容……)的信息或在程序本身之外(例如项目人员)的信息以及其他内容的组。可视化系统100还可以被配置为响应于关于所提供的可视化或其他输出(例如文本、音频……)的用户输入。因此,可视化可以被更新以例如聚焦于用户感兴趣的特定数据段或特定粒度等级。还有,用户可以指定要被用于呈现数据的专用可视化并且组合一个或多个可视化等等。
[0035]可视化系统100包括可视化引擎110、数据存储120、收集组件130、检索组件140以及条件组件150。可视化引擎110 (如在此所定义的也是一个组件)被配置为呈现一组一个或多个可视化。此处,呈现指的是将经编码的内容转换成用于显示的格式,或者生成具有稍后可在连接到计算机或其他基于处理器的设备的物理显示器(例如,LCD、触摸屏……)上呈现的显示格式的内容。可视化引擎支持各种类型的可视化或视觉内容,包括但不局限于,众多图表(例如线、条、饼…)、图像和文本内容以及其他内容。一旦接收或获取输入,可视化引擎110可以呈现一个或多个填充有剖析数据的可视化。根据一个实施例,可视化引擎110被配置为相对于与执行的程序相关联的剖析数据流实时地操作。或者,可视化引擎110可以相对于历史剖析数据(例如持久存储的日志文件)操作。在任何情况下,注意可视化不需要是静态的,而是可响应于获取的剖析数据被动画化。换句话说,当获取剖析数据时,可以更新可视化。
[0036]数据存储120是被配置为存储任意的且可能很大量的数据的计算机可读/可存取介质。例如,数据存储120可以被作为日志文件、数据库和/或存储器内数据表示来实现。在一种情况下,数据存储120可以实质上保存任何数据以便利于剖析可视化。而且,虽然被示为在可视化系统100之内,数据存储120还可以与在可视化系统100之内相反地驻留在可视化系统100之外或可以在可视化系统100之内或之外提供多个数据存储。
[0037]收集组件130被配置为累积并记录或保存数据到,例如数据存储120。例如,收集组件130可以保存剖析数据流以及可选的用户输入。根据一个特定实施例,收集组件130可以获取并保存正被训练的执行的程序或其它可视化的一个或多个屏幕截图图像。还可以保存相对于所述一个或多个屏幕截图图像的用户交互,例如鼠标移动、点击和文本输入。
[0038]检索组件140被配置为从数据存储120检索数据并将所述数据提供给可视化引擎110。根据一个实施例,检索组件140可以简单地将数据推送到可视化引擎。或者,检索组件140可以响应于来自可视化引擎110的参数化的请求提供数据。而且,检索组件140被配置为在将经处理的数据返回给可视化引擎110以供呈现之前执行对从数据存储获取的数据的各种处理(例如查询处理)。例如,可以返回满足请求的特定的剖析数据的子集。检索组件140还可以被配置为将数据保存到,例如数据存储120。例如,检索组件140可以将经处理的结果高速缓存到数据存储120以提供对以相同方式被参数化的请求的有效响应。因此,可以使用本领域中已知的各种高速缓存技术。
[0039]在一个特定实施例中,检索组件140可以允许历史剖析数据的回放。具体而言,检索组件140可以被配置为允许重放被启动、停止、暂停、后退到先前的时间点、前进到后面的时间点、减速或加速。例如,用户可以指令系统前进到感兴趣的特定的时间点,并随后暂停回放以进一步调查数据。而且,如果执行被描绘成片段,可以做出从第一片段到第二片段的移动。
[0040]条件组件150被配置为允许显著的运行时条件的指定,或者换句话说,性能目标。用户可以指定硬的和/或软的条件,例如与使用由条件组件150所提供的功能的程序的吞吐量(例如期望的帧速率)有关的条件。这些条件可以被直接或经由收集组件130保存到数据存储120,并随后由可视化引擎110获取和使用。可视化引擎110可以将这些条件视觉地作为用户反馈的形式来呈现。例如,可以将事件标记施加到时间线上,可以将特定颜色施加到图表、可以呈现可选的闪烁或其它条件失败或满足的动态指示符。根据一个实施例,可视化引擎110可以在消息窗口中呈现描述满足或未满足的条件的可读文本。
[0041]转向图2,描绘了代表性可视化引擎110。可视化引擎包括三个组件:环境组件210、数据图表组件220以及协调组件230。环境组件210被配置为生成以允许丰富体验的方式呈现一组可视化的集成环境。而且,单组控件可以被用于与各种可视化交互。根据一个实施例,环境可以包括用于选择一组剖析数据和应用于所述剖析数据的一个或多个可视化的功能。一旦被呈现,用户可以启动关于数据和其可视化的多个操作。例如,剖析数据的片段可以被隔离,而一特征可以被提供以移动到下一片段。而且,可以控制粒度或范围以允许对改变指定范围的剖析数据的特征(例如毫秒、秒、分钟…)进行放大和缩小。
[0042]数据图表组件220被配置为例如在集成环境中生成剖析数据的可视化。例如,可视化可以包括各种类型的图表,例如饼、线或条图表。然而,可以使用以有用的方式呈现数据的任意视觉机制。作为示例而非限制,可以由数据图表组件220提供执行的程序的一个或多个屏幕截图图像。
[0043]协调组件230被配置为跨剖析数据的可视化来协调或关联数据。根据一个方面,可以同时呈现许多可视化以便利于程序执行的分析。协调组件230允许可视化以某种方式被协调,例如基于时间(例如时间线)。在该方式中,所有的可视化将协同呈现剖析数据。作为示例,如果用户在一个可视化(例如线图)中启动对数据的特定片段的放大,则其它活动的可视化(例如条状图、饼图…)可以被更新以反映在给定时间段中的相同的数据片段。
[0044]下面是一系列帮助明晰和理解关于可视化系统100所允许的功能的示例性屏幕截图。屏幕截图仅仅是图形元素的一种可能排列。图形元素的其他类型的图形和排列也是可能的。因此,屏幕截图不旨在限制附加的权利要求的范围,而是提供了便利于进一步描述和理解可视化系统100所提供的功能的可能的表示。而且,虽然屏幕截图涉及关于web浏览器和在web浏览器内执行的web应用的剖析,但所请求的主题并不局限于此。另外,虽然讨论聚焦于可视化,其它的机制,例如音频,也可以被用于进一步丰富在分析剖析数据中的用户体验。
[0045]图3示出了可被呈现并显示以便利于程序执行分析的一组可视化的屏幕截图。具体而言,多个相关的可视化被用于呈现不同类型的剖析数据的视图以便利于程序分析。例如,可以如下使用许多不同的图(例如线、条、饼…)、图像(例如运行的程序的屏幕截图)以及文本。而且,可以在具有一组公共控件等的集成的剖析环境中呈现这样的可视化。
[0046]区域310被指定用于目标控件。换句话说,经由选择信号(例如拖放、点击、语音命令…)可以选择剖析数据的特定子集或超集以供显示。在此,三个web浏览器处理被显示为缩略图,它们是可选择的。第一 web浏览器缩略图相对于其它缩略图的较大尺寸指示了它被选中并且这样剖析数据对应于该特定处理。除了作为收集关于执行的程序的实时信息的工具之外,该目标控件还可以被用于导航持久保存的日志/从持久保存的日志进行选择。另外,目标控件不局限于在本地机器上运行的处理/其它目标。在附加设备上运行的远程实例或web应用也可以被呈现在区域310中。
[0047]区域320示出了可以针对剖析数据被部署的可用的可视化池。根据一个实施例,可以将可视化从区域320拖放到另一区域中,以便针对当前剖析数据呈现该可视化。换句话说,可以基于标识该可视化的选择信号(例如拖放、点击、语音命令…)来应用可视化。如此后将进一步描述地,以许多方式来组织并覆盖可视化是可能的。
[0048]区域330是包括剖析数据的非基于时间线的可视化的可视化的占用者区域。就是说,所述可视化包括不与时间线公开相关联的呈现。在此,饼图332示出在应用的最后的帧呈现期间在几个子系统之间所花费的时间的百分比细分。作为示例,饼图322可以指示用于在浏览器中运行的执行的web应用的中央处理单元利用率,其中,白色部分指示空闲时间,而黑色部分指示实际的处理器利用率。而且,向饼图332的左边显示时间相关的屏幕截图图像334。屏幕截图图像334是在特定时间点处的目标web应用的视图。该视图对于为了理解网页的状态和/或与剖析数据的特定序列相关联的最近用户动作来说是有用的。注意,该可视化可以本身被覆盖到目标区域310中的缩略图图像上。同样,在一些诸如实时收集场景的实施例中,这种缩略图可以被用作目标处理的事件代理。就是说,所述缩略图可以被用作随后将被转发给实际的目标应用的事件/其它消息的宿(sink)。例如,诸如鼠标移动、点击和文本输入之类的用户输入可以被覆盖到屏幕截图图像334上。
[0049]区域340示出基于时间线的可视化的占有者区域。该区域可以包括允许并排显示的任意数目的“泳道(swimlane) ”。在此,示出了两个可视化,即线图342以及线和条状图344。线和条状图344示出在彼此的顶部覆盖可视化的能力。而且,线图342以及线和条状图344描绘了根据公共的范围或选择的时间等等的概念来呈现可视化。诸如饼图332和屏幕截图图像334之类的其它可视化还可以将它们的呈现同步到这样的范围或选择的时间。用户可以选择(通过选择信号)关于区域340中的可视化感兴趣的邻近的时间序列。在这种情况下,已经选择了区域346。在这个选择过程期间或之后,可以根据选择的剖析数据来更新其它可视化。例如,区域330中的可视化可以响应于所述选择改变它们的外观。
[0050]示出了便利于记录并回放数据的一组控件350。除了诸如启动记录、暂停回放和跳到下一项等等之类的特征外,功能还可以是特定于实现的。例如,跳到下一项可以与诸如下一文档对象模型(DOM)事件、下一代码生成序列点、下一被呈现的帧或下一失败诊断消息等等之类的几种有意义的序列点相关联。滑块360是一种允许控制回放的速度的控件。在其它实施例中,类似的滑块可以被用于控制剖析数据的放大和缩小和/或控制剖析数据的记录缓冲的大小(例如记录最后的25秒的剖析数据)。
[0051]区域370是用于按照函数名等呈现最好以可滚动形式显示的分析/结果的消息显示区域,所述可滚动形式诸如诊断消息的列表和/或剖析数据的诊断概要。这些条目可以与其它可视化选择同步,并且它们自身可以被用作选择机制。例如,如果用户选择时间线上的一时间序列,在区域370中所显示的诊断消息可以被限制到选中的时间帧。相反,用户可能双击在区域370中所显示的诊断消息,在这种情况下,所述选择可以被更新到产生该错误的时间点处。所有其它可视化也可以被更新到对应于该时间点。
[0052]图4示出一些附加的时间线可视化的屏幕截图。可视化410借助显示了剖析数据的完整范围的端对端时间线控件来示出导航帮助。例如,它可以表示所收集的日志的完整内容或实时收集的数据的当前缓存。这个主数据视图可以被限制于这个特定控件/可视化。在这个实施例中,剩余的可视化可以基于所选的窗口更新它们的内容,所选窗口可相对于剖析数据的完整范围被指示。而且,这种时间线视图可以用特定兴趣的事件来注释。在此,在可视化左上方处的下拉菜单可以被用于选择在时间线上标记哪些事件。例如,可能不是所有的诊断消息都应该被显示,但是所有的文档对象模型事件应该被显示。注释可以采用各种形式。在此,它们对应于以不同方式填充的方块。在一个实例中,图例可被显示为例如工具提示来明晰注释。作为示例,不同地被填充的方块可以被用于在页面事件(例如DOM内容被加载)、用户事件(例如鼠标点击)和跟踪标记之间进行区分。
[0053]可视化420示出由逻辑分组所生成的中央处理单元使用可视化。该视图可以使得其立刻明显,例如,大量的时间段被花费于呈现专用的用户界面更新帧。
[0054]可视化430示出嵌套的执行视图。在此,显示逻辑子系统的分层结构。重新呈现页面的通用请求,例如,可以导致一系列嵌套执行,例如,以处理CSS规则、在页面中布局元素或呈现每个组成元素。
[0055]可视化440提取语义操作到易于理解的可视化,该操作与其它选择控件/可视化相关。在此,示出了呈现或描绘一页面所花费的时间,这样,这种操作的时间段和时间长度相对于时间线由多边形的位置和大小来注释。
[0056]可视化450将最好理解的信息呈现为文本,将内容呈现为可滚动列表或其它形式,但是还是保留了与其它视图/剖析范围选择器关联。在这种情况下,可视化450是被呈现用于剖析数据的当前范围的剖析报告(例如执行各种功能所花费的时间的调用计数和报告)。图5示出另一种可能的报告可视化510,该可视化对特定时间/剖析数据段的级联样式表(CSS)剖析数据进行分解。这两个报告的细节等级可以被调整,例如借助下拉菜单。
[0057]图6和7是与web浏览器相关联的剖析数据的可视化的示例性屏幕截图。此外,可视化可根据组织方案(诸如附录A中提供的那个)来产生,并如将在此进行详细描述的那样。在该实例中,组织方案被编码成XML文档,其中标签标识组,并且结构定义组之间的分层关系。将在随后的章节中描述基于组织方案的分组。
[0058]图6是示出子系统对CPU的执行利用分解的示例性屏幕截图,如由附录A中指定的组织方案所定义的。示出了允许对检测(例如开始/停止对)和采样(例如栈样本)的两个收集机制进行比较的两个视图610和650。视图610和视图650中的各自包括用图示意单个中央处理单元随时间的百分比使用的柱状图630和670。此外,每个图区分经由窗口620和660中的复选框可选择的组。
[0059]图7是剖析数据的表格可视化的示例性屏幕截图。更具体地,屏幕截图描绘了如组织方案所定义的、详细的、子系统对中央处理器单元(CPU)的利用分解。表格指定了相对于多个行和列的组和子组。被标记为“进程”的列710指定了与单个二进制或可执行文件相对应的组的分层结构的根。列715提供线程标识符的分组。对于每个线程标识符,存在三层子组,如由列720、725和730所指示的。例如,列720标识名为“三叉戟”的浏览器呈现引擎,它被分解成列725中所示的“布局”和“显示”等。此外,列725中的“布局”又被分解成列730中所示的“构建块”和“构建布局”组等。注释并聚合每个分组和子组的剖析数据,并在列735、740、745、750、760和765中提供分别对应于开始时间、结束时间、持续时间、(PU利用的百分比、时间的百分比和计数的该剖析数据。根据该表格,传递高级的有意义的信息。用户可从快速一瞥中确定浏览器正消耗过多的时间在布局中,并且优化努力可因此聚焦在程序处理布局的部分。
[0060]图8示出随时间的帧速率的可视化810。该可视化可以为在测试下的应用(或为持久存储到日志的剖析数据)提供关于每秒实现的帧速率的即时反馈。可视化810可以表示所有收集的数据,所述数据针对特定大小的缓存或窗口被呈现,或受限于由当前暂停或选择状态所指示的特定序列,如由用户所提示的那样。虽然未在此处示出,可以理解,该可视化可以覆盖有其它有用信息(例如指示兴趣点的标记,诸如“导航到新页面”或“帧速率下降到可接受的阈值之下”)。可视化810以及其它可视化可以与更广泛的系统相关,所述系统包括将该可视化本身用作选择控件的可能性。例如,用户可以点击图表的例如在其中帧速率下降到某个可接受阈值之下的区域,在该情况下,其它可视化可以更新它们的视图以反映那个时间点。图6的CPU利用率的可视化可以,例如,使得其所做的帧速率由于在布局页面之前处理CSS规则中花费的大量时间段而被折衷的事情变得清楚。
[0061]图9示出提供了一种在子系统中花费的时间的“均衡器”视图类型的两个可视化910和920。在这些可视化中,显示了几条栏,这些栏本身表示在子系统(诸如显示、布局、解析和JavaScript (例如执行代码))中所花费的时间。还可以添加附加的栏,例如以在诸如开发者授权的JavaScript和与访问浏览器对象模型相关联的JavaScript之间进行区分。这样的视图提供了容易理解的执行概要并类似于在其中不同的频率对应于不同的子系统的音频均衡器。所述可视化可以被动画化和同步到当前选择。应该理解,所述动画可以根据回放的速度或如何更新当前的时间线选择以及其它因素来改变/更新其显示。
[0062]可视化920通过阐述在视觉外观(例如对角线阴影表示、颜色中变化、闪烁…)中的改变来指示还没有满足某个诊断标准或性能目标,以详细说明可视化910。例如,帧速率可能由于在显示子系统中所花费的大量时间段而落到可接受阈值之下。这样,可视化为收集实时信息或回放所收集的日志的用户提供了有用的自组织诊断机制。遵从差的网页性能的报告的用户,例如,可能将该可视化连接到页面的正在运行的实例并开始与之互动。在做出手势时,例如悬停在折衷帧速率吞吐量的程序的特定元素上,可视化可以提供性能被折衷的清楚反馈。
[0063]还注意,可视化可以被用于用事件或通知来注释通用事件流。就是说,可视化不仅是感兴趣的动画/其它用户界面数据的源,而且可视化本身还可以负责处理/分析剖析数据以便提供诊断信息或操作的概要以及其它内容。更广泛的系统包括用于将每可视化事件/其它数据合并到通用事件流、全局时间线控制器、公共错误报告区域等。与特定可视化相关联的数据可以是可标识的。这允许,例如,用户“拖出”特定可视化,伴随着所有其事件、诊断消息和与其相关联的其它人工产物也都将离开的结果。
[0064]图10提供了与图8的示例类似的示例,其中可视化1010包括随时间1020的帧速率的图表。然而,在此,选择了在其中帧下降的时间序列。可视化1010还包括将其动画化限制于剖析数据的这个子集的子系统中时间视图1030。因此,清楚地揭示了在显示子系统中花费了太多的时间。
[0065]图11阐述了作为动画呈现的另一个有价值的诊断可视化1110。在这个示例中,已经提供了呈现平台来发生描述已经被无效且因此被重新绘涂的区域的事件。该数据(例如在页面上以某种颜色描绘轮廓)被覆盖有该页面的屏幕捕捉。这使得其立刻显现该页面被如何重新绘涂,其在例如诊断帧速率问题时将是有重要意义的。在此,存在三个高亮的区域,即区域1112、区域1114和区域1116。响应于例如当前时间线选择,这个动画化的视图可以被实时呈现,或以各种速度被重放。该特定可视化可以在它能在使得以其他方式对于用户来说是透明的某些类型的处理变得明显的方面很有用。例如,劣质构造的页面可能包含持续引起页面上的失效元素的周期(导致页面的永久失效/重新呈现,甚至是用户输入的完全缺失)的CSS规则/JavaScript。这种特定可视化还可以有用地应用于页面呈现的布局阶段,在该阶段中计算所有页面元素的大小和位置。而且,虽然未曾示出,但应该注意,可以捕捉和覆盖或模拟用户动作以帮助理解用户动作,例如鼠标移动、被点击区域或被输入文本以及其它内容。还有,注意可视化1110自身不需要是静态图像,但也可以对其动画化以便在执行期间它被呈现时示出图形用户界面。
[0066]而且,虽然未示出,但可视化系统100可以支持差分机制。作为示例,考虑包括历史数据的两个日志文件。在此,可以呈现对应于具有相关的剖析数据的这两个日志文件的两个屏幕图像。而且,可以用同样的事件标记(例如标识页面启动、标识公共用户界面操作组…)来标记剖析数据以便利于比较。
[0067]转而关注图12,示出了程序剖析系统1200。程序剖析系统1200主要基于对更广泛系统内(例如,程序拥有的、程序的子系统拥有的、依赖组件内的子系统拥有的…)代码和/或其身份等的语义目的的高级理解,允许程序性能的自顶向下的视图。这可通过处理和分析数据收集组件1210所收集的剖析数据来实现。
[0068]数据收集组件1210被配置成获取关于程序1212的剖析数据。剖析数据可以是与程序的执行相关联的任何的任意收集和/或计算的数据。在一个实例中,这种剖析数据可与关于特定函数/操作的执行时间相对应。在另一个实例中,剖析数据可对应于非执行时间数据,包括一个或多个事件的出现或频率、以及任选的与一个或多个事件的出现相关联的有效载荷,其中,事件是正在执行的程序已经命中代码中的特定点的信号,并且有效载荷是与命中代码中的特定点相关联的数据。作为示例,非执行时间剖析数据可包括所分配的字节或对象、页刷新、注册表读/写、所产生的工作者线程、或相关联的二进制代码等。程序(也被称为计算机程序)1212包括计算机编程语言中指定的指令集,该计算机编程语言在由处理器执行时执行该指令集规定的动作。数据收集组件1210可利用包括检测和采样的各种技术来从正在执行的程序收集剖析数据。程序1212所执行的工作可由例如操作系统收集的事件/执行探针(例如,来自被检测的代码的事件追踪事件或回调)或栈样本来捕捉。可收集允许在执行时间(例如,中央处理单元利用或活动执行中消耗的精确的周期)、堆分配、或可在所生成事件的定制有效载荷中表述的其他任意信息方面的分析的数据。
[0069]数据收集组件1210可利用检测和采样的组合。每种方法收集的数据可扩充另一种方法。例如,数据可被组合/合并、取平均值、交叉检查、和/或统计地归一化等。以此方式,两种方法的优点可被利用,并且缺点可被抵消。作为示例,两种方法可引起观察者效应,这意味着观察程序的动作本身就可影响程序。采样通常不会引起显著的观察者效应,但会带来不如检测所收集的那么精确的数据。因此,可在适当时向采样数据补充检测数据。针对观察者效应的额外缓解也可通过创建剖析桶来提供,该剖析桶对与操作系统代码相关联的剖析数据进行公开地分组(从而排除其它数据),该操作系统代码在根据所检测的代码的事件生成以及根据代码采样栈的生成期间执行。此外,当接收到关于所检测的探针/事件的栈时,也可启用轻量检测方法。假设为所分配的字节单独地启用单个事件(这几乎不引起观察者效应)。如果“所分配的字节”事件与栈相关联,则可根据栈指定的装桶来对所分配的数据进行分组。注意,在此示例中,完全不启用采样。因此,运行时事件和/或所收集的栈可用于组织剖析数据。
[0070]分组组件1220被配置成根据组织方案1214将利用数据收集组件1210收集的剖析数据归属到特定的组或桶。换言之,剖析数据可基于描述性机制被相关和相关联,该描述性机制定义了组以及组之间的关系。在一个实例中,组可传递关于程序或其子系统的高级函数(例如,打开文档、重新计算布局、呈现窗口...)的信息。除前述内容之外,分组组件1220可被配置成基于给定的组织方案1214来初始化数据结构,并将剖析数据填充到组中。其他实现也有可能,包括但不限于用组信息来标记剖析数据。无论何种情形,分组组件1220执行的处理结果是被分组的数据,该数据可被容纳在本地或远程可访问的数据存储1240中。
[0071]组织方案1214可例如按照函数名(例如,二进制文件(例如可执行文件)内的完整函数名)定义分组。可在父与子的分层关系中表述组。然而,组可通过例如将其定义为兄弟节点来彼此互斥地构建。组可包括例如作为子节点的子组,也被称为类别(category)。然而,注意,除非以其他方式显式地表示,对术语“一个组”或“多个组”的使用旨在包括子组或类别。函数可在任意层级与组相关联,并且可出现在任意数量的组中。换言之,函数不限于被归属到单个组,而相反可出现在任何粒度级别的多个组中。函数信息也可用于例如基于栈样本和/或所检测的收集/基于事件的收集来聚合数据。例如,二进制文件名和函数名可用作分组的基础。这在区分跨越多个二进制文件的函数方面可以是有帮助的。组还定义了不显式地提供二进制/函数细节、但提供所收集的数据中可用的事件标识符的事件。这种情况中的二进制/函数信息可由提出指定事件的代码位置集合来暗示。在至少某些操作系统中,在生成区分提出事件的多个代码位置的事件中,栈将是可用的。此外,注意,此处提供的组分层结构可以独立于函数执行路径。这样的理由有两个。第一,在被检测的情形中,栈的概念可被采纳用于对数据分组,其与实际的执行栈完全解耦合。第二,在采样的情形中,任意唯一的栈可与同一组相关联。
[0072]还可为各个组指定优先级,以辅助对数据分组。更具体地,优先级允许基于最近的栈帧(例如,文字代码栈、虚拟事件开始/停止对栈)来打破默认的组织规则。这样的优先级值可相对于所有其他分组来表述,并用于辅助分组/装桶决策。如果针对用于与存在以保存数据的其他候选组相比具有较低指定优先级的组考虑数据,则该数据可被归属到具有最高显式或隐式优先级的替换组。在分层关系中定义的组可基于该分层结构具有隐式优先级。如果例如父“A”包括子“B”,则“B”被认为是比“A”优先级高的组。因此,用栈“A::B”收集的数据将因此与组“B”相关联。然而,如果组“B”被显式地指定为比组“A”低的优先级,则数据将被分组到组“A”。
[0073]可按各种方式将剖析数据相关,以许可各种范围内的灵活查询等。作为示例,剖析数据可以跨进程边界或跨机器而延伸。在一个实例中,剖析数据可根据时间戳按时间来分组。在更细粒度的层级,剖析数据可按中央处理单元或线程来分组。此外,统一活动标识符可用于以有用的方式来跟踪线程间通信,例如通过跟踪与多线程事务相关联的活动。
[0074]在一个实例中,组织方案1214可被具体为数据文件,该数据文件可被创作、编辑、在其他进程带外维护、或独立于其他进程来维护。此外,组织方案1214可被轻松地传递。这可允许代码专家捕捉分析程序(对该程序来说,他们是专家)的剖析数据的有用模型,并将该模型分发给非专家的用户。例如,web浏览器的内部工作中的专家可生成组织方案,并将该方案分发给web应用开发者以辅助性能调整。
[0075]在一个特定的实现中,组织方案1214可用XML (可扩展标记语言)来表述,因此提供了大体上的可读性。在该实现中,并且如下面进一步描述所采用的,组或子组被称为标记或标记集合,其中标记指示组,标记集合是指组的集合。此处稍后提供XML中指定的组织方案的示例。
[0076]方案生成组件1230被配置成方便组织方案1214的生成。在一个实例中,人类用户可任选地采用模式匹配或辅助说明的其他过滤机制(例如,正则表达式、使用通配符…),来手动地创作组织方案1214。方案生成组件1230可例如基于可用信息(包括上下文信息)来允许组的自动或半自动(例如,有用户辅助的)生成。作为示例而非限制,存储了与对程序作出的改变有关的信息的源控制历史可由方案生成组件1230来挖掘,并可用于自动地生成组。例如,“代码所有者”组可被创建,以允许剖析数据被代码的团队或个人所有者分解。这允许用户轻松地标识有助于性能问题的专家。
[0077]查询处理器组件1250被配置成允许执行针对已分组数据的查询。给定一个查询,查询处理器组件1250可利用已知或新的机制从数据存储1240提取满足该查询的结果并将其返回。例如,可视化或诊断工具可采用查询处理器组件1250来获取数据。
[0078]可视化系统100被配置成允许将已分组的剖析数据可视化。剖析数据可以按任意数量的方式来呈现,而不限于常规的调用树。此外,由于在逻辑有意义的层级对剖析数据进行分组,因此可视化可利用分组,并进一步辅助人类用户理解剖析数据。根据一个实施例,可视化系统100可生成图形用户界面,该图形用户界面图形地描绘已分组的剖析数据并允许与数据交互。例如,可视化系统100或人类用户可创作针对已分组数据的查询,并根据查询返回经过滤的结果。此外,可提供允许用户探索以获取更详细的数据、以及上卷以在更抽象/更高层查看数据的机制。
[0079]虽然程序剖析系统1200包括可视化系统100,但是应当理解,可视化或诊断工具可以在程序剖析系统1200的外部。在该场景中,交互可通过类似的方式来实现,例如通过查询剖析系统以得到必需的数据。附加地或替换地,在可视化系统是一个事件流的订户的情况下,程序剖析系统1200可以将剖析数据作为这样的事件推送到可视化系统100。此外,注意,可视化系统100在各个方面是可扩展的。例如,可视化系统100最初可支持第一可视化集合。接下来,第二可视化集合可例如经由第三方插件或通过对程序剖析系统1200的更新/升级被添加。
[0080]订阅组件1270提供散布已分组数据的附加或替换方式。更具体地,数据存储1240中容纳的已分组数据可根据发布/订阅模型来递送。订阅组件1270可供应并管理订阅,并且将已分组数据发布到感兴趣的订阅者。
[0081]程序剖析系统1200不限于程序的实时执行,或换言之收集剖析数据方面的操作。另外,程序剖析系统1200可在历史数据方面或在收集后(post-collect1n)时操作。例如,任意的组织方案可被覆盖到持久保存的日志上,以允许数据在就程序功能和结构而言有意义的层级上被查看。换言之,可通过应用替换的分组来提出针对追踪数据的任意数量的视图。
[0082]如图12所示,组织方案1214可不仅在程序剖析系统1200的外部还可在程序1212的外部。这有许多益处,包括便携性以及允许组织方案被轻松地改变等。然而,所公开的主题不限于此。在替换的实施例中,组织方案1214可被嵌入到程序1212或其版本中,如图13所示。例如,组织方案可以此方式被编码,使得信息与诸如检测事件的一部分的剖析数据一起来提供。更具体地,组织方案可被编码到程序函数名中。另外地或另选地,指示组或子组的串标识符可与程序的函数或其他部分相关联,并与事件一起提出。
[0083]此外,用于生成组织方案1214的进程可被编码到程序1212中,而不在程序1212中对组织方案1214进行编码。方案生成组件1230随后可基于已编码的进程(例如在运行时)来自动地生成组织方案1214。作为示例,在运行时,任意分组可由二进制名称来创建,使得在第一二进制文件的执行期间收集的全部剖析数据被归属到第一二进制文件,在第二二进制文件被执行时收集的全部剖析数据被归属到第二二进制文件。另外,方案生成组件1230可被配置成当例如数据正被收集时实时地自动地更新组织方案1214,或作为在收集日志上动态地重新生成新视图的一部分来实时地自动地更新组织方案1214。
[0084]图13描述了代表性数据收集组件1210。如前所述,数据收集组件1210被配置成从程序中获取剖析数据,这些数据可接下来根据组织方案被分组。数据收集组件1210包括样本组件1410和检测组件1420。样本组件1410被配置成例如通过对操作系统作出适当的调用并获取结果,在执行期间初始化对程序的采样。在一个实例中,样本是在时间的特定时刻收集的栈(或者作为诸如分配事件的特定代码操作的结果,或者作为经组织的收集进程的一部分,将根据该收集进程创建代码执行的概要图)。检测组件1420被配置成接收、检索或以其他方式获得或获取来自程序检测的数据。此处,数据可以是探针数据,实际上例如开始/停止事件对。在一个实例中,采用开始/停止事件以获取有效载荷。在其他实例中,开始/停止事件可用于划分有趣的边界(没有显式的有效载荷)。可获取任何所生成的事件的时间戳和调用栈。因此,事件也可被称为隐式地携带那些有效载荷。样本可被认为是系统用时间戳和当前的调用栈有效载荷强制“代码正在执行”事件。此外,注意,可用活动标识符标记事件,该活动标识符可以跨各种上下文(诸如线程)流动到其他事件中。因此,该数据可用于以灵活的方式来使剖析数据相关。
[0085]组合组件1430被配置成允许以各种方式使用检测和采样这两者。例如,每种方法收集的数据可扩充另一种方法。更具体地,数据可被组合、用于交叉检查结果、和/或统计地归一化等。以此方式,两种方法的优点可被利用,并且缺点可被减轻。作为示例而非限制,可用更精确的检测数据来补充本质上不太精确的样本数据。
[0086]上下文检测组件1440被配置成检测上下文切换,或换言之处理上下文中的改变。例如,上下文切换可与共享CPU的多个进程相关地出现。在这样的多任务环境中,进程可被中止并且CPU的状态可被存储,使得稍后可从同一点继续该进程。换言之,一个进程被切换到中央处理单元以外,使得另一进程可以运行。一旦检测到与正被剖析的程序有关的上下文切换,数据收集可被挂起直到处理继续或所收集的数据可被标记,使得程序剖析系统1200可区分与程序相关联的数据以及不与程序相关联的数据。以此方式,数据可被排除。例如,执行时间的函数调用的持续时间可排除在执行与正被剖析的程序无关的进程上消耗的时间,或者换言之,由于上下文切换与正被剖析的程序有关的不活动的时间段。
[0087]考虑结合图15用XML创作的以下组织方案,其中标记标识组。
[0088]
<?xml vers1n-" 1.(广 cncoding-"utf-X",.)>

<T agSct Na me-',Γ? x a m plcTagS ct" >
<Tag Namc-nA">
<r:vcnts>

<TwcntStart Providcr^nFxampIcProvidcr" Symbo1-nA Activity I_START'V>

<rwcntS1p Providcr_"nxamplcProvidcr" Symbo1-nA Aciivity I _STOPM/>
</Twcnis>
<Tag Narnc-MBM>
<rwcnis>
<Γ:VcntStart Provider_"ExampIcProvidcr" Symbol」,B_Activit:y i_STARTn/>
<ΠventStop Pro\ idcr_"Γ:xaι\\pIcProvidcr" Symbo1-"Activity I STOP"/>
</ nvcnts>
[0089]
<Tag Nair,c-MCM>

<r,vcnts>

<rwcntStart ProVidcr-nHxampIcProvidcr" Symbol—nC Activity I_START”/>

<rwcntStop Providcr-tTixampIcProvidcrn Symbo1-tX' Activity l_STOP'V>

</T:venis>
</T ag>
</T ag>
</Tag>
</TagSet>
[0090]该组织方案涉及数据集合(包括三个任意分组(也被称为标记)和“C”的多个开始/停止事件对)的检测方法。图15示出9毫秒的事件流时间线1510,这是仅出于说明目的选择的粒度级。在该时间线1510中,与组/标记“A”相关联的事件开始,如“A_活动1_开始”组织方案中所指示的。在执行期间并在与标记“A”相关联的退出事件之前,与组/标记“B”相关联的事件激发,如“B_活动1_开始”表示的。当“A”和“B”在进行中时,与组/标记“C”有关的事件(C_活动1_开始)在3毫秒处出现,并且退出事件(C_活动1_开始停止)在4毫秒之前出现。在4毫秒处,上下文切换出现,并且这个特定的活动行被挂起。如所指示的,在4、5和6毫秒期间将不对执行数据进行归属。在7毫秒处,标记“B”结束执行,并且在8毫秒处,标记“A”结束。在9毫秒处,标记“C”的开始/停止对出现。由于标记“A”和标记“B”都不在进行中,因此该时间单元被添加到标记“C”。因此,存在上下文切换之前的时间1520、上下文切换期间的时间1530和上下文切换之后的时间1540。在时间1520期间,I毫秒被归属到组/标记和“C”中的每一个。在时间1530期间,没有时间被归属到任何分组。在时间1540期间,I毫秒被归属到组/标记和“C”中的每一个。
[0091]以下是一个类似的场景,除了数据收集机制是采样而非检测。考虑结合图16用XML指定的以下组织方案,其中标记标识组,结构定义组之间的分层关系。
[0092]
【权利要求】
1.一种可视化剖析数据的方法,包括: 在计算设备的显示上呈现程序剖析数据的多个相关可视化,所述多个可视化提供了所述剖析数据的不同类型的视图,当获取所述剖析数据时所述视图被更新。
2.如权利要求1所述的方法,其特征在于,还包括响应于指示时间序列的选择信号改变所述多个可视化中至少一个可视化的外观。
3.如权利要求1所述的方法,其特征在于,还包括视觉地指示关于所述多个可视化的一个或多个可视化的一个或多个条件的失败或满足的至少一个。
4.如权利要求1所述的方法,其特征在于,还包括呈现基于选择启动对实时剖析数据的记录和历史剖析数据的回放的一组控件。
5.如权利要求1所述的方法,其特征在于,还包括呈现所述剖析数据所涉及的正在执行的程序的图像。
6.一种系统,包括: 耦合到存储器的处理器,所述处理器被配置成执行以下存储在所述存储器中的计算机可执行组件: 第一组件,被配置为呈现根据时间协调的经逻辑分组的程序-剖析数据的一组可视化。
7.如权利要求6所述的系统,其特征在于,还包括第二组件,被配置成记录剖析数据流。
8.如权利要求7所述的系统,其特征在于,还包括第三组件,被配置成便利于所记录的剖析数据的回放。
9.如权利要求6所述的系统,其特征在于,该组可视化的至少一个视觉上指示满足性能目标的失败。
10.如权利要求6所述的系统,其特征在于,所述第一组件被配置为在从其获取所述剖析数据的程序的执行期间呈现该组可视化。
【文档编号】G06F11/32GK104205062SQ201380016591
【公开日】2014年12月10日 申请日期:2013年3月6日 优先权日:2012年3月26日
【发明者】M·C·范宁, C·厄冈, A·R·斯特兰德 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1