诊断数据的基于活动的采样的制作方法

文档序号:9650597阅读:243来源:国知局
诊断数据的基于活动的采样的制作方法
【专利说明】诊断数据的基于活动的采样
[0001] 背景
[0002] 程序的源代码可在理解程序的行为的方面非常有用。但是商业计算系统中的大多 数(即便不是全部)有用计算太复杂而不能在精神上重建。具体而言,面对创建、调试或者 提升商业计算系统的甚至极有经验且有能力的软件开发者不仅仅依赖于对源代码的视觉 检查或依赖于在思想上或在纸面上模拟软件执行的尝试。相反,开发者执行软件以便观察 在执行期间软件做什么或无法做什么。
[0003] 为了改善其在执行期间对软件的动作的理解,开发者使用诸如调试器、剖析器 (profiler)、嵌入的打印语句、以及诊断日志之类的工具,这些工具提供了软件执行时的附 加数据。对程序的检查随后可通过检查工具所提供的数据来辅助。然而,这些软件开发工 具中的每个工具还提出了技术挑战,例如,如何获得工具数据而不更改被检查程序的无工 具行为,以及如何避免将工具数据埋葬在无关数据的洪流中,以及如何按照改善开发者对 被检查的程序的理解的方式将不同工具数据段彼此连接。
[0004] 概述
[0005] 本文描述的一些实施例涉及如何获得关于软件程序的有用诊断数据而不将该有 用数据埋葬在不相关数据的洪流中的技术问题。一些实施例还涉及如何将不同诊断数据段 彼此连接来帮助改善开发者对正被诊断的程序的理解(特别是该程序跨多个执行线程时) 的技术问题。
[0006] 从架构角度,一些实施例提供了使用与一个或多个处理器操作地通信的存储器提 供诊断数据的基于活动的采样。驻留于存储器中的事件定义集合定义了开发者相信可阐明 应用程序的行为的事件。该应用还驻留在所述存储器中并具有被配置成调用至少一个日志 事件规程的应用代码。当前活动id指定该应用的活动是否当前被开发者指明或代表开发 者指明。当某个活动当前被指明时,当前活动id还指定哪个活动当前被指明。
[0007] 在一些实施例中,驻留于所述存储器中的记录器具有记录器代码,所述记录器代 码被配置成与所述处理器和存储器交互以检查指定记录条件的集合并在至少一个指定记 录条件被满足时响应于日志事件规程的调用而向日志发送日志条目。该记录器包括启用日 志的活动的集合,且还包括具有相应采样频率条件的一个或多个开始事件的集合。每个开 始事件是在事件定义集合中定义的事件(尽管不必然在那里被定义为开始事件)。
[0008] 在一些实施例中,指定记录条件包括指定当前活动id存在于该启用日志的活动 的集合中的第一条件。在一些实施例中,指定记录条件还包括指定以下的第二条件:当前活 动id不在该启用日志的活动的集合中,该日志事件规程标识304开始事件,且该日志事件 规程的调用与该开始事件的采样频率条件相一致。
[0009] 在一些实施例中,开始事件采样频率指定该日志事件规程的调用是对于具有每N次日志事件规程调用一个日志条目的采样频率的开始事件的第N次记录尝试。在这些和/ 或其它实施例中,开始事件采样频率指定在指定时间段内存在少于Μ个的开始事件。
[0010] 一些实施例包括被配置成设置当前活动id的至少一个设置活动id规程调用。该 设置活动id规程调用驻留于以下的至少一者中:该应用代码,包括用于支持该应用代码的 运行时的框架。具体而言,该应用可以是C++应用,且该框架可包括熟悉的标准C++库。
[0011] 在一些实施例中,该应用是多线程应用。在一些实施例中,该实施例包括标识该应 用的执行期间该应用的当前执行线程的当前线程id。在一些实施例中,至少一个日志条目 包含当前线程id("当前"意思是日志条目创建的当前)。
[0012] 一些实施例包括具有相应活动id的线程id的集合。记录器代码被配置成通过在 线程id集合中查找当前线程id来寻找相应活动id并使用该活动id作为当前活动id来 检索当前活动id。
[0013] 一些实施例包括性能监视器或其它日志消费器,其可在该应用内或应用外。日志 消费器的代码被配置成向记录器发送采样配置消息来将至少一个事件指定为开始事件并 指定针对该开始事件的采样频率条件。在这些和/或其他实施例中,采样配置可按其它方 式指定,诸如通过配置文件、通过用户界面控制的参数、或适于传达采样配置的其它熟悉的 进程间通?目机制。
[0014] 一些实施例包括子活动规程调用,其被配置成通知记录器当前活动正创建子活 动。在一些实施例中,记录器代码被配置成响应于子活动规程调用而向启用日志的活动的 集合添加子活动。在一些实施例中,日志条目建档由一活动(其为在子活动规程调用时的 当前活动)创建的子活动。
[0015] 从规程角度,一些实施例执行了一种用于使用记录器的诊断数据的基于活动的采 样的技术过程。一些实施例用代表启用日志的活动的集合的数据以及用代表具有相应采样 频率条件的开始事件的集合的数据来配置记录器。在一些实施例中,所述记录器中的数据 将线程id与活动id相关联,所述线程id标识计算系统的线程,且所述活动id标识至少部 分由所标识的相关联线程执行的活动。一些实施例在记录器中接收由调用线程对日志事件 规程调用的指示,所述指示指定一事件。一些实施例确定在启用日志的活动的集合中表示 的任何活动是否当前是调用线程的活动。如果启用日志的活动的集合中表示的任何活动当 前是调用线程的活动,则该事件被记录在诊断数据日志中。如果启用日志的活动的集合中 表示的活动当前均不是调用线程的活动但是该事件为开始事件且日志事件规程的调用满 足该开始事件的采样频率条件,则该事件被记录在诊断数据日志中且调用线程的活动被添 加到启用日志的活动的集合。
[0016] -些实施例提供定义事件的事件定义的集合。具体而言,事件定义被提供至以下 的至少一者:应用、记录器、日志消费器。在一些实施例中,事件定义指定针对至少一个事件 的细节水平。
[0017] -些实施例停止对特定活动的记录,即使日志空间或其它资源可用且该应用程序 正在执行活动。一些实施例响应于以下的至少一者来停止记录:看到停止记录事件、在先前 看到开始事件已触发了对所述活动的记录之后再次在启用日志的活动上看到开始事件。
[0018] -些实施例响应于设置活动id规程调用来设置当前活动id。一些实施例在以下 至少一者中如此做:在所述计算系统中的应用、包括支持所述应用的运行时的框架。当前活 动id指定该应用的任何活动是否当前被指明为要被记录,且当某个活动当前被指明时,当 前活动id还指定哪个活动当前被指明。
[0019] -些实施例在子活动是在启用日志的活动的集合中的父活动的子活动时,自动向 启用日志的活动的集合添加该子活动。子活动响应于接收以下指示而被添加:在父活动在 启用日志的活动的集合中的同时,该子活动是该父活动的子。一些实施例记录处于启用日 志的活动的集合中的父活动对任何子活动的创建。
[0020] 通过进一步图示,考虑其中实施例将在此处被表示为线程1的线程id与此处被表 示为活动1的活动id相关联且随后在记录器中接收线程1的日志事件规程调用的指示的 情形。假定指示指定在此处被表示为事件1的事件。一些实施例避免记录事件1,因为活动 1不在启用日志的活动的集合中。现在假定指示指定在此处被表示为事件2的事件。一些 实施例记录事件2,即使活动1不在启用日志的活动的集合中,因为事件2是开始事件,且还 将活动1添加到启用日志的活动的集合中,因为事件2是开始事件。现在假定指示指定在 此处被表示为事件3的事件。一些实施例避免了记录事件3,即使事件3是开始事件,因为 事件3的采样频率是每N个日志事件规程调用一个日志条目,且该日志事件规程的调用不 是事件3的第N次记录尝试。
[0021] 所给出的示例只是说明性的。本
【发明内容】
并不旨在标识所要求保护主题的关键特 征或必要特征,也不旨在用于限制所要求保护主题的范围。相反地,提供本
【发明内容】
是为了 以简化的形式介绍将在以下【具体实施方式】中进一步描述的一些技术概念。本发明由权利要 求书限定,在本
【发明内容】
与权利要求书有冲突的情况下,应该以权利要求书为准。
[0022] 附图简述
[0023] 将参考附图给出更具体的描述。这些附图只示出了选定的方面,且因此不完全确 定覆盖或范围。
[0024] 图1是示出具有至少一个处理器和至少一个存储器的计算机系统并且还示出经 配置的存储介质(而不仅仅是信号)实施例的框图,该至少一个处理器和至少一个存储器 在用于诊断数据的基于活动的采样的软件和操作环境中可能存在于多个网络节点上的其 他项的控制下彼此交互;
[0025]图2是示出一示例体系结构中的诊断数据的基于活动的采样的各方面的框图;
[0026] 图3是示出一些过程的步骤和经配置的存储介质实施例的流程图;
[0027] 图4是示出另一示例体系结构中的诊断数据的基于活动的采样的各方面的数据 流程图;
[0028] 图5是示出web服务请求中的活动的体系结构图;
[0029] 图6是示出线程活动、被记录的事件、以及逻辑活动之间的连接的图示;
[0030] 图7是示出用户定义的事件、线程、以及执行流的活动、以及MicrosoM)任务并 行库(TPL)库(微软公司的商标)中的活动创建事件之间的一些连接的图示;
[0031] 图8是示出作为用于通过排除不相关数据获得关于软件活动的有用诊断数据的 机制的基于活动的采样的积极影响的图示;以及
[0032]图9是示出诊断数据的基于活动的采样的各方面的另一体系结构图。
[0033] 详细描述
[0034] 概览
[0035] 诊断数据的采样可被用来减少日志记录信息的磁盘、处理器和存储器开销。在相 关时,诊断信息可提供可操作信息(actionableinformation),但是诸如随机或周期性采 样之类的熟悉的采样技术导致重要的上下文数据被丢弃。
[0036] 程序分析的一些熟悉方法向用户的应用和框架添加探测工具 (instrumentation),将应用的组件的进入点勾住(hooking),诸如处理来自web服务的传 入和传出HTTP传输的代码(本领域的技术人员将意识到,HTTP代表超文本传输协议)。 当在应用中检测到问题点和/或热路径时,一些方法向应用中的特定位置添加更多探测工 具。随后其可使用试探法(heuristics)来将数据集相关起来,或在探测工具点被命中处使 用线程的标识符。然而,这些方法通常是不精确的,并且依赖于多轮相同类型活动来收集诊 断信息。它们还无法与跳跃线程的代码一起工作,诸如随Microso_i_t(^ .NET? 4.5框架(微 软公司的商标)引入的异步/等待模式。
[0037] 然而,通过基于活动的采样,定义了代表机器上的执行单元的活动。用父-子关系 将活动彼此相关。一旦采样在父活动上开始,采样将在全部子活动上继续。诊断数据随后 可被配置成仅针对被采样活动记录。诊断数据可针对执行流来记录,从而允许高保真度和 上下文信息的收集,同时通过仅在指定情况下开始活动采样来减少总开销。基于活动的采 样可减少日志记录的开销,同时仍旧提供有用且相关地聚焦的诊断数据。在一些环境中,通 过对数据流的后分析来获得聚焦的诊断数据是可能的,但是采样允许在运行时抛出不想要 的数据,由此减少了日志记录的开销。
[0038] 此处描述的某些实施例可以在较宽泛的上下文中查看。例如,诸如活动、事件、日 志记录、采样频率以及线程等概念可能与特定实施例有关。然而,并不能从宽泛上下文的可 用性中得出此处对抽象概念寻求专有权;它们并不是专有的。相反,本发明聚焦于适当具体 的实施例,其技术效果完全或部分地解决特定技术问题。涉及活动、事件、日志记录、采样频 率和/或线程的其他介质、系统和方法在本范围之外。因此,在对本发明的正确理解下,也 避免了模糊性、抽象性、缺少技术性和附带的证据问题。
[0039] 本文描述的实施例的技术特征对于本领域技术人员而言将显而易见,并且对于各 种关注的读者而言也以各种方式显而易见。第一,一些实施例解决了诸如选择性记录有用 诊断数据以及将诸如事件和活动之类的不同诊断数据段互相关的技术问题。第二,一些实 施例包括诸如计算硬件等技术组件,这些技术组件以除了通用计算机中的典型交互之外的 方式与软件交互。例如,除了诸如存储器分配、存储器读写、指令执行和I/O排序等普通交 互之外,本文描述的一些实施例还将开始事件与采样频率、日志活动创建相关联并定义可 记录事件。第三,一些实施例提供的技术效果包括应用中的日志事件规程调用以及基于活 动的诊断日志。第四,一些实施例包括诸如可记录事件定义、日志事件规程、设置-活动-id 规程以及启用日志的活动集合之类的技术适配。第五,一些实施例通过基于诸如采样频率 条件和活动父-子关系之类的技术考虑而修改基于活动的采样的诊断记录的技术功能。第 六,一些实施例的技术优点包括从日志中排除不相关诊断数据、自动记录子活动(即便在 子和父活动在不同线程上执行时)、以及通过更可用诊断记录简化开发。
[0040] 现在将参考诸如附图中所示出的那些示例性实施例,并使用特定语言来对其进行 描述。但是,相关技术领域的且拥有本公开内容的技术人员将想到的对此处所示出的特征 的更改和进一步的修改以及对此处的特定实施例所示的抽象原理的其他技术应用,都应该 被视为在权利要求的范围内。
[0041] 在本公开中阐明了各术语的含义,因此应该在仔细关注这些阐明的情况下阅读权 利要求书。给出了具体示例,但是相关领域的技术人员将理解其他示例也可落在所使用的 术语的含义范围内以及落在一个或多个权利要求的范围内。各术语不一定需要具有与它们 在一般使用中(尤其在非技术使用中)或在特定行业使用中、或在特定字典或一组字典的 使用中所具有的意义相同的意义。附图标记可以与各种措词一起使用,以帮助示出术语的 广度。从给定文本片段中省略附图标记不一定意味着没有通过文本讨论附图的内容。发明 人声明并行使他们对他们自己的词典的权利。这里可在【具体实施方式】中和/或在申请文件 的别处显式地或隐式地定义术语。
[0042] 如此处所使用的,计算机系统摂可包括例如一个或多个服务器、主板、处理节点、 个人计算机(便携式或非便携式)、个人数字助理、蜂窝或移动电话、至少具有处理器和存 储器的其他移动设备、和/或提供至少部分地由指令来控制的一个或多个处理器的其他设 备。指令可以采用存储器中的固件或其他软件和/或专用电路的形式。具体而言,虽然可 发生许多实施例在工作站或膝上型计算机上运行,但是其他实施例也可以在其他计算设备 上运行,并且任何一个或多个这样的设备都可以是给定实施例的一部分。
[0043] "多线程化"计算机系统是支持多个执行线程的计算机系统。术语"线程"应被理 解为包括能够或经历调度(以及可能同步)的任何代码,并且也可以另一名称来为人所知, 如"任务"、"进程"或"协同例程"等。线程可以并行地、按顺序、或以并行执行(例如,多处 理)和顺序执行(例如,时间分片)的组合来运行。在各种配置中都已设计了多线程化环 境。执行线程可以并行地运行,或者线程可以被组织为并行执行,但是实际上轮流按顺序执 行。例如,多线程化可以通过在多处理环境中在不同核上运行不同线程、通过对单个处理器 核上的不同线程进行时间分片、或者通过时间分片和多处理器线程化的某种组合来实现。 线程上下文切换可以例如由内核的线程调度器、由用户空间信号、或由用户空间和内核操 作的组合来发起。线程可以轮流对共享数据进行操作,或者例如每一线程都可以对其自己 的数据进行操作。
[0044] "逻辑处理器"或"处理器"是单个独立硬件线程处理单元,如同时多线程实现中的 核。作为另一示例,每核运行两个线程的超线程四核芯片具有8个逻辑处理器。逻辑处理 器包括硬件。术语"逻辑"被用来防止给定芯片具有至多一个处理器的错误结论;"逻辑处 理器"和"处理器"在此可互换地使用。处理器可以是通用的,或者它们可被定制用于特定 用途,例如图形处理、信号处理、浮点算术处理、加密、I/O处理等等。
[0045] "多处理器"计算机系统是具有多个逻辑处理器的计算机系统。多处理器环境存在 于各种配置中。在一给定配置中,所有处理器可在功能上相同,而在另一配置中,由于具有 不同的硬件能力、不同的软件分配或两者,某些处理器可与其他处理器不同。取决于配置, 处理器可在单个总线上紧密地彼此耦合,或它们可松散地耦合。在某些配置中,处理器共享 一中央存储器,在某些配置中,它们各自具有自己的本地存储器,在某些配置中,存在共享 和本地存储器两者。
[0046] "内核"包括操作系统、系统管理程序、虚拟机、BIOS代码、以及类似的硬件接口软 件。
[0047] "代码"指的是处理器指令、数据(包括常量、变量、以及数据结构)、或指令和数据 两者。
[0048] "程序"在本文中被广泛地使用以包括应用、内核、驱动程序、中断处理程序、库、以 及程序员(也被成为开发者)编写的其他代码。
[0049] 如此处所使用的"包括"允许附加元素(S卩,包括意味着包含),除非另外指明。 "由...构成"意味着基本上由...构成或完全由...构成。当X中的非Y部分(如果有的 话)可以被自由更改、移除和/或添加而不在考虑所述权利要求时更改所要求保护的实施 例的功能时,X基本上由Υ构成。
[0050] "进程"在此有时被用作计算科学领域的术语,并且在该技术意义上涵盖资源使用 者,即例如协同例程、线程、任务、中断处理程序、应用进程、内科进程、过程和对象方法。"进 程"在此还可被用作本领域的专利法术语,例如,在描述与系统权利要求或制品(经配置的 存储介质权利要求)相对的过程权利要求时。类似地,"方法"在此有时被用作计算科学领 域内的技术术语(一种"例程")并且还被用作本领域的专利法术语("过程")。技术人员 将理解在特定实例中旨在是什么含义
当前第1页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1