用于收集并报告api性能剖析的自动化方法和系统的制作方法

文档序号:6455201阅读:200来源:国知局
专利名称:用于收集并报告api性能剖析的自动化方法和系统的制作方法
用于收集并报告API性能剖析的自动化方法和系统
背景
与其他工程学科不同,软件工程师具有很少在作出设计决定时他们可咨询
的关于定量信息方面的数据。不存在应用程序编程接口 (API)性能成本的综 合目录。在这种情况下,术语"APr指的是如"InvalidateRectAPI"中的单个函数 而不是如可从华盛顿州雷蒙德市的微软⑧公司获得的"Windows⑧操作系统 API"中的函数家族。
此外,该情形因大多数API不能使其成本由单个数字来表征的事实而复杂 化。成本可以按许多不同的方式来测量—诸如存储器使用、CPU使用、1/0成 本等等,并且它可取决于输入参数和上下文以及当然可用硬件。结果, 一般根 本没有做出表征API的性能的尝试。这将工程师置于在作出设计决定时没有可 用的先验指导的不幸境地。他们必须采取原型制作或更糟糕的但简单地猜测、 完全忽略成本考虑、或只是从最好的方面着想。后面的这些选项都太常见了。 因此,非常期望收集API数据以提供API性能或资源成本的有用的知识。
因此期望收集对于API操作的高度精确的存储器分配和执行时间数据。一 个目的可以是将该数据提供给API消费者以使其作出关于特定API组件是否具 有对于其预期用途合理的存储器和定时特性的有见识的决定。因为分配和定时
两者都将取决于如何使用函数而变化,所以数据可较佳地反映分配和定时在各 种各样真实世界情况下的统计分布。该分布可构成"性能剖析(profile)",其 可用于査找API的行为的故障以及为消费者提供这些特性的文件。
尽管存储器分配可以用接近100%的准确度来测量,但测量执行时间充满 了不确定性。测量本身占用总执行时间的一部分,这于是使数据失真。这在收 集单个剖析(profiling)运行中的一组相互依赖的函数的定时特性时尤其如此。
对于在调用树的更深处的函数调用的测量开销将累积并更改对应于该调用树 的更高处的函数的结果。例如,如果函数A在一紧密循环中调用函数B几千 次并且正在同一运行中测量A和B的定时,则对于B的累积的测量成本可显 著地更改对应于A的结果。现有工具尝试通过减少累积的测量错误来解决该问题,但该方法无法产生统计上有意义的结果。
一般而言,在可记录关于特定执行的详细的成本信息的剖析工具的上下文 中使用现有API测量方法。然而,这些系统并不适于综合数据收集,因为测量 动作本身干扰成本。它们被设计成在单个运行中收获尽可能多的关于整个程序
的信息。期望通过各种执行来收集关于特定API的信息。本发明解决了这些和 其他问题。
概述
提供本概述以便以简化的形式介绍将在以下详细描述中进一步描述的一 些概念。本概述并不旨在标识出所要求保护的主题的关键特征或必要特征,也 不旨在用于限制所要求保护的主题的范围。
在一个实施例中, 一种测量应用程序编程接口 (API)的性能的方法包括
选择目标API并跟踪对于所选API的函数调用的存储器分配以生成由该API 调用的函数列表。然后隔离地调用各个函数以便测量定时和存储器分配数据。 所记录的结果然后根据以2为底的对数方法进行分桶(bucketize)并且使该 结果可由API用户访问以指示特定API的性能。
在另一实施例中, 一种剖析器(profiler)系统使得一种收集驻留在用户机 器上的随机选择的API的性能信息的分布式方法成为可能。该剖析器系统被分 发到自愿的用户并且在无干扰的基础上测量该用户计算机上的应用程序的API
性能。所收集的数据被转发至中央存储服务,其中收集API信息并将其组织成 表示多个API的性能的信息桶(bucket)。使该信息对诸如软件开发者等典型 的API用户可用。
附图简述 在附图中-


图1是示出API剖析器系统的示例软件体系结构的框图2是描绘根据本发明的各方面的一种测量API的示例方法的示例流程
图3是描绘根据本发明的各方面的一种分布式API测量方案的示例方法的
7示例流程图4是示出示例主机计算环境的框图。
详细描述 示例性实施例
API性能剖析器
在一个实施例中,提供了用于收集并报告API性能剖析的自动化方法和系 统。该实施例集中于收集执行代码的高度精确的经验观察以生成可由开发者或 工具用来协助开发应用程序的性能剖析或指纹。该自动化方法采用对专用性能 剖析器的使用以协助理解函数性能特性,该专用性能剖析器是一种穷举地执行 二进制代码以生成用于所有公开可见入口点的数据的自动化系统、 一种用于以 可由分析工具消费的形式来持久存储该数据的机制、以及一种用于图形地呈现 剖析的系统。在一种模式中,该剖析器收集对应于可见API的精确的执行时间 信息。在另一种模式中,该剖析器收集关于在调用任何函数时发生的存储器分 配的细节。
图1描绘了用于可以在计算平台上运行以测量API性能的API剖析器的 示例软件体系结构100。 一种这样的系统是用于公共语言基础结构的ECMA 335标准的微软⑧CLR 实现。被测API 102 —般展示可被插装(instrument) 以供观察和记录的现场(in-situ)特性。可与CLRtm兼容的存儲器分配剖析器 104运行给定API性能情形,并记录对该方法的函数调用导致对应于所分配的 字节数的以2为底的对数的离散值的次数的计数。存储器分配剖析器单独地测 量并记录包括性和排他性分配值。包括性存储器分配值是包括由其调用的函数 所分配的所有存储器在内的由该函数分配的字节数。排他性存储器分配值是在 作为该函数本身的一部分的代码块中分配的字节数。
定时剖析器106也可与CLRTM兼容并将其自身挂钩到被指定为附加输入 的方法的即时(JIT)编译。这以运行期间的唯一附加开销将用于对正被调查 的特定方法的调用而不存在用于对其他方法的调用的开销的方式来完成。定时 剖析器也测量并记录关于被测API 102的定时信息。协调模块108采用一脚本来运行作为输入的给定托管代码情形并且使用
该脚本来针对被测API 102首先运行分配剖析器104。协调模块然后使用关于 在分配阶段运行哪些方法的信息在定时剖析器106下重复地重新运行该情形。 协调模块还保证永远不会指示定时剖析器106测量在相同的运行中相互依赖的 函数的定时。换言之,协调模块通过不同时测量可能出现在相同的调用栈上的 任意两个函数来确保在任何执行的线程上最多正在进行一个测量。由此,不测 量和记录可能掩盖被测API 102的真实性能的二级函数。在本法明的一个方面 中,可同时测量并记录从不出现在相同的调用栈上的函数。例如,给定三个函 数A、 B、 C,如果只有函数A和C曾经出现在相同的调用栈上,则不可同时 测量并记录A和C。但是,可同时记录函数A和B,也可同时记录函数B和C。
合并工具模块IIO将来自存储器分配剖析器104和定时剖析器106的所有 运行的结果组合成对应于每一个被测API 102的单个结果表112。对应于特定 被测API 102的结果表可显示包括性和排他性存储器分配的以2为底的对数分 桶以及执行时间的以2为底的对数分桶。合并工具模块还可用于组合来自若干 不同运行的结果以生成表示对被测API102的各种各样的使用的表。由此,可 在被测API 102上收集单个执行统计数据以及多个调用统计数据。
用于将任何被测API 102的结果表112数据呈现为对应于每一个函数的直 方图的图形用户界面114允许开发者作出关于组成给定被测API 102的函数的 性能特性的推断。在一个实施例中,对应于特定被测API 102的结果表112中 所收集的API性能信息可使用以2为底的对数方法按照数量级来组织或分桶。 此外,API性能剖析可通过分析该数据来创建。
这些性能剖析同时向API所有者和API消费者传达有用的信息。例如, 剖析可指示存在开始使用API的启动成本,之后后续调用不需要存储器消费。 另一剖析可指示存储器分配和执行时间对于提供给API调用的数据线性地或 以其他关系增长。可分析并对这些剖析并对其进行分类以确保对于API开发者 的API产品质量或开发应满足特定所需性能特性的新API。
作为一非限制性示例,诸如API Object.Equals或GetHashCode()覆盖等性 能敏感的代码可使用本发明的各方面来表征和剖析。诸如开发者等这些API 的用户可通过访问发布的剖析信息以预测所剖析的API在其设计上将具有的性能来实行良好的设计原则。
在某些实施例中,可通过从连接网络的计算机下载或通过诸如,但不限于
CD-ROM等计算机可读介质来将图1的软件体系结构模块提供给计算机以供 执行。在下载之后,图1的计算机体系结构或模块可驻留在计算机RAM中等 待执行。
在本发明的一个方面中,API剖析器可使用若干遍相同的API执行情形来 确保收集比可用单遍实现的更准确的定时数据。图2是示出API剖析器的示例 方法的流程图200。
最初,将要表征的目标API给予API剖析器(步骤202)。存储器分配剖 析器然后在跟踪对应于由该API调用的所有函数的存储器分配(步骤204)的 模式中运行。结果,生成由该被测API调用的所有函数的列表(步骤206)。
一旦获取了该列表,系统然后就为该列表中的每一个函数重新运行一次该 情形并且与所有其他函数完全隔离地测量每一个函数的定时(步骤208)。对 于每一个函数运行,由API剖析器收集参数定时和存储器分配数据并记录结果 (步骤210)。该步骤具有只测量对正在给定运行中被跟踪的单个函数招致的 开销的效果。优点是不存在由调用树中的更深处的函数引入的累积错误。
在一替换实施例中,可推广该方法以使得API剖析器还可计算哪些函数可 一起出现在栈上哪些函数不可以,而不是仅仅在分配阶段收集函数的列表。于 是,每次运行测量多于一个函数而仍保证相同的高精确度成为可能。来自以调 用栈组执行API的存储器和分配信息然后可被合并成结果表以供呈现。在一个 实施例中,呈现可经由对应于每一个函数或函数组的直方图来进行。
一旦记录了来自各个运行的结果,处理各独立结果以供呈现(步骤212)。 作为该步骤的一部分,API剖析器可对于对每一个函数的每次调用,取决于在 当前运行中正在测量什么,通过跟踪执行时间或所分配字节的以2为底的对数 来表达对于定时和存储器分配的可能的值的范围。每个以2为底的对数项都用 于递增对其存储器分配或执行时间具有相同的以2为底的对数值的调用桶的计 数。然后将来自所有独立运行的结果合并在一起(步骤212)。最终结果是该 情形中所有函数的表,其具有对于存储器分配和定时的每一个离散的以2为底 的对数值的计数。合并来自若干情形的结果以获得各种各样情形中的API中的
10函数的更具代表性的视图也是可能的。
在一个非限制性实施例中,用于API性能数据收集方法的伪代码如下:
收集统计数据(情形) 分配表二测量分配(情形)
定时表=new表[关键字=函数,值=桶阵列]
对于分配表中的每一个函数 定时表[函数]=测量定时(函数,情形))
return [分配表,定时表] 测量分配(情形)
分配表^new表[关键字二函数,值二桶阵列]) 使用分配剖析器,启动情形 对于每一个n字节的存储器分配 索引二log2(n)
对于调用栈上的每一个函数 桶=分配表[函数][索引] 将桶计数递增1 将桶总和增加n 将桶平方和增加n2
return分配表
测量定时(函数,情形) 桶=新桶阵列 使用定时剖析器,启动情形
对于对函数的每一次持续时间为n个cpu周期的调用 索引二log2(n)桶=桶[索引] 将桶计数递增1 将桶总和增加n 将桶平方和增加n2
return桶
在上述伪代码示例中,还可扩充定时和分配的参数以使得只要所测量的参 数没有被测量过程过渡干扰就可作出对盘1/0、网络使用或任何其他受API影 响的参数的测量。
在上述示例伪代码中,注意,1og2(n)指的是小于或等于n的以2为底的对 数的最大整数。在各桶中表征该数据还可包括将API的性能放置于各桶中。本 质上,所测量的参数使用以2为底的对数来下舍入到最接近的整数以产生"二 次幂桶"。这可通过找到二进制表示中的最高有效位的位置并将该数据作为一 个性能类别放在合适的桶中来实现。此外,对和以及平方和进行分桶以使得可 计算诸如所测量的API参数的平均值、均值和标准差等基本统计数据。这些统 计数据向用户提供有关所测量的API的性能的相关信息。
在一非限制性示例中,假设以下程序
fori从1到100: forj从l到3: A(j) B(j) C(j)
通过使用API数据剖析器,整个程序运行通过分配剖析器并看见100次以
下调用序列
A(1)-分配3个字节log2(3) =1B(l)-分配107个字节 log2(107) = 6 C(l)-分配819个字节 log2(819) =9
A(2)-分配7个字节log2(4) = 2 B(2)-分配120个字节log2(120) = 6 C(2)-分配1560个字节 log2(1560) = 10
A(3)-分配22个字节log2(22) =4 B(3)-分配115个字节log2(115) =6 C(3)-分配1800个字节 log2(1800) = 10
在其期间,如表1中那样收集以下分桶数据。为了简明起见,表1中只示 出了对应于函数A、 B、 C的分配的计数。对于这些函数的和以及平方和的分 桶计算可以按类似的方式计算。
函数桶1桶 2桶3桶4桶5桶6桶7桶8桶9桶10
A1001000100000000
B000030000000
C00000000100200
表l:所分配字节的以2为底的对数
表l中的各桶按以所分配字节的2为底的对数来表达,并且还注意,只有
A、 B、 C是各自由情形调用的,所以该程序可被重复使用3次;使用定时剖 析器对每一个函数使用一次。在第一次运行时,只运行函数A。注意,在对A 的300次调用期间,可以观察到它花费了20到40个时钟周期来执行,并且采 用以2为底的对数并在每次得到表2中对应于函数A的以下数据时将桶递增1:
函数桶1桶 2桶3桶4桶5桶6桶7桶8桶9桶10
A00019110900000表2: CPU周期的以2为底的对数
表2中的各桶按CPU周期的以2为底的对数来表达。在下两次运行时, 排他地运行B和C。然后,可发生这3个运行的合并。该过程可在实验室、开 发环境或运行时用户环境中的许多情形中运行,并且所有收集的数据可通过简 单地添加对于公共函数的桶计数来合并在一起。这表示从在实验室、开发环境 或运行时用户环境中运行的固定的一组情形中构建API剖析的一种方式。然后 可采用图1的用户界面114来呈现分桶数据以供检查。
较佳地发布该分桶数据以使得设计者可访问所测量和所记录的API数据。 例如,所收集的API数据可以在诸如中央数据库等具有远程访问的中央位置中 收集。或者,API数据可以在计算机可读介质或纸质目录表中产生并被分发给 用户。任何公知的发布和分发方案都可用于发布。
在本发明的另一方面中,实现在用户界面处对概括的数据的可视化以使得 结果易于理解。例如,所收集和聚集的API测量数据的结果可被描绘为汇总每 一桶中的计数的直方图。或者,结果可使用具有色彩分段的色谱来描绘,其中 向着热端对应于更昂贵的桶而更便宜的端采用更冷的色彩。色彩强度或条的厚 度对应于该桶中的样本的数量。
API数据的分布式收集
在本发明的一个方面中,API数据可以按分布式方式收集。分布式API 数据收集的一个目的是创建API性能的数据库以协助开发者和用户评估使用 任何一个API的成本。期望收集"在野的(in the wild) "API性能的实际测量的 统计上感兴趣的样本来填充数据库。所填充的数据库在性能参数反映如在典型 硬件上的实际典型应用程序中所观察到的典型的"性能成本"的情况下具有更 多价值。因此,用户机器上的实际使用中的API的性能是合乎需要的。该数据 收集过程然后可用于产生对于诸如执行时间、存储器分配和盘I/O等各种不同 的"资源成本"的性能成本的特性分布。
为了最小化与测量用户机器上的API性能相关联的性能成本或开销,期望在任何给定运行中只测量少量的API并且这些API应在各运行中随机选择。通
常, 一次只可测量一个API。在一个实施例中,API数据收集可以在用户自愿 选择的基础上在各种系统上完成。这将创建随时间的在各种硬件上收集的API 的随机样本。该数据可被周期性地更新到其中API性能数据库用该附加匿名数 据来扩充的中央服务器。
,图3是可用于从在用户的计算设备上运行的API收集分布式数据的方法 300的流程图。为了使用户能够参与数据收集,他/她必须首先安装将有助于 API数据的收集和提交的合适的剖析器系统程序或模块组。假设该用户被要求 并同意或选择参加该收集过程。在一个实施例中,许多用户选择参加该收集方 案并且所提供的数据在用户、应用程序和机器导致各种各样的API数据的收集 的情况下来自多样化的集合。最初,用户将下载或以其他方式安装并配置API 剖析器(步骤302)软件模块以启用在无干扰的基础上对API的测量。必要的 可执行组件可从因特网下载并在本地安装或可通过CD-ROM或等效的程序数 据存储介质获取。此外,然后如对于传递自因特网的软件正常地进行的那样来 为API剖析器提供服务。步骤302只需执行一次,并且所有后续数据收集会话 可在步骤304处开始。
为了实际上收集数据,只要用户运行任何可执行程序,数据收集系统就必 须激活其自身。此时,API剖析器数据收集系统随机选择要监视的API并收集 数据(步骤304)。然后截取对所选API的调用并且就诸如时间、盘操作、网 络、存储器等一个或多个方面测量成本。
在一个实施例中,可使用对本领域的技术人员已知的技术来做出对API 的随机选择。所使用的特定随机选择技术可取决于实施该API剖析器收集软件 的特定运行时环境。例如,在.NETTM公共语言运行时环境(CLRTM)上,可对 即时(JIT)编译器做出调整以便在每次即时编译方法时生成一随机数。如果 该随机数小于固定阈值,则JIT编译器可对该方法进行插装以使得对该方法的 调用然后由API剖析器来截取并测量。可以实现许多这样的随机化选择技 术以便在给定情况下选择API。本领域的技术人员可基于他们针对本发明所选 择的特定技术来选择合适的随机选择方法。
对所选API的函数调用的截取技术对于本领域的技术人员也是公知的并
15且有众多这样的技术。已经发生了类似的截取以便为应用程序兼容性提供特殊
行为,这在新操作系统中也被成为"应用程序兼容性填补(appcompat shims)"。 该相同的系统可用于注入测量挂钩。实际测量同样使用已经由现有剖析系统使 用的各公知技术来进行。
注意,较佳地最小化数据收集的性能成本并且存在用于这样做的若干技 术。在一个示例中,收集系统可基于系统负载或其他配置参数拒绝收集任何数 据以最小化对用户系统的影响。 一个示例是防止多于固定的少量程序被同时插 装的系统。例如,不多于6个二进制数的数据收集可以是一种设置。该数字可 通过进一步的下载来动态调节。
在测量了所选API之后,于是在每一个程序运行的末期,概括的收集的数 据可被写到盘以供稍后提交。可确定并测试所收集的数据量以确定是否已选择 了足够的数据(步骤306)。如果已收集了足够的数据,则可将该数据经由网 络传输提交到例如中央服务(步骤308)。例如,当所记录的数据达到一合适 的大小( 128k)以允许以适中的上传时间传递合理的一批数据时,可联系web 服务并且将该用户的概括的API性能信息上传到该中央服务。或者,如果可在 本地收集更多的API收集数据,则该过程然后可移回至其中随机选择下一个 API的步骤304。
该中央服务然后可通过将每一个类别中的新的计数和成本添加到给定用 户提供对于其的信息的每一个API来响应该上传请求。这被称为聚集(步骤 310),其中新的API性能数据被添加到中央服务结果数据库。该结果数据库 由此始终用新鲜信息来更新。在一个实施例中,采用对加性统计数据(additive statistics)的使用以避免批处理。在一个实施例中,优选不跟踪诸如"由用户调 用的平均的、独特的API"等信息,因为只要添加了新的一批结果,就将需要 对现有数据的费时的重新处理。
在本发明的一个方面中,可经由多种手段来向用户发布该中央数据库(步 骤312)。例如,该数据库可经由因特网或其他网络连接来远程地访问。周期 性刷新整个数据库是优选的以使得用户可具有最新的性能成本信息。无需同时 为所有用户更新并且无需传递整个数据库的结果。在一个实施例中,用户可每 天简单地査询中央服务的结果数据库的少量片段并且它们将在数据中轮换以逐渐刷新其内容。可任选地,整个结果数据库可用于下载,如果用户希望这么 做的话。除了以二进制格式直接发布该数据库之外,这些内容可如以下所指示 的直接地及间接地以各种方式使用。
在本发明的一个方面中,用户是所收集的API性能数据的消费者(步骤
314)。用户可出于许多目的并以各种方式访问该数据。以下概括了展示API
剖析器系统的效用的有用的使用模式的示例。
1) 标准API引用自动包括API剖析器结果数据库中所包含的信息以供图 形地并用可用于以众多形式査看细节的"钻入视图(drill-down)"来显示。
a. 文档编制格式化系统为每一个API创建文档。
b. 对于每一个API,在其被创建时,咨询API剖析器数据以获得API 性能成本概述。
c. 连同将允许"钻入(drill-down)"到所收集的API性能数据的基 于web的发布上的详细形式的最新数据的链接将该性能成本概述以图形的形 式插入到该文档中。
2) 诸如微软⑧Visual StudioTM系统的IntellisenseTM特征等设计时编码助理 可以在正在编码新API调用时包括具有可任选钻入的图形形式的成本概述以 使得典型的成本立即可见。
a. 该系统创建一组可能的API完成。
b. 对于每一个完成,该系统咨询所收集的API剖析器数据。
c. 系统显示器中的每一个都以图形形式呈现来自API剖析器所收集 的信息的概述。
3) 代码剖析系统的诊断部分咨询API剖析器所收集的数据以查看任何给 定用户的API使用是否具有可与典型的使用模式相比较的成本。可在怀疑时向 用户报告异常成本以增强其故障诊断体验。
a. 对于剖析中的每一个所观察的API,该系统咨询API剖析器结果。
b. 对于每一个API,所观察到的成本分布可使用诸如"排列测试" 等标准统计方法来与API剖析器结果作比较。
c. 如果该统计方法提出存在用户成本分布比API剖析器所收集的数据分布糟糕的统计证据,则将所述API标记为潜在的改进点并将其呈现给用户 以供调查。
i. 该呈现可以是通过在API出现在调用栈中时加亮该API,或

ii. 通过创建这些API的列表,或者
iii. 通过加亮其中API具有最高观察到的成本的那些内容。
4)API厂商可使用这些技术来创建对其顾客的典型使用和成本的内部调 査并由此以API改进为目标并跟踪其成功。
a. 可以按报告格式生成由始发模块、命名空间或两者分解的成本分布。
b. 这些分解然后出于计划目的由组织来消费。
如上所述,在本发明的一个方面中,API剖析器较佳地操作以使得对正在 测量的用户系统施加低性能影响。假定任何特定所测量的API可在单个程序执 行期间被调用几百万次,并且随着硬件改进甚至可能更多,重要的是API成本 应被保持在经受进一步分析的经济形式。期望对于给定会话中的每一个被测 API具有固定大小的条目。然而,还期望捕捉具有很大偏差的成本分布。为了 实现这点, 一种方法是不捕捉确切成本,而是跟踪各分类的"桶"中的成本计数。
如上所述,为性能或资源成本的每一个二次升幂创建桶。即大于或等于1、 2、 4、 8等的成本各对应一个桶。在每一个成本桶中,跟踪普通统计累积以便 于递增地计算均值和方差。S卩,计算样本计数、成本和、以及成本平方和。这 些值能够以各种精度来保留。例如,对于计数使用64位整数并对于其他两个 统计量使用一个双精度浮点数。此外,保留对于所有样本的总计数、总和、以 及总平方和以使得可提供总平均数和方差。该方法在限制所聚集数据的成本的 同时仍然保存必要的分布信息。此外,所有这些数据都是加性的,所以它们可 通过简单的加法来容易地与来自不同运行或不同计算机的样本组合。
在一个实施例中,所测量的时间较佳地以诸如周期计数等以可用的高分辨 率定时器的标准单位来维护。这节省了计算时间并导致最高质量的时间被持久 存储到盘。
作为本发明的一方面,诸如但不限于磁存储设备、诸如CD和DVD介质
18等光学设备等计算机可读介质可用于存储可实现此处所讨论或提出的各方法 的计算机程序指令。预想这样的计算机介质保留可执行指令以供在通用计算机 上使用以使其能够实现本发明的各方面。
尽管用对结构特征和/或方法动作专用的语言描述了本主题,但可以理解, 所附权利要求书中定义的主题不必限于上述具体特征或动作。相反,上述具体 特征和动作是作为实现权利要求的示例形式公开的。
示例性计算设备
图4和以下讨论旨在提供适于与媒体存储设备进行交互的主计算机的简 要概括描述。虽然以下描述了通用计算机,但这仅是单个处理器示例,并且具 有多个处理器的主计算机的各实施例可以用诸如具有网络/总线互操作性和交 互的客户机等的其他计算设备来实现。
尽管并非所需,但本发明可以部分地经由操作系统来实现,以供设备或对 象的服务开发者使用,和/或被包括在应用软件中。软件可以在诸如程序模块等 由诸如客户机工作站、服务器或其它设备等一个或多个计算机执行的计算机可 执行指令的通用上下文中描述。 一般而言,程序模块包括执行特定任务或实现 特定抽象数据类型的例程、程序、对象、组件、数据结构等。通常,程序模块 的功能可以在各个实施例中按需进行组合或分布。此外,本领域的技术人员可 以理解,本发明的各实施例可以用其它计算机系统配置来实施。适用的其它众 所周知的计算系统、环境和/或配置包括但不限于,个人计算机(PC)、自动 提款机、服务器计算机、手持式或膝上型设备、多处理器系统、基于微处理器
的系统、可编程消费者电子设备、网络PC、小型机、大型计算机等等。本发
明的各实施例也可以在其中任务由通过通信网络或其它数据传输介质链接的 远程处理设备来执行的分布式计算环境中实践。在分布式计算环境中,程序模 块可以位于包括存储器存储设备在内的本地和远程计算机存储介质中,并且客 户机节点可进而如服务器节点那样工作。
参考图4,用于实现示例主计算机的一个示例性系统包括计算机系统410 形式的通用计算设备。计算机系统410的组件可以包括,但不限于,处理单元
19420、系统存储器430和将包括系统存储器在内的各种系统组件耦合至处理单 元421的系统总线420。系统总线421可以是几种类型的总线结构中的任何一 种,包括存储器总线或存储控制器、外围总线、以及使用各种总线体系结构中 的任一种的局部总线。
计算机系统410通常包括各种计算机可读介质。计算机可读介质可以是能 由计算机系统410访问的任何可用介质,而且包含易失性/非易失性介质以及 可移动/不可移动介质。作为示例而非局限,计算机可读介质可以包括计算机 存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、 数据结构、程序模块或其它数据等信息的任何方法或技术来实现的易失性和非 易失性、可移动和不可移动介质。计算机存储介质包括但不限于,随机存取存 储器(RAM)、只读存储器(ROM)、电可擦可编程只读存储器(EEPROM)、 闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光盘存储、 盒式磁带、磁带、磁盘存储或其它磁性存储设备、或可用于存储所需信息并可 由计算机系统410访问的任何其它介质。
系统存储器430包括易失性和/或非易失性存储器形式的计算机存储介质, 如只读存储器(ROM) 431和随机存取存储器(RAM) 432。基本输入/输出系 统433 (BIOS)包含有助于诸如启动时在计算机系统410中的元件之间传递信 息的基本例程,它通常存储在ROM 431中。RAM 432通常包含处理单元420 可以立即访问和/或目前正在其上操作的数据和/或程序模块。作为示例,而非 限制,图4示出了操作系统433、应用程序435、其它程序模块436和程序数 据437。
计算机系统410也可以包括其它可移动/不可移动、易失性/非易失性计算 机存储介质。仅作为示例,图4示出了从不可移动、非易失性磁介质中读取或 向其写入的硬盘驱动器431,从可移动、非易失性磁盘451中读取或向其写入 的磁盘驱动器452,以及从诸如CDROM或其它光学介质等可移动、非易失性 光盘455中读取或向其写入的光盘驱动器456。可以在示例性操作环境中使用 的其它可移动/不可移动、易失性/非易失性计算机存储介质包括但不限于,磁 带盒、闪存卡、数字多功能盘、数字录像带、固态RAM、固态ROM等等。 硬盘驱动器441通常由不可移动存储器接口,诸如接口 440连接至系统总线421,磁盘驱动器451和光盘驱动器455通常由可移动存储器接口,诸如接口 450连接至系统总线421。
上文讨论并在图4中示出的驱动器及其关联的计算机存储介质为计算机 系统410提供了计算机可读指令、数据结构、程序模块和其它数据的存储。例 如,在图4中,硬盘驱动器441被示为存储操作系统444、应用程序445、其 它程序模块446和程序数据447。注意,这些组件可以与操作系统444、应用 程序445、其它程序模块446和程序数据447相同,也可以与它们不同。操作 系统444、应用程序445、其它程序模块446和程序数据447在这里被标注了 不同的标号是为了说明至少它们是不同的副本。
用户可以通过输入设备,如键盘462和定点设备461 (通常指鼠标、跟踪 球或触摸板)向计算机系统410输入命令和信息。其它输入设备(未示出)可 以包括话筒、操纵杆、游戏手柄、圆盘式卫星天线、扫描仪等。这些和其它输 入设备通常由耦合至系统总线420的用户输入接口 460连接到处理单元421, 但是也可由诸如并行端口、游戏端口或通用串行总线(USB)之类的其它接口 和总线结构连接。监视器491或其它类型的显示设备也经由可以进而与视频存 储器(未示出)进行通信的接口,诸如视频接口 490连接至系统总线421。除 监视器491以外,计算机系统也可以包括其它外围输出设备,诸如扬声器497 和打印机496,它们可以通过输出外围接口 495连接。
计算机系统410可使用至一个或多个远程计算机,诸如远程计算机480 的逻辑连接在联网或分布式环境中操作。远程计算机480可以是个人计算机、 服务器、路由器、网络PC、对等设备或其它常见的网络节点,且通常包括上 文相对于计算机系统410描述的许多或所有元件,尽管在图4中只示出存储器 存储设备481。图4中所示的逻辑连接包括局域网(LAN)471和广域网(WAN) 473,但也可以包括其它网络/总线。这样的联网环境在家庭、办公室、企业范 围计算机网络、内联网和因特网中是常见的。
当在LAN网络环境中使用时,计算机系统410通过网络接口或适配器471 连接至LAN470。当在WAN网络环境中使用时,计算机系统410通常包括调 制解调器472,或用于通过WAN473,如因特网建立通信的其它装置。调制解 调器472可以是内置或外置的,它可以通过用户输入接口 460或其它适当的机制连接至系统总线421。在联网环境中,相对于计算机系统410所描述的程序 模块或其部分可被储存在远程存储器存储设备中。作为示例,而非限制,图4 示出了远程应用程序485驻留在存储器设备481上。可以理解,所示的网络连 接是示例性的,且可以使用在计算机之间建立通信链路的其它手段。
鉴于个人计算和因特网的交汇,己经开发且正在开发各种分布式计算框 架。个人和商业用户同样地拥有用于应用程序和计算设备的无缝的互操作和启 用web的接口 ,使得计算活动越来越面向web浏览器和网络。
例如,可从微软公司获得的微软⑧的.NETTM平台包括服务器、诸如基于
web的数据存储等构件块服务、以及可下载设备软件。尽管此处的示例性实施 例是结合驻留在计算设备上的软件来描述的,但本发明的一个或多个部分也可 以通过操作系统、应用程序编程接口 (API)或协处理器、显示设备和请求对 象中的任一个之间的"中间人"对象来实现,使操作可由所有.NETTM的语言和服 务来执行,以及在其它分布式计算框架中,在其中得到支持或经由它们来访问。
如上所述,虽然结合各种计算设备和网络体系结构描述了本发明的示例性 实施例,但基本概念可被应用于其中期望实现用于收集和报告API性能剖析的 方法的任何计算设备或系统。由此,可以将结合本发明的各实施例描述的各方 法和系统应用于各种应用程序和设备。尽管此处选择了示例性编程语言、名称 和示例来表示各种选择,但这些语言、名称和示例不旨在为限制性的。本领域 的普通技术人员将认识到,有多种方法来提供实现本发明的各实施例所实现的 相同、相似或等效的系统的目标代码。
此处所述的各种技术可结合硬件或软件,或在适当时以其组合来实现。因 此,本发明的方法和装置或其某些方面或部分,可以采用包含在诸如软盘、 CD-ROM、硬盘驱动器或任何其它机器可读存储介质等有形介质中的程序代码 (即,指令)的形式,其中,当程序代码被加载至诸如计算机等机器并由其运 行时,该机器成为用于实现本发明的装置。
尽管已结合各个附图的优选实施例对本发明的各方面进行了描述,但是可 以理解,可以使用其它类似的实施例,并且可以对所述实施例进行修改或添加, 来实现本发明的相同功能而不背离本发明。此外,应当强调,构想了包括手持 式设备操作系统和其它应用专用操作系统的各种计算机平台,尤其是在无线联网设备的数量持续增长时。因此,所要求保护的发明不应限于任何单个实施例, 而是应该根据所附权利要求书的宽度和范围来解释。
权利要求
1.一种测量应用程序编程接口(API)的性能的方法,所述方法包括(a)创建要测量的API的列表;(b)从所述列表中选择单个目标应用程序编程接口(API);(c)截取对所述目标API的调用并收集定时和存储器分配数据;(d)记录对应于所述目标API的定时和存储器分配数据,所记录的数据被放置到存储中;(e)将所测量的结果合并成具有指示所收集的定时和存储器分配数据的以2为底的对数的分桶数据的结果表;以及(f)对于所述列表上的每一个API重复步骤(b)到(e)。
2. 如权利要求1所述的方法,其特征在于,还包括 生成结果数据库并使得所述数据库对于API性能数据的用户可用。
3. 如权利要求1所述的方法,其特征在于,还包括 经由图形用户界面使用对应于每一个函数的直方图来呈现所述结果表。
4. 如权利要求1所述的方法,其特征在于,还包括 生成由所述目标API调用的函数的列表,所述列表包括包含从不同时出现在调用栈上的函数的无干扰函数;同时测量对应于多个无干扰函数的定时和存储器分配。
5.如权利要求4所述的方法,其特征在于,还包括将所测量到的所述无干扰函数的执行结果合并成所述具有指示定时和存 储器分配数据的以2为底的对数的分桶数据的结果表。
6.如权利要求5所述的方法,其特征在于,还包括经由图形用户界面使用对应于每一个函数的直方图来呈现所述结果表。
7. 如权利要求1所述的方法,其特征在于,测量API性能的程序驻留在 多个用户计算机上,所述方法还包括-测试以査看存储中的所记录的数据是否超出阈值量;在未超出所述阈值量的情况下选择用户计算机中要对其测量存储器分配 和定时数据的另一API,并重复步骤(b)到(e);在存储中的所记录的数据超出所述阈值量的情况下将存储中的所记录的 数据提交给中央服务位置,所述中央服务位置具有存储中的API测量数据;在所述中央存储位置处将所提交的数据与所述存储中的API测量数据进 行聚集;以及生成结果数据库并使得所述数据库对于API性能数据的用户可用。
8. 如权利要求1所述的方法,其特征在于,选择要对其测量存储器分配和 定时数据的API包括使用随机数生成器来选择目标API。
9. 一种用于获取应用程序编程接口 (API)的性能数据的计算机系统,所 述系统包括执行软件指令的处理器,所述软件指令包括存储器分配剖析器模块,所述存储器分配剖析器模块测量并记录一函数由目标应用程序编程接口 (API)调用的次数,从而产生所述目标API的存储器 分配数据测量;定时剖析器模块,所述定时剖析器模块测量并记录与所述目标API有关的 定时信息,从而产生所述目标API的定时测量;协调模块,所述协调模块对于对所述目标API的每一个调用运行一次所述 存储器分配模块和所述定时剖析器模块,其中所述协调模块避免同时测量出现在相同调用栈上的任意两个API;合并工具模块,所述合并工具模块将所述目标API的存储器分配数据测量 和定时测量组合成结果表;以及用户界面模块,所述用户界面模块可用根据所述存储器分配和定时测量的 以2为底的对数分桶的形式来显示所述结果表的数据。
10. 如权利要求9所述的计算机系统,其特征在于,所述存储器分配剖 析器单独地测量并记录包括性和排他性存储器分配值。
11. 如权利要求9所述的计算机系统,其特征在于,所述用户界面模块还包括将所述结果表的数据呈现为对应于所测量的每一个函数调用的直方图 形式的图形用户界面。
12. —种具有用于执行获取应用程序编程接口 (API)的性能数据的方法的计算机可执行指令的计算机可读介质,所述方法包括(a) 创建要测量的API的列表;(b) 从所述列表中选择单个目标API;(c) 截取对所述目标API的调用并收集定时和存储器分配数据;(d) 记录对应于所述目标API的定时和存储器分配数据,所记录的数据被 放置到存储中;(e) 将所测量的结果合并成具有指示所收集的定时和存储器分配数据的以 2为底的对数的分桶数据的结果表;以及(f) 对于所述列表上的每一个API重复步骤(b)到(e)。
13. 如权利要求12所述的计算机可读介质,其特征在于,还包括 生成结果数据库并使得所述数据库对于API性能数据的用户可用。
14. 如权利要求12所述的计算机可读介质,其特征在于,还包括 经由图形用户界面使用对应于每一个函数的直方图来呈现所述结果表。
15. 如权利要求12所述的计算机可读介质,其特征在于,还包括 生成由所述目标API调用的函数的列表,所述列表包括包含从不同时出现在调用栈上的函数的无干扰函数。同时测量对应于多个无干扰函数的定时和存储器分配。
16. 如权利要求15所述的计算机可读介质,其特征在于,还包括 将所测量到的所述无干扰函数的执行结果合并成所述具有指示定时和存储器分配数据的以2为底的对数的分桶数据的结果表。
17. 如权利要求16所述的计算机可读介质,其特征在于,还包括 经由图形用户界面使用对应于每一个函数的直方图来呈现所述结果表。
18. 如权利要求12所述的计算机可读介质,其特征在于,还包括 测试以査看存储中的所记录的数据是否超出阈值量;在未超出所述阈值量的情况下选择要对其测量存储器分配和定时数据的另一API,并重复步骤(b)到(e);在存储中的所记录的数据超出所述阈值量的情况下将存储中的所记录的数据提交给中央服务位置,所述中央服务位置具有存储中的API测量数据;在所述中央存储位置处将所提交的数据与所述存储中的API测量数据进 行聚集;以及生成结果数据库并使得所述数据库对于API性能数据的用户可用。
19. 如权利要求12所述的计算机可读介质,其特征在于,选择要对其 测量存储器分配和定时数据的API包括使用随机数生成器来选择目标API。
全文摘要
一种测量应用程序编程接口(API)的性能的方法包括选择目标API并跟踪对应于所选API的函数调用的存储器分配以生成由该API调用的函数的列表。然后隔离地在该API中调用各个函数并且收集并记录对应于每个函数的定时和存储器分配数据。所记录的结果然后根据以2为底的对数方法进行分桶并且使该结果可由API用户访问以指示特定API的性能。
文档编号G06F15/16GK101553802SQ200780022145
公开日2009年10月7日 申请日期2007年5月8日 优先权日2006年6月16日
发明者J·S·格雷, M·C·范宁, N·奎热拉, R·玛丽安尼 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1