專利名稱:用于收集并報(bào)告api性能剖析的自動(dòng)化方法和系統(tǒng)的制作方法
用于收集并報(bào)告API性能剖析的自動(dòng)化方法和系統(tǒng)
背景
與其他工程學(xué)科不同,軟件工程師具有很少在作出設(shè)計(jì)決定時(shí)他們可咨詢
的關(guān)于定量信息方面的數(shù)據(jù)。不存在應(yīng)用程序編程接口 (API)性能成本的綜 合目錄。在這種情況下,術(shù)語"APr指的是如"InvalidateRectAPI"中的單個(gè)函數(shù) 而不是如可從華盛頓州雷蒙德市的微軟⑧公司獲得的"Windows⑧操作系統(tǒng) API"中的函數(shù)家族。
此外,該情形因大多數(shù)API不能使其成本由單個(gè)數(shù)字來表征的事實(shí)而復(fù)雜 化。成本可以按許多不同的方式來測量—諸如存儲(chǔ)器使用、CPU使用、1/0成 本等等,并且它可取決于輸入?yún)?shù)和上下文以及當(dāng)然可用硬件。結(jié)果, 一般根 本沒有做出表征API的性能的嘗試。這將工程師置于在作出設(shè)計(jì)決定時(shí)沒有可 用的先驗(yàn)指導(dǎo)的不幸境地。他們必須采取原型制作或更糟糕的但簡單地猜測、 完全忽略成本考慮、或只是從最好的方面著想。后面的這些選項(xiàng)都太常見了。 因此,非常期望收集API數(shù)據(jù)以提供API性能或資源成本的有用的知識。
因此期望收集對于API操作的高度精確的存儲(chǔ)器分配和執(zhí)行時(shí)間數(shù)據(jù)。一 個(gè)目的可以是將該數(shù)據(jù)提供給API消費(fèi)者以使其作出關(guān)于特定API組件是否具 有對于其預(yù)期用途合理的存儲(chǔ)器和定時(shí)特性的有見識的決定。因?yàn)榉峙浜投〞r(shí)
兩者都將取決于如何使用函數(shù)而變化,所以數(shù)據(jù)可較佳地反映分配和定時(shí)在各 種各樣真實(shí)世界情況下的統(tǒng)計(jì)分布。該分布可構(gòu)成"性能剖析(profile)",其 可用于査找API的行為的故障以及為消費(fèi)者提供這些特性的文件。
盡管存儲(chǔ)器分配可以用接近100%的準(zhǔn)確度來測量,但測量執(zhí)行時(shí)間充滿 了不確定性。測量本身占用總執(zhí)行時(shí)間的一部分,這于是使數(shù)據(jù)失真。這在收 集單個(gè)剖析(profiling)運(yùn)行中的一組相互依賴的函數(shù)的定時(shí)特性時(shí)尤其如此。
對于在調(diào)用樹的更深處的函數(shù)調(diào)用的測量開銷將累積并更改對應(yīng)于該調(diào)用樹 的更高處的函數(shù)的結(jié)果。例如,如果函數(shù)A在一緊密循環(huán)中調(diào)用函數(shù)B幾千 次并且正在同一運(yùn)行中測量A和B的定時(shí),則對于B的累積的測量成本可顯 著地更改對應(yīng)于A的結(jié)果。現(xiàn)有工具嘗試通過減少累積的測量錯(cuò)誤來解決該問題,但該方法無法產(chǎn)生統(tǒng)計(jì)上有意義的結(jié)果。
一般而言,在可記錄關(guān)于特定執(zhí)行的詳細(xì)的成本信息的剖析工具的上下文 中使用現(xiàn)有API測量方法。然而,這些系統(tǒng)并不適于綜合數(shù)據(jù)收集,因?yàn)闇y量 動(dòng)作本身干擾成本。它們被設(shè)計(jì)成在單個(gè)運(yùn)行中收獲盡可能多的關(guān)于整個(gè)程序
的信息。期望通過各種執(zhí)行來收集關(guān)于特定API的信息。本發(fā)明解決了這些和 其他問題。
概述
提供本概述以便以簡化的形式介紹將在以下詳細(xì)描述中進(jìn)一步描述的一 些概念。本概述并不旨在標(biāo)識出所要求保護(hù)的主題的關(guān)鍵特征或必要特征,也 不旨在用于限制所要求保護(hù)的主題的范圍。
在一個(gè)實(shí)施例中, 一種測量應(yīng)用程序編程接口 (API)的性能的方法包括
選擇目標(biāo)API并跟蹤對于所選API的函數(shù)調(diào)用的存儲(chǔ)器分配以生成由該API 調(diào)用的函數(shù)列表。然后隔離地調(diào)用各個(gè)函數(shù)以便測量定時(shí)和存儲(chǔ)器分配數(shù)據(jù)。 所記錄的結(jié)果然后根據(jù)以2為底的對數(shù)方法進(jìn)行分桶(bucketize)并且使該 結(jié)果可由API用戶訪問以指示特定API的性能。
在另一實(shí)施例中, 一種剖析器(profiler)系統(tǒng)使得一種收集駐留在用戶機(jī) 器上的隨機(jī)選擇的API的性能信息的分布式方法成為可能。該剖析器系統(tǒng)被分 發(fā)到自愿的用戶并且在無干擾的基礎(chǔ)上測量該用戶計(jì)算機(jī)上的應(yīng)用程序的API
性能。所收集的數(shù)據(jù)被轉(zhuǎn)發(fā)至中央存儲(chǔ)服務(wù),其中收集API信息并將其組織成 表示多個(gè)API的性能的信息桶(bucket)。使該信息對諸如軟件開發(fā)者等典型 的API用戶可用。
附圖簡述 在附圖中-
圖1是示出API剖析器系統(tǒng)的示例軟件體系結(jié)構(gòu)的框圖2是描繪根據(jù)本發(fā)明的各方面的一種測量API的示例方法的示例流程
圖3是描繪根據(jù)本發(fā)明的各方面的一種分布式API測量方案的示例方法的
7示例流程圖4是示出示例主機(jī)計(jì)算環(huán)境的框圖。
詳細(xì)描述 示例性實(shí)施例
API性能剖析器
在一個(gè)實(shí)施例中,提供了用于收集并報(bào)告API性能剖析的自動(dòng)化方法和系 統(tǒng)。該實(shí)施例集中于收集執(zhí)行代碼的高度精確的經(jīng)驗(yàn)觀察以生成可由開發(fā)者或 工具用來協(xié)助開發(fā)應(yīng)用程序的性能剖析或指紋。該自動(dòng)化方法采用對專用性能 剖析器的使用以協(xié)助理解函數(shù)性能特性,該專用性能剖析器是一種窮舉地執(zhí)行 二進(jìn)制代碼以生成用于所有公開可見入口點(diǎn)的數(shù)據(jù)的自動(dòng)化系統(tǒng)、 一種用于以 可由分析工具消費(fèi)的形式來持久存儲(chǔ)該數(shù)據(jù)的機(jī)制、以及一種用于圖形地呈現(xiàn) 剖析的系統(tǒng)。在一種模式中,該剖析器收集對應(yīng)于可見API的精確的執(zhí)行時(shí)間 信息。在另一種模式中,該剖析器收集關(guān)于在調(diào)用任何函數(shù)時(shí)發(fā)生的存儲(chǔ)器分 配的細(xì)節(jié)。
圖1描繪了用于可以在計(jì)算平臺(tái)上運(yùn)行以測量API性能的API剖析器的 示例軟件體系結(jié)構(gòu)100。 一種這樣的系統(tǒng)是用于公共語言基礎(chǔ)結(jié)構(gòu)的ECMA 335標(biāo)準(zhǔn)的微軟⑧CLR 實(shí)現(xiàn)。被測API 102 —般展示可被插裝(instrument) 以供觀察和記錄的現(xiàn)場(in-situ)特性。可與CLRtm兼容的存儲(chǔ)器分配剖析器 104運(yùn)行給定API性能情形,并記錄對該方法的函數(shù)調(diào)用導(dǎo)致對應(yīng)于所分配的 字節(jié)數(shù)的以2為底的對數(shù)的離散值的次數(shù)的計(jì)數(shù)。存儲(chǔ)器分配剖析器單獨(dú)地測 量并記錄包括性和排他性分配值。包括性存儲(chǔ)器分配值是包括由其調(diào)用的函數(shù) 所分配的所有存儲(chǔ)器在內(nèi)的由該函數(shù)分配的字節(jié)數(shù)。排他性存儲(chǔ)器分配值是在 作為該函數(shù)本身的一部分的代碼塊中分配的字節(jié)數(shù)。
定時(shí)剖析器106也可與CLRTM兼容并將其自身掛鉤到被指定為附加輸入 的方法的即時(shí)(JIT)編譯。這以運(yùn)行期間的唯一附加開銷將用于對正被調(diào)查 的特定方法的調(diào)用而不存在用于對其他方法的調(diào)用的開銷的方式來完成。定時(shí) 剖析器也測量并記錄關(guān)于被測API 102的定時(shí)信息。協(xié)調(diào)模塊108采用一腳本來運(yùn)行作為輸入的給定托管代碼情形并且使用
該腳本來針對被測API 102首先運(yùn)行分配剖析器104。協(xié)調(diào)模塊然后使用關(guān)于 在分配階段運(yùn)行哪些方法的信息在定時(shí)剖析器106下重復(fù)地重新運(yùn)行該情形。 協(xié)調(diào)模塊還保證永遠(yuǎn)不會(huì)指示定時(shí)剖析器106測量在相同的運(yùn)行中相互依賴的 函數(shù)的定時(shí)。換言之,協(xié)調(diào)模塊通過不同時(shí)測量可能出現(xiàn)在相同的調(diào)用棧上的 任意兩個(gè)函數(shù)來確保在任何執(zhí)行的線程上最多正在進(jìn)行一個(gè)測量。由此,不測 量和記錄可能掩蓋被測API 102的真實(shí)性能的二級函數(shù)。在本法明的一個(gè)方面 中,可同時(shí)測量并記錄從不出現(xiàn)在相同的調(diào)用棧上的函數(shù)。例如,給定三個(gè)函 數(shù)A、 B、 C,如果只有函數(shù)A和C曾經(jīng)出現(xiàn)在相同的調(diào)用棧上,則不可同時(shí) 測量并記錄A和C。但是,可同時(shí)記錄函數(shù)A和B,也可同時(shí)記錄函數(shù)B和C。
合并工具模塊IIO將來自存儲(chǔ)器分配剖析器104和定時(shí)剖析器106的所有 運(yùn)行的結(jié)果組合成對應(yīng)于每一個(gè)被測API 102的單個(gè)結(jié)果表112。對應(yīng)于特定 被測API 102的結(jié)果表可顯示包括性和排他性存儲(chǔ)器分配的以2為底的對數(shù)分 桶以及執(zhí)行時(shí)間的以2為底的對數(shù)分桶。合并工具模塊還可用于組合來自若干 不同運(yùn)行的結(jié)果以生成表示對被測API102的各種各樣的使用的表。由此,可 在被測API 102上收集單個(gè)執(zhí)行統(tǒng)計(jì)數(shù)據(jù)以及多個(gè)調(diào)用統(tǒng)計(jì)數(shù)據(jù)。
用于將任何被測API 102的結(jié)果表112數(shù)據(jù)呈現(xiàn)為對應(yīng)于每一個(gè)函數(shù)的直 方圖的圖形用戶界面114允許開發(fā)者作出關(guān)于組成給定被測API 102的函數(shù)的 性能特性的推斷。在一個(gè)實(shí)施例中,對應(yīng)于特定被測API 102的結(jié)果表112中 所收集的API性能信息可使用以2為底的對數(shù)方法按照數(shù)量級來組織或分桶。 此外,API性能剖析可通過分析該數(shù)據(jù)來創(chuàng)建。
這些性能剖析同時(shí)向API所有者和API消費(fèi)者傳達(dá)有用的信息。例如, 剖析可指示存在開始使用API的啟動(dòng)成本,之后后續(xù)調(diào)用不需要存儲(chǔ)器消費(fèi)。 另一剖析可指示存儲(chǔ)器分配和執(zhí)行時(shí)間對于提供給API調(diào)用的數(shù)據(jù)線性地或 以其他關(guān)系增長??煞治霾@些剖析并對其進(jìn)行分類以確保對于API開發(fā)者 的API產(chǎn)品質(zhì)量或開發(fā)應(yīng)滿足特定所需性能特性的新API。
作為一非限制性示例,諸如API Object.Equals或GetHashCode()覆蓋等性 能敏感的代碼可使用本發(fā)明的各方面來表征和剖析。諸如開發(fā)者等這些API 的用戶可通過訪問發(fā)布的剖析信息以預(yù)測所剖析的API在其設(shè)計(jì)上將具有的性能來實(shí)行良好的設(shè)計(jì)原則。
在某些實(shí)施例中,可通過從連接網(wǎng)絡(luò)的計(jì)算機(jī)下載或通過諸如,但不限于
CD-ROM等計(jì)算機(jī)可讀介質(zhì)來將圖1的軟件體系結(jié)構(gòu)模塊提供給計(jì)算機(jī)以供 執(zhí)行。在下載之后,圖1的計(jì)算機(jī)體系結(jié)構(gòu)或模塊可駐留在計(jì)算機(jī)RAM中等 待執(zhí)行。
在本發(fā)明的一個(gè)方面中,API剖析器可使用若干遍相同的API執(zhí)行情形來 確保收集比可用單遍實(shí)現(xiàn)的更準(zhǔn)確的定時(shí)數(shù)據(jù)。圖2是示出API剖析器的示例 方法的流程圖200。
最初,將要表征的目標(biāo)API給予API剖析器(步驟202)。存儲(chǔ)器分配剖 析器然后在跟蹤對應(yīng)于由該API調(diào)用的所有函數(shù)的存儲(chǔ)器分配(步驟204)的 模式中運(yùn)行。結(jié)果,生成由該被測API調(diào)用的所有函數(shù)的列表(步驟206)。
一旦獲取了該列表,系統(tǒng)然后就為該列表中的每一個(gè)函數(shù)重新運(yùn)行一次該 情形并且與所有其他函數(shù)完全隔離地測量每一個(gè)函數(shù)的定時(shí)(步驟208)。對 于每一個(gè)函數(shù)運(yùn)行,由API剖析器收集參數(shù)定時(shí)和存儲(chǔ)器分配數(shù)據(jù)并記錄結(jié)果 (步驟210)。該步驟具有只測量對正在給定運(yùn)行中被跟蹤的單個(gè)函數(shù)招致的 開銷的效果。優(yōu)點(diǎn)是不存在由調(diào)用樹中的更深處的函數(shù)引入的累積錯(cuò)誤。
在一替換實(shí)施例中,可推廣該方法以使得API剖析器還可計(jì)算哪些函數(shù)可 一起出現(xiàn)在棧上哪些函數(shù)不可以,而不是僅僅在分配階段收集函數(shù)的列表。于 是,每次運(yùn)行測量多于一個(gè)函數(shù)而仍保證相同的高精確度成為可能。來自以調(diào) 用棧組執(zhí)行API的存儲(chǔ)器和分配信息然后可被合并成結(jié)果表以供呈現(xiàn)。在一個(gè) 實(shí)施例中,呈現(xiàn)可經(jīng)由對應(yīng)于每一個(gè)函數(shù)或函數(shù)組的直方圖來進(jìn)行。
一旦記錄了來自各個(gè)運(yùn)行的結(jié)果,處理各獨(dú)立結(jié)果以供呈現(xiàn)(步驟212)。 作為該步驟的一部分,API剖析器可對于對每一個(gè)函數(shù)的每次調(diào)用,取決于在 當(dāng)前運(yùn)行中正在測量什么,通過跟蹤執(zhí)行時(shí)間或所分配字節(jié)的以2為底的對數(shù) 來表達(dá)對于定時(shí)和存儲(chǔ)器分配的可能的值的范圍。每個(gè)以2為底的對數(shù)項(xiàng)都用 于遞增對其存儲(chǔ)器分配或執(zhí)行時(shí)間具有相同的以2為底的對數(shù)值的調(diào)用桶的計(jì) 數(shù)。然后將來自所有獨(dú)立運(yùn)行的結(jié)果合并在一起(步驟212)。最終結(jié)果是該 情形中所有函數(shù)的表,其具有對于存儲(chǔ)器分配和定時(shí)的每一個(gè)離散的以2為底 的對數(shù)值的計(jì)數(shù)。合并來自若干情形的結(jié)果以獲得各種各樣情形中的API中的
10函數(shù)的更具代表性的視圖也是可能的。
在一個(gè)非限制性實(shí)施例中,用于API性能數(shù)據(jù)收集方法的偽代碼如下:
收集統(tǒng)計(jì)數(shù)據(jù)(情形) 分配表二測量分配(情形)
定時(shí)表=new表[關(guān)鍵字=函數(shù),值=桶陣列]
對于分配表中的每一個(gè)函數(shù) 定時(shí)表[函數(shù)]=測量定時(shí)(函數(shù),情形))
return [分配表,定時(shí)表] 測量分配(情形)
分配表^new表[關(guān)鍵字二函數(shù),值二桶陣列]) 使用分配剖析器,啟動(dòng)情形 對于每一個(gè)n字節(jié)的存儲(chǔ)器分配 索引二log2(n)
對于調(diào)用棧上的每一個(gè)函數(shù) 桶=分配表[函數(shù)][索引] 將桶計(jì)數(shù)遞增1 將桶總和增加n 將桶平方和增加n2
return分配表
測量定時(shí)(函數(shù),情形) 桶=新桶陣列 使用定時(shí)剖析器,啟動(dòng)情形
對于對函數(shù)的每一次持續(xù)時(shí)間為n個(gè)cpu周期的調(diào)用 索引二log2(n)桶=桶[索引] 將桶計(jì)數(shù)遞增1 將桶總和增加n 將桶平方和增加n2
return桶
在上述偽代碼示例中,還可擴(kuò)充定時(shí)和分配的參數(shù)以使得只要所測量的參 數(shù)沒有被測量過程過渡干擾就可作出對盤1/0、網(wǎng)絡(luò)使用或任何其他受API影 響的參數(shù)的測量。
在上述示例偽代碼中,注意,1og2(n)指的是小于或等于n的以2為底的對 數(shù)的最大整數(shù)。在各桶中表征該數(shù)據(jù)還可包括將API的性能放置于各桶中。本 質(zhì)上,所測量的參數(shù)使用以2為底的對數(shù)來下舍入到最接近的整數(shù)以產(chǎn)生"二 次冪桶"。這可通過找到二進(jìn)制表示中的最高有效位的位置并將該數(shù)據(jù)作為一 個(gè)性能類別放在合適的桶中來實(shí)現(xiàn)。此外,對和以及平方和進(jìn)行分桶以使得可 計(jì)算諸如所測量的API參數(shù)的平均值、均值和標(biāo)準(zhǔn)差等基本統(tǒng)計(jì)數(shù)據(jù)。這些統(tǒng) 計(jì)數(shù)據(jù)向用戶提供有關(guān)所測量的API的性能的相關(guān)信息。
在一非限制性示例中,假設(shè)以下程序
fori從1到100: forj從l到3: A(j) B(j) C(j)
通過使用API數(shù)據(jù)剖析器,整個(gè)程序運(yùn)行通過分配剖析器并看見100次以
下調(diào)用序列
A(1)-分配3個(gè)字節(jié)log2(3) =1B(l)-分配107個(gè)字節(jié) log2(107) = 6 C(l)-分配819個(gè)字節(jié) log2(819) =9
A(2)-分配7個(gè)字節(jié)log2(4) = 2 B(2)-分配120個(gè)字節(jié)log2(120) = 6 C(2)-分配1560個(gè)字節(jié) log2(1560) = 10
A(3)-分配22個(gè)字節(jié)log2(22) =4 B(3)-分配115個(gè)字節(jié)log2(115) =6 C(3)-分配1800個(gè)字節(jié) log2(1800) = 10
在其期間,如表1中那樣收集以下分桶數(shù)據(jù)。為了簡明起見,表1中只示 出了對應(yīng)于函數(shù)A、 B、 C的分配的計(jì)數(shù)。對于這些函數(shù)的和以及平方和的分 桶計(jì)算可以按類似的方式計(jì)算。
函數(shù)桶1桶 2桶3桶4桶5桶6桶7桶8桶9桶10
A1001000100000000
B000030000000
C00000000100200
表l:所分配字節(jié)的以2為底的對數(shù)
表l中的各桶按以所分配字節(jié)的2為底的對數(shù)來表達(dá),并且還注意,只有
A、 B、 C是各自由情形調(diào)用的,所以該程序可被重復(fù)使用3次;使用定時(shí)剖 析器對每一個(gè)函數(shù)使用一次。在第一次運(yùn)行時(shí),只運(yùn)行函數(shù)A。注意,在對A 的300次調(diào)用期間,可以觀察到它花費(fèi)了20到40個(gè)時(shí)鐘周期來執(zhí)行,并且采 用以2為底的對數(shù)并在每次得到表2中對應(yīng)于函數(shù)A的以下數(shù)據(jù)時(shí)將桶遞增1:
函數(shù)桶1桶 2桶3桶4桶5桶6桶7桶8桶9桶10
A00019110900000表2: CPU周期的以2為底的對數(shù)
表2中的各桶按CPU周期的以2為底的對數(shù)來表達(dá)。在下兩次運(yùn)行時(shí), 排他地運(yùn)行B和C。然后,可發(fā)生這3個(gè)運(yùn)行的合并。該過程可在實(shí)驗(yàn)室、開 發(fā)環(huán)境或運(yùn)行時(shí)用戶環(huán)境中的許多情形中運(yùn)行,并且所有收集的數(shù)據(jù)可通過簡 單地添加對于公共函數(shù)的桶計(jì)數(shù)來合并在一起。這表示從在實(shí)驗(yàn)室、開發(fā)環(huán)境 或運(yùn)行時(shí)用戶環(huán)境中運(yùn)行的固定的一組情形中構(gòu)建API剖析的一種方式。然后 可采用圖1的用戶界面114來呈現(xiàn)分桶數(shù)據(jù)以供檢查。
較佳地發(fā)布該分桶數(shù)據(jù)以使得設(shè)計(jì)者可訪問所測量和所記錄的API數(shù)據(jù)。 例如,所收集的API數(shù)據(jù)可以在諸如中央數(shù)據(jù)庫等具有遠(yuǎn)程訪問的中央位置中 收集?;蛘?,API數(shù)據(jù)可以在計(jì)算機(jī)可讀介質(zhì)或紙質(zhì)目錄表中產(chǎn)生并被分發(fā)給 用戶。任何公知的發(fā)布和分發(fā)方案都可用于發(fā)布。
在本發(fā)明的另一方面中,實(shí)現(xiàn)在用戶界面處對概括的數(shù)據(jù)的可視化以使得 結(jié)果易于理解。例如,所收集和聚集的API測量數(shù)據(jù)的結(jié)果可被描繪為匯總每 一桶中的計(jì)數(shù)的直方圖?;蛘撸Y(jié)果可使用具有色彩分段的色譜來描繪,其中 向著熱端對應(yīng)于更昂貴的桶而更便宜的端采用更冷的色彩。色彩強(qiáng)度或條的厚 度對應(yīng)于該桶中的樣本的數(shù)量。
API數(shù)據(jù)的分布式收集
在本發(fā)明的一個(gè)方面中,API數(shù)據(jù)可以按分布式方式收集。分布式API 數(shù)據(jù)收集的一個(gè)目的是創(chuàng)建API性能的數(shù)據(jù)庫以協(xié)助開發(fā)者和用戶評估使用 任何一個(gè)API的成本。期望收集"在野的(in the wild) "API性能的實(shí)際測量的 統(tǒng)計(jì)上感興趣的樣本來填充數(shù)據(jù)庫。所填充的數(shù)據(jù)庫在性能參數(shù)反映如在典型 硬件上的實(shí)際典型應(yīng)用程序中所觀察到的典型的"性能成本"的情況下具有更 多價(jià)值。因此,用戶機(jī)器上的實(shí)際使用中的API的性能是合乎需要的。該數(shù)據(jù) 收集過程然后可用于產(chǎn)生對于諸如執(zhí)行時(shí)間、存儲(chǔ)器分配和盤I/O等各種不同 的"資源成本"的性能成本的特性分布。
為了最小化與測量用戶機(jī)器上的API性能相關(guān)聯(lián)的性能成本或開銷,期望在任何給定運(yùn)行中只測量少量的API并且這些API應(yīng)在各運(yùn)行中隨機(jī)選擇。通
常, 一次只可測量一個(gè)API。在一個(gè)實(shí)施例中,API數(shù)據(jù)收集可以在用戶自愿 選擇的基礎(chǔ)上在各種系統(tǒng)上完成。這將創(chuàng)建隨時(shí)間的在各種硬件上收集的API 的隨機(jī)樣本。該數(shù)據(jù)可被周期性地更新到其中API性能數(shù)據(jù)庫用該附加匿名數(shù) 據(jù)來擴(kuò)充的中央服務(wù)器。
,圖3是可用于從在用戶的計(jì)算設(shè)備上運(yùn)行的API收集分布式數(shù)據(jù)的方法 300的流程圖。為了使用戶能夠參與數(shù)據(jù)收集,他/她必須首先安裝將有助于 API數(shù)據(jù)的收集和提交的合適的剖析器系統(tǒng)程序或模塊組。假設(shè)該用戶被要求 并同意或選擇參加該收集過程。在一個(gè)實(shí)施例中,許多用戶選擇參加該收集方 案并且所提供的數(shù)據(jù)在用戶、應(yīng)用程序和機(jī)器導(dǎo)致各種各樣的API數(shù)據(jù)的收集 的情況下來自多樣化的集合。最初,用戶將下載或以其他方式安裝并配置API 剖析器(步驟302)軟件模塊以啟用在無干擾的基礎(chǔ)上對API的測量。必要的 可執(zhí)行組件可從因特網(wǎng)下載并在本地安裝或可通過CD-ROM或等效的程序數(shù) 據(jù)存儲(chǔ)介質(zhì)獲取。此外,然后如對于傳遞自因特網(wǎng)的軟件正常地進(jìn)行的那樣來 為API剖析器提供服務(wù)。步驟302只需執(zhí)行一次,并且所有后續(xù)數(shù)據(jù)收集會(huì)話 可在步驟304處開始。
為了實(shí)際上收集數(shù)據(jù),只要用戶運(yùn)行任何可執(zhí)行程序,數(shù)據(jù)收集系統(tǒng)就必 須激活其自身。此時(shí),API剖析器數(shù)據(jù)收集系統(tǒng)隨機(jī)選擇要監(jiān)視的API并收集 數(shù)據(jù)(步驟304)。然后截取對所選API的調(diào)用并且就諸如時(shí)間、盤操作、網(wǎng) 絡(luò)、存儲(chǔ)器等一個(gè)或多個(gè)方面測量成本。
在一個(gè)實(shí)施例中,可使用對本領(lǐng)域的技術(shù)人員已知的技術(shù)來做出對API 的隨機(jī)選擇。所使用的特定隨機(jī)選擇技術(shù)可取決于實(shí)施該API剖析器收集軟件 的特定運(yùn)行時(shí)環(huán)境。例如,在.NETTM公共語言運(yùn)行時(shí)環(huán)境(CLRTM)上,可對 即時(shí)(JIT)編譯器做出調(diào)整以便在每次即時(shí)編譯方法時(shí)生成一隨機(jī)數(shù)。如果 該隨機(jī)數(shù)小于固定閾值,則JIT編譯器可對該方法進(jìn)行插裝以使得對該方法的 調(diào)用然后由API剖析器來截取并測量??梢詫?shí)現(xiàn)許多這樣的隨機(jī)化選擇技 術(shù)以便在給定情況下選擇API。本領(lǐng)域的技術(shù)人員可基于他們針對本發(fā)明所選 擇的特定技術(shù)來選擇合適的隨機(jī)選擇方法。
對所選API的函數(shù)調(diào)用的截取技術(shù)對于本領(lǐng)域的技術(shù)人員也是公知的并
15且有眾多這樣的技術(shù)。已經(jīng)發(fā)生了類似的截取以便為應(yīng)用程序兼容性提供特殊
行為,這在新操作系統(tǒng)中也被成為"應(yīng)用程序兼容性填補(bǔ)(appcompat shims)"。 該相同的系統(tǒng)可用于注入測量掛鉤。實(shí)際測量同樣使用已經(jīng)由現(xiàn)有剖析系統(tǒng)使 用的各公知技術(shù)來進(jìn)行。
注意,較佳地最小化數(shù)據(jù)收集的性能成本并且存在用于這樣做的若干技 術(shù)。在一個(gè)示例中,收集系統(tǒng)可基于系統(tǒng)負(fù)載或其他配置參數(shù)拒絕收集任何數(shù) 據(jù)以最小化對用戶系統(tǒng)的影響。 一個(gè)示例是防止多于固定的少量程序被同時(shí)插 裝的系統(tǒng)。例如,不多于6個(gè)二進(jìn)制數(shù)的數(shù)據(jù)收集可以是一種設(shè)置。該數(shù)字可 通過進(jìn)一步的下載來動(dòng)態(tài)調(diào)節(jié)。
在測量了所選API之后,于是在每一個(gè)程序運(yùn)行的末期,概括的收集的數(shù) 據(jù)可被寫到盤以供稍后提交。可確定并測試所收集的數(shù)據(jù)量以確定是否已選擇 了足夠的數(shù)據(jù)(步驟306)。如果已收集了足夠的數(shù)據(jù),則可將該數(shù)據(jù)經(jīng)由網(wǎng) 絡(luò)傳輸提交到例如中央服務(wù)(步驟308)。例如,當(dāng)所記錄的數(shù)據(jù)達(dá)到一合適 的大小( 128k)以允許以適中的上傳時(shí)間傳遞合理的一批數(shù)據(jù)時(shí),可聯(lián)系web 服務(wù)并且將該用戶的概括的API性能信息上傳到該中央服務(wù)。或者,如果可在 本地收集更多的API收集數(shù)據(jù),則該過程然后可移回至其中隨機(jī)選擇下一個(gè) API的步驟304。
該中央服務(wù)然后可通過將每一個(gè)類別中的新的計(jì)數(shù)和成本添加到給定用 戶提供對于其的信息的每一個(gè)API來響應(yīng)該上傳請求。這被稱為聚集(步驟 310),其中新的API性能數(shù)據(jù)被添加到中央服務(wù)結(jié)果數(shù)據(jù)庫。該結(jié)果數(shù)據(jù)庫 由此始終用新鮮信息來更新。在一個(gè)實(shí)施例中,采用對加性統(tǒng)計(jì)數(shù)據(jù)(additive statistics)的使用以避免批處理。在一個(gè)實(shí)施例中,優(yōu)選不跟蹤諸如"由用戶調(diào) 用的平均的、獨(dú)特的API"等信息,因?yàn)橹灰砑恿诵碌囊慌Y(jié)果,就將需要 對現(xiàn)有數(shù)據(jù)的費(fèi)時(shí)的重新處理。
在本發(fā)明的一個(gè)方面中,可經(jīng)由多種手段來向用戶發(fā)布該中央數(shù)據(jù)庫(步 驟312)。例如,該數(shù)據(jù)庫可經(jīng)由因特網(wǎng)或其他網(wǎng)絡(luò)連接來遠(yuǎn)程地訪問。周期 性刷新整個(gè)數(shù)據(jù)庫是優(yōu)選的以使得用戶可具有最新的性能成本信息。無需同時(shí) 為所有用戶更新并且無需傳遞整個(gè)數(shù)據(jù)庫的結(jié)果。在一個(gè)實(shí)施例中,用戶可每 天簡單地査詢中央服務(wù)的結(jié)果數(shù)據(jù)庫的少量片段并且它們將在數(shù)據(jù)中輪換以逐漸刷新其內(nèi)容。可任選地,整個(gè)結(jié)果數(shù)據(jù)庫可用于下載,如果用戶希望這么 做的話。除了以二進(jìn)制格式直接發(fā)布該數(shù)據(jù)庫之外,這些內(nèi)容可如以下所指示 的直接地及間接地以各種方式使用。
在本發(fā)明的一個(gè)方面中,用戶是所收集的API性能數(shù)據(jù)的消費(fèi)者(步驟
314)。用戶可出于許多目的并以各種方式訪問該數(shù)據(jù)。以下概括了展示API
剖析器系統(tǒng)的效用的有用的使用模式的示例。
1) 標(biāo)準(zhǔn)API引用自動(dòng)包括API剖析器結(jié)果數(shù)據(jù)庫中所包含的信息以供圖 形地并用可用于以眾多形式査看細(xì)節(jié)的"鉆入視圖(drill-down)"來顯示。
a. 文檔編制格式化系統(tǒng)為每一個(gè)API創(chuàng)建文檔。
b. 對于每一個(gè)API,在其被創(chuàng)建時(shí),咨詢API剖析器數(shù)據(jù)以獲得API 性能成本概述。
c. 連同將允許"鉆入(drill-down)"到所收集的API性能數(shù)據(jù)的基 于web的發(fā)布上的詳細(xì)形式的最新數(shù)據(jù)的鏈接將該性能成本概述以圖形的形 式插入到該文檔中。
2) 諸如微軟⑧Visual StudioTM系統(tǒng)的IntellisenseTM特征等設(shè)計(jì)時(shí)編碼助理 可以在正在編碼新API調(diào)用時(shí)包括具有可任選鉆入的圖形形式的成本概述以 使得典型的成本立即可見。
a. 該系統(tǒng)創(chuàng)建一組可能的API完成。
b. 對于每一個(gè)完成,該系統(tǒng)咨詢所收集的API剖析器數(shù)據(jù)。
c. 系統(tǒng)顯示器中的每一個(gè)都以圖形形式呈現(xiàn)來自API剖析器所收集 的信息的概述。
3) 代碼剖析系統(tǒng)的診斷部分咨詢API剖析器所收集的數(shù)據(jù)以查看任何給 定用戶的API使用是否具有可與典型的使用模式相比較的成本??稍趹岩蓵r(shí)向 用戶報(bào)告異常成本以增強(qiáng)其故障診斷體驗(yàn)。
a. 對于剖析中的每一個(gè)所觀察的API,該系統(tǒng)咨詢API剖析器結(jié)果。
b. 對于每一個(gè)API,所觀察到的成本分布可使用諸如"排列測試" 等標(biāo)準(zhǔn)統(tǒng)計(jì)方法來與API剖析器結(jié)果作比較。
c. 如果該統(tǒng)計(jì)方法提出存在用戶成本分布比API剖析器所收集的數(shù)據(jù)分布糟糕的統(tǒng)計(jì)證據(jù),則將所述API標(biāo)記為潛在的改進(jìn)點(diǎn)并將其呈現(xiàn)給用戶 以供調(diào)查。
i. 該呈現(xiàn)可以是通過在API出現(xiàn)在調(diào)用棧中時(shí)加亮該API,或
者
ii. 通過創(chuàng)建這些API的列表,或者
iii. 通過加亮其中API具有最高觀察到的成本的那些內(nèi)容。
4)API廠商可使用這些技術(shù)來創(chuàng)建對其顧客的典型使用和成本的內(nèi)部調(diào) 査并由此以API改進(jìn)為目標(biāo)并跟蹤其成功。
a. 可以按報(bào)告格式生成由始發(fā)模塊、命名空間或兩者分解的成本分布。
b. 這些分解然后出于計(jì)劃目的由組織來消費(fèi)。
如上所述,在本發(fā)明的一個(gè)方面中,API剖析器較佳地操作以使得對正在 測量的用戶系統(tǒng)施加低性能影響。假定任何特定所測量的API可在單個(gè)程序執(zhí) 行期間被調(diào)用幾百萬次,并且隨著硬件改進(jìn)甚至可能更多,重要的是API成本 應(yīng)被保持在經(jīng)受進(jìn)一步分析的經(jīng)濟(jì)形式。期望對于給定會(huì)話中的每一個(gè)被測 API具有固定大小的條目。然而,還期望捕捉具有很大偏差的成本分布。為了 實(shí)現(xiàn)這點(diǎn), 一種方法是不捕捉確切成本,而是跟蹤各分類的"桶"中的成本計(jì)數(shù)。
如上所述,為性能或資源成本的每一個(gè)二次升冪創(chuàng)建桶。即大于或等于1、 2、 4、 8等的成本各對應(yīng)一個(gè)桶。在每一個(gè)成本桶中,跟蹤普通統(tǒng)計(jì)累積以便 于遞增地計(jì)算均值和方差。S卩,計(jì)算樣本計(jì)數(shù)、成本和、以及成本平方和。這 些值能夠以各種精度來保留。例如,對于計(jì)數(shù)使用64位整數(shù)并對于其他兩個(gè) 統(tǒng)計(jì)量使用一個(gè)雙精度浮點(diǎn)數(shù)。此外,保留對于所有樣本的總計(jì)數(shù)、總和、以 及總平方和以使得可提供總平均數(shù)和方差。該方法在限制所聚集數(shù)據(jù)的成本的 同時(shí)仍然保存必要的分布信息。此外,所有這些數(shù)據(jù)都是加性的,所以它們可 通過簡單的加法來容易地與來自不同運(yùn)行或不同計(jì)算機(jī)的樣本組合。
在一個(gè)實(shí)施例中,所測量的時(shí)間較佳地以諸如周期計(jì)數(shù)等以可用的高分辨 率定時(shí)器的標(biāo)準(zhǔn)單位來維護(hù)。這節(jié)省了計(jì)算時(shí)間并導(dǎo)致最高質(zhì)量的時(shí)間被持久 存儲(chǔ)到盤。
作為本發(fā)明的一方面,諸如但不限于磁存儲(chǔ)設(shè)備、諸如CD和DVD介質(zhì)
18等光學(xué)設(shè)備等計(jì)算機(jī)可讀介質(zhì)可用于存儲(chǔ)可實(shí)現(xiàn)此處所討論或提出的各方法 的計(jì)算機(jī)程序指令。預(yù)想這樣的計(jì)算機(jī)介質(zhì)保留可執(zhí)行指令以供在通用計(jì)算機(jī) 上使用以使其能夠?qū)崿F(xiàn)本發(fā)明的各方面。
盡管用對結(jié)構(gòu)特征和/或方法動(dòng)作專用的語言描述了本主題,但可以理解, 所附權(quán)利要求書中定義的主題不必限于上述具體特征或動(dòng)作。相反,上述具體 特征和動(dòng)作是作為實(shí)現(xiàn)權(quán)利要求的示例形式公開的。
示例性計(jì)算設(shè)備
圖4和以下討論旨在提供適于與媒體存儲(chǔ)設(shè)備進(jìn)行交互的主計(jì)算機(jī)的簡 要概括描述。雖然以下描述了通用計(jì)算機(jī),但這僅是單個(gè)處理器示例,并且具 有多個(gè)處理器的主計(jì)算機(jī)的各實(shí)施例可以用諸如具有網(wǎng)絡(luò)/總線互操作性和交 互的客戶機(jī)等的其他計(jì)算設(shè)備來實(shí)現(xiàn)。
盡管并非所需,但本發(fā)明可以部分地經(jīng)由操作系統(tǒng)來實(shí)現(xiàn),以供設(shè)備或?qū)?象的服務(wù)開發(fā)者使用,和/或被包括在應(yīng)用軟件中。軟件可以在諸如程序模塊等 由諸如客戶機(jī)工作站、服務(wù)器或其它設(shè)備等一個(gè)或多個(gè)計(jì)算機(jī)執(zhí)行的計(jì)算機(jī)可 執(zhí)行指令的通用上下文中描述。 一般而言,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn) 特定抽象數(shù)據(jù)類型的例程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)等。通常,程序模塊 的功能可以在各個(gè)實(shí)施例中按需進(jìn)行組合或分布。此外,本領(lǐng)域的技術(shù)人員可 以理解,本發(fā)明的各實(shí)施例可以用其它計(jì)算機(jī)系統(tǒng)配置來實(shí)施。適用的其它眾 所周知的計(jì)算系統(tǒng)、環(huán)境和/或配置包括但不限于,個(gè)人計(jì)算機(jī)(PC)、自動(dòng) 提款機(jī)、服務(wù)器計(jì)算機(jī)、手持式或膝上型設(shè)備、多處理器系統(tǒng)、基于微處理器
的系統(tǒng)、可編程消費(fèi)者電子設(shè)備、網(wǎng)絡(luò)PC、小型機(jī)、大型計(jì)算機(jī)等等。本發(fā)
明的各實(shí)施例也可以在其中任務(wù)由通過通信網(wǎng)絡(luò)或其它數(shù)據(jù)傳輸介質(zhì)鏈接的 遠(yuǎn)程處理設(shè)備來執(zhí)行的分布式計(jì)算環(huán)境中實(shí)踐。在分布式計(jì)算環(huán)境中,程序模 塊可以位于包括存儲(chǔ)器存儲(chǔ)設(shè)備在內(nèi)的本地和遠(yuǎn)程計(jì)算機(jī)存儲(chǔ)介質(zhì)中,并且客 戶機(jī)節(jié)點(diǎn)可進(jìn)而如服務(wù)器節(jié)點(diǎn)那樣工作。
參考圖4,用于實(shí)現(xiàn)示例主計(jì)算機(jī)的一個(gè)示例性系統(tǒng)包括計(jì)算機(jī)系統(tǒng)410 形式的通用計(jì)算設(shè)備。計(jì)算機(jī)系統(tǒng)410的組件可以包括,但不限于,處理單元
19420、系統(tǒng)存儲(chǔ)器430和將包括系統(tǒng)存儲(chǔ)器在內(nèi)的各種系統(tǒng)組件耦合至處理單 元421的系統(tǒng)總線420。系統(tǒng)總線421可以是幾種類型的總線結(jié)構(gòu)中的任何一 種,包括存儲(chǔ)器總線或存儲(chǔ)控制器、外圍總線、以及使用各種總線體系結(jié)構(gòu)中 的任一種的局部總線。
計(jì)算機(jī)系統(tǒng)410通常包括各種計(jì)算機(jī)可讀介質(zhì)。計(jì)算機(jī)可讀介質(zhì)可以是能 由計(jì)算機(jī)系統(tǒng)410訪問的任何可用介質(zhì),而且包含易失性/非易失性介質(zhì)以及 可移動(dòng)/不可移動(dòng)介質(zhì)。作為示例而非局限,計(jì)算機(jī)可讀介質(zhì)可以包括計(jì)算機(jī) 存儲(chǔ)介質(zhì)和通信介質(zhì)。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括以用于存儲(chǔ)諸如計(jì)算機(jī)可讀指令、 數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù)等信息的任何方法或技術(shù)來實(shí)現(xiàn)的易失性和非 易失性、可移動(dòng)和不可移動(dòng)介質(zhì)。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括但不限于,隨機(jī)存取存 儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、電可擦可編程只讀存儲(chǔ)器(EEPROM)、 閃存或其它存儲(chǔ)器技術(shù)、CD-ROM、數(shù)字多功能盤(DVD)或其它光盤存儲(chǔ)、 盒式磁帶、磁帶、磁盤存儲(chǔ)或其它磁性存儲(chǔ)設(shè)備、或可用于存儲(chǔ)所需信息并可 由計(jì)算機(jī)系統(tǒng)410訪問的任何其它介質(zhì)。
系統(tǒng)存儲(chǔ)器430包括易失性和/或非易失性存儲(chǔ)器形式的計(jì)算機(jī)存儲(chǔ)介質(zhì), 如只讀存儲(chǔ)器(ROM) 431和隨機(jī)存取存儲(chǔ)器(RAM) 432?;据斎?輸出系 統(tǒng)433 (BIOS)包含有助于諸如啟動(dòng)時(shí)在計(jì)算機(jī)系統(tǒng)410中的元件之間傳遞信 息的基本例程,它通常存儲(chǔ)在ROM 431中。RAM 432通常包含處理單元420 可以立即訪問和/或目前正在其上操作的數(shù)據(jù)和/或程序模塊。作為示例,而非 限制,圖4示出了操作系統(tǒng)433、應(yīng)用程序435、其它程序模塊436和程序數(shù) 據(jù)437。
計(jì)算機(jī)系統(tǒng)410也可以包括其它可移動(dòng)/不可移動(dòng)、易失性/非易失性計(jì)算 機(jī)存儲(chǔ)介質(zhì)。僅作為示例,圖4示出了從不可移動(dòng)、非易失性磁介質(zhì)中讀取或 向其寫入的硬盤驅(qū)動(dòng)器431,從可移動(dòng)、非易失性磁盤451中讀取或向其寫入 的磁盤驅(qū)動(dòng)器452,以及從諸如CDROM或其它光學(xué)介質(zhì)等可移動(dòng)、非易失性 光盤455中讀取或向其寫入的光盤驅(qū)動(dòng)器456。可以在示例性操作環(huán)境中使用 的其它可移動(dòng)/不可移動(dòng)、易失性/非易失性計(jì)算機(jī)存儲(chǔ)介質(zhì)包括但不限于,磁 帶盒、閃存卡、數(shù)字多功能盤、數(shù)字錄像帶、固態(tài)RAM、固態(tài)ROM等等。 硬盤驅(qū)動(dòng)器441通常由不可移動(dòng)存儲(chǔ)器接口,諸如接口 440連接至系統(tǒng)總線421,磁盤驅(qū)動(dòng)器451和光盤驅(qū)動(dòng)器455通常由可移動(dòng)存儲(chǔ)器接口,諸如接口 450連接至系統(tǒng)總線421。
上文討論并在圖4中示出的驅(qū)動(dòng)器及其關(guān)聯(lián)的計(jì)算機(jī)存儲(chǔ)介質(zhì)為計(jì)算機(jī) 系統(tǒng)410提供了計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊和其它數(shù)據(jù)的存儲(chǔ)。例 如,在圖4中,硬盤驅(qū)動(dòng)器441被示為存儲(chǔ)操作系統(tǒng)444、應(yīng)用程序445、其 它程序模塊446和程序數(shù)據(jù)447。注意,這些組件可以與操作系統(tǒng)444、應(yīng)用 程序445、其它程序模塊446和程序數(shù)據(jù)447相同,也可以與它們不同。操作 系統(tǒng)444、應(yīng)用程序445、其它程序模塊446和程序數(shù)據(jù)447在這里被標(biāo)注了 不同的標(biāo)號是為了說明至少它們是不同的副本。
用戶可以通過輸入設(shè)備,如鍵盤462和定點(diǎn)設(shè)備461 (通常指鼠標(biāo)、跟蹤 球或觸摸板)向計(jì)算機(jī)系統(tǒng)410輸入命令和信息。其它輸入設(shè)備(未示出)可 以包括話筒、操縱桿、游戲手柄、圓盤式衛(wèi)星天線、掃描儀等。這些和其它輸 入設(shè)備通常由耦合至系統(tǒng)總線420的用戶輸入接口 460連接到處理單元421, 但是也可由諸如并行端口、游戲端口或通用串行總線(USB)之類的其它接口 和總線結(jié)構(gòu)連接。監(jiān)視器491或其它類型的顯示設(shè)備也經(jīng)由可以進(jìn)而與視頻存 儲(chǔ)器(未示出)進(jìn)行通信的接口,諸如視頻接口 490連接至系統(tǒng)總線421。除 監(jiān)視器491以外,計(jì)算機(jī)系統(tǒng)也可以包括其它外圍輸出設(shè)備,諸如揚(yáng)聲器497 和打印機(jī)496,它們可以通過輸出外圍接口 495連接。
計(jì)算機(jī)系統(tǒng)410可使用至一個(gè)或多個(gè)遠(yuǎn)程計(jì)算機(jī),諸如遠(yuǎn)程計(jì)算機(jī)480 的邏輯連接在聯(lián)網(wǎng)或分布式環(huán)境中操作。遠(yuǎn)程計(jì)算機(jī)480可以是個(gè)人計(jì)算機(jī)、 服務(wù)器、路由器、網(wǎng)絡(luò)PC、對等設(shè)備或其它常見的網(wǎng)絡(luò)節(jié)點(diǎn),且通常包括上 文相對于計(jì)算機(jī)系統(tǒng)410描述的許多或所有元件,盡管在圖4中只示出存儲(chǔ)器 存儲(chǔ)設(shè)備481。圖4中所示的邏輯連接包括局域網(wǎng)(LAN)471和廣域網(wǎng)(WAN) 473,但也可以包括其它網(wǎng)絡(luò)/總線。這樣的聯(lián)網(wǎng)環(huán)境在家庭、辦公室、企業(yè)范 圍計(jì)算機(jī)網(wǎng)絡(luò)、內(nèi)聯(lián)網(wǎng)和因特網(wǎng)中是常見的。
當(dāng)在LAN網(wǎng)絡(luò)環(huán)境中使用時(shí),計(jì)算機(jī)系統(tǒng)410通過網(wǎng)絡(luò)接口或適配器471 連接至LAN470。當(dāng)在WAN網(wǎng)絡(luò)環(huán)境中使用時(shí),計(jì)算機(jī)系統(tǒng)410通常包括調(diào) 制解調(diào)器472,或用于通過WAN473,如因特網(wǎng)建立通信的其它裝置。調(diào)制解 調(diào)器472可以是內(nèi)置或外置的,它可以通過用戶輸入接口 460或其它適當(dāng)?shù)臋C(jī)制連接至系統(tǒng)總線421。在聯(lián)網(wǎng)環(huán)境中,相對于計(jì)算機(jī)系統(tǒng)410所描述的程序 模塊或其部分可被儲(chǔ)存在遠(yuǎn)程存儲(chǔ)器存儲(chǔ)設(shè)備中。作為示例,而非限制,圖4 示出了遠(yuǎn)程應(yīng)用程序485駐留在存儲(chǔ)器設(shè)備481上。可以理解,所示的網(wǎng)絡(luò)連 接是示例性的,且可以使用在計(jì)算機(jī)之間建立通信鏈路的其它手段。
鑒于個(gè)人計(jì)算和因特網(wǎng)的交匯,己經(jīng)開發(fā)且正在開發(fā)各種分布式計(jì)算框 架。個(gè)人和商業(yè)用戶同樣地?fù)碛杏糜趹?yīng)用程序和計(jì)算設(shè)備的無縫的互操作和啟 用web的接口 ,使得計(jì)算活動(dòng)越來越面向web瀏覽器和網(wǎng)絡(luò)。
例如,可從微軟公司獲得的微軟⑧的.NETTM平臺(tái)包括服務(wù)器、諸如基于
web的數(shù)據(jù)存儲(chǔ)等構(gòu)件塊服務(wù)、以及可下載設(shè)備軟件。盡管此處的示例性實(shí)施 例是結(jié)合駐留在計(jì)算設(shè)備上的軟件來描述的,但本發(fā)明的一個(gè)或多個(gè)部分也可 以通過操作系統(tǒng)、應(yīng)用程序編程接口 (API)或協(xié)處理器、顯示設(shè)備和請求對 象中的任一個(gè)之間的"中間人"對象來實(shí)現(xiàn),使操作可由所有.NETTM的語言和服 務(wù)來執(zhí)行,以及在其它分布式計(jì)算框架中,在其中得到支持或經(jīng)由它們來訪問。
如上所述,雖然結(jié)合各種計(jì)算設(shè)備和網(wǎng)絡(luò)體系結(jié)構(gòu)描述了本發(fā)明的示例性 實(shí)施例,但基本概念可被應(yīng)用于其中期望實(shí)現(xiàn)用于收集和報(bào)告API性能剖析的 方法的任何計(jì)算設(shè)備或系統(tǒng)。由此,可以將結(jié)合本發(fā)明的各實(shí)施例描述的各方 法和系統(tǒng)應(yīng)用于各種應(yīng)用程序和設(shè)備。盡管此處選擇了示例性編程語言、名稱 和示例來表示各種選擇,但這些語言、名稱和示例不旨在為限制性的。本領(lǐng)域 的普通技術(shù)人員將認(rèn)識到,有多種方法來提供實(shí)現(xiàn)本發(fā)明的各實(shí)施例所實(shí)現(xiàn)的 相同、相似或等效的系統(tǒng)的目標(biāo)代碼。
此處所述的各種技術(shù)可結(jié)合硬件或軟件,或在適當(dāng)時(shí)以其組合來實(shí)現(xiàn)。因 此,本發(fā)明的方法和裝置或其某些方面或部分,可以采用包含在諸如軟盤、 CD-ROM、硬盤驅(qū)動(dòng)器或任何其它機(jī)器可讀存儲(chǔ)介質(zhì)等有形介質(zhì)中的程序代碼 (即,指令)的形式,其中,當(dāng)程序代碼被加載至諸如計(jì)算機(jī)等機(jī)器并由其運(yùn) 行時(shí),該機(jī)器成為用于實(shí)現(xiàn)本發(fā)明的裝置。
盡管已結(jié)合各個(gè)附圖的優(yōu)選實(shí)施例對本發(fā)明的各方面進(jìn)行了描述,但是可 以理解,可以使用其它類似的實(shí)施例,并且可以對所述實(shí)施例進(jìn)行修改或添加, 來實(shí)現(xiàn)本發(fā)明的相同功能而不背離本發(fā)明。此外,應(yīng)當(dāng)強(qiáng)調(diào),構(gòu)想了包括手持 式設(shè)備操作系統(tǒng)和其它應(yīng)用專用操作系統(tǒng)的各種計(jì)算機(jī)平臺(tái),尤其是在無線聯(lián)網(wǎng)設(shè)備的數(shù)量持續(xù)增長時(shí)。因此,所要求保護(hù)的發(fā)明不應(yīng)限于任何單個(gè)實(shí)施例, 而是應(yīng)該根據(jù)所附權(quán)利要求書的寬度和范圍來解釋。
權(quán)利要求
1.一種測量應(yīng)用程序編程接口(API)的性能的方法,所述方法包括(a)創(chuàng)建要測量的API的列表;(b)從所述列表中選擇單個(gè)目標(biāo)應(yīng)用程序編程接口(API);(c)截取對所述目標(biāo)API的調(diào)用并收集定時(shí)和存儲(chǔ)器分配數(shù)據(jù);(d)記錄對應(yīng)于所述目標(biāo)API的定時(shí)和存儲(chǔ)器分配數(shù)據(jù),所記錄的數(shù)據(jù)被放置到存儲(chǔ)中;(e)將所測量的結(jié)果合并成具有指示所收集的定時(shí)和存儲(chǔ)器分配數(shù)據(jù)的以2為底的對數(shù)的分桶數(shù)據(jù)的結(jié)果表;以及(f)對于所述列表上的每一個(gè)API重復(fù)步驟(b)到(e)。
2. 如權(quán)利要求1所述的方法,其特征在于,還包括 生成結(jié)果數(shù)據(jù)庫并使得所述數(shù)據(jù)庫對于API性能數(shù)據(jù)的用戶可用。
3. 如權(quán)利要求1所述的方法,其特征在于,還包括 經(jīng)由圖形用戶界面使用對應(yīng)于每一個(gè)函數(shù)的直方圖來呈現(xiàn)所述結(jié)果表。
4. 如權(quán)利要求1所述的方法,其特征在于,還包括 生成由所述目標(biāo)API調(diào)用的函數(shù)的列表,所述列表包括包含從不同時(shí)出現(xiàn)在調(diào)用棧上的函數(shù)的無干擾函數(shù);同時(shí)測量對應(yīng)于多個(gè)無干擾函數(shù)的定時(shí)和存儲(chǔ)器分配。
5.如權(quán)利要求4所述的方法,其特征在于,還包括將所測量到的所述無干擾函數(shù)的執(zhí)行結(jié)果合并成所述具有指示定時(shí)和存 儲(chǔ)器分配數(shù)據(jù)的以2為底的對數(shù)的分桶數(shù)據(jù)的結(jié)果表。
6.如權(quán)利要求5所述的方法,其特征在于,還包括經(jīng)由圖形用戶界面使用對應(yīng)于每一個(gè)函數(shù)的直方圖來呈現(xiàn)所述結(jié)果表。
7. 如權(quán)利要求1所述的方法,其特征在于,測量API性能的程序駐留在 多個(gè)用戶計(jì)算機(jī)上,所述方法還包括-測試以査看存儲(chǔ)中的所記錄的數(shù)據(jù)是否超出閾值量;在未超出所述閾值量的情況下選擇用戶計(jì)算機(jī)中要對其測量存儲(chǔ)器分配 和定時(shí)數(shù)據(jù)的另一API,并重復(fù)步驟(b)到(e);在存儲(chǔ)中的所記錄的數(shù)據(jù)超出所述閾值量的情況下將存儲(chǔ)中的所記錄的 數(shù)據(jù)提交給中央服務(wù)位置,所述中央服務(wù)位置具有存儲(chǔ)中的API測量數(shù)據(jù);在所述中央存儲(chǔ)位置處將所提交的數(shù)據(jù)與所述存儲(chǔ)中的API測量數(shù)據(jù)進(jìn) 行聚集;以及生成結(jié)果數(shù)據(jù)庫并使得所述數(shù)據(jù)庫對于API性能數(shù)據(jù)的用戶可用。
8. 如權(quán)利要求1所述的方法,其特征在于,選擇要對其測量存儲(chǔ)器分配和 定時(shí)數(shù)據(jù)的API包括使用隨機(jī)數(shù)生成器來選擇目標(biāo)API。
9. 一種用于獲取應(yīng)用程序編程接口 (API)的性能數(shù)據(jù)的計(jì)算機(jī)系統(tǒng),所 述系統(tǒng)包括執(zhí)行軟件指令的處理器,所述軟件指令包括存儲(chǔ)器分配剖析器模塊,所述存儲(chǔ)器分配剖析器模塊測量并記錄一函數(shù)由目標(biāo)應(yīng)用程序編程接口 (API)調(diào)用的次數(shù),從而產(chǎn)生所述目標(biāo)API的存儲(chǔ)器 分配數(shù)據(jù)測量;定時(shí)剖析器模塊,所述定時(shí)剖析器模塊測量并記錄與所述目標(biāo)API有關(guān)的 定時(shí)信息,從而產(chǎn)生所述目標(biāo)API的定時(shí)測量;協(xié)調(diào)模塊,所述協(xié)調(diào)模塊對于對所述目標(biāo)API的每一個(gè)調(diào)用運(yùn)行一次所述 存儲(chǔ)器分配模塊和所述定時(shí)剖析器模塊,其中所述協(xié)調(diào)模塊避免同時(shí)測量出現(xiàn)在相同調(diào)用棧上的任意兩個(gè)API;合并工具模塊,所述合并工具模塊將所述目標(biāo)API的存儲(chǔ)器分配數(shù)據(jù)測量 和定時(shí)測量組合成結(jié)果表;以及用戶界面模塊,所述用戶界面模塊可用根據(jù)所述存儲(chǔ)器分配和定時(shí)測量的 以2為底的對數(shù)分桶的形式來顯示所述結(jié)果表的數(shù)據(jù)。
10. 如權(quán)利要求9所述的計(jì)算機(jī)系統(tǒng),其特征在于,所述存儲(chǔ)器分配剖 析器單獨(dú)地測量并記錄包括性和排他性存儲(chǔ)器分配值。
11. 如權(quán)利要求9所述的計(jì)算機(jī)系統(tǒng),其特征在于,所述用戶界面模塊還包括將所述結(jié)果表的數(shù)據(jù)呈現(xiàn)為對應(yīng)于所測量的每一個(gè)函數(shù)調(diào)用的直方圖 形式的圖形用戶界面。
12. —種具有用于執(zhí)行獲取應(yīng)用程序編程接口 (API)的性能數(shù)據(jù)的方法的計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì),所述方法包括(a) 創(chuàng)建要測量的API的列表;(b) 從所述列表中選擇單個(gè)目標(biāo)API;(c) 截取對所述目標(biāo)API的調(diào)用并收集定時(shí)和存儲(chǔ)器分配數(shù)據(jù);(d) 記錄對應(yīng)于所述目標(biāo)API的定時(shí)和存儲(chǔ)器分配數(shù)據(jù),所記錄的數(shù)據(jù)被 放置到存儲(chǔ)中;(e) 將所測量的結(jié)果合并成具有指示所收集的定時(shí)和存儲(chǔ)器分配數(shù)據(jù)的以 2為底的對數(shù)的分桶數(shù)據(jù)的結(jié)果表;以及(f) 對于所述列表上的每一個(gè)API重復(fù)步驟(b)到(e)。
13. 如權(quán)利要求12所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,還包括 生成結(jié)果數(shù)據(jù)庫并使得所述數(shù)據(jù)庫對于API性能數(shù)據(jù)的用戶可用。
14. 如權(quán)利要求12所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,還包括 經(jīng)由圖形用戶界面使用對應(yīng)于每一個(gè)函數(shù)的直方圖來呈現(xiàn)所述結(jié)果表。
15. 如權(quán)利要求12所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,還包括 生成由所述目標(biāo)API調(diào)用的函數(shù)的列表,所述列表包括包含從不同時(shí)出現(xiàn)在調(diào)用棧上的函數(shù)的無干擾函數(shù)。同時(shí)測量對應(yīng)于多個(gè)無干擾函數(shù)的定時(shí)和存儲(chǔ)器分配。
16. 如權(quán)利要求15所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,還包括 將所測量到的所述無干擾函數(shù)的執(zhí)行結(jié)果合并成所述具有指示定時(shí)和存儲(chǔ)器分配數(shù)據(jù)的以2為底的對數(shù)的分桶數(shù)據(jù)的結(jié)果表。
17. 如權(quán)利要求16所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,還包括 經(jīng)由圖形用戶界面使用對應(yīng)于每一個(gè)函數(shù)的直方圖來呈現(xiàn)所述結(jié)果表。
18. 如權(quán)利要求12所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,還包括 測試以査看存儲(chǔ)中的所記錄的數(shù)據(jù)是否超出閾值量;在未超出所述閾值量的情況下選擇要對其測量存儲(chǔ)器分配和定時(shí)數(shù)據(jù)的另一API,并重復(fù)步驟(b)到(e);在存儲(chǔ)中的所記錄的數(shù)據(jù)超出所述閾值量的情況下將存儲(chǔ)中的所記錄的數(shù)據(jù)提交給中央服務(wù)位置,所述中央服務(wù)位置具有存儲(chǔ)中的API測量數(shù)據(jù);在所述中央存儲(chǔ)位置處將所提交的數(shù)據(jù)與所述存儲(chǔ)中的API測量數(shù)據(jù)進(jìn) 行聚集;以及生成結(jié)果數(shù)據(jù)庫并使得所述數(shù)據(jù)庫對于API性能數(shù)據(jù)的用戶可用。
19. 如權(quán)利要求12所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,選擇要對其 測量存儲(chǔ)器分配和定時(shí)數(shù)據(jù)的API包括使用隨機(jī)數(shù)生成器來選擇目標(biāo)API。
全文摘要
一種測量應(yīng)用程序編程接口(API)的性能的方法包括選擇目標(biāo)API并跟蹤對應(yīng)于所選API的函數(shù)調(diào)用的存儲(chǔ)器分配以生成由該API調(diào)用的函數(shù)的列表。然后隔離地在該API中調(diào)用各個(gè)函數(shù)并且收集并記錄對應(yīng)于每個(gè)函數(shù)的定時(shí)和存儲(chǔ)器分配數(shù)據(jù)。所記錄的結(jié)果然后根據(jù)以2為底的對數(shù)方法進(jìn)行分桶并且使該結(jié)果可由API用戶訪問以指示特定API的性能。
文檔編號G06F15/16GK101553802SQ200780022145
公開日2009年10月7日 申請日期2007年5月8日 優(yōu)先權(quán)日2006年6月16日
發(fā)明者J·S·格雷, M·C·范寧, N·奎熱拉, R·瑪麗安尼 申請人:微軟公司