用于管理的運行時間的基于硬件的運行時間檢測設施的制作方法
【技術領域】
[0001] 本發(fā)明總體上涉及在計算環(huán)境內的處理,并且更具體地涉及用于管理的運行時間 的基于硬件的運行時間檢測設施。
【背景技術】
[0002] 計算機處理器使用日益復雜的分支預測及指令高速緩存邏輯來執(zhí)行事務 (transaction)。這些程序已被引入以增加指令吞吐量,且因此增加處理性能。用于改進性 能的邏輯的引入使得難以肯定地預測特定軟件應用程序將如何在計算機處理器上執(zhí)行。在 軟件開發(fā)過程期間,常常存在功能性與性能之間的平衡。軟件在基于執(zhí)行軟件的底層硬件 的一個或多個抽象層級處執(zhí)行。當將硬件虛擬化時,額外抽象層被引入。隨著性能增強邏輯 及各種抽象層(layer)的引入,將難以透徹地理解當程序正在執(zhí)行時在硬件層級(level) 實際發(fā)生的事。在不具此信息的情況下,軟件開發(fā)者將更抽象的方法(諸如,執(zhí)行持續(xù)時 間、存儲器使用率、線程的數目等)用于最佳化軟件應用程序。
【發(fā)明內容】
[0003] 技術問題
[0004] 當硬件特定信息可用時,該信息通常是在事后被提供給開發(fā)者,且該信息是以聚 集地、在高層級、和/或穿插著其他程序及操作系統(tǒng)的活動的方式提供,從而難以識別可能 影響軟件應用程序的效率及準確度的問題。
[0005] 對于問題的解決方案
[0006] 實施例包括用于執(zhí)行運行時間檢測的計算機程序、方法和系統(tǒng)。處理器基于在所 述處理器上執(zhí)行的應用程序的指令的指令流來捕獲運行時間檢測。所述捕獲包括:在所述 處理器的收集緩沖器中存儲運行時間檢測數據。所述處理器檢測運行時間檢測樣本點觸發(fā) 器?;跈z測到所述運行時間檢測樣本點觸發(fā)器來將所述收集緩沖器的內容作為報告群組 復制到程序緩沖器內。所述程序緩沖器位于由所述應用程序可訪問的地址空間中的主存儲 器中。
[0007] 額外特征及優(yōu)點是經由本發(fā)明的技術來實現。本發(fā)明的其他實施例及方面將在本 文中予以詳細描述且被視為所主張發(fā)明的一部分。為了更好地理解本發(fā)明的優(yōu)點及特征, 參看描述及附圖。
【附圖說明】
[0008] 在說明書結尾處的權利要求中特定指出且清楚地主張了被視為本發(fā)明的主題。將 根據結合隨附圖進行的以下詳細描述顯而易見本發(fā)明的前述及其他特征及優(yōu)點,其中:
[0009] 圖IA為描繪實施例中的示例主機計算機系統(tǒng)的圖;
[0010] 圖IB為描繪實施例中的示例模擬主機計算機系統(tǒng)的圖;
[0011] 圖IC為描繪實施例中的示例計算機系統(tǒng)的圖;
[0012] 圖2為描繪實施例中的示例計算機網絡的圖;
[0013]圖3為描繪實施例中的計算機系統(tǒng)的元件的圖;
[0014] 圖4A描繪實施例中的計算機系統(tǒng)的詳細元件;
[0015]圖4B描繪實施例中的計算機系統(tǒng)的詳細元件;
[0016] 圖4C描繪實施例中的計算機系統(tǒng)的詳細元件;
[0017] 圖5描繪根據實施例的用于處理器的運行時間檢測的系統(tǒng)的示意圖;
[0018] 圖6描繪實施例中的包括可由特權狀態(tài)設置的控制的運行時間檢測控制塊 (RICCB)的一部分。
[0019] 圖7描繪實施例中的當半特權位(K)經設置為1時的RICCB控制塊的一部分; [0020] 圖8描繪根據實施例的收集緩沖器;
[0021] 圖9描繪根據實施例的報告群組;
[0022] 圖10描繪根據實施例的用于實現運行時間檢測設施的處理流;并且
[0023] 圖11圖示了根據一個實施例的計算機程序產品。
【具體實施方式】
[0024] 本發(fā)明的實施例為用于受管理運行時間的基于硬件的運行時間檢測設施。如本文 中所使用,術語"受管理運行時間"指代封裝狀態(tài)且管理用以執(zhí)行程序或應用程序(例如, Java?虛擬機或"JVM"、操作系統(tǒng)、中間件等)的資源的環(huán)境。該運行時間檢測設施的實施 例使程序能夠收集關于程序執(zhí)行的信息,包括中央處理單元(CPU)數據。所收集信息允許 管理器運行時間環(huán)境獲取關于程序的洞察(insights),該信息是收集自該程序。該運行時 間檢測設施的實施例包括用于將事件(例如,采納分支、寄存器值等)的序列收集于收集緩 沖器中的硬件設施。該收集緩沖器(或含有最近記錄的收集緩沖器的子集)是在發(fā)生可程 序化集合的樣本觸發(fā)事件時在應用程序的地址空間(例如,JVM的地址空間)中復制至程序 緩沖器中,這些事件諸如(但不限于):以指令的形式的軟件指示詞(softwaredirective) 被插入至指令流中;所執(zhí)行指令的間隔完成,從上一樣本過期時起的給定經過時間,和/或 諸如觀察到數據或指令高速緩存未命中的給定硬件事件
[0025] 動態(tài)編譯器利用運行時間信息(諸如,由本文中所描述的基于硬件的運行時間檢 測設施收集的運行時間信息)來執(zhí)行在線反饋導向的最佳化(onlinefeedbackdirected optimization)。舉例而言,關于重要執(zhí)行路徑、設置檔值及優(yōu)選分支方向的信息可由動態(tài) 編譯器使用以執(zhí)行特殊化版本碼、引導內嵌(in-lining)、對執(zhí)行路徑重新排序及將分支拉 直的最佳化。本文中所描述的實施例不限于由編譯器使用,且可以諸如(但不限于)用于 引導其他受管理運行時間設施的多種方式使用。舉例而言,數據高速緩存事件可用以幫助 廢棄項目收集器程序作出關于協同定位多個物件或使多個物件彼此遠離的決策以獲得優(yōu) 選數據局部性或避免假性共用問題。
[0026] 用于將應用進行程序概要分析的典型的現代手段是編譯的檢測手段,其編譯重要 編譯單元的檢測版本,并且然后執(zhí)行長得足以捕獲代表性數據的這些編譯單元。該數據然 后用于驅動執(zhí)行單元的優(yōu)化重新編譯。該軟件方法的一些缺點包括:(1)必須編譯編譯單 元的檢測版本的開銷,(2)必須在可能對于應用的性能重要的編譯單元中執(zhí)行昂貴的檢測 路徑的開銷,(3)缺少對于諸如數據高速緩存未中和分支誤預測的硬件事件的洞察,(4)捕 獲事件(或軌跡)的序列以努力提取抽象和相關上下文的顯著復雜度,以及,(5)不能正確 地處理其中檢測應用頻繁地采用意料之外的分支并且執(zhí)行非檢測代碼的情況。
[0027] 值得注意的是,程序概要相關的反饋可以被應用到的編譯單元的范圍被固有地綁 定到由項目(1)和⑵引入的成本。更具體地,當開銷增加時,候選編譯單元的范圍減小, 因為僅更占優(yōu)勢的編譯單元可以表示用于有可能進行開銷的最終攤銷的足夠的執(zhí)行時間 機會。
[0028] 現代的動態(tài)編譯環(huán)境經常包括在動態(tài)編譯之前的解釋階段。包括解釋階段的、對 于將應用簡檔化的另一種典型的現代手段是解釋檢測手段,該解釋檢測手段允許解釋器收 集運行時間統(tǒng)計。除了上面列出的點(2)、(3)和(4)之外,該軟件手段也具有增加的可能 缺點:要求容易在應用使用期限中早期捕獲該應用的行為,導致在應用啟動時的顯著的開 銷;要求擴展該應用的解釋階段以保證收集足夠代表性的數據;可能未能捕獲穩(wěn)態(tài)行為; 以及,不能檢測到和反應于在解釋階段后出現的在該應用中的階段改變。
[0029] 也使用利用解釋和編譯檢測兩者以及隨機跟蹤的現代混和軟件解決方案,但是該 解決方案仍然受到上面列出的缺陷的影響,并且可能向運行時間引入相當大的開銷和復雜 度。
[0030] 除了動態(tài)編譯之外,管理的運行時間的其他分量當前不受到它們對于高速緩存分 級或內核作出的確定的影響。例如,可以動態(tài)地重新配置在堆上的數據的布局的垃圾收集 器例程可能丟失使得下述對象共置的機會,該對象暫時高度耦合或替代地可能通過共置在 獨立的線程上被頻繁的更新的兩個對象而引發(fā)假共享高速緩存效果。
[0031] 在此描述的用于管理的運行時間的基于硬件的運行時間檢測設施的實施例相對 于現代的基于軟件的程序概要分析機制提供了幾個優(yōu)點。這些優(yōu)點可以包括但是不限于: 避免了用于獲得編譯單元的檢測版本的重新編譯的成本;數據收集的開銷被嵌入在硬件 中,并且因此消除了對于昂貴的基于軟件的編譯代碼的檢測的需要;提供了對于諸如分支 誤預測、數據和指令高速緩存未中的重硬件事件的直接洞察;用于捕獲順序事件的自然跟 蹤機制導致數據的自然上下文抽象和相關(例如,執(zhí)行路徑和在其上在被操作的相應數據 類型導致給定的數據高速緩存事件);并且,可以貫穿應用的執(zhí)行的使用期限而重復地被 透明地使能和禁止的設施,允許改善數據收集和重新編譯的成本的限制和攤銷的靈活性。
[0032] 由在此所述的實施例提供的編譯和檢測的降低的成本固有地擴展可以被作為目 標用于在線程序概要相關的編譯的編譯單元的范圍。另外,源自去除由在此所述的實施 例提供的基于軟件的檢測的、降低的用于收集數據的開銷允許收集更多的程序概要分析數 據,因此向直接重新編譯和其他形式的優(yōu)化(例如,數據重新組織)提供了更精確的程序概 要分析數據。
[0033] 除了用于所建議的用于動態(tài)編譯的使用之外,由在此所述的實施例提供的硬件事 件的可用性也可以用于引導其他被管理的運行時間設施。例如,可以使用數據高速緩存事 件來幫助垃圾收集器進行關于將對象共置或置于遠距離的確定,以獲得更好的數據本地化 或避免假共享問題。
[0034] 圖IA描繪實施例中的主機計算機系統(tǒng)50的代表性組件。組件的其他配置也可在 計算機系統(tǒng)中使用。代表性主機計算機系統(tǒng)50包含與主存儲器(計算機存儲器)2通信的 一個或多個處理器1以及至存儲器件11及網絡10的用于與其他計算機或SAN等通信的1/ O接口。處理器1符合具有架構化指令集及架構化功能性的架構。處理器1可具有用于將 程序地址(虛擬地址)變換為存儲器中的真實地址的動態(tài)地址轉譯(DAT) 3。DAT3通常包 括用于高速緩存轉譯的轉譯后備緩沖器(TLB) 7,使得對計算機存儲器2的塊的稍后存取不 需要延遲地址轉譯。通常,高速緩沖存儲器9是用于計算機存儲器2與處理器1之間。高速 緩沖存儲器9可為階層式的,其具有可供一個以上CPU使用的大的高速緩沖存儲器及介于 大的高速緩沖存儲器與每一CPU之間的較小、較快速(較低層級)的高速緩沖存儲器。在 一些實施例中,較低層級高速緩沖存儲器經劃分以為指令提取及數據存取提供單獨的低層 級高速緩沖存儲器。在實施例中,由指令提取單元4經由高速緩沖存儲器9從計算機存儲 器2提取指令。該指令在指令解碼單元6中被解碼且(在一些實施例中與其他指令一起) 被分派至指令執(zhí)行單元8。通常,使用若干指令執(zhí)行單元8,例如算術執(zhí)行單元、浮點執(zhí)行單 元及分支指令執(zhí)行單元。該指令是由指令執(zhí)行單元8執(zhí)行,從而按需要從指令指定的寄存 器或計算機存儲器2存取操作數。如果將從計算機存儲器2存?。ㄝd入或存儲)操作數, 則載入存儲單元5通常在被執(zhí)行的指令的控制下處置該存取。指令可在硬件電路中或以內 部微代碼(固件)形式執(zhí)行或通過兩者的組合執(zhí)行。
[0035] 在圖IB中,提供模擬主機計算機系統(tǒng)21,其模擬具有主機架構的主機計算機系 統(tǒng),諸如圖1的主機計算機系統(tǒng)50。在模擬主機計算機系統(tǒng)21中,主機處理器(CPU) 1為模 擬主機處理器(或虛擬主機處理器)29,且包含原生處理器27,該原生處理器具有不同于主 機計算機系統(tǒng)50的處理器1的原生指令集架構的原生指令集架構。模擬主機計算機系統(tǒng) 21具有原生處理器27可存取的存儲器22。在實施例中,存儲器22經分割成計算機存儲器 2部分及模擬例程存儲器23部分。計算機存儲器2根據主機計算機架構而可供模擬主機計 算機系統(tǒng)21的程序使用。原生處理器27執(zhí)行不同于模擬處理器29的架構的架構的架構 指令集的原生指令(原生指令獲得自模擬例程存儲器23),且可通過使用在可解碼所存取 的該主機指令的序列及存取/解碼例程中獲得的一個或多個指令而從計算機存儲器2中的 程序存取用于執(zhí)行的主機指令,以確定用于模擬所存取的該主機指令的功能的原生指令執(zhí) 行例程。針對主機計算機系統(tǒng)50架構定義的其他設施可由架構化設施例程模擬,其他設施 包括諸如(例如)通用寄存器、控制寄存器、動態(tài)地址轉譯及輸入/輸出(I/O)子系統(tǒng)支持 及處理器高速緩沖存儲器的設施。模擬例程也可利用原生處理器27中可用的功能(諸如 通用寄存器及虛擬地址的動態(tài)轉譯)來改進模擬例程的性能。也可提供特殊硬件及卸載引 擎以幫助原生處理器27模擬主機計算機系統(tǒng)50的功能。
[0036] 在大型計算機中,程序設計師(通常,現今的"C"程序設計師)常常通過編譯器應 用程序來使用架構化機器指令。存儲在存儲介質中的這些指令可原生地在z/Architecture IBM服務器中執(zhí)行,或替代地在執(zhí)行其他架構的機器中執(zhí)行??稍诂F有及未來的IBM大型 計算機服務器中及在IBM的其他機器(例如,pSeries?服務器及xSeries?服務器)上模 擬指令??捎谠趶V泛多種機器(使用由IBM?、Intel?、AMD?、SunMicrosystems及其他 公司制造的硬件)上執(zhí)行Linux的機器中執(zhí)行指令。除了在Z/Architecture?下在該硬件 上執(zhí)行之外,也可使用Linux以及由Hercules、UMX、FundamentalSoftware,Inc. (FSI)或 PlatformSolutions,Inc. (PSI)提供的使用模擬的機器,其中執(zhí)行通常在模擬模式下。在 模擬模式下,模擬軟件是由原生處理器執(zhí)行以模擬模擬處理器的架構。
[0037] 模擬主機計算機系統(tǒng)21的組件中的一個或多個將在"IBM?z/Architecture PrinciplesofOperation"(公告第SA22-7832-08 號,第 9 版,2010 年 8 月)中予以進一 步描述,該公告特此以全文引用方式并入本文中。IBM為國際商業(yè)機器公司(Armonk,New York,USA)額注冊商標。本文中所使用的其他名稱可為國際商業(yè)機器公司或其他公司的注 冊商標、商標或產品名稱。
[0038] 原生處理器27通常執(zhí)行存儲在包含固件或原生操作系統(tǒng)的模擬例程存儲器23中 的模擬軟件以執(zhí)行對模擬處理器的模擬。該模擬軟件負責提取并執(zhí)行模擬處理器架構的指 令。該模擬軟件維持模擬程序計數器以追蹤指令邊界。該模擬軟件一次可提取一個或多個 模擬機器指令且將該一個或多個模擬機器指令轉換成供原生處理器27執(zhí)行的原生機器指 令的相應群組。這些經轉換指令可被高速緩存,以使得可實現較快速轉換。該模擬軟件維 持模擬處理器架構的架構規(guī)則以便保證針對模擬處理器撰寫的操作系統(tǒng)及應用程序正確 地操作。此外,該模擬軟件提供由模擬處理器架構識別的資源,包括(但不限于)控制寄存 器、通用寄存器、浮點寄存器、包括(例如)段表及頁表的動態(tài)地址轉譯功能、中斷機制、上 下文切換機制、當日時間(TOD)時鐘及至I/O子系統(tǒng)的架構化接口,以使得經設計以在模擬 處理器29上執(zhí)行的操作系統(tǒng)或應用程序可在具有該模擬軟件的原生處理器27上執(zhí)行。
[0039] 被模擬的特定指令經解碼,且子例程被調用以執(zhí)行個別指令的功能。模擬模擬處 理器29的功能的模擬軟件功能被以(例如)"C"子例程或驅動程序來實施,或以在理解優(yōu) 選實施例的描述的后將在本領域普通技術人員的能力范圍內的提供特定硬件的驅動程序 的某一其他方法來實施。
[0040] 在實施例中,本發(fā)明可由軟件(有時被稱為經授權內部碼、固件、微代碼、毫碼 (milli-code)、微微代碼(pico-code)等,其中的任一個都符合本發(fā)明)實踐。參看圖1A,體 現本發(fā)明的軟件程序代碼是由也被稱為主機計算機系統(tǒng)50的CPU(中央處理單元)1的處 理器從存儲器件11 (諸如長期存儲介質、CD-ROM驅動器、帶驅動器或硬驅動器)存取。軟件 程序代碼可體現于供數據處理系統(tǒng)使用的多種已知介質(諸如磁盤、硬驅動器或CD-ROM) 中的任一個上。程序代碼可分布在這些介質上,或可從一個計算機系統(tǒng)的計算機存儲器2 或存儲器經由網絡10至其他計算機系統(tǒng)地分發(fā)給用戶以供這些其他系統(tǒng)的用戶使用。
[0041