剖析图数据的逻辑分组的制作方法与工艺

文档序号:12038895阅读:173来源:国知局
剖析图数据的逻辑分组的制作方法与工艺
本发明涉及分组,尤其是剖析图数据的逻辑分组。

背景技术:
剖析使得对程序行为的检查能够聚焦性能调整。剖析器是根据在程序执行期间收集的信息来生成程序剖析图的自动化工具。剖析图捕捉程序的行为特性。可从剖析图标识程序的一个或多个部分作为优化的候选项。例如,剖析图可以指示在执行特定的函数上花费了过量的时间。换言之,剖析图有助于理解程序行为,以允许集中优化努力。剖析图通常基于它们的收集数据方法等来分类。存在两种不同类型的收集剖析图数据的方法,即检测(instrumentation)和采样。在检测方法中,向程序添加在执行期间收集信息的代码。此处,被添加的代码是在程序执行时测量程序行为的工具。例如,可测量函数调用的频率和持续时间。在采样方法中,使用操作系统功能周期性地停止正在执行的程序,并对该程序采样以确定执行的当前状态。因此,可以注意到,例如程序花费20%的时间执行特定的代码点。因此,采样方法提供统计近似,而非确切的数据。剖析图数据通常被呈现为分解程序执行的调用树(也称为调用图)。例如,调用树可示出在程序中被遍历的函数执行路径。调用树的根节点可指向程序的入口点,并且树中的每个其他节点可标识被调用的函数以及性能数据,诸如被调用函数的执行时间。节点之间的边可表示函数调用,并且圈可指示递归调用。调用树可由开发者来分析,以标识程序热点,诸如占用一大部分执行时间的函数等。

技术实现要素:
下面呈现了简化的发明内容,以便提供对所公开主题的某些方面的基本概念。本发明内容不是广泛性的概观。它并不旨在标识关键/重要元素,也不旨在 划定所要求保护主题的范围。其唯一目的是以简化形式呈现一些概念,作为稍后呈现的更具体实施例的序言。简言之,本发明涉及剖析图数据的逻辑分组。根据组织方案将剖析图数据归属到组,该组织方案定义组以及组之间的关系。组可以是剖析图数据的对程序分析有意义的抽象。换言之,组可传递关于程序或其子系统的高级函数(例如,打开文档、重新计算布局、呈现窗口...)的信息等。也可说明上下文切换,使得剖析图数据相对于例如执行时间和中央处理器单元(CPU)利用来说是精确的。另外,已分组的数据可被查询并通过各种方式被可视化来进一步方便程序分析。为实现上述及相关目的,在此结合以下描述和附图描述了所要求保护主题的某些说明性方面。这些方面指示可实践本主题的各种方式,它们均落在所要求保护主题的范围之内。当结合附图阅读以下详细描述时,本发明的其他优点和新颖特征将变得显而易见。附图说明图1是程序剖析系统的框图。图2是程序剖析系统的框图。图3是代表性数据收集组件的框图。图4示出用于开始/停止事件对的数据收集。图5示出用于栈样本的数据收集。图6是剖析图数据的表可视化的示例性屏幕截图。图7是剖析图数据的图可视化的示例性屏幕截图。图8是程序剖析方法的流程图。图9是分组剖析数据方法的流程图。图10是示出用于本公开各方面的合适操作环境的示意性框图。具体实施方式剖析图数据通常过于繁多且小粒度的,以至于无法用于标识和解决编程问题。作为示例,典型的应用包括(具有不同可读性的名称的)数千个函数,并 且一秒钟内可调用成百上千个函数。由于剖析数据可与机器和操作系统细节紧密地相关联,因此模糊性也可能是一个问题。此外,现代的硬件和操作系统引入了跨中央处理单元(CPU)和线程管理数据的新的复杂度。鉴于以上内容,难于理解特定的函数是否例如正在消耗不合理的时间量,因为它只能与全部其它函数相比,或与它引发的执行相比。稍后的此分析将函数引发的全部调用作为相同调用来对待。即,无法区分例如不受开发者控制的调用(诸如支持的操作系统、运行时、应用框架或库)以及受开发者控制的调用。该信息在进行修改方面是有价值的,记住开发者不能影响代码所依赖的代码的实际实现。常规的调用树视图通过创建聚合视图,来解决多个不同的剖析数据片段的问题。然而,调用树视图也可能是有问题的。作为示例而非限制,代码可轻松地发起异步操作,该异步操作在被剖析时与发起它的代码没有明显的连接。如果这些异步操作是跨许多不同的回调来分布的,则初始化代码隐含的聚合成本可被遮挡,因为单个回调本身不表现为问题,而只在与其他回调聚合时才表现为问题。因此,已经认识到常规的剖析器可聚合数据。然而,这种数据仅在被分解成更有意义的片段时才是有用的。例如,异步回调导致的执行时间可在被分解成与回调相关联的各个事务时被更有用地理解。换言之,相对于理解剖析图数据,两个条件可能是有问题的。第一,剖析数据可被分割成多个且不同的片段,其中更粗略的视图更有用。第二,在更细粒度的视图有帮助时,可聚合数据。例如,考虑与多个事务相关联的常见处理程序。此处,分解命中该处理程序和以某种方式组织它们的执行成本可能是有帮助的。在另一场景中,特定的操作可使用许多不同的回调。在这种情形中,检查操作的分布成本可能是有用的。下面的细节一般地针对剖析图数据的逻辑分组。定义组和组间的关系的任意的组织方案可被覆盖在剖析图数据上,以允许对已执行代码的结构和意义的高级理解等。更具体地,可基于组织方案将剖析图数据归属到一个或多个组,其中组是对分析程序的人类用户来说有意义的抽象。作为示例,函数可被装桶(bucketed)为与窗口布局、呈现或二者相关。接下来,可基于与布局组相关联的执行时间/计数来轻松地确定程序正在花费过量的时间来对内容(例如 web/文档内容)布局。另外,处理可说明上下文中的变化,其中一个进程被切换到中央处理单元之外,使得例如另一个进程可运行。因此,可在低层以精确的方式来管理数据,使得当数据被向上卷到有意义的组中的高层时,数据是准确的。在剖析图数据的收集和处理之后,所得到的已分组数据可以按各种方式来分发、查询以及可视化,以进一步辅助程序分析。现在参考附图更详细地描述本发明的各个方面,在全部附图中用相同的标号来指示相同的或相应的元素。然而应该理解,附图及其相关详细描述不旨在将所要求保护的主题限于所公开的具体形式。相反,其意图是覆盖落在所要求保护主题的精神和范围之内的所有修改、等价物和替换的方案。首先参考图1,示出了程序剖析系统100。程序剖析系统100基于对更广泛系统内(例如,程序拥有的、程序的子系统拥有的、依赖组件内的子系统拥有的…)代码和/或其身份等(诸如程序人员)的语义目的的高级理解,允许程序性能的自顶向下的视图。这可通过处理和分析数据收集组件110所收集的剖析图数据来实现。数据收集组件110被配置成获取关于程序112的剖析图数据。剖析图数据可以是与程序的执行相关联的任何的任意收集和/或计算的数据。在一个实例中,这种剖析图数据可与关于特定函数/操作的执行时间相对应。在另一个实例中,剖析图数据可对应于非执行时间数据,包括一个或多个事件的出现或频率、以及任选的与一个或多个事件的出现相关联的有效载荷,其中,事件是正在执行的程序已经命中代码中的特定点的信号,并且有效载荷是与命中代码中的特定点相关联的数据。作为示例,非执行时间剖析图数据可包括所分配的字节或对象、页刷新、注册表读/写、所产生的工作者线程、或相关联的二进制代码等。程序(也被称为计算机程序)112包括计算机编程语言中指定的指令集,该计算机编程语言在由处理器执行时执行该指令集规定的动作。数据收集组件110可利用包括检测和采样的各种技术来从正在执行的程序收集剖析图数据。程序112所执行的工作可由例如操作系统收集的事件/执行探针(例如,来自被检测的代码的事件追踪事件或回调)或栈样本来捕捉。可收集允许在执行时间(例如,中央处理单元利用或活动执行中消耗的精确的周期)、堆分配、或可在所生成事件的定制有效载荷中表述的其他任意信息方面的分析的数据。数据收集组件110可利用检测和采样的组合。每种方法收集的数据可扩充另一种方法。例如,数据可被组合/合并、取平均值、交叉检查、和/或统计地归一化等。以此方式,两种方法的优点可被利用,并且缺点可被抵消。作为示例,两种方法可引起观察者效应,这意味着观察程序的动作本身就可影响程序。采样通常不会引起显著的观察者效应,但会带来不如检测所收集的那么精确的数据。因此,可在适当时向采样数据补充检测数据。针对观察者效应的额外缓解也可通过创建剖析桶来提供,该剖析桶对与操作系统代码相关联的剖析数据进行公开地分组(从而排除其它数据),该操作系统代码在根据所检测的代码的事件生成以及根据代码采样栈的生成期间执行。此外,当接收到关于所检测的探针/事件的栈时,也可启用轻量检测方法。假设为所分配的字节单独地启用单个事件(这几乎不引起观察者效应)。如果“所分配的字节”事件与栈相关联,则可根据栈指定的装桶来对所分配的数据进行分组。注意,在此示例中,完全不启用采样。因此,运行时事件和/或所收集的栈可用于组织剖析图数据。分组组件120被配置成根据组织方案114将利用数据收集组件110收集的剖析图数据归属到特定的组或桶。换言之,剖析图数据可基于描述性机制被相关和相关联,该描述性机制定义了组以及组之间的关系。在一个实例中,组可传递关于程序或其子系统的高级函数(例如,打开文档、重新计算布局、呈现窗口...)的信息。除前述内容之外,分组组件120可被配置成基于给定的组织方案114来初始化数据结构,并将剖析图数据填充到组中。其他实现也有可能,包括但不限于用组信息来标记剖析数据。无论何种情形,分组组件120执行的处理结果是被分组的数据,该数据可被容纳在本地或远程可访问的数据存储140中。组织方案114可例如按照函数名(例如,二进制文件(例如可执行文件)内的完整函数名)定义分组。可在父与子的分层关系中表述组。然而,组可通过例如将其定义为兄弟节点来彼此互斥地构建。组可包括例如作为子节点的子组,也被称为类别(category)。然而,注意,除非以其他方式显式地表示,对术语“一个组”或“多个组”的使用旨在包括子组或类别。函数可在任意层级与组相关联,并且可出现在任意数量的组中。换言之,函数不限于被归属到单个组,而相反可出现在任何粒度级别的多个组中。函数信息也可用于例如基 于栈样本和/或所检测的收集/基于事件的收集来聚合数据。例如,二进制文件名和函数名可用作分组的基础。这在区分跨越多个二进制文件的执行方面可能是有帮助的。组还定义了不显式地提供二进制/函数细节、但提供所收集的数据中可用的事件标识符的事件。这种情况中的二进制/函数信息可由提出指定事件的代码位置集合来暗示。在至少某些操作系统中,在生成区分提出事件的多个代码位置的事件中,栈将是可用的。此外,注意,此处提供的组分层结构可以独立于函数执行路径。这样的理由有两个。第一,在被检测的情形中,栈的概念可被采纳用于对数据分组,其与实际的执行栈完全解耦合。第二,在采样的情形中,任意唯一的栈可与同一组相关联。还可为各个组指定优先级,以辅助对数据分组。更具体地,优先级允许基于最近的栈帧(例如,文字代码栈、虚拟事件开始/停止对栈)来打破默认的组织规则。这样的优先级值可相对于所有其他分组来表述,并用于辅助分组/装桶决策。如果针对用于与存在以保存数据的其他候选组相比具有较低指定优先级的组考虑数据,则该数据可被归属到具有最高显式或隐式优先级的替换组。在分层关系中定义的组可基于该分层结构具有隐式优先级。如果例如父“A”包括子“B”,则“B”被认为是比“A”优先级高的组。因此,用栈“A::B”收集的数据将因此与组“B”相关联。然而,如果组“B”被显式地指定为比组“A”低的优先级,则数据将被分组到组“A”。可按各种方式将剖析图数据相关,以许可各种范围内的灵活查询等。作为示例,剖析数据可以跨进程边界或跨机器而延伸。在一个实例中,剖析图数据可根据时间戳按时间来分组。在更细粒度的层级,剖析图数据可按中央处理单元或线程来分组。此外,统一活动标识符可用于以有用的方式来跟踪线程间通信,例如通过跟踪与多线程事务相关联的活动。在一个实例中,组织方案114可被具体为数据文件,该数据文件可被创作、编辑、在其他进程带外维护、或独立于其他进程来维护。此外,组织方案114可被轻松地传递。这可允许代码专家捕捉分析程序(对该程序来说,他们是专家)的剖析图数据的有用模型,并将该模型分发给非专家的用户。例如,web浏览器的内部工作中的专家可生成组织方案,并将该方案分发给web应用开发者以辅助性能调整。在一个特定的实现中,组织方案114可用XML(可扩展标记语言)来表述,因此提供了大体上的可读性。在该实现中,并且如下面进一步描述所采用的,组或子组被称为标记或标记集合,其中标记指示组,标记集合是指组的集合。此处稍后提供XML中指定的组织方案的示例。方案生成组件130被配置成方便组织方案114的生成。在一个实例中,人类用户可任选地采用模式匹配或辅助说明的其他过滤机制(例如,正则表达式、使用通配符…),来手动地创作组织方案114。方案生成组件130可例如基于可用信息(包括上下文信息)来允许组的自动或半自动(例如,有用户辅助的)生成。作为示例而非限制,存储了与对程序作出的改变有关的信息的源控制历史可由方案生成组件130来挖掘,并可用于自动地生成组。例如,“代码所有者”组可被创建,以允许剖析图数据被代码的团队或个人所有者分解。这允许用户轻松地标识有助于性能问题的专家。查询处理器组件150被配置成允许执行针对已分组数据的查询。给定一个查询,查询处理器组件150可利用已知或新的机制从数据存储140提取满足该查询的结果并将其返回。例如,可视化或诊断工具可采用查询处理器组件150来获取数据。可视化组件160被配置成允许将已分组的剖析图数据可视化。剖析图数据可以按任意数量的方式来呈现,而不限于常规的调用树。此外,由于在语义有意义的层级对剖析图数据进行分组,因此可视化可利用分组,并进一步辅助人类用户理解剖析图数据。根据一个实施例,可视化组件160可生成图形用户界面,该图形用户界面图形地描绘已分组的剖析图数据并允许与数据交互。例如,可视化组件160或人类用户可创作针对已分组数据的查询,并根据查询返回经过滤的结果。此外,可提供允许用户探索以获取更详细的数据、以及上卷以在更抽象/更高层查看数据的机制。虽然程序剖析系统100包括可视化组件160,但是应当理解,可视化或诊断工具可以在程序剖析系统的外部。在该场景中,交互可通过类似的方式来实现,例如通过查询剖析系统以得到必需的数据。此外,注意,可视化组件160在各个方面是可扩展的。例如,可视化组件160最初可支持第一可视化集合。接下来,第二可视化集合可例如经由第三方插件或通过对程序剖析系统100的 更新/升级被添加。订阅组件170提供散布已分组数据的附加或替换方式。更具体地,数据存储140中容纳的已分组数据可根据发布/订阅模型来递送。订阅组件170可供应并管理订阅,并且将已分组数据发布到感兴趣的订阅者。程序剖析系统100不限于程序的实时执行,或换言之收集剖析图数据方面的操作。另外,程序剖析系统100可在历史数据方面或在收集后(post-collection)时操作。例如,任意的组织方案可被覆盖到持久保存的日志上,以允许数据在就程序功能和结构而言有意义的层级上被查看。换言之,可通过应用替换的分组来提出针对追踪数据的任意数量的视图。如图1所示,组织方案114可不仅在程序剖析系统100的外部还可在程序112的外部。这有许多益处,包括便携性以及允许组织方案被轻松地改变等。然而,所公开的主题不限于此。在替换的实施例中,组织方案114可被嵌入到程序112或其版本中,如图2所示。例如,组织方案可以此方式被编码,使得信息与诸如检测事件的一部分的剖析图数据一起来提供。更具体地,组织方案可被编码到程序函数名中。另外地或另选地,指示组或子组的串标识符可与程序的函数或其他部分相关联,并与事件一起提出。此外,用于生成组织方案114的进程可被编码到程序112中,而不在程序112中对组织方案114进行编码。方案生成组件130随后可基于已编码的进程(例如在运行时)来自动地生成组织方案114。作为示例,在运行时,任意分组可由二进制名称来创建,使得在第一二进制文件的执行期间收集的全部剖析图数据被归属到第一二进制文件,在第二二进制文件被执行时收集的全部剖析图数据被归属到第二二进制文件。另外,方案生成组件130可被配置成当例如数据正被收集时实时地自动地更新组织方案114,或作为在收集日志上动态地重新生成新视图的一部分来实时地自动地更新组织方案114。图3描述了代表性数据收集组件110。如前所述,数据收集组件110被配置成从程序中获取剖析数据,这些数据可接下来根据组织方案被分组。数据收集组件110包括样本组件310和检测组件320。样本组件310被配置成例如通过对操作系统作出适当的调用并获取结果,在执行期间初始化对程序的采样。在一个实例中,样本是在时间的特定时刻收集的栈(或者作为诸如分配事件的 特定代码操作的结果,或者作为经组织的收集进程的一部分,将根据该收集进程创建代码执行的概要图)。检测组件320被配置成接收、检索或以其他方式获得或获取来自程序检测的数据。此处,数据可以是探针数据,实际上例如开始/停止事件对。在一个实例中,采用开始/停止事件以获取有效载荷。在其他实例中,开始/停止事件可用于划分有趣的边界(没有显式的有效载荷)。可获取任何所生成的事件的时间戳和调用栈。因此,事件也可被称为隐式地携带那些有效载荷。样本可被认为是系统用时间戳和当前的调用栈有效载荷强制“代码正在执行”事件。此外,注意,可用活动标识符标记事件,该活动标识符可以跨各种上下文(诸如线程)流动到其他事件中。因此,该数据可用于以灵活的方式来使剖析图数据相关。组合组件330被配置成允许以各种方式使用检测和采样这两者。例如,每种方法收集的数据可扩充另一种方法。更具体地,数据可被组合、用于交叉检查结果、和/或统计地归一化等。以此方式,两种方法的优点可被利用,并且缺点可被减轻。作为示例而非限制,可用更精确的检测数据来补充本质上不太精确的样本数据。上下文检测组件340被配置成检测上下文切换,或换言之处理上下文中的改变。例如,上下文切换可与共享CPU的多个进程相关地出现。在这样的多任务环境中,进程可被中止并且CPU的状态可被存储,使得稍后可从同一点继续该进程。换言之,一个进程被切换到中央处理单元以外,使得另一进程可以运行。在一个实例中,上下文切换可被认为是一种特殊类型的事件。一旦检测到与正被剖析的程序有关的上下文切换,数据收集可被挂起直到处理继续或所收集的数据可被标记,使得程序剖析系统100可区分与程序相关联的数据以及不与程序相关联的数据。以此方式,数据可被排除。例如,执行时间的函数调用的持续时间可排除在执行与正被剖析的程序无关的进程上消耗的时间,或者换言之,由于上下文切换与正被剖析的程序有关的不活动的时间段。考虑结合图4用XML创作的以下组织方案,其中标记标识组。该组织方案涉及数据集合(包括三个任意分组(也被称为标记)“A”、“B”和“C”的多个开始/停止事件对)的检测方法。图6示出9毫秒的事件流时间线410,这是仅出于说明目的选择的粒度级。在该时间线410中,与组/标记“A”相关联的事件开始,如“A_活动1_开始”组织方案中所指示的。在执行期间并在与标记“A”相关联的退出事件之前,与组/标记“B”相关联的事件激发,如“B_活动l_开始”表示的。当“A”和“B”在进行中时,与组/标记“C”有关的事件(C_活动1_开始)在3毫秒处出现,并且退出事件(C_活动1_开始停止)在4毫秒之前出现。在4毫秒处,上下文切换出现,并且这个特定的活动线被挂起。如所指示的,在4、5和6毫秒期间将不对执行数据进行归属。在7毫秒处,标记“B”结束执行,并且在8毫秒处,标记“A”结束。在9毫秒处,标记“C”的开始/停止对出现。由于标记“A”和标记“B”都不在进行中,因此该时间单元被添加到标记“C”。因此,存在上下文切换之前的时间420、上下文切换期间的时间430和上下文切换之后的时间440。在时间410期间,1毫秒被归属到组/标记“A”、“B”和“C”中的每一个。在时间430期间,没有时间被归属到任何分组。在时间430期间,1毫秒被归属到组/标记“A”、“B”和“C”中的每一个。以下是一个类似的场景,除了数据收集机制是采样而非检测。考虑结合图5用XML指定的以下组织方案,其中标记标识组,结构定义组之间的分层关系。在此,为栈样本的分组定义组织方案。如图5所示,收集了6个栈,在上下文切换之前的时间510期间收集了3个,在对应于上下文切换的时间520期间收集了0个,在上下文切换之后的时间530期间收集了3个。在第一样本512中,只有函数“A”正在执行。在第二样本514中,函数“B”己被函数“A”调用,得到“A”和“B”的栈(A::B)。如组织方案所定义的,与该代码栈相关联的时间被归属到“B”。在第三样本516中,函数“C”己被由函数“A”调用的函数“B”调用,得到“A”、“B”和“C”的栈。根据组织方案,该代码栈的时间被归属到“C”。由于上下文切换,没有在时间520期间收集的样本。在第四样本532中,只有函数“A”和“B”保持运行,得到“A”和“B”的栈(A::B),并且时间被归属到“B”。在第五样本534中,代码栈只包括函数“A”,接下来导致时间被归属到“A”。随后,在第六样本536中,函数“C”被函数“D”调用,得到“D”和“C”的栈(D::C)。在这种情况下,“C”是与己定义的组相关联的最接近的帧,因此它被添加到组/标记“C”。注意,在检查分层XML的基础上可能严格假设的情况下,“A”和“B”都不需要位于栈中以便提供这种装桶。图5还有助于澄清系统中优先级的角色。假设组“C”已被赋予比“A”或“B”低的优先级(撤销在缺少任何其他显式标记的情况下,由子的优先级比父高的事实所建立的隐含优先级)。在这种场景中,第三个收集的栈“A::B::C”将实际被归属到经分析的栈中最高优先级的组:组“B”。第六个收集的栈“D::C”将仍被归属到组“C”,如上所述。还要注意,诸如之前的组织方案的组织方案可采用与符号/事件名有关的通配符和/或模式匹配。例如,考虑“module=‘*’method=‘malloc’”中使用星号通配符。在此,将跨全部模块来调用分配例程。作为另一示例,考虑“method=‘ClassOne::*’”。在此情况下,标识“ClassOne”的全部成员。返回到图3,提供关于如何采用关于分组的检测和采样的附加细节。检测方法利用多个事件开始/停止对来划分有意义的边界并分离剖析图数据。在此场景中,事件是正在执行的程序已经命中代码中特定点的信号。在此,存在与开始和停止相关联的一对事件。例如,开始事件可指示页面呈现已经开始,并且停止事件可指示页面呈现已经终止。此外,假设存在将包括与事件“B”和事件“C”相关联的数据的任意组“A”。当事件“B”和事件“C”开始和停止时,居间执行时间可被聚合并被归属到组“A”。用开始停止对指定的间隔可因此被合并到逻辑组“A”中。换言之,多个事件可用于划分分组的边界。此外,注意,事件可与非执行时间剖析图数据相关联,该数据包括所分配的字节或对象、页刷新、注册表读/写、所产生的线程等。因此,事件可指示例如“X”个字节被分配。根据采样方法,采用经采样的栈和时间戳,而非具有事件开始/停止对。可相对于一个或多个特定栈来定义组。换言之,栈的子集被映射到一个或多个逻辑组。在检测方法中,诸如“C”的事件何时激活是已知的。然而,还存在对应于事件“C”激活的栈。另外,事件“C”可从多个地点被激活,因此可存在许多可被归属到组“A”的不同栈。例如,可以指示栈“A::B::C”和栈“X::Y::C”指示事件“C”,并映射到组“A”,但是栈“D::E::C”不会。换言之,检测指示事件“C”可能已经激活的经验代码条件,并且因此,相关联的剖析图数据应被归属到逻辑组“A”。有了检测,有可能精确地确定程序中正在发生着什么,而采样是近似。采样在本质上指示剖析数据在程序被检查时 被归属到逻辑组A的特定的时间百分比。当与事件开始/停止对一起工作时,这些对导致逻辑分组,并允许在不查阅栈的情况下归属相关联的剖析图数据以及聚合居间数据点。例如,当诸如呈现的事件开始,字节被分配,并且接下来呈现事件停止的事件时,所分配的字节被归属到例如组“A”。不需要查阅栈。然而,如果不采用事件开始/停止对,则可存在与所分配的字节相关联的栈。在这种情况下,可以确定或推断所分配的字节被归属到组“A”。因此,与附加数据组合的栈允许系统回头执行同一事件开始/停止对分组。在只采用样本栈的另一场景中,可采用执行时间采样。在此,能够被揭示的信息是在逻辑组中执行所消耗的近似时间等。换言之,样本本身是在逻辑上被分组的。应当理解,分组信息无需限于在组织方案中表述的组织剖析图数据的信息。作为示例,考虑数据流,该数据流将分组开始/停止事件对以及另一感兴趣的事件(诸如字节被分配)交错进行。在此情形中,分组开始/停止事件对可被用作对字节分配事件分组的基础。换言之,所分配的字节可被归属到与事件开始/停止对相关联的组。当然,组织方案中表达的栈-分组信息可被利用,并被应用到与例如事件有效载荷相关联的回调。图6和7是与web浏览器相关联的剖析图数据的可视化的示例性屏幕截图。此外,可视化可根据组织方案(诸如附录A中提供的那个)来产生。在此,组织方案被编码成XML文档,其中标记标识组,并且结构定义组之间的分层关系。提供图6和7以便于澄清和理解本发明的各方面并且不限制所附权利要求的范围。本领域技术人员在阅读本说明书后将认识到在本发明的精神和范围内存在对已分组剖析图数据进行可视化的各种其他方式。图6是剖析图数据的表可视化的示例性屏幕截图。更具体地,屏幕截图描绘了如组织方案所定义的、详细的、子系统对中央处理器单元(CPU)的利用分解。表指定了相对于多个行和列的组和子组。被标记为“进程”的列610指定了与单个二进制或可执行文件相对应的组的分层结构的根。列615提供线程标识符的分组。对于每个线程标识符,存在三层子组,如由列620、625和630所指示的。例如,列620标识名为“三叉戟”的浏览器呈现引擎,它被分解成列625中所示的“布局”和“显示”等。此外,列625中的“布局”又被分解 成列630中所示的“构建块”和“构建布局”组等。注释并聚合每个分组和子组的剖析图数据,并在列635、640、645、650、660和665中提供分别对应于开始时间、结束时间、持续时间、CPU利用的百分比、时间的百分比和计数的该剖析图数据。根据该表,传递高级的有意义的信息。用户可从快速一瞥中确定浏览器正消耗过多的时间在布局中,并且优化努力可因此聚焦在程序处理布局的部分。图7是示出子系统对CPU的执行利用分解的示例性屏幕截图,如由附录A中指定的组织方案所定义的。示出了允许对检测(例如开始/停止对)和采样(例如栈样本)的两个收集机制进行比较的两个视图710和750。视图710和视图750中的各自包括用图示意单个中央处理单元随时间的百分比使用的柱状图730和770。此外,每个图区分经由窗口720和760中的复选框可选择的组。参考若干组件之间的交互已经描述了上述系统、架构、环境等。应该理解,这样的系统和组件可以包括其中指定的那些组件或子组件,某些指定的组件或子组件,和/或附加的组件。子组件也可以被实现为在通信上被耦合到其他组件而不是被包括在父组件中的组件。此外,一个或多个组件和/或子组件可以组合成提供聚集功能的单个组件。系统、组件、和/或子组件之间的通信可以根据推送和/或拉取模型来实现。组件也可以与一个或多个其他组件进行交互,出于简要考虑在此未具体描述其他组件,但本领域的技术人员均已知。此外,以上公开系统以及以下方法的各个部分可以包括或采用基于人工智能、机器学习或知识或规则的组件、子组件、进程、装置、方法或机制(例如,支持向量机、神经网络、专家系统、贝叶斯信任网络、模糊逻辑、数据融合引擎、分类器等)。这样的组件和其它组件可以自动化其执行的某些机制或过程,由此使得系统和方法的各部分更为自适应以及高效及智能。作为示例而非限制,方案生成组件130可使用这样的机制基于可用信息来推断组。考虑到以上描述的示例性系统,参考图8和9的流程图将可以更好地理解根据所公开的主题实现的方法。尽管为了说明简洁起见,按照一系列框示出和描述了方法,但是,应该理解和知道,所要求保护的主题不限于框的次序,因为一些框可以按与此处所描绘和描述的不同的次序进行和/或与其他框并发地进行。此外,并非全部所示出的框都是实现下面所描述的方法所必需的。参考图8,示出了程序剖析的方法800。在附图标记810,可获取剖析图数据。在一个实例中,这种数据可经由代码检测、采样或这二者来获取。或者,历史剖析图数据可从例如日志或其他持久存储的文件中接收、检索、或以其他方式获得或获取。在标记820,可根据组织方案将剖析图数据归属到组,该组织方案定义组以及组之间的关系。换言之,组织方案可被覆盖到剖析图数据上。此外,分组可与程序的高级函数或程序的子系统相关联,使得组是对程序分析有意义的抽象。作为示例,与第一组函数相关联的执行时间和中央处理器利用可被归属到组“A”,该函数负责浏览器窗口中内容的布局,而与显示浏览器窗口的第二组函数相关联的相同数据可被归属到组“B”。此外以及根据一个实施例,与上下文切换相关联的剖析图数据被排除。在附图标记830,可基于所归属的组来呈现数据,以对已分组的数据进行可视化并辅助诊断性能问题。换言之,可就其所归属的组来呈现剖析图数据。在一个实例中,已分组的数据可被容纳在数据存储中,该数据存储可被查询以检索用于可视化的必需数据。此外,可视化可被具体化为图形用户界面,该图形用户界面可允许人类用户发起或修改查询,并且影响呈现得自这些查询的数据的方式。例如,这些查询可允许相对于时间线放大或缩小。此外,替换的组织方案可被应用到数据,以进一步辅助分析。图9是描绘分组剖析图数据方法的流程图。在附图标记910,接收、检索或以其他方式获得或获取组织方案。组织方案可指定组以及组之间的关系。在一个实例中,可任选地利用模式匹配或辅助说明的其他过滤机制(例如正则表达式、使用通配符…),来手动地创作组织方案。另外地或另选地,组织方案可基于上下文或其他可用信息来自动或半自动地生成。在标记920,可基于方案来创建、或实例化数据结构。例如,可为每个已定义的组创建结构。在附图标记930,例如当剖析图数据被接收时,可用该剖析图数据来填充所创建的数据结构。以此方式,剖析数据可被归属到组。接下来,已分组数据可被查询或保存,以供稍后使用。在本文中使用的词语“示例性”或其各种形式意味着用作示例、实例或说明。在此被描述为“示例性”的任何方面或设计并不一定要被解释为相比其它方面或设计更优选或有利。此外,各示例只是出于清楚和理解的目的来提供的 并且并不意味着以任何方式限制或约束所要求保护主题或本发明的相关部分。可以理解,本来可呈现不同范围的多个附加或替换示例,但出于简明的目的已被省略。此处使用的术语“组件”和“系统”及其各种形式(例如,组件、系统、子系统等)旨在表示与计算机相关的实体,其可以是硬件、硬件和软件的组合、软件、或执行中的软件。例如,组件可以是但不限于是,在处理器上运行的进程、处理器、对象、实例、可执行程序、执行的线程、程序和/或计算机。作为说明,在计算机上运行的应用和计算机都可以是组件。一个或多个组件可以驻留在进程和/或执行线程中,并且组件可以位于一个计算机内和/或分布在两个或更多计算机之间。本描述和所附权利要求书中使用的连接词“或”旨在意味着包括性“或”而非互斥性“或”,除非另有指定或从上下文中清晰可见。换言之,“‘X’或‘Y’”旨在意味着“X”和“Y”的任何包括性排列。例如,如果“‘A’采用‘X’”,“‘A’采用‘Y’”或“‘A’采用‘X’和‘Y’”两者,则在任何上述情况下都满足“‘A’采用‘X’或‘Y’”。如此处所使用,术语“推论”或“推断”通常指的是从经由事件和/或数据捕捉的一组观察结果来推理或推断系统、环境、和/或用户的状态的过程。可以使用推断来标识特定上下文或动作,也可以生成例如状态上的概率分布。推断可以是概率性的,即,基于对数据和事件的考虑,计算在感兴趣状态上的概率分布。推断也可以是指用于从一组事件和/或数据构成较高级别的事件的技术。这样的推断导致从一组观察到的事件和/或存储的事件数据构建新的事件或动作,不管事件在时间上是否紧密相关,以及事件和数据是来自一个还是多个事件和数据源。可采用各种分类方案和/或系统(例如,支持向量机、神经网络、专家系统、贝叶斯置信网络、模糊逻辑、数据融合引擎……)来执行关于所要求保护主题的自动化和/或推断的动作。而且,对于在详细描述或权利要求书中使用术语“包括”、“包含”、“具有”、“含有”或其它形式的变型而言,这样的术语旨在以类似于术语“包括”的方式体现包含性,如同“包括”在用作权利要求书中的过渡词时所解释的那样。为了为所要求保护主题提供上下文,图10以及以下讨论旨在提供对其中可以实现本主题的各方面的合适环境的简要、概括描述。然而,合适的环境只是示例并且并非旨在对使用范围或功能提出任何限制。尽管能够在可以在一台或多台计算机上运行的程序的计算机可执行指令的一般上下文中描述以上公开的系统和方法,但是,本领域的技术人员将认识到,各方面也可以与其他程序模块等相结合地实现。一般而言,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、组件和数据结构等。此外,本领域技术人员可以理解,上述系统和方法可用各种计算机系统配置实现,包括单处理器、多处理器或多核处理器计算机系统、小型计算设备、大型计算机、以及个人计算机、手持式计算设备(例如,个人数字助理(PDA)、电话、手表……)、基于微处理器或可编程消费或工业电子设备等。各方面也可以在其中任务由通过通信网络链接的远程处理设备执行的分布式计算环境中实现。然而,所要求保护主题的某些方面,如果不是所有方面的话,可以在独立计算机上实施。在分布式计算环境中,程序模块可以位于本地和远程存储器存储设备中的一个或两者中。参考图10,示出了示例通用计算机1010或计算设备(例如,台式机、膝上型计算机、服务器、手持式设备、可编程消费或工业电子产品、机顶盒、游戏系统……)。计算机1010包括一个或多个处理器1020、存储器1030、系统总线940、大容量存储1050、以及一个或多个接口组件1070。系统总线1040与至少上述系统组件通信地耦合。然而,可以理解,在其最简单的形式中,计算机1010可包括耦合到存储器1030的一个或多个处理器1020,该一个或多个处理器620执行存储在存储器1030中的各种计算机可执行动作、指令和/或组件。处理器1020可以用通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其它可编程逻辑器件、分立门或晶体管逻辑、分立硬件组件或被设计为执行此处描述的功能的其任意组合来实现。通用处理器可以是微处理器,但在替换方案中,处理器可以是任何处理器、控制器、微控制器、或状态机。处理器1020还可被实现为计算设备的组合,例如DSP和微处理器的组合、多个微处理器、多核处理器、结合DSP核的一 个或多个微处理器、或任何其它这种配置。计算机1010可包括各种计算机可读介质或以其他方式与各种计算机可读介质交互以便于控制计算机1010来实现所要求保护主题的一个或多个方面。计算机可读介质可以是能由计算机1010访问的任何可用介质,并包含易失性和非易失性介质以及可移动和不可移动介质。作为示例而非限制,计算机可读介质可包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其它数据这样的信息的任意方法或技术来实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括,但不限于,存储器设备(例如,随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)……)、磁存储设备(例如,硬盘、软盘、磁带盒、磁带……)、光盘(例如,紧致盘(CD)、数字多功能盘(DVD)……)、以及固态设备(例如,固态驱动器(SSD)、闪存驱动器(例如,卡、棒、键驱动器……)……)、或者可用于存储所需信息并且可由计算机1010访问的任何其他介质。通信介质通常以诸如载波或其他传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其他数据,并包括任何信息传送介质。术语“已调制数据信号”是指使得以在信号中编码信息的方式来设定或改变其一个或多个特征的信号。作为示例而非限制,通信介质包括诸如有线网络或直接线连接之类的有线介质,以及诸如声学、RF、红外及其他无线介质之类的无线介质。上述的任意组合也应包含在计算机可读介质的范围内。存储器1030和大容量存储1050是计算机可读存储介质的示例。取决于计算设备的确切配置和类型,存储器1030可以是易失性的(例如RAM)、非易失性的(例如ROM、闪存……)或是两者的某种组合。作为示例,包括诸如在启动期间在计算机1010内的元件之间传输信息的基本例程的基本输入/输出系统(BIOS)可被存储在非易失性存储器中,而易失性存储器可担当外部高速缓存存储器以便于处理器1020的处理等。大容量存储1050包括相对于存储器1030用于存储大量数据的可移动/不可移动、易失性/非易失性计算机存储介质。例如,大容量存储1050包括但不限于,诸如磁盘或光盘驱动器、软盘驱动器、闪存存储器、固态驱动器、或记 忆棒等一个或多个设备。存储器1030和大容量存储1050可包括或其中存储有操作系统1060、一个或多个应用1062、一个或多个程序模块1064和数据1066。操作系统1060用于控制和分配计算机1010的资源。应用1062包括系统和应用软件之一或两者,并且可利用操作系统1060对资源的管理通过存储在存储器1030和/或大容量存储1050中的程序模块1064和数据1066来执行一个或多个动作。因此,应用1062可根据由此提供的逻辑来将通用计算机1010变成专用机器。所要求保护主题的全部或各部分可以使用产生控制计算机以实现所公开功能的软件、固件、硬件或其任意组合的标准编程和/或工程技术来实现。作为示例而非限制,程序剖析系统100或其一部分可以是应用1062或形成应用1062的一部分,并且包括存储在存储器和/或大容量存储1050中的一个或多个模块1064和数据1066,这些模块和数据的功能可在由一个或多个处理器1020执行时可实现。根据一个特定实施例,处理器1020可与片上系统(SOC)或在单个集成电路基座上包括或换言之集成硬件和软件的类似架构相对应。此处,处理器1020可包括至少与处理器1020和存储器1030相似的一个或多个处理器以及存储器等。常规处理器包括最少量的硬件和软件并且广泛依赖于外部硬件和软件。作为对比,处理器的SOC实现更强大,因为它将硬件和软件嵌入其中以能够用最少的硬件和软件或不依赖于外部硬件和软件来启用特定功能。例如,程序剖析系统100和/或相关联的功能可被嵌入到SOC体系结构中的硬件内。计算机1010还包括通信地耦合到系统总线1040并便于与计算机1010的交互的一个或多个接口组件1070。作为示例,接口组件1070可以是端口(例如,串行、并行、PCMCIA、USB、火线……)或接口卡(例如,声音、视频……)等等。在一个示例实现中,接口组件1070可被具体化为用户输入/输出接口,该用户输入/输出接口使得用户能够通过一个或多个输入设备(例如,诸如鼠标等定点设备、跟踪球、指示笔、触摸垫、键盘、话筒、操纵杆、游戏手柄、圆盘式卫星天线、扫描仪、照相机、其他计算机……)来将命令和信息输入到计算机1010中。例如,输入设备可捕捉用户姿势或语音命令。在另一示例实现中,接口组件1070可被具体化为输出外围接口,该输出外围接口向显示器(例 如,CRT、LCD、等离子……)、扬声器、打印机和/或其它计算机等提供输出。此外,接口组件1070可被具体化为网络接口,该网络接口使得能够诸如通过有线或无线通信链路与其他计算设备(未示出)通信。以上所已经描述的内容包括所要求保护主题的各方面的示例。当然,出于描绘所要求保护主题的目的而描述每一个可以想到的组件或方法的组合是不可能的,但本领域内的普通技术人员应该认识到,所要求保护主题的许多进一步的组合和排列都是可能的。从而,所公开的主题旨在涵盖落入所附权利要求书的精神和范围内的所有这样的变更、修改和变化。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1