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