專利名稱:支持多個虛擬機的追蹤數(shù)據(jù)的基于時間的上下文采樣的制作方法
技術(shù)領(lǐng)域:
本申請一般涉及一種改進的數(shù)據(jù)處理設(shè)備和方法,更具體地涉及用于支持多個虛擬機的追蹤數(shù)據(jù)的基于時間的上下文采樣的機制。
背景技術(shù):
在分析和增強數(shù)據(jù)處理系統(tǒng)和在數(shù)據(jù)處理系統(tǒng)內(nèi)執(zhí)行的應(yīng)用的性能中,有益的是,知道數(shù)據(jù)處理系統(tǒng)內(nèi)的哪個軟件模塊正在使用系統(tǒng)資源。數(shù)據(jù)處理系統(tǒng)的有效管理和增強需要知道如何和何時使用各種系統(tǒng)資源。性能工具(performance tool)用于當(dāng)各種軟件應(yīng)用正在數(shù)據(jù)處理資源內(nèi)執(zhí)行時監(jiān)控和檢查數(shù)據(jù)處理系統(tǒng)以確定資源消耗。例如,性能工具可以識別在數(shù)據(jù)處理系統(tǒng)中最頻繁地執(zhí)行的模塊和指令,或可以識別分配最大存儲量或執(zhí)行最多的I/O請求的那些模塊,硬件性能工具可以被內(nèi)置在系統(tǒng)內(nèi)或被在以后的時間點添加。一種已知的軟件性能工具是追蹤工具。追蹤工具可以使用多種技術(shù)來提供追蹤信息,該追蹤信息指示用于執(zhí)行的程序的執(zhí)行流。一種技術(shù)通過當(dāng)特定事件出現(xiàn)時記錄它們來跟蹤特定的指令序列,即所謂的基于事件的剖析(profile)技術(shù)。例如,跟蹤工具可以記錄對模塊、子例程、方法、函數(shù)或系統(tǒng)組件的每一個進入和每一個退出。替代地,跟蹤工具可以記錄請求者和針對每一個存儲分配請求而分配的存儲量。通常,對于每一個這樣的事件產(chǎn)生時間戳記錄。與進入退出記錄類似的相應(yīng)記錄對也被用于跟蹤任意代碼段的執(zhí)行、開始和完成I/O或數(shù)據(jù)傳送以及許多其他感興趣的事件。為了改善由各種系列的計算機產(chǎn)生的代碼的性能,經(jīng)常需要確定處理器在執(zhí)行代碼中在哪里花費時間,這樣的努力在計算機處理領(lǐng)域中被公知為定位“熱點”。理想上,人們意欲在代碼級的指令和/或源行處隔離這樣的熱點,以便將注意力集中在可能最受益于代碼的改進的區(qū)域。另一種跟蹤技術(shù)包含周期性地采樣程序的執(zhí)行流,以識別程序中程序看起來花費大量時間的特定位置。這種技術(shù)基于以固定時間間隔周期性地中斷應(yīng)用或數(shù)據(jù)處理系統(tǒng)執(zhí)行的思想,即所謂的基于采樣的剖析。在每一個中斷處,針對預(yù)定長度的時間或針對預(yù)定數(shù)量的感興趣事件記錄信息。例如,可以在每一個時間間隔記錄作為被剖析的較大程序的可執(zhí)行部分的當(dāng)前執(zhí)行的線程的程序計數(shù)器。可以在處理后的時間針對數(shù)據(jù)處理系統(tǒng)的負載圖和符號表信息來解析這些值,并且,可以從此分析獲得哪里正在花費時間的簡檔 (profile)。已知的采樣跟蹤技術(shù)限于一次對于單個執(zhí)行環(huán)境執(zhí)行跟蹤。即,關(guān)于單個操作系統(tǒng)和虛擬機執(zhí)行環(huán)境執(zhí)行程序的執(zhí)行流的采樣。然而,近年來,應(yīng)用中件越來越需要使用多個虛擬機來支持各種應(yīng)用。使用已知的采樣跟蹤技術(shù),必須以順序的方式一次一個地單獨采樣每一個單獨的虛擬機執(zhí)行環(huán)境。這導(dǎo)致增加跟蹤和分析時間以及可能不像以其他方式可以獲得的那樣精確的跟蹤信息。
發(fā)明內(nèi)容
在一個說明性實施例中,提供了一種數(shù)據(jù)處理系統(tǒng)中的方法,用于執(zhí)行將所述數(shù)據(jù)處理系統(tǒng)中的計算機代碼的執(zhí)行剖析的基于時間的上下文采樣。所述方法包括響應(yīng)于事件的出現(xiàn),喚醒與在所述數(shù)據(jù)處理系統(tǒng)的處理器上執(zhí)行的多個執(zhí)行線程相關(guān)聯(lián)的多個采樣線程。所述方法進一步包括針對每一個采樣線程確定對應(yīng)執(zhí)行線程關(guān)于一個或多個感興趣的虛擬機的執(zhí)行狀態(tài)。而且,所述方法包括針對每一個采樣線程,基于所述對應(yīng)執(zhí)行線程的所述執(zhí)行狀態(tài),確定是否從與所述對應(yīng)執(zhí)行線程相關(guān)聯(lián)的感興趣的虛擬機檢索跟蹤信息。而且,所述方法包括對于每一個采樣線程,響應(yīng)于確定要從與所述對應(yīng)執(zhí)行線程相關(guān)聯(lián)的感興趣的虛擬機檢索跟蹤信息,從所述虛擬機檢索所述跟蹤信息。在其他說明性實施例中,提供了一種計算機程序產(chǎn)品,包括具有計算機可讀程序的計算機可用或可讀介質(zhì)。當(dāng)所述計算機可讀程序在計算裝置上執(zhí)行時使得所述計算裝置執(zhí)行上面關(guān)于所述方法說明性實施例描述的各種操作及其組合。在另一個說明性實施例中,提供了一種系統(tǒng)/設(shè)備。所述系統(tǒng)/設(shè)備可以包括一個或多個處理器和耦接到所述一個或多個處理器的存儲器。所述存儲器可以包括指令,當(dāng)所述指令被所述一個或多個處理器執(zhí)行時使得所述一個或多個處理器執(zhí)行上面關(guān)于所述方法說明性實施例描述的各種操作及其組合。在本發(fā)明的示例實施例的以下詳細描述中將描述本發(fā)明的這些和其他特征和優(yōu)點,并且本發(fā)明的這些和其他特征和優(yōu)點對于考慮到本發(fā)明的示例實施例的以下詳細描述的本領(lǐng)域的普通技術(shù)人員而言將變得清楚。
參考下面的附圖僅通過示例來描述本發(fā)明的優(yōu)選實施例,在下面的附圖中圖1是其中可以實現(xiàn)說明性實施例的數(shù)據(jù)處理系統(tǒng)的圖示;圖2是其中可以實現(xiàn)說明性實施例的方面的數(shù)據(jù)處理系統(tǒng)的元件的示例框圖;圖3是圖示根據(jù)一個說明性實施例的用于剖析計算機程序的執(zhí)行的組件的示例圖;圖4是圖示根據(jù)一個說明性實施例的在獲得調(diào)用堆棧中使用的組件的圖;圖5是根據(jù)一個說明性實施例的調(diào)用樹的圖;圖6是圖示根據(jù)一個說明性實施例的在節(jié)點中的信息的圖;圖7是概述根據(jù)一個說明性實施例的用于獲得目標(biāo)線程的調(diào)用堆棧信息的示例處理的流程圖;圖8是概述根據(jù)一個說明性實施例的用于收集調(diào)用堆棧信息的采樣線程中的示例處理的流程圖;圖9是概述根據(jù)一個說明性實施例的用于響應(yīng)于接收到中斷而通知處理器上的采樣線程的示例處理的流程圖;圖10是概述根據(jù)一個說明性實施例的用于采樣線程的示例處理的流程圖;圖11是根據(jù)一個說明性實施例的關(guān)于由多個處理器與多個虛擬機相結(jié)合地執(zhí)行的多個線程執(zhí)行計算機程序的剖析的系統(tǒng)的示例框圖;以及圖12是概述根據(jù)一個說明性實施例的采樣線程的示例操作的流程圖,其中,剖析多個處理器和多個虛擬機的多個線程。
具體實施例方式說明性實施例提供了用于提供支持多個虛擬機的、跟蹤數(shù)據(jù)的基于時間的上下文采樣的機制。利用說明性實施例的該機制,可以使用與訪問各個虛擬機的各個處理器相關(guān)聯(lián)的多個采樣器線程來同時采樣多個虛擬機執(zhí)行環(huán)境。而且,提供了一種機制,用于喚醒這些采樣器線程的每一個,并且用于確定要獲得什么跟蹤數(shù)據(jù)或信息(如果有的話)。因此, 每次存在引起對需要采樣跟蹤信息的裝置驅(qū)動器的調(diào)用的中斷或其他事件時,喚醒剖析器 (profiler)中的每一個采樣線程,并且根據(jù)在喚醒采樣線程時的執(zhí)行線程的狀態(tài),檢索跟蹤信息并將其存儲在用于特定線程的跟蹤數(shù)據(jù)文件中??梢曰谠趩拘巡蓸悠骶€程時執(zhí)行環(huán)境中的對應(yīng)執(zhí)行線程的執(zhí)行在何處來執(zhí)行關(guān)于要獲得什么跟蹤數(shù)據(jù)和是否要獲得任何跟蹤數(shù)據(jù)的判定。例如,如果在執(zhí)行線程當(dāng)前正訪問虛擬機時喚醒采樣器線程,則可以收集調(diào)用堆棧信息。如果在執(zhí)行線程在執(zhí)行無用信息(gartage)收集操作的途中的時間喚醒采樣器線程,則可以不收集調(diào)用堆棧信息。可以基于執(zhí)行線程的特定執(zhí)行狀態(tài)來建立用于限定要何時收集跟蹤信息以及要收集什么跟蹤信息的各種條件。而且,可以提供各種計數(shù)器來用于獲得關(guān)于與執(zhí)行線程和虛擬機相結(jié)合的采樣器線程的使用的統(tǒng)計。這些計數(shù)器可以與執(zhí)行線程的執(zhí)行狀態(tài)的特定條件相關(guān)聯(lián)。每次喚醒采樣器線程時可以遞增對應(yīng)的計數(shù)器,并且其對應(yīng)的執(zhí)行線程的狀態(tài)對應(yīng)于與計數(shù)器相關(guān)聯(lián)的條件。這些計數(shù)器值也可以被采樣和存儲為用于執(zhí)行線程的跟蹤數(shù)據(jù)文件的一部分。 此信息與其他跟蹤信息一起可以用于產(chǎn)生報告,該報告詳細描述在執(zhí)行期間的各個時間點數(shù)據(jù)處理系統(tǒng)的執(zhí)行環(huán)境中的計算機程序的執(zhí)行狀態(tài)。此信息可以用于識別計算機程序的執(zhí)行期間的處理資源的分布。本領(lǐng)域的技術(shù)人員可以明白,本發(fā)明的實施例可以被實施為系統(tǒng)、方法或計算機程序產(chǎn)品。因此,本發(fā)明的實施例可以采取完全硬件實施例、完全軟件實施例(包括固件、 常駐軟件、微代碼等)或組合軟件和硬件方面的實施例的形式,它們在此可以全部被一般地稱為“電路”、“模塊”或“系統(tǒng)”。而且,本發(fā)明的實施例可以采取在任何有形表達介質(zhì)中包含的計算機程序產(chǎn)品的形式,在該介質(zhì)中包含計算機可用程序代碼??梢允褂靡粋€或多個計算機可用或計算機可讀介質(zhì)的任何組合。計算機可用或計算機可讀介質(zhì)可以例如是但不限于電子、磁、光學(xué)、電磁、紅外線或半導(dǎo)體系統(tǒng)、設(shè)備、裝置或傳播介質(zhì)。計算機可讀介質(zhì)的更具體的示例(非窮盡性列表)包括下面的部分具有一條或多條導(dǎo)線的電連接、便攜計算機盤、硬盤、隨機存取存儲器(RAM)、只讀存儲器(ROM)、 可擦除可編程只讀存儲器(EPR0M或閃存)、光纖、便攜光盤只讀存儲器(CDROM)、光學(xué)存儲器、諸如支持因特網(wǎng)或內(nèi)聯(lián)網(wǎng)的傳輸介質(zhì)、或者磁存儲器。注意,計算機可用或計算機可讀介質(zhì)可以甚至是其上打印了程序的紙張或另一種適當(dāng)?shù)慕橘|(zhì),因為該程序可以經(jīng)由例如對該紙張或另一種介質(zhì)的光學(xué)掃描而被電子地捕獲,然后被以適當(dāng)?shù)姆绞骄幾g、解譯或處理, 如果必要的話,并接著被存儲在計算機存儲器中。在本文的上下文中,計算機可用或計算機可讀介質(zhì)可以是可以包含、存儲、傳遞、傳播或傳送程序以由指令執(zhí)行系統(tǒng)、設(shè)備或裝置使用或與指令執(zhí)行系統(tǒng)、設(shè)備或裝置相結(jié)合地使用的任何介質(zhì)。計算機可用介質(zhì)可以包括在基帶中或作為載波的一部分的、其中包含了計算機可用程序代碼的傳播數(shù)據(jù)信號。可以使用任何適當(dāng)?shù)慕橘|(zhì)來傳送計算機可用程序代碼,所述適當(dāng)?shù)慕橘|(zhì)包括但不限于無線、有線、 光纖線纜、射頻(RF)等??梢砸砸粋€或多個編程語言的任何組合來編寫本發(fā)明的實施例中的用于執(zhí)行操作的計算機程序代碼,編程語言包括面向?qū)ο蟮木幊陶Z言,諸如JavaTM、SmalltalkTM或 C++等;以及,傳統(tǒng)的過程式編程語言,諸如“C”編程語言或類似的編程語言。程序代碼可以完全地在用戶的計算機上、部分地在用戶的計算機上,作為單獨的軟件包執(zhí)行;部分地在用戶的計算機上并且部分地在遠程計算機上或完全地在遠程計算機或服務(wù)器上執(zhí)行。在后一種情況下,遠程計算機可以通過包括局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)的任何類型的網(wǎng)絡(luò)連接到用戶的計算機,或者可以建立到外部計算機的連接(例如,使用因特網(wǎng)服務(wù)提供商通過因特網(wǎng))。另外,程序代碼可以被包含在服務(wù)器或遠程計算機上的計算機可讀存儲介質(zhì)上,并且可以通過網(wǎng)絡(luò)下載到遠程計算機或用戶的計算機的計算機可讀存儲介質(zhì)以存儲和 /或執(zhí)行。而且,計算系統(tǒng)或數(shù)據(jù)處理系統(tǒng)的任何一個可以在已經(jīng)通過網(wǎng)絡(luò)從遠程計算系統(tǒng)或數(shù)據(jù)處理系統(tǒng)下載了程序代碼后在計算機可讀存儲介質(zhì)中存儲該程序代碼。下面參考根據(jù)本發(fā)明的說明性實施例的方法、設(shè)備(系統(tǒng))和計算機程序產(chǎn)品的流程圖和/或框圖來描述說明性實施例??梢岳斫?,可以通過計算機程序指令來實現(xiàn)流程圖和/或框圖的每一個塊以及流程圖和/或框圖中的塊的組合。這些計算機程序指令可以被提供到通用計算機、專用計算機或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生機器,從而經(jīng)由計算機或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令建立用于實現(xiàn)在所述流程圖和/或框圖塊中指定的功能/行為的部件(means)。 這些計算機程序指令也可以被存儲在計算機可讀介質(zhì)中,這些計算機程序指令可以引導(dǎo)計算機或其他可編程數(shù)據(jù)處理設(shè)備來以特定的方式作為,使得在計算機可讀介質(zhì)中存儲的指令產(chǎn)生制品,該制品包括實現(xiàn)在所述流程圖和/或框圖塊中指定的功能/行為的指令部件。計算機程序指令也可以被安裝到計算機或其他可編程數(shù)據(jù)處理設(shè)備上,以使得在計算機或其他可編程設(shè)備上執(zhí)行一系列操作步驟,以產(chǎn)生計算機實現(xiàn)的處理,使得在計算機或其他可編程設(shè)備上執(zhí)行的指令提供用于實現(xiàn)在所述流程圖和/或框圖塊中指定的功能/行為的處理。附圖中的流程圖和框示根據(jù)本發(fā)明的各個實施例的系統(tǒng)、方法和計算機程序產(chǎn)品的可能實施方式的架構(gòu)、功能和操作。在這一點上,流程圖或框圖中的每一個塊可以表示代碼的模塊、分段或部分,其包括用于實現(xiàn)指定的邏輯功能的一個或多個可執(zhí)行指令。還應(yīng)當(dāng)注意,在一些替代實施方式中,塊中指示的功能可以不以附圖中指示的順序出現(xiàn)。例如,根據(jù)所涉及的功能,連續(xù)地示出的兩個塊可以事實上基本同時地被執(zhí)行,或所述塊有時可以被以逆序執(zhí)行。還應(yīng)當(dāng)注意,可以通過專用的基于硬件的系統(tǒng)或?qū)S糜布陀嬎銠C指令的組合來實現(xiàn)框圖和/或流程圖中的每一個塊、以及框圖和/或流程圖中的塊的組合,該專用的基于硬件的系統(tǒng)執(zhí)行指定的功能或行為。現(xiàn)在參考附圖,并且具體地參考圖1,示出了其中可以實現(xiàn)說明性實施例的數(shù)據(jù)處理系統(tǒng)的圖示。如圖1所示,計算機100包括系統(tǒng)單元102、視頻顯示終端104、鍵盤106、可以包括軟盤驅(qū)動器和其他類型的永久和可移除存儲介質(zhì)的存儲裝置108、以及鼠標(biāo)110。個人計算機100可以包括附加的輸入裝置。附加的輸入裝置的示例可以包括例如操縱桿、觸摸板、觸摸屏、跟蹤球(tracliball)和麥克風(fēng)。計算機100可以是任何適當(dāng)?shù)挠嬎銠C,諸如IBMTMeServerTM計算機或 htelliStation 計算機,它們是位于紐約的Armonk的國際商用機器公司的產(chǎn)品;或者,任何其他類型的計算裝置。雖然所描述的圖示示出了個人計算機,但是可以在其他類型的數(shù)據(jù)處理系統(tǒng)中實現(xiàn)其他實施例。例如,可以在網(wǎng)絡(luò)計算機中實現(xiàn)其他實施例。計算機100 還優(yōu)選地包括圖形用戶界面(GUI),可以通過在計算機100中運行的常駐在計算機可讀介質(zhì)中的系統(tǒng)軟件來實現(xiàn)該GUI。現(xiàn)在轉(zhuǎn)向圖2,描述了根據(jù)本發(fā)明的說明性實施例的數(shù)據(jù)處理系統(tǒng)的圖。在這個說明性示例中,數(shù)據(jù)處理系統(tǒng)200包括通信結(jié)構(gòu)(fabric) 202,其在處理器單元204、存儲器 206、永久存儲器208、通信單元210、輸入/輸出(I/O)單元212和顯示器214之間提供通信。處理器單元204用于執(zhí)行可以被加載到存儲器206內(nèi)的軟件的指令。根據(jù)具體實現(xiàn)方式,處理器單元204可以是一組一個或多個處理器或可以是多處理器核。而且,可以使用一個或多個異質(zhì)處理器系統(tǒng)來實現(xiàn)處理器單元204,在該一個或多個異質(zhì)處理器系統(tǒng)中, 主或控制處理器與輔助處理器或合作處理器一起存在于單個芯片上,該輔助處理器或合作處理器使用與主處理器相同或不同的指令集。可以用于實現(xiàn)說明性實施例的機制的異質(zhì)處理器系統(tǒng)的一個示例是可以從紐約的Armonk的國際商用機器公司獲得的Cell寬帶引擎 (Cell Broadband Engine )。作為另一個說明性示例,處理器單元204可以是包含相同類型的多個處理器的對稱多處理器(SMP)系統(tǒng)。在這些示例中,存儲器206可以例如是隨機存取存儲器。永久存儲器208可以根據(jù)具體實現(xiàn)方式來采取不同形式。例如,永久存儲器208可以包含一個或多個組件或器件。 例如,永久存儲器208可以是硬盤驅(qū)動器、閃存、可重寫光盤、可重寫磁帶或以上的某種組合。由永久存儲器208使用的介質(zhì)也以是可移除的。例如,可以將可移除硬盤驅(qū)動器用于永久存儲器208。在這些示例中,通信單元210提供與其他數(shù)據(jù)處理系統(tǒng)或裝置的通信。在這些示例中,通信單元210是網(wǎng)絡(luò)接口卡。通信單元210可以通過使用物理和無線通信鏈路的任何一個或兩者來提供通信。輸入/輸出單元212允許與可以連接到數(shù)據(jù)處理系統(tǒng)200的其他裝置的數(shù)據(jù)輸入和輸出。例如,輸入/輸出單元212可以通過鍵盤和鼠標(biāo)來提供對用戶輸入的連接。而且, 輸入/輸出單元212可以向打印機發(fā)送輸出。顯示器214向用戶提供用于顯示信息的機制。用于操作系統(tǒng)和應(yīng)用或程序的指令位于永久存儲器208上。這些指令可以被加載到存儲器206內(nèi)以由處理器單元204執(zhí)行??梢杂商幚砥鲉卧?04使用可以位于諸如存儲器206的存儲器中的計算機實現(xiàn)的指令來執(zhí)行不同實施例的處理。這些指令被稱為可以由處理器單元204中的處理器讀取和執(zhí)行的計算機可用程序代碼或計算機可讀程序代碼。計算機可讀程序代碼可以被包含在不同的物理或有形計算機可讀介質(zhì)上,諸如存儲器206或永久存儲器208。計算機可用程序代碼216以功能的形式位于計算機可讀介質(zhì)218上,并且可以被加載到或傳送到數(shù)據(jù)處理系統(tǒng)200。在這些示例中,計算機可用程序代碼216和計算機可讀介質(zhì)218形成計算機程序產(chǎn)品220。在一個示例中,計算機可讀介質(zhì)218可以例如是光盤或磁盤,其被插入或置于作為永久存儲器208的一部分的驅(qū)動器或其他裝置內(nèi),以傳送到諸如作為永久存儲器208的一部分的硬盤驅(qū)動器的存儲裝置上。計算機可讀介質(zhì)218也可以采取永久存儲器的形式,諸如連接到數(shù)據(jù)處理系統(tǒng)200的硬盤驅(qū)動器或閃存。替代地,計算機可用程序代碼216可以從計算機可讀介質(zhì)218通過至通信單元210 的通信鏈路和/或通過至輸入/輸出單元212的連接而被傳送到數(shù)據(jù)處理系統(tǒng)200。在說明性示例中,該通信鏈路和/或連接可以是物理的或無線的。計算機可讀介質(zhì)也可以采取非有形介質(zhì)的形式,諸如包含計算機可讀程序代碼的通信鏈路或無線傳輸。對數(shù)據(jù)處理系統(tǒng)200圖示的不同組件不意味著對可以實現(xiàn)不同實施例的方式提供架構(gòu)上的限制。不同的說明性實施例可以被實現(xiàn)在包括除對數(shù)據(jù)處理系統(tǒng)200圖示的組件之外的組件或包括代替對數(shù)據(jù)處理系統(tǒng)200圖示的組件的組件的數(shù)據(jù)處理系統(tǒng)中。圖2 中所示的其他組件可以與所示的說明性示例不同。例如,總線系統(tǒng)可以被用于實現(xiàn)通信結(jié)構(gòu)202,并且可以由一條或多條總線構(gòu)成, 諸如系統(tǒng)總線或輸入/輸出總線。當(dāng)然,可以使用任何適當(dāng)類型的架構(gòu)來實現(xiàn)總線系統(tǒng),所述適當(dāng)類型的架構(gòu)提供了在附接到該總線系統(tǒng)的不同組件或裝置之間的數(shù)據(jù)的傳送。另外,通信單元可以包括用于發(fā)送和接收數(shù)據(jù)的一個或多個裝置,諸如調(diào)制解調(diào)器或網(wǎng)絡(luò)適配器。而且,存儲器可以例如是存儲器206或高速緩存,諸如在可以在通信結(jié)構(gòu)202中存在的接口和存儲器控制器集線器中找到的。在圖1和2中描述的示例不意味著暗示架構(gòu)上的限制。另外,說明性實施例提供了用于編譯源代碼或用于執(zhí)行代碼的計算機實現(xiàn)的方法、設(shè)備和計算機可用程序代碼。可以在數(shù)據(jù)處理系統(tǒng)中執(zhí)行關(guān)于所描述的實施例的方法,該數(shù)據(jù)處理系統(tǒng)例如是圖1中所示的數(shù)據(jù)處理系統(tǒng)100、或圖2中所示的數(shù)據(jù)處理系統(tǒng)200、或基于本說明書對于本領(lǐng)域的普通技術(shù)人員而言顯而易見的其他類型的數(shù)據(jù)處理系統(tǒng)和/或計算裝置。說明性實施例提供了一種計算機實現(xiàn)的方法、設(shè)備和計算機可用程序代碼,用于通過使得從在采樣時被中斷的每一個虛擬機進行采樣來以高效(efficient)的方式同時從一個或多個處理器的多個虛擬機采樣調(diào)用堆棧信息。而且,可以例如通過在剖析器機制中使用各種計數(shù)器等來收集統(tǒng)計信息,以提供關(guān)于數(shù)據(jù)處理系統(tǒng)的執(zhí)行環(huán)境的各個區(qū)域中的線程所花費的時間的統(tǒng)計信息。雖然說明性實施例的機制運行來同時獲得多個處理器和多個虛擬機的調(diào)用堆棧信息的樣值,但是最好首先理解關(guān)于一個或多個處理器和單個虛擬機可以如何執(zhí)行調(diào)用堆棧信息的這種采樣。因此,本說明書將首先提供可以如何關(guān)于單個虛擬機和在一個或多個處理器上執(zhí)行的線程采樣調(diào)用堆棧信息的示例,然后將示出可以如何將其擴展到根據(jù)說明性實施例的針對多個處理器和多個虛擬機的調(diào)用堆棧信息的同時采樣。圖3是圖示根據(jù)說明性實施例的用于在處理期間識別狀態(tài)的組件的示例圖。在這個描述的示例中,該組件是在諸如圖2中的數(shù)據(jù)處理系統(tǒng)200的數(shù)據(jù)處理系統(tǒng)中出現(xiàn)的硬件和軟件組件的示例。在所描述的示例中,處理器單元300可以產(chǎn)生被發(fā)送到操作系統(tǒng)304的中斷302, 并且處理器單元300中的另一個處理器可以產(chǎn)生也被發(fā)送到操作系統(tǒng)304的中斷303。這些中斷可以導(dǎo)致操作系統(tǒng)304產(chǎn)生對例程或函數(shù)的調(diào)用306,并且所述調(diào)用306被發(fā)送到裝置驅(qū)動器308。存在各種機制來允許諸如操作系統(tǒng)304的操作系統(tǒng)基于來自處理器的中斷產(chǎn)生諸如調(diào)用306的調(diào)用。這樣的機制的示例包括將中斷處理器(即被設(shè)計來處理特定中斷情況的一部分計算機代碼)注冊到操作系統(tǒng)304,以當(dāng)中斷302和/或303出現(xiàn)時該中斷處理器得到通知;或者,使裝置驅(qū)動器308截獲(直接處理)中斷向量,以便當(dāng)中斷 302或303出現(xiàn)時裝置驅(qū)動器308獲得控制。當(dāng)裝置驅(qū)動器308接收到調(diào)用306并且確定應(yīng)當(dāng)進行采樣時,裝置驅(qū)動器308將諸如其調(diào)用堆棧要被采樣的線程的線程標(biāo)識符(TID)的信息布置在用于所選擇的采樣線程(未示出)的工作區(qū)域311中。即,可以有用于剖析器318的每一個采樣線程的獨立工作區(qū)域311,其中,信息被置于用于剖析器318的適當(dāng)采樣線程的適當(dāng)工作區(qū)域311中,該適當(dāng)?shù)牟蓸泳€程用于采樣跟蹤數(shù)據(jù)以用于剖析計算機代碼在執(zhí)行環(huán)境中的執(zhí)行。裝置驅(qū)動器308還向剖析器318的相應(yīng)采樣線程發(fā)送信號,以指示采樣線程收集線程310中的感興趣的線程的調(diào)用堆棧信息。在這些示例中,感興趣的線程是在產(chǎn)生中斷302或303的處理單元300的處理器上執(zhí)行的線程,中斷302或303導(dǎo)致對于裝置驅(qū)動器308的操作系統(tǒng)調(diào)用 306。由裝置驅(qū)動器308向其發(fā)送信號的采樣器線程檢查數(shù)據(jù)區(qū)域314內(nèi)其對應(yīng)的工作區(qū)域311,以確定特定的采樣線程應(yīng)當(dāng)執(zhí)行什么工作。在這些示例中,工作區(qū)域311可以識別獲取用于中斷的線程的調(diào)用堆棧信息所需的工作。替代地,根據(jù)由裝置驅(qū)動器308在工作區(qū)域311中布置的特定信息,采樣線程可以執(zhí)行其他操作,諸如遞增計數(shù)器、讀取計數(shù)器值或產(chǎn)生統(tǒng)計等。在一個說明性實施例中,線程310內(nèi)的采樣線程執(zhí)行從虛擬機316收集調(diào)用堆棧信息的工作,虛擬機316在一個說明性實施例中是JavaTM虛擬機(JVM)。雖然在從JVM獲得調(diào)用堆棧信息的上下文中描述了所述說明性實施例,但是所述說明性實施例不限于此。 而是,可以根據(jù)具體實現(xiàn)方式,關(guān)于其他虛擬機或不在虛擬機中的其他應(yīng)用執(zhí)行調(diào)用堆棧信息的收集。在一個說明性實施例中,剖析器318是基于時間的上下文采樣剖析器應(yīng)用。剖析器318中所選擇的采樣線程使用位于工作區(qū)域311中的信息來確定要獲得其調(diào)用堆棧的線程。例如,進程標(biāo)識符(PID)和用于中斷的線程的線程標(biāo)識符(TID)可以被寫入工作區(qū)域 311,由此向采樣線程識別哪個進程的哪個執(zhí)行線程是采樣的對象。用于由TID標(biāo)識的執(zhí)行線程的調(diào)用堆棧信息可以被采樣線程獲得和處理,以在數(shù)據(jù)區(qū)域320中建立調(diào)用樹317,數(shù)據(jù)區(qū)域320由剖析器318分配和保持。調(diào)用樹317包含調(diào)用堆棧信息,并且也可以包括關(guān)于葉節(jié)點的附加信息,所述葉節(jié)點是在中斷和采樣調(diào)用堆棧時執(zhí)行的當(dāng)前例程。在這些說明性示例中的中斷的情況下,中斷處理器可以進行感興趣的線程被中斷 (即正在執(zhí)行,且其執(zhí)行被分支到中斷處理器)的判定,并且啟動延遲過程調(diào)用(DPC)或第二級中斷處理器,以向剖析器318發(fā)送信號。在一個實施例中,基于諸如策略326的一些標(biāo)準(zhǔn)周期地產(chǎn)生中斷。在這些示例中,每次指定進程內(nèi)的線程被中斷時,可以執(zhí)行觸發(fā)調(diào)用堆棧信息的收集。當(dāng)然,其他事件也可以用于啟動信息的收集。例如,可以響應(yīng)硬件計數(shù)器的溢出來周期地產(chǎn)生信息。剖析器318可以基于在某個時間段上收集的調(diào)用堆棧信息來產(chǎn)生報告322?;跁r間的采樣提供了進行采樣時代碼正在執(zhí)行的例程中花費的周期的精確估計,以及到達進
11行采樣的代碼所采用的路徑的精確估計?;谒占男畔⒌膱蟾娈a(chǎn)生在每一個例程中花費的時間的合理精確的畫面以及在由所選擇的例程調(diào)用的例程中的累積時間。圖4是圖示根據(jù)一個說明性實施例的在獲得調(diào)用堆棧信息中使用的組件的示例圖。在這個示例中,數(shù)據(jù)處理系統(tǒng)400包括處理器402、404和406。這些處理器是可以例如在圖3的處理器單元300中找到的處理器的示例。在執(zhí)行期間,這些處理器402、404和406 的每一個可以具有在其上執(zhí)行的線程。替代地,一個或多個處理器可以處于空閑狀態(tài)中,其中,沒有線程在空閑處理器上執(zhí)行。在所描述的示例中,當(dāng)中斷出現(xiàn)時,目標(biāo)線程408在處理器402上執(zhí)行,線程410 在處理器404上執(zhí)行,并且線程412在處理器406上執(zhí)行。對于這個示例,目標(biāo)線程408是在處理器402上中斷的線程。例如,可以通過定時器中斷或硬件計數(shù)器溢出來中斷目標(biāo)線程408的執(zhí)行,其中,在指定數(shù)量的事件后,例如,在完成100,000個指令后,計數(shù)器的值被設(shè)置為溢出。當(dāng)產(chǎn)生中斷時,裝置驅(qū)動器414向采樣線程416、418和420發(fā)送信號。這些采樣線程的每一個與處理器之一相關(guān)聯(lián)。采樣線程418與處理器404相關(guān)聯(lián),采樣線程420與處理器406相關(guān)聯(lián),并且,采樣線程416與處理器402相關(guān)聯(lián)。當(dāng)滿足諸如上述的定時器或計數(shù)器溢出的預(yù)定采樣標(biāo)準(zhǔn)時,裝置驅(qū)動器414喚醒這些采樣線程416、418和420。在這些示例中,裝置驅(qū)動器414類似于在圖3中的裝置驅(qū)動器308。向采樣線程418和420發(fā)送信號,并且采樣線程418和420被允許在向采樣線程 416發(fā)送信號之前為活動或被執(zhí)行而不進行任何工作。即,采樣線程416被分配了這樣的工作,即獲得用于目標(biāo)線程408的調(diào)用堆棧信息的請求,然而不向采樣線程418和420分配工作,因為線程410和412還沒有被中斷。采樣線程418和420是活動的,因此處理器404 和處理器406不進入空閑狀態(tài)。以這種方式,目標(biāo)線程408將不從處理器402轉(zhuǎn)移到另一個處理器,因為所有的處理器當(dāng)前正在忙于執(zhí)行線程。在這些示例中,通過使得處理器402、 404和406處于非空閑狀態(tài)中,避免了目標(biāo)線程408從處理器402向另一個處理器的移動。在所描述的示例中,采樣線程416被分配從虛擬機422獲得調(diào)用堆棧信息的形式的工作。虛擬機422類似于在圖3中的操作系統(tǒng)304中執(zhí)行的虛擬機316??梢酝ㄟ^對虛擬機422進行適當(dāng)?shù)恼{(diào)用來獲得調(diào)用堆棧信息,虛擬機422在這個示例中為JVM。在所描述的示例中,用于訪問JVM的接口是Java虛擬機工具接口(JVMTI)。這個接口允許調(diào)用堆棧信息的收集。該調(diào)用堆棧可以例如是包含不同線程或方法的使用計數(shù)的標(biāo)準(zhǔn)樹。JVMTI 是在Java5軟件開發(fā)包(SDK)版本1. 5. 0中可獲得的接口。在Java 2平臺標(biāo)準(zhǔn)版(J2SE) SDK版本1.4. 2中可獲得Java虛擬機監(jiān)視程序接口(JVMPI)。這兩個接口允許進程或線程以到JVM的工具接口的形式來從JVM獲得信息??梢詮腟unMicrosystems公司獲得這些接口的說明,因此,在此不進一步描述這些接口。根據(jù)說明性實施例,兩接口中的任一接口或到JVM的任何其他接口可以被用于獲得用于一個或多個線程的調(diào)用堆棧信息。采樣線程416向剖析器似4提供調(diào)用堆棧信息用于處理。剖析器似4根據(jù)在采樣時從虛擬機422獲得的調(diào)用堆棧信息構(gòu)造調(diào)用樹??梢酝ㄟ^針對在調(diào)用堆棧信息中標(biāo)識的方法和/或函數(shù)入口和出口分析調(diào)用堆棧信息來構(gòu)造調(diào)用樹。通過圖3中的剖析器318可以將此調(diào)用樹存儲為圖3的數(shù)據(jù)區(qū)域320中的樹317,或者存儲為獨立的數(shù)據(jù)區(qū)域中的獨立文件。
圖5是可以使用說明性實施例的機制來產(chǎn)生的調(diào)用樹的示例圖。例如,調(diào)用樹500 是與在圖3中的調(diào)用樹317類似的調(diào)用樹的示例。由諸如圖3中的剖析器318的應(yīng)用基于使用一個或多個采樣線程收集的調(diào)用堆棧信息來建立和修改調(diào)用樹500。在圖5中所示的示例調(diào)用樹500中,調(diào)用樹500由節(jié)點502、504、506和508以及節(jié)點之間的弧構(gòu)成,所述弧用于指示調(diào)用樹500中的哪些節(jié)點調(diào)用哪些其他節(jié)點。在所描述的示例中,節(jié)點502表示進入方法A的入口,節(jié)點504表示進入方法B的入口,并且節(jié)點506和508分別表示進入方法C和D的入口。現(xiàn)在轉(zhuǎn)向圖6,描述了根據(jù)一個說明性實施例的用于圖示調(diào)用樹的節(jié)點中的信息的圖。入口 600是諸如調(diào)用樹500的調(diào)用樹的節(jié)點(諸如在圖5中的節(jié)點502)中的信息的示例,該調(diào)用樹是基于通過采樣線程采樣虛擬機的調(diào)用堆棧而獲得的跟蹤信息所產(chǎn)生的。 在這個示例中,入口 600包含方法/函數(shù)標(biāo)識符602、樹層次(LV)604和樣值606。方法/ 函數(shù)標(biāo)識符602例如包含節(jié)點所表示的方法或函數(shù)的名稱。樹層次(LV) 604標(biāo)識調(diào)用樹內(nèi)的特定節(jié)點的分級樹層次。例如,向回參考圖5,如果入口 600用于圖5中的節(jié)點502,則樹層次604將指示這個節(jié)點是根節(jié)點。調(diào)用樹的節(jié)點可以用于產(chǎn)生諸如圖3中的報告322的報告,該報告指示在包括處理器單元300、操作系統(tǒng)304、虛擬機316等的執(zhí)行環(huán)境中使用圖3中的線程310的計算機程序的執(zhí)行的采樣的結(jié)果。該報告可以是調(diào)用樹及其節(jié)點的分析,用于識別例如計算機程序的執(zhí)行花費較大量時間的區(qū)域。該報告可以提供用于可視化計算機程序在執(zhí)行環(huán)境內(nèi)執(zhí)行的方式的機制。報告可視化機制可以包括單獨例程的平簡檔(flat profile),S卩,由特定例程執(zhí)行的時間量和在它們調(diào)用的所有例程中花費的時間的總和。其他報告可以標(biāo)識每一個例程和由該例程調(diào)用的例程的調(diào)用者以及用于標(biāo)識到該例程和它調(diào)用的所有例程的路徑的完整調(diào)用堆棧。返回圖3,當(dāng)向剖析器318的采樣線程發(fā)送信號時,剖析器318的對應(yīng)采樣器線程經(jīng)由諸如JVMTI和/或JVMPI的虛擬機接口請求對于每一個感興趣的線程檢索調(diào)用堆棧。 被檢索的每個調(diào)用堆棧被“移動(walk)”或記錄到進程或虛擬機特定的調(diào)用樹中。這通常被線程記錄,以避免鎖定以及用以提供改善的性能。在所檢索的調(diào)用堆棧被移動到樹中后, 度量(在該情況下是樣值的計數(shù))被添加到葉節(jié)點中的樣值基礎(chǔ)。由裝置驅(qū)動器308提供的對度量的每個采樣或改變被添加到調(diào)用樹的葉節(jié)點的基礎(chǔ)度量。這些度量可以包括例如特定調(diào)用堆棧序列的出現(xiàn)的樣值的計數(shù)。在其他實施例中,可以僅記錄調(diào)用堆棧序列。圖7是根據(jù)一個說明性實施例的用于獲得目標(biāo)線程的調(diào)用堆棧信息的處理的示例流程圖。例如,圖7中所示的處理可以被實現(xiàn)在軟件組件中,諸如圖4中的裝置驅(qū)動器 414。處理從檢測被監(jiān)控的事件開始(步驟700)。在一個說明性實施例中,此被監(jiān)控的事件可以例如是來自操作系統(tǒng)的調(diào)用,其指示處理器已經(jīng)發(fā)生了中斷。目標(biāo)線程(即當(dāng)被監(jiān)控的事件出現(xiàn)時正在執(zhí)行的線程)被識別(步驟702)。信息被寫入每一個采樣線程的工作區(qū)域,以識別與剖析器的采樣線程對應(yīng)的各個進程和線程標(biāo)識符,然后,向每一個采樣線程發(fā)送信號(步驟704)。在步驟704中,將該信號發(fā)送到所有采樣線程,而不僅發(fā)送到與事件出現(xiàn)時感興趣的目標(biāo)線程正在其上執(zhí)行的處理器相關(guān)聯(lián)的采樣線程。對于不與感興趣的目標(biāo)線程正在其上執(zhí)行的處理器相關(guān)聯(lián)的那些采樣線程,這些采樣線程進入如下所述的旋轉(zhuǎn)(spin)狀態(tài),并且不產(chǎn)生用于特定采樣的任何調(diào)用堆棧跟蹤信息。執(zhí)行所有采樣線程的信號通知以保證沒有處理器在空閑狀態(tài)中。在這些說明性實施例中,通過防止處理器進入或保持在空閑狀態(tài)中,避免了目標(biāo)線程的遷移或移動。然后,為感興趣的目標(biāo)線程啟動調(diào)用堆棧信息的收集(步驟706),然后該處理結(jié)束。如上所述,例如可以使用JVM的JVMTI和/或JVMPI接口來執(zhí)行調(diào)用堆棧信息的收集。接下來轉(zhuǎn)向圖8,提供了根據(jù)一個說明性實施例的、在用于產(chǎn)生調(diào)用樹的線程中的處理的流程圖。例如,圖8中所示的處理可以被實現(xiàn)在采樣線程中,諸如圖4中的采樣線程 416。因此,可以在剖析器(諸如圖3中的剖析器318)中使用從虛擬機為感興趣的目標(biāo)線程收集調(diào)用堆棧信息的采樣線程來執(zhí)行圖8中所示的處理。該處理從接收到采樣用于目標(biāo)線程的信息的通知開始(步驟800)。例如,該通知可以是來自裝置驅(qū)動器的、采樣線程將要收集調(diào)用堆棧信息的信號信號通知。然后,例如經(jīng)由諸如JVMTI和/或JVMP的虛擬機接口從虛擬機檢索調(diào)用堆棧信息(步驟802)。例如通過移動調(diào)用堆棧信息并且產(chǎn)生包括調(diào)用樹的節(jié)點和節(jié)點之間的弧,而從調(diào)用堆棧信息產(chǎn)生輸出調(diào)用樹(步驟804)。圖5中的調(diào)用樹500是可以通過由采樣線程產(chǎn)生的輸出調(diào)用樹的示例。最后,輸出調(diào)用樹被存儲在數(shù)據(jù)區(qū)域中(步驟806),其后該處理結(jié)束。在這些示例中,調(diào)用樹被存儲在諸如圖3中的數(shù)據(jù)區(qū)域314的數(shù)據(jù)區(qū)域中,并且可以是一個或多個報告的產(chǎn)生的基礎(chǔ)。圖9是根據(jù)一個說明性實施例的、用于響應(yīng)接收到中斷而通知處理器上的線程的處理的流程圖。圖9中所示的處理可以例如被實現(xiàn)在諸如圖4中的裝置驅(qū)動器414的軟件組件中。如圖9中所示,處理從等待諸如中斷的事件開始(步驟900)。當(dāng)事件出現(xiàn)時,諸如中斷出現(xiàn)時,識別當(dāng)前的處理器(步驟90 。在這個示例中,當(dāng)前的處理器是其上接收到中斷的處理器。目標(biāo)線程是中斷時正在當(dāng)前處理器上執(zhí)行的線程。目標(biāo)線程是期望其調(diào)用堆棧信息的感興趣的線程。進行對于當(dāng)前處理器是否存在工作的判定(步驟904)??梢杂裳b置驅(qū)動器使用諸如圖3中的策略326的策略來執(zhí)行步驟904??赡懿皇敲看沃袛喑霈F(xiàn)時都期望調(diào)用堆棧信息。觸發(fā)調(diào)用堆棧信息的收集的“事件”可以是中斷的出現(xiàn)和條件的存在的組合。例如, 可能不期望調(diào)用堆棧信息,直到某個用戶狀態(tài)出現(xiàn),諸如特定用戶或特定類型的用戶登錄到數(shù)據(jù)處理系統(tǒng)中。又如,可能不期望調(diào)用堆棧信息,直到用戶開始某個處理或啟動某個行為。如果不存在工作,則處理返回到步驟900,以等待另一個中斷。如果對于當(dāng)前處理器存在工作,則處理分配工作(步驟906)??梢酝ㄟ^將工作分配布置在諸如圖3中的工作區(qū)域311的工作區(qū)域中來分配工作。在這些示例中,工作被分配到與出現(xiàn)中斷時感興趣的線程正在其上執(zhí)行的處理器相關(guān)聯(lián)的采樣線程。選擇非當(dāng)前處理器(步驟908),并且,通知所選擇的處理器上的線程(步驟910)。在步驟910中,向用于所選擇的處理器的采樣線程發(fā)送信號,以喚醒該采樣線程。然后,進行是否存在更多的非當(dāng)前處理器要通知的判定(步驟912)。如果存在另外的非當(dāng)前處理器要通知,則處理返回到步驟908。否則,通知當(dāng)前處理器上的線程(步驟914),并且處理隨后結(jié)束。在這些示例中,最后通知用于當(dāng)前處理器的采樣線程,然而,說明性實施例不限于此。而是,可以首先通知當(dāng)前處理器上的線程。現(xiàn)在參考圖10,描述了根據(jù)一個說明性實施例的用于采樣線程的處理的流程圖。 可以通過與剖析器應(yīng)用相結(jié)合的采樣線程來實現(xiàn)在圖10中所示的處理,該采樣線程例如是圖4中的采樣線程416、采樣線程418或采樣線程420,該剖析器應(yīng)用例如是圖3中的剖析器318。如圖10中所示,處理從等待通知開始(步驟1000)。當(dāng)接收到通知時,進行是否已經(jīng)向采樣線程分配了工作的判定(步驟1002)。通過查看諸如圖3中的工作區(qū)域311的存儲位置或數(shù)據(jù)區(qū)域,并且確定是否存在進程標(biāo)識符、線程標(biāo)識符和用于指示要執(zhí)行的工作的類型(例如要收集的跟蹤信息的類型等)的其他信息,來進行是否已經(jīng)分配工作的識別。為了說明性實施例的目的,工作區(qū)域中的進程標(biāo)識符和線程標(biāo)識符的存在可以本身就是要針對那個特定進程標(biāo)識符和線程標(biāo)識符檢索調(diào)用堆棧信息的指示。在一個說明性實施例中,可以在圖3中的數(shù)據(jù)區(qū)域314中向不同的采樣線程分配工作。如果還沒有分配工作,則處理在步驟1010繼續(xù)。另一方面,如果已經(jīng)分配了工作, 則執(zhí)行所分配的工作(步驟1004)。在這些示例中,該工作是獲得用于目標(biāo)線程的調(diào)用堆棧 fn息ο然后進行工作是否完成的判定(步驟1006)。如果工作未完成,則處理返回到步驟1004。否則,如果工作完成,則作出工作完成的指示(步驟1008)。例如,可以在諸如圖 3中的工作區(qū)域311的工作區(qū)域中進行這個指示。該指示允許其他采樣線程知道已經(jīng)收集了調(diào)用堆棧信息。對于已經(jīng)完成了它們的工作的線程或者對于還沒有被分配工作的線程(步驟 1002),處理進入旋轉(zhuǎn)狀態(tài)(步驟1010),直到完成了所有線程正在執(zhí)行的所有工作。當(dāng)旋轉(zhuǎn)狀態(tài)完成時,處理返回到步驟1000,以等待另一個通知。在執(zhí)行步驟1010中,采樣線程可以執(zhí)行旋轉(zhuǎn)等待循環(huán)。這種類型的循環(huán)是短代碼段,其讀取存儲器位置,然后將其與特定值作比較。如果存儲器位置的內(nèi)容等于這個值,則循環(huán)完成執(zhí)行。在這些示例中,存儲器位置是工作區(qū)域。在這些示例中,采樣線程已經(jīng)完成工作的指示是用于停止旋轉(zhuǎn)狀態(tài)所需要的特定值。否則,重讀存儲器位置,并且再一次進行比較。在這些示例中,當(dāng)已經(jīng)完成工作的指示出現(xiàn)時,旋轉(zhuǎn)狀態(tài)結(jié)束。這種機制允許采樣線程繼續(xù)活動,直到已經(jīng)收集了調(diào)用堆棧信肩、O上面的機制允許剖析器一次使用一個采樣線程來與執(zhí)行環(huán)境的單個虛擬機相關(guān)聯(lián)地一次針對一個執(zhí)行線程收集調(diào)用堆棧信息。在任何一次僅實際上使用與產(chǎn)生中斷的處理器相關(guān)聯(lián)的采樣線程來收集跟蹤信息,即,調(diào)用堆棧的采樣。在與中斷的處理器對應(yīng)的采樣線程正在收集調(diào)用堆棧信息時,其他采樣線程可以被喚醒和置于旋轉(zhuǎn)狀態(tài)中,以避免在正在收集調(diào)用堆棧信息的同時線程遷移。然而,對于這些其他的采樣線程不收集跟蹤信息。在另一個說明性實施例中,如上所述,數(shù)據(jù)處理系統(tǒng)可以包括多個虛擬機,其中多個處理器上的線程訪問這些虛擬機中的一個或多個。在該另一個說明性實施例中,每次出現(xiàn)需要跟蹤信息的采樣(例如一個或多個虛擬機的調(diào)用堆棧的采樣)的事件時,喚醒所有處理器的所有采樣線程。關(guān)于每一個采樣線程確定它們對應(yīng)的執(zhí)行線程的執(zhí)行狀態(tài)。該確定判定采樣線程要收集跟蹤信息,要被置于循環(huán)或旋轉(zhuǎn)狀態(tài)中,還是應(yīng)當(dāng)簡單地更新裝
15置驅(qū)動器采樣統(tǒng)計信息。在一個實施例中,在每一個處理器上產(chǎn)生中斷,并且,每一個中斷處理器循環(huán)直到所有處理器已經(jīng)中斷,或者將延遲過程調(diào)用(DPC)或第二級中斷處理器排隊,并且DPC或第二級中斷處理器循環(huán)直到確定正在執(zhí)行該處理器的DPC或第二級中斷處理器。在替代實施例中,當(dāng)在一個處理器上出現(xiàn)采樣中斷時,產(chǎn)生處理器間中斷(IPI)以在其他處理器上強制產(chǎn)生中斷。在任何一種情況下,一旦確定所有處理器現(xiàn)在準(zhǔn)備好繼續(xù)處理該樣值,則該邏輯進行是否有任何采樣器線程需要被通知來處理樣值的判定。如果不需要通知任何采樣器線程來處理樣值,則更新計數(shù)。例如,對于每一個采樣線程,如果對應(yīng)的執(zhí)行線程當(dāng)前正在感興趣的虛擬機中執(zhí)行,即正在訪問感興趣的虛擬機,則對應(yīng)的采樣線程收集那個虛擬機和執(zhí)行線程的跟蹤信息。如果執(zhí)行線程當(dāng)前未在感興趣的虛擬機中執(zhí)行,而是存在與在感興趣的虛擬機中執(zhí)行的執(zhí)行線程相關(guān)聯(lián)的其他采樣線程,則可以將當(dāng)前的采樣線程置于循環(huán)或旋轉(zhuǎn)狀態(tài)中,直到該跟蹤信息被其他采樣線程收集為止。如果這些條件的任何一個都不存在,則簡單地更新裝置驅(qū)動器采樣統(tǒng)計,例如計數(shù)值。也可以在檢測到其他條件時更新這些裝置驅(qū)動器采樣統(tǒng)計。例如,通過附接到JVM的剖析器來注冊JVM用于監(jiān)控。當(dāng)剖析器確定應(yīng)當(dāng)監(jiān)控JVM 時,它為每一個進程建立一個采樣線程,并且經(jīng)由裝置驅(qū)動器支持的接口來注冊JVM。當(dāng)進行采樣時,裝置驅(qū)動器旋轉(zhuǎn)經(jīng)過每一個注冊的JVM以更新計數(shù),并且確定是否需要特定的采樣器線程的通知。如果有任何采樣器線程需要被通知,則它將對每一個處理器通知一個采樣器線程,以檢索中斷的線程的調(diào)用堆棧,或者旋轉(zhuǎn)等待直到所有采樣器線程已經(jīng)完成它們的工作??梢酝ㄟ^對所有的采樣器線程(即所有注冊的JVM)檢查進行中的工作,來確定采樣線程的完成。一旦確定所有的采樣器線程都已經(jīng)完成了它們的工作,則采樣器線程進入阻擋(blocked)狀態(tài),以等待分配新的工作。圖11是根據(jù)一個說明性實施例的、用于關(guān)于由多個處理器與多個虛擬機相結(jié)合地執(zhí)行的多個線程而執(zhí)行計算機程序的剖析的系統(tǒng)的示例框圖。如圖11中所示,每一個采樣線程1116-1120與在數(shù)據(jù)處理系統(tǒng)1100的處理器1102-1106之一上執(zhí)行的對應(yīng)線程 1108-1112相關(guān)聯(lián)。這些執(zhí)行線程1108-1112可以訪問數(shù)據(jù)處理系統(tǒng)1100的一個或多個虛擬機1122-1126。而且,采樣線程1116-1120可以經(jīng)由對應(yīng)的虛擬機接口 1132-1136來訪問虛擬機1122-1126。剖析器1140可以以與如上所述類似的方式運行以使用對應(yīng)的采樣線程1116-1120來收集跟蹤信息,諸如每一個感興趣的虛擬機1122-1126的調(diào)用堆棧信息。 剖析器1140可以基于從采樣線程1116-1120收集的跟蹤信息來產(chǎn)生一個或多個跟蹤數(shù)據(jù)文件和調(diào)用樹。裝置驅(qū)動器1114(如在圖4中的裝置驅(qū)動器414)向采樣線程1116-1120發(fā)送信號,以使得這些采樣線程1116-1120喚醒并確定是否要執(zhí)行跟蹤信息的收集。另外, 裝置驅(qū)動器1114可以保持多個采樣統(tǒng)計計數(shù)器1150-1154,它們基于每次喚醒采樣線程 1116-1120時執(zhí)行線程1108-1112的執(zhí)行狀態(tài)而被遞增。剖析器1140可以訪問這些計數(shù)器 1150-1154,以獲得關(guān)于線程1108-1112的執(zhí)行的采樣的統(tǒng)計信息,并且在產(chǎn)生跟蹤數(shù)據(jù)文件和報告中使用所述統(tǒng)計信息。如上所述,每次處理器1102-1106產(chǎn)生采樣中斷時,該中斷被發(fā)送到操作系統(tǒng),該操作系統(tǒng)繼而產(chǎn)生對驅(qū)動器1114的調(diào)用。裝置驅(qū)動器1114可以向剖析器1140的采樣線程1116-1120發(fā)送信號,以使得這些采樣線程1116-1120被喚醒。作為響應(yīng),每一個采樣線程1116-1120確定它們對應(yīng)的執(zhí)行線程1108-1112的狀態(tài),并且基于這樣狀態(tài),確定是否要從正在被那個執(zhí)行線程訪問的虛擬機收集跟蹤信息。例如,可以將一個或多個感興趣的虛擬機1122-1126的標(biāo)識符寫入各個采樣線程1116-1120的工作區(qū)域。不是數(shù)據(jù)處理系統(tǒng)的所有虛擬機1122-11 都需要被指定為感興趣的虛擬機。例如,在一些情況下,剖析器1140可能僅對于單個虛擬機1122感興趣。雖然可能僅對一個虛擬機1122感興趣,但是每一個執(zhí)行線程1108-1112可能能夠訪問該同一虛擬機1122,或者, 可以與執(zhí)行線程1108-1112中的多個相關(guān)聯(lián)地提供同一虛擬機1122的實例,使得多個執(zhí)行線程1108-1112可以與同一虛擬機1122相關(guān)聯(lián)地執(zhí)行或訪問同一虛擬機1122。在該情況下,說明性實施例的機制收集這些執(zhí)行線程中的每一個的跟蹤信息,但是可以匯集該跟蹤信息或組合該跟蹤信息。對于具有采樣時在感興趣的虛擬機1122-1126中執(zhí)行的關(guān)聯(lián)執(zhí)行線程1108-1112 的每一個采樣線程1116-1120,諸如調(diào)用堆棧信息的跟蹤信息被收集并提供給剖析器 1140。對于具有未在虛擬機1122-1126中執(zhí)行的關(guān)聯(lián)執(zhí)行線程1108-1112的那些采樣線程 1116-1120,不收集這樣的跟蹤信息。而是,如果確定至少一個其他的采樣線程1116-1120 要收集跟蹤信息,則未在感興趣的虛擬機1122-1226中執(zhí)行的采樣線程可以被置于旋轉(zhuǎn)或循環(huán)狀態(tài)中,直到其他采樣線程結(jié)束了收集它們的跟蹤信息。在任一情況下,或如果這些情況都未出現(xiàn),則裝置驅(qū)動器1114可以基于所確定的執(zhí)行線程1108-1112的條件來更新統(tǒng)計計數(shù)器1150-1154。與統(tǒng)計計數(shù)器1150-11M相關(guān)聯(lián)的特定條件可以具有各種類型。例如,一個統(tǒng)計計數(shù)器1150可以與無用信息收集條件相關(guān)聯(lián),在該無用信息收集條件中,如果采樣線程1116-1120確定在無用信息收集操作中涉及其對應(yīng)的執(zhí)行線程1108-1112,則遞增統(tǒng)計計數(shù)器1150。又如,另一個統(tǒng)計計數(shù)器1152 可以與下述條件相關(guān)聯(lián)其中,執(zhí)行線程被簡單地確定為在感興趣的虛擬機之外執(zhí)行處理, 并且統(tǒng)計計數(shù)器1152可以響應(yīng)于采樣線程1116-1120確定它們的執(zhí)行線程1108-1112正在感興趣的虛擬機之外執(zhí)行而被遞增。又如,第三統(tǒng)計計數(shù)器1156可以與下述條件相關(guān)聯(lián)其中,執(zhí)行線程在感興趣的虛擬機內(nèi)執(zhí)行。因此,當(dāng)采樣線程1116-1120確定其對應(yīng)的執(zhí)行線程正在感興趣的虛擬機1122-1126內(nèi)執(zhí)行時,計數(shù)器1156可以被裝置驅(qū)動器1114 遞增。應(yīng)當(dāng)明白,除了計數(shù)器1152-1156外,或替代計數(shù)器1152-1156,還可以使用與執(zhí)行線程1108-1112的其他類型的執(zhí)行條件相關(guān)聯(lián)的其他計數(shù)器。剖析器IlM在產(chǎn)生報告時可以訪問這些計數(shù)器1152-1156,并且使用它們來提供報告中的執(zhí)行統(tǒng)計。例如,計數(shù)器1152的計數(shù)值可以提供關(guān)于線程在執(zhí)行無用信息收集操作上花費的相對時間量的信息。計數(shù)器IlM的計數(shù)值可以提供關(guān)于線程在感興趣的虛擬機之外執(zhí)行處理所花費的相對時間量的信息。此外,計數(shù)器1156的計數(shù)值可以提供關(guān)于線程在感興趣的虛擬機內(nèi)執(zhí)行處理所花費的相對時間量的信息。因此,根據(jù)與采樣線程1116-1120對應(yīng)的執(zhí)行線程1108-1112的執(zhí)行狀態(tài),可以針對數(shù)據(jù)處理系統(tǒng)的感興趣的一個或多個虛擬機1122-1126同時收集跟蹤信息。結(jié)果,可以以比已知的剖析工具的串行方式更高效和及時的方式來收集更精確的跟蹤信息。而且,可以針對在感興趣的虛擬機內(nèi)執(zhí)行的每一個執(zhí)行線程收集跟蹤信息,而不論那個線程是否是產(chǎn)生原始中斷的那個??梢允褂媒y(tǒng)計計數(shù)器來產(chǎn)生關(guān)于執(zhí)行線程的狀態(tài)的信息,而不論所述執(zhí)行線程是否是在原始中斷中產(chǎn)生的那些。這些統(tǒng)計計數(shù)器可以提供執(zhí)行線程在數(shù)據(jù)處理系統(tǒng)的執(zhí)行環(huán)境的各個部分中花費的時間的信息。剖析器可以基于此跟蹤信息和統(tǒng)計計數(shù)器信息來產(chǎn)生報告。這些報告可以提供關(guān)于調(diào)用堆棧和關(guān)于在特定代碼部分中花費的時間的統(tǒng)計度量等信息。跟蹤報告可以根據(jù)說明性實施例的特定實施方式而采用許多不同的形式。這樣的報告可以接受進一步的處理 (例如通過后置處理器等),以產(chǎn)生用于識別代碼的如下部分的其它報告該部分可能是用于優(yōu)化的候選者,可能具有其中需要或期望校正代碼的區(qū)域,等等。應(yīng)當(dāng)明白,在一個說明性實施例中,使用說明性實施例的機制收集的跟蹤信息可以被存儲在跟蹤和/或報告數(shù)據(jù)文件中,該跟蹤和/或報告數(shù)據(jù)文件可以被存儲來用于以后使用。可以執(zhí)行計算機代碼的獨立運行和跟蹤,以產(chǎn)生第二跟蹤信息以及第二跟蹤和/ 或報告數(shù)據(jù)文件。然后可以將計算機代碼的這些獨立運行和跟蹤提供到后置處理器,該后置處理器比較該跟蹤,以識別其中存在需要校正的問題或其中可以調(diào)整或優(yōu)化計算機代碼以獲得更好的性能的計算機代碼部分??梢杂珊笾锰幚砥骰谙率鲆?guī)則來自動地執(zhí)行這樣的比較和分析,所述規(guī)則識別滿足指示其中可能或應(yīng)當(dāng)執(zhí)行調(diào)整的問題或區(qū)域的預(yù)定義標(biāo)準(zhǔn)的特定特性或條件。圖12是概述根據(jù)說明性實施例的采樣線程的示例操作的流程圖,其中,多個處理器和多個虛擬機的多個線程被剖析。圖12被示出為對每個采樣線程串行地執(zhí)行,然而,應(yīng)當(dāng)明白,可以并行地而不是串行地執(zhí)行執(zhí)行線程的這種狀態(tài)確定。如圖12中所示,該操作從裝置驅(qū)動器向數(shù)據(jù)處理系統(tǒng)的每一個處理器的采樣器線程中的每一個發(fā)送信號開始(步驟1210)。選擇下一個采樣器線程(步驟1220),并且, 進行所選擇的采樣器線程的對應(yīng)執(zhí)行線程在采樣時是否在感興趣的虛擬機中執(zhí)行的判定 (步驟1230)。如果執(zhí)行線程正在感興趣的虛擬機中執(zhí)行,則檢索用于該虛擬機的調(diào)用堆棧信息,并且更新諸如在統(tǒng)計計數(shù)器中的裝置驅(qū)動器統(tǒng)計(步驟1240)。然后,進行是否存在更多的采樣線程要處理的判定(步驟1250)。如果存在,則操作返回到步驟1120,否則操作結(jié)束。如果執(zhí)行線程未在感興趣的虛擬機中執(zhí)行,則判定是否存在需要從虛擬機檢索跟蹤信息(例如,調(diào)用堆棧信息)的任何其他采樣線程(步驟1260)。如果存在,則將當(dāng)前的采樣線程置于循環(huán)/旋轉(zhuǎn)狀態(tài)中,直到該調(diào)用堆棧被其他采樣線程檢索到為止。另外,更新裝置驅(qū)動器統(tǒng)計(步驟1270)。如果至少一個其他采樣線程不需要檢索調(diào)用堆棧信息,則可以簡單地更新裝置驅(qū)動器統(tǒng)計(步驟1觀0)。因此,說明性實施例提供了支持多個虛擬機的、用于基于時間的上下文采樣的機制。如上所述,應(yīng)當(dāng)明白,說明性實施例可以采取完全硬件實施例、完全軟件實施例或包含硬件和軟件元件的實施例的形式。在一個示例實施例中,以軟件或程序代碼來實現(xiàn)說明性實施例的機制,該軟件或程序代碼包括但是不限于固件、常駐軟件、微碼等。適合于存儲和/或執(zhí)行程序代碼的數(shù)據(jù)處理系統(tǒng)將包括至少一個處理器,該至少一個處理器通過系統(tǒng)總線間接地或直接地耦合到存儲器元件。存儲器元件可以包括在程序代碼的實際執(zhí)行期間使用的本地存儲器;大容量存儲器;以及高速緩存,其提供至少一些程序代碼的暫時存儲,以便減少在執(zhí)行期間必須從大容量存儲器檢索代碼的次數(shù)。輸入/輸出或I/O裝置(包括但是不限于鍵盤、顯示器、指示裝置等)可以直接地或通過中間I/O控制器耦合到系統(tǒng)。網(wǎng)絡(luò)適配器也可以耦合到系統(tǒng),以使得數(shù)據(jù)處理系統(tǒng)能夠變得通過中間的專用或公共網(wǎng)絡(luò)耦接到其他數(shù)據(jù)處理系統(tǒng)或遠程打印機或存儲裝置。 調(diào)制解調(diào)器、電纜調(diào)制解調(diào)器和以太網(wǎng)卡僅是當(dāng)前可獲得的類型的網(wǎng)絡(luò)適配器中的一些。 已經(jīng)為了描述和說明的目的而提供了所述說明,并且該說明不意在是窮盡性的或限于所公開的形式。許多修改和改變對于本領(lǐng)域的技術(shù)人員而言是顯然的。選擇和描述實施例,以便最佳地說明原理、實際應(yīng)用,并且使得其他本領(lǐng)域的技術(shù)人員能夠明白具有適合于所考慮的特定用途的各種修改的本發(fā)明的實施例。
權(quán)利要求
1.一種數(shù)據(jù)處理系統(tǒng)中的方法,用于執(zhí)行基于時間的上下文采樣,所述上下文采樣將所述數(shù)據(jù)處理系統(tǒng)中的計算機代碼的執(zhí)行剖析,所述方法包括響應(yīng)于事件的出現(xiàn),喚醒與在所述數(shù)據(jù)處理系統(tǒng)的處理器上執(zhí)行的多個執(zhí)行線程相關(guān)聯(lián)的多個采樣線程;由所述數(shù)據(jù)處理系統(tǒng)的處理器針對每一個采樣線程確定對應(yīng)執(zhí)行線程關(guān)于一個或多個感興趣的虛擬機的執(zhí)行狀態(tài);由所述處理器針對每一個采樣線程基于所述對應(yīng)執(zhí)行線程的所述執(zhí)行狀態(tài),確定是否從與所述對應(yīng)執(zhí)行線程相關(guān)聯(lián)的虛擬機檢索跟蹤信息;以及對于每一個采樣線程,響應(yīng)于確定要從與所述對應(yīng)執(zhí)行線程相關(guān)聯(lián)的虛擬機檢索跟蹤信息,從所述虛擬機檢索所述跟蹤信息,并且將所述跟蹤信息存儲在與所述數(shù)據(jù)處理系統(tǒng)相關(guān)聯(lián)的存儲裝置中。
2.根據(jù)權(quán)利要求1所述的方法,其中,針對每一個采樣線程確定是否從與所述對應(yīng)執(zhí)行線程相關(guān)聯(lián)的虛擬機檢索跟蹤信息包括確定是否有所述采樣線程的任何一個要從與所述對應(yīng)執(zhí)行線程相關(guān)聯(lián)的虛擬機檢索跟蹤信息;以及響應(yīng)于確定所述采樣線程中的任一個都將不檢索跟蹤信息,基于所述對應(yīng)執(zhí)行線程的執(zhí)行條件來更新與所述多個執(zhí)行線程相關(guān)聯(lián)的一個或多個裝置驅(qū)動器采樣統(tǒng)計計數(shù)器。
3.根據(jù)權(quán)利要求1所述的方法,還包括在所述數(shù)據(jù)處理系統(tǒng)的處理器上選擇感興趣的虛擬機,對于所述感興趣的虛擬機而言,要從在所述感興趣的虛擬機中執(zhí)行的線程收集跟蹤信息,其中針對每一個采樣線程確定是否從與所述對應(yīng)執(zhí)行線程相關(guān)聯(lián)的虛擬機檢索跟蹤信息包括確定所述對應(yīng)執(zhí)行線程當(dāng)前是否在所述感興趣的虛擬機上執(zhí)行,并且響應(yīng)于所述虛擬機是所述感興趣的虛擬機,從與所述對應(yīng)執(zhí)行線程相關(guān)聯(lián)的虛擬機檢索跟蹤信息。
4.根據(jù)權(quán)利要求3所述的方法,其中,如果與當(dāng)前采樣線程對應(yīng)的執(zhí)行線程當(dāng)前不在感興趣的虛擬機上執(zhí)行,而是存在具有在感興趣的虛擬機上執(zhí)行的對應(yīng)執(zhí)行線程的至少一個其他采樣線程,則將當(dāng)前的采樣線程置于旋轉(zhuǎn)狀態(tài)中,直到跟蹤信息被所述至少一個其他采樣線程收集為止。
5.根據(jù)權(quán)利要求1所述的方法,還包括基于所述對應(yīng)執(zhí)行線程的執(zhí)行的條件來更新與所述多個執(zhí)行線程相關(guān)聯(lián)的一個或多個采樣統(tǒng)計計數(shù)器。
6.根據(jù)權(quán)利要求5所述的方法,其中,所述一個或多個采樣統(tǒng)計計數(shù)器包括以下項中的至少一個第一計數(shù)器,用于計數(shù)采樣線程確定當(dāng)喚醒所述采樣線程時在無用信息收集操作中涉及所述采樣線程的對應(yīng)執(zhí)行線程的次數(shù);第二計數(shù)器,用于計數(shù)采樣線程確定當(dāng)喚醒所述采樣線程時所述采樣線程的對應(yīng)執(zhí)行線程正在感興趣的虛擬機之外執(zhí)行處理的次數(shù);第三計數(shù)器,用于計數(shù)采樣線程確定當(dāng)喚醒所述采樣線程時所述采樣線程的對應(yīng)執(zhí)行線程正在感興趣的虛擬機內(nèi)執(zhí)行的次數(shù)。
7.根據(jù)權(quán)利要求3所述的方法,其中,選擇感興趣的虛擬機包括將多個虛擬機向在所述數(shù)據(jù)處理系統(tǒng)中執(zhí)行的剖析器工具注冊;以及接收向所述剖析器工具注冊的所述多個虛擬機中的虛擬機的選擇,作為感興趣的虛擬機。
8.根據(jù)權(quán)利要求7所述的方法,其中,所述剖析器工具通過在向所述剖析器工具注冊的所述多個虛擬機的子集中循環(huán)地選擇下一個虛擬機來從所述多個虛擬機中選擇感興趣的虛擬機。
9.根據(jù)權(quán)利要求7所述的方法,其中,所選擇的感興趣的虛擬機是被選擇來用于收集跟蹤信息的、向所述剖析器工具注冊的所述多個虛擬機的子集的一部分,并且其中,所述多個虛擬機的所述子集小于向所述剖析器工具注冊的所述多個虛擬機的總數(shù)。
10.根據(jù)權(quán)利要求3所述的方法,其中,將所選擇的感興趣的虛擬機的標(biāo)識符寫入與所述采樣線程對應(yīng)的存儲器的工作區(qū)域。
11.一種計算機程序產(chǎn)品,包括其上記錄了計算機可讀程序的計算機可讀介質(zhì),其中, 所述計算機可讀程序當(dāng)在計算裝置上被執(zhí)行時使得所述計算裝置響應(yīng)于事件的出現(xiàn),喚醒與多個執(zhí)行線程相關(guān)聯(lián)的多個采樣線程;針對每一個采樣線程確定對應(yīng)執(zhí)行線程關(guān)于一個或多個感興趣的虛擬機的執(zhí)行狀態(tài);針對每一個采樣線程,基于所述對應(yīng)執(zhí)行線程的執(zhí)行狀態(tài),確定是否從與所述對應(yīng)執(zhí)行線程相關(guān)聯(lián)的虛擬機檢索跟蹤信息;以及針對每一個采樣線程,響應(yīng)于確定要從與所述對應(yīng)執(zhí)行線程相關(guān)聯(lián)的虛擬機檢索跟蹤信息,從所述虛擬機檢索所述跟蹤信息,并且將所述跟蹤信息存儲在與所述計算裝置相關(guān)聯(lián)的存儲裝置中。
12.根據(jù)權(quán)利要求11所述的計算機程序產(chǎn)品,其中,所述計算機可讀程序使得所述計算裝置針對每一個采樣線程通過下述方式來確定是否從與所述對應(yīng)執(zhí)行線程相關(guān)聯(lián)的虛擬機檢索跟蹤信息確定是否有所述采樣線程的任何一個要從與所述對應(yīng)執(zhí)行線程相關(guān)聯(lián)的虛擬機檢索跟蹤信息;以及響應(yīng)于確定所述采樣線程中任一個都將不檢索跟蹤信息,基于所述對應(yīng)執(zhí)行線程的執(zhí)行條件來更新與所述多個執(zhí)行線程相關(guān)聯(lián)的一個或多個裝置驅(qū)動器采樣統(tǒng)計計數(shù)器。
13.根據(jù)權(quán)利要求11所述的計算機程序產(chǎn)品,其中,所述計算機可讀程序還使得所述計算裝置在所述數(shù)據(jù)處理系統(tǒng)的處理器上選擇感興趣的虛擬機,對于所述感興趣的虛擬機而言,要從在所述感興趣的虛擬機中執(zhí)行的線程收集跟蹤信息,其中針對每一個采樣線程確定是否從與所述對應(yīng)執(zhí)行線程相關(guān)聯(lián)的虛擬機檢索跟蹤信息包括確定所述對應(yīng)執(zhí)行線程是否當(dāng)前正在所述感興趣的虛擬機上執(zhí)行;以及響應(yīng)于所述虛擬機是所述感興趣的虛擬機,從與所述對應(yīng)執(zhí)行線程相關(guān)聯(lián)的虛擬機檢索跟蹤信息。
14.根據(jù)權(quán)利要求13所述的計算機程序產(chǎn)品,其中,如果與當(dāng)前的采樣線程對應(yīng)的執(zhí)行線程當(dāng)前不在感興趣的虛擬機上執(zhí)行,而是存在具有在感興趣的虛擬機上執(zhí)行的對應(yīng)執(zhí)行線程的至少一個其他采樣線程,則將當(dāng)前的采樣線程置于旋轉(zhuǎn)狀態(tài)中,直到跟蹤信息被所述至少一個其他采樣線程收集為止。
15. 一種設(shè)備,包括 處理器;以及耦接到所述處理器的存儲器,其中,所述存儲器包括指令,當(dāng)所述指令被所述處理器執(zhí)行時使得所述處理器響應(yīng)于事件的出現(xiàn),喚醒與多個執(zhí)行線程相關(guān)聯(lián)的多個采樣線程;針對每一個采樣線程確定對應(yīng)執(zhí)行線程關(guān)于一個或多個感興趣的虛擬機的執(zhí)行狀態(tài);針對每一個采樣線程,基于所述對應(yīng)執(zhí)行線程的所述執(zhí)行狀態(tài),確定是否從與所述對應(yīng)執(zhí)行線程相關(guān)聯(lián)的虛擬機檢索跟蹤信息;以及針對每一個采樣線程,響應(yīng)于確定要從與所述對應(yīng)執(zhí)行線程相關(guān)聯(lián)的虛擬機檢索跟蹤信息,從所述虛擬機檢索所述跟蹤信息,并且將所述跟蹤信息存儲在與所述計算裝置相關(guān)聯(lián)的存儲裝置中。
全文摘要
提供了支持多個虛擬機的、跟蹤數(shù)據(jù)的基于時間的上下文采樣的機制。響應(yīng)于事件的出現(xiàn),喚醒與在數(shù)據(jù)處理系統(tǒng)的處理器上執(zhí)行的多個執(zhí)行線程相關(guān)聯(lián)的多個采樣線程。對于每一個采樣線程,確定對應(yīng)執(zhí)行線程關(guān)于一個或多個感興趣的虛擬機的執(zhí)行狀態(tài)?;趯?yīng)執(zhí)行線程的執(zhí)行狀態(tài),對于每一個采樣線程確定是否從與對應(yīng)執(zhí)行線程相關(guān)聯(lián)的感興趣的虛擬機檢索跟蹤信息。對于每一個采樣線程,響應(yīng)于確定要從與對應(yīng)執(zhí)行線程相關(guān)聯(lián)的感興趣的虛擬機檢索跟蹤信息,從虛擬機檢索跟蹤信息。
文檔編號G06F11/34GK102341790SQ201080010002
公開日2012年2月1日 申請日期2010年6月16日 優(yōu)先權(quán)日2009年6月30日
發(fā)明者F.E.萊文, K.凱珀 申請人:國際商業(yè)機器公司