用于基于硬件的邊緣剖析的方法和系統(tǒng)的制作方法
【專利摘要】涉及用于基于硬件的邊緣剖析的方法和系統(tǒng)。一種方法,包括:在目標(biāo)程序代碼的執(zhí)行期間由硬件處理器中的性能監(jiān)視計(jì)數(shù)器對(duì)硬件事件的每一次出現(xiàn)進(jìn)行計(jì)數(shù);在目標(biāo)程序代碼的執(zhí)行期間將目標(biāo)程序代碼的預(yù)定義TBT尺寸的最后采納分支依次且連續(xù)地存儲(chǔ)在所述硬件處理器的采納分支跟蹤(TBT)設(shè)施的緩沖區(qū)中;每當(dāng)所述計(jì)數(shù)等于采樣速率時(shí),觸發(fā)對(duì)所述緩沖區(qū)的采樣,以接收包括當(dāng)前所述預(yù)定義TBT尺寸的最后采納分支的TBT;基于所述目標(biāo)程序代碼構(gòu)造每一個(gè)所述TBT的全分支跟蹤;從每一個(gè)所述全分支跟蹤中提取預(yù)定義截?cái)喾种Ц?CBT)尺寸的最后分支,以接收所述每一個(gè)TBT的截?cái)喾种Ц?;以及遞增地存儲(chǔ)每一個(gè)所述截?cái)喾种Ц櫼陨伤瞿繕?biāo)程序代碼的邊緣簡檔。
【專利說明】
用于基于硬件的邊緣剖析的方法和系統(tǒng)
技術(shù)領(lǐng)域
[0001 ]本發(fā)明涉及反饋式代碼優(yōu)化的領(lǐng)域。
【背景技術(shù)】
[0002]反饋式代碼優(yōu)化(包括基本塊重新排序、函數(shù)內(nèi)聯(lián)、循環(huán)展開等)是各種程序優(yōu)化工具一一包括靜態(tài)優(yōu)化工具(例如,編譯器和鏈路后優(yōu)化器)以及動(dòng)態(tài)優(yōu)化工具一一所使用的有益程序優(yōu)化。雖然邊緣簡檔對(duì)于這種優(yōu)化可能是極有效的,但是例如與基本塊簡檔相反,收集邊緣簡檔的任務(wù)可能是更加困難的。
[0003]相關(guān)技術(shù)的如述不例和與之有關(guān)的限制旨在是例不性而非排他性的。在閱讀本說明書和研究附圖之后,相關(guān)技術(shù)的其他限制對(duì)本領(lǐng)域技術(shù)人員將變得顯而易見。
【發(fā)明內(nèi)容】
[0004]以下實(shí)施例及其各方面結(jié)合旨在為示例性和例示性而非限制范圍的系統(tǒng)、工具和方法而被描述和例示。
[0005]根據(jù)一個(gè)實(shí)施例,提供了一種方法,其包括:在目標(biāo)程序代碼的執(zhí)行期間由硬件處理器中的性能監(jiān)視計(jì)數(shù)器(PMC)對(duì)硬件事件的每一次出現(xiàn)進(jìn)行計(jì)數(shù);在所述目標(biāo)程序代碼的執(zhí)行期間將所述目標(biāo)程序代碼的預(yù)定義采納分支跟蹤(TBT)尺寸的最后采納分支依次且連續(xù)地存儲(chǔ)在所述至少一個(gè)硬件處理器的采納分支跟蹤設(shè)施(TBTC)的緩沖區(qū)中;每當(dāng)所述計(jì)數(shù)等于采樣速率時(shí),觸發(fā)對(duì)所述緩沖區(qū)的采樣,以接收包括當(dāng)前所述預(yù)定義TBT尺寸的最后采納分支的采納分支跟蹤;基于所述目標(biāo)程序代碼為每一個(gè)所述采納分支跟蹤構(gòu)造全分支跟蹤,其中所述全分支跟蹤包括所述目標(biāo)程序代碼中在所述采納分支跟蹤的第一個(gè)采納分支和最后一個(gè)米納分支之間并且包括所述米納分支跟蹤的第一個(gè)米納分支和最后一個(gè)采納分支在內(nèi)的所有已完成分支;從每一個(gè)所述全分支跟蹤中提取最后分支的預(yù)定義截?cái)喾种Ц?CBT)尺寸,以接收所述每一個(gè)采納分支跟蹤的截?cái)喾种Ц?;以及遞增地存儲(chǔ)每一個(gè)所述截?cái)喾种Ц櫼陨伤瞿繕?biāo)程序代碼的邊緣簡檔。
[0006]根據(jù)另一個(gè)實(shí)施例,提供了一種計(jì)算機(jī)程序產(chǎn)品,其包括包含有操作程序代碼的非暫時(shí)計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),該操作程序代碼可由至少一個(gè)硬件處理器執(zhí)行,其中至少一個(gè)硬件處理器被配置為:在目標(biāo)程序代碼的執(zhí)行期間對(duì)硬件事件的每一次出現(xiàn)進(jìn)行計(jì)數(shù);在所述目標(biāo)程序代碼的執(zhí)行期間將所述目標(biāo)程序代碼的預(yù)定義TBT尺寸的最后采納分支依次且連續(xù)地存儲(chǔ)在緩沖區(qū)中;并且每當(dāng)所述計(jì)數(shù)等于采樣速率時(shí),觸發(fā)對(duì)所述緩沖區(qū)的采樣,以接收包括當(dāng)前所述預(yù)定義TBT尺寸的最后采納分支的采納分支跟蹤,并且其中操作程序代碼可由至少一個(gè)硬件處理器執(zhí)行以:基于所述目標(biāo)程序代碼為每一個(gè)所述采納分支跟蹤構(gòu)造全分支跟蹤,其中所述全分支跟蹤包括所述目標(biāo)程序代碼中在所述采納分支跟蹤的第一個(gè)采納分支和最后一個(gè)采納分支之間并且包括所述采納分支跟蹤的第一個(gè)采納分支和最后一個(gè)采納分支在內(nèi)的所有已完成分支;從每一個(gè)所述全分支跟蹤中提取預(yù)定義CBT尺寸的最后分支,以接收所述每一個(gè)采納分支跟蹤的截?cái)喾种Ц?;以及遞增地存儲(chǔ)每一個(gè)所述截?cái)喾种Ц櫼陨伤瞿繕?biāo)程序代碼的邊緣簡檔。
[0007]根據(jù)另一個(gè)實(shí)施例,提供了一種包括至少一個(gè)硬件處理器的系統(tǒng),這至少一個(gè)硬件處理器包括:采納分支跟蹤設(shè)施(TBTC),其包括緩沖區(qū),該TBTC被配置為在目標(biāo)程序代碼的執(zhí)行期間將該目標(biāo)程序代碼的預(yù)定義TBT尺寸的多個(gè)分支中的最后采納分支依次且連續(xù)地存儲(chǔ)在所述緩沖區(qū)中;性能監(jiān)視計(jì)數(shù)器(PMC),其被配置為在所述目標(biāo)程序代碼的執(zhí)行期間:a.對(duì)硬件事件的每一次出現(xiàn)進(jìn)行計(jì)數(shù),以及b.每當(dāng)所述計(jì)數(shù)等于采樣速率時(shí),觸發(fā)對(duì)所述BTF的采樣,以接收包括當(dāng)前所述預(yù)定義TBT尺寸的最后采納分支的采納分支跟蹤,其中,硬件處理器通過執(zhí)行操作程序代碼而被配置為:基于所述目標(biāo)程序代碼為每一個(gè)采納分支跟蹤構(gòu)造全分支跟蹤,其中所述全分支跟蹤包括所述目標(biāo)程序代碼中在所述采納分支跟蹤的第一個(gè)采納分支和最后一個(gè)采納分支之間并且包括所述采納分支跟蹤的第一個(gè)采納分支和最后一個(gè)采納分支在內(nèi)的所有已完成分支,從每一個(gè)所述全分支跟蹤中提取預(yù)定義CBT尺寸的最后分支,以接收所述每一個(gè)采納分支跟蹤的截?cái)喾种Ц?,以及將每一個(gè)所述截?cái)喾种Ц欉f增地存儲(chǔ)在存儲(chǔ)設(shè)備中以生成所述目標(biāo)程序代碼的邊緣簡檔。
[0008]在一些實(shí)施例中,所述預(yù)定義TBT尺寸的最后采納分支的存儲(chǔ)是以循環(huán)方式執(zhí)行的。
[0009]在一些實(shí)施例中,所述采樣速率是可變的,所述采樣速率的值等于預(yù)定義數(shù)目與隨機(jī)選擇的德爾塔的求和,并且所述隨機(jī)選擇的德爾塔的值大大低于所述預(yù)定義數(shù)目的值。
[0010]在一些實(shí)施例中,一旦未采納分支完成則所述計(jì)數(shù)等于所述采樣速率,并且其中所述方法還包括將未采納分支附加到全分支跟蹤。
[0011]在一些實(shí)施例中,邊緣簡檔是調(diào)用圖簡檔,而分支是函數(shù)調(diào)用。
[0012]在一些實(shí)施例中,硬件事件的出現(xiàn)是目標(biāo)程序代碼的分支的完成。
[0013]在一些實(shí)施例中,硬件事件的出現(xiàn)是目標(biāo)程序代碼的指令的完成。
[0014]在一些實(shí)施例中,所述采樣速率是預(yù)定義的。
[0015]在一些實(shí)施例中,緩沖區(qū)是循環(huán)的。
[0016]除了上面描述的示例性方面和實(shí)施例之外,另外的方面和實(shí)施例通過參考附圖并且通過研究以下詳細(xì)描述將變得顯而易見。
【附圖說明】
[0017]示例性實(shí)施例在參考的附圖中被示出。在附圖中示出的組件和特征的尺寸一般是為了演示的便利和清楚而選擇的,而不一定是按比例示出的。附圖在下面被列出。
[0018]圖1示出了根據(jù)所公開的技術(shù)的一個(gè)實(shí)施例而構(gòu)造且可操作的方法的流程圖;
[0019]圖2示出了根據(jù)圖1中的方法的硬件(硬件處理器)和軟件的操作的示例性方案的示意圖;并且
[0020]圖3示出了示例性程序的控制流程圖(CFG)。
【具體實(shí)施方式】
[0021]所公開的方法、硬件處理器和計(jì)算機(jī)程序產(chǎn)品基于精確且輕量的方式而提供了可靠且均勻的邊緣剖析,由于允許更快捷方式的軟件優(yōu)化。
[0022]邊緣簡檔的關(guān)鍵屬性是均勻性。均勻的邊緣簡檔是簡檔中的任意兩個(gè)邊緣之間的比率與完整邊緣簡檔的比率成比例(即,結(jié)果兩個(gè)簡檔都呈現(xiàn)邊緣分散的類似測(cè)量)的邊緣簡檔。因?yàn)榇a重新排序例如與邊緣的相對(duì)執(zhí)行計(jì)數(shù)(也稱為“熱度”)有關(guān),因此均勻的邊緣簡檔就代碼重新排序而言可以具有與完整簡檔相同的質(zhì)量。因此,可靠的均勻邊緣簡檔對(duì)于像基本塊代碼重新排序和函數(shù)內(nèi)聯(lián)一樣的許多反饋式優(yōu)化而言可能是至關(guān)重要的。這種簡檔的可用性可以向底層平臺(tái)提供競(jìng)爭優(yōu)勢(shì)。
[0023]收集具有比完整簡檔更少的執(zhí)行計(jì)數(shù)的均勻簡檔可能是優(yōu)選的,因?yàn)槠渚哂懈偷拈_銷并且因而其對(duì)程序執(zhí)行的影響更小并且真實(shí)工作負(fù)載的更加精確模型可以被接收至IJ。近來的處理器配備有在這里叫做采納分支跟蹤設(shè)施(TBTF)的設(shè)施,該設(shè)施被配置為拍攝短采納分支跟蹤的快照。通常這些快照是按照指令的固定間隔或者周期來收集的。使用這些采納分支來收集邊緣簡檔是非均勻的,因?yàn)槠溆刹杉{分支組成故其跨度在完整分支流方面發(fā)生變化。當(dāng)按照指令或者周期間隔進(jìn)行采樣時(shí),由于分支的不同分布,產(chǎn)生附加的偏移。
[0024]所公開的邊緣剖析提供了按照固定的(或者平均起來是固定的)分支相關(guān)間隔對(duì)固定數(shù)量信息的采樣,這允許生成可靠的均勻邊緣簡檔。
[0025]術(shù)語表
[0026]這里所提到的術(shù)語“分支”可以與程序代碼(或者只是“程序”)中的指令有關(guān),其當(dāng)被計(jì)算機(jī)執(zhí)行時(shí)可以使該計(jì)算機(jī)開始執(zhí)行不同的指令序列,即分支到除當(dāng)前指令序列中的下一指令之外的程序計(jì)數(shù)器。術(shù)語“分支”可以與任何類型的分支一一包括條件或非條件分支、函數(shù)調(diào)用和函數(shù)返回、直接或間接分支等一一有關(guān)。
[0027]術(shù)語“分支的完成”可以指代由計(jì)算機(jī)執(zhí)行分支指令的動(dòng)作。分支隨后可以被采納或者不被采納。
[0028]這里所提到的術(shù)語“采納分支”可以與使計(jì)算機(jī)開始執(zhí)行除下一指令之外的程序的不同存儲(chǔ)器位置中的不同指令序列(即,執(zhí)行分支)的已執(zhí)行分支有關(guān)。
[0029]這里所提到的術(shù)語“未采納分支”可以與因?yàn)槠錀l件未得到滿足而未被采納的已執(zhí)行條件分支有關(guān)。反而,計(jì)算機(jī)可以繼續(xù)執(zhí)行當(dāng)前指令序列,從而以繼條件分支指令之后的指令開始。
[0030]這里所提到的術(shù)語“邊緣簡檔”可以與記錄程序中的分支被采納或者未被采納的次數(shù)的簡檔有關(guān)。
[0031]這里所使用的術(shù)語“全分支跟蹤”可以與在程序的執(zhí)行期間對(duì)該程序中的多個(gè)連續(xù)分支的記錄有關(guān),其中分支例如可以是采納或者未采納的。
[0032]這里所使用的術(shù)語“采納分支跟蹤”可以與對(duì)沿著程序中的特定執(zhí)行路徑的采納分支的記錄有關(guān)。
[0033]術(shù)語“采納分支跟蹤設(shè)施(Taken Branch Trace Facility,簡稱TBTC)”可以與在當(dāng)代硬件處理器內(nèi)構(gòu)造的被配置為拍攝采納分支跟蹤的快照的設(shè)施有關(guān)。這種設(shè)施可以通過各種商業(yè)名稱——像IBM公司的P0WER8處理器上的分支歷史滾動(dòng)緩沖區(qū)(BranchHistory Rolling Buffer,簡稱BHRB)或者英特爾公司的安騰2處理器上的分支跟蹤緩沖區(qū)(Branch Trace Buffer,簡稱BTB)--獲得。
[0034]術(shù)語“采納分支跟蹤(Taken Branch Trace,簡稱TBT)尺寸”和“截?cái)喾种Ц?Chopped Branch Trace,簡稱CBT)尺寸”可以相應(yīng)地與采納分支跟蹤和截?cái)喾种Ц櫽嘘P(guān),其中尺寸按照分支的數(shù)目來衡量。
[0035]現(xiàn)在對(duì)圖1進(jìn)行參考,圖1示出了根據(jù)所公開的技術(shù)的一個(gè)實(shí)施例而構(gòu)造并且可操作的方法的流程圖。在步驟100中,在目標(biāo)程序代碼的執(zhí)行期間可以對(duì)硬件事件的每一次出現(xiàn)進(jìn)行計(jì)數(shù)。硬件事件可以是目標(biāo)程序代碼中的分支的完成或者目標(biāo)程序代碼中的指令的完成。目標(biāo)程序代碼可以包括多個(gè)分支和多個(gè)指令。程序可以由用戶提供以為了反饋式優(yōu)化的目的而生成程序的邊緣簡檔。目標(biāo)程序代碼可以指代在存儲(chǔ)設(shè)備中存儲(chǔ)的目標(biāo)程序的二進(jìn)制代碼。
[0036]在一些實(shí)施例中,硬件事件可以是目標(biāo)程序代碼的指令的完成。在這種情況下由于目標(biāo)程序代碼的基本塊的尺寸的差異而可能需要附加的規(guī)格化。相應(yīng)地,曾在目標(biāo)程序代碼的每一個(gè)基本塊中采樣的樣本(即,采納分支跟蹤)的數(shù)目隨后可以按照基本塊的尺寸來劃分。
[0037]現(xiàn)在對(duì)圖2進(jìn)行參考,圖2示出了按照?qǐng)D1中的方法的硬件(硬件處理器)和軟件的操作的示例性方案的示意圖。圖1中的方法可以至少部分地由硬件處理器實(shí)現(xiàn)。硬件處理器220可以由底層系統(tǒng)提供。硬件處理器可以包括性能監(jiān)視計(jì)數(shù)器(PMCUSOt3PMC 250可被配置為在程序二進(jìn)制代碼200的執(zhí)行期間對(duì)程序二進(jìn)制代碼200中的采納或者未被采納的分支的每一次完成進(jìn)行計(jì)數(shù)。程序二進(jìn)制代碼200可以包括待優(yōu)化的目標(biāo)程序代碼。PMC 250可以是如在本領(lǐng)域中已知的硬件性能計(jì)數(shù)器。通常的硬件處理器可以包括可被連接到在執(zhí)行期間發(fā)生的豐富事件集合(指令完成、分支完成等)的若干個(gè)PMC。
[0038]在一些實(shí)施例中,在程序的開始處,PMC事件處理器260可以(例如,通過運(yùn)行程序二進(jìn)制代碼200的線程)被連接到程序二進(jìn)制代碼200以便被PMC 250應(yīng)警告而調(diào)用。事件處理器260可以是可被PMC 250調(diào)用的子例程。程序二進(jìn)制代碼200隨后可以經(jīng)由硬件處理器而開始執(zhí)行,同時(shí)硬件處理器通過PMC 250對(duì)程序二進(jìn)制代碼200的執(zhí)行期間的分支(由B指示)的每一次出現(xiàn)進(jìn)行計(jì)數(shù)。
[0039]在步驟110中,目標(biāo)程序代碼的預(yù)定義采納分支跟蹤(TBT)尺寸的最后采納分支(即,預(yù)定義數(shù)目的最后采納分支)在程序的執(zhí)行期間可以被依次地并且連續(xù)地存儲(chǔ)在緩沖區(qū)中。按照端到端相連的方式,TBT尺寸的最后采納分支可以按照循環(huán)方式一一即通過使用尺寸與TBT尺寸相等的緩沖區(qū)——而被存儲(chǔ)。參考圖2,硬件處理器還可以包括TBTF 230。TBTF 230可以包括采納分支循環(huán)緩沖區(qū)240,其尺寸與TBT尺寸相等。硬件處理器可以將TBT尺寸的最后采納分支相應(yīng)地存儲(chǔ)在采納分支循環(huán)緩沖區(qū)240中。
[0040]在步驟120中,每當(dāng)計(jì)數(shù)(S卩,根據(jù)步驟100)等于采樣速率(S卩,根據(jù)已完成分支數(shù)目的采樣),緩沖區(qū)的采樣就可以被觸發(fā)以接收包括當(dāng)前TBT尺寸的最后采納分支的采納分支跟蹤。
[0041 ]參考圖2,PMC 250可以被配置為根據(jù)采樣速率(S卩,觸發(fā)事件)來觸發(fā)對(duì)TBTF 230的采樣。當(dāng)這種事件發(fā)生時(shí),在采樣速率分支指令B(即,第N個(gè)分支指令,而N等于采樣速率)的完成之后,PMC250可以向PMC事件處理器260發(fā)出PMC警告。PMC 250可被預(yù)先設(shè)置為選中值(采樣速率)并且可以每當(dāng)分支被完成就被減小。當(dāng)PMC 250達(dá)到零時(shí),其可以生成中斷,從而允許PMC事件處理器260對(duì)TBTF 230進(jìn)行采樣。PMC事件處理器260隨后可以對(duì)TBTF 230進(jìn)行采樣,從而取回用T指示的采納分支跟蹤。T可以是TBT尺寸的最后采納分支的有序列表——T[O: TBT尺寸-1 ],其中,例如,T[O]是在采納分支循環(huán)緩沖區(qū)240中記錄的最舊分支,而T[TBT尺寸-1]是最新分支。PMC事件處理器260可以將T傳送到程序流跟蹤器(PFT)270。PFT 270可以是作為線程執(zhí)行的旨在生成程序流的跟蹤的軟件片段。PMC事件處理器260隨后可以返回,從而向TBTF 230發(fā)信號(hào)以恢復(fù)操作。這是為了使程序執(zhí)行中的干預(yù)最小化。TBTF 230在PMC事件處理器260的操作期間通??杀唤?,以使得其將不會(huì)對(duì)PMC事件處理器260的活動(dòng)進(jìn)行計(jì)數(shù)。
[0042]在一些實(shí)施例中,米樣速率可以是預(yù)定義的。在一些實(shí)施例中,米樣速率可以是可變的并且平均起來是固定的。通過將采樣速率的值設(shè)置為等于預(yù)定義數(shù)目與隨機(jī)選擇的德爾塔的求和并且使得采樣速率平均起來基本等于該預(yù)定義數(shù)目,采樣速率可以平均起來是固定的。隨機(jī)選擇的德爾塔的值可以大大低于預(yù)定義數(shù)目的值以使采樣保持均勻。因此,采樣速率的值可以是可變的,但是大約為預(yù)定義數(shù)目的值。可以應(yīng)用該方式以防止與可能導(dǎo)致偏倚的跟蹤樣本的目標(biāo)程序代碼片段同步。因此,PMC 250可被配置為每當(dāng)采納分支跟蹤被生成時(shí)隨機(jī)地選擇德爾塔。另外,根據(jù)陳等人的、D(未注明日期)、可在http://www.australianscience.com.au/research/google/36358.pdf [訪問于2014年10月30 日]處獲得的 “Taiming Hardware Event Samples for FDO Compilat1n”,即使在缺乏同步的情況下,隨機(jī)采樣也可以改善采樣的均勻性。
[0043]循環(huán)緩沖區(qū)的尺寸和采樣的速率可以是硬件的軟件設(shè)定,并且取決于可用硬件而可以是根據(jù)硬件線程或者硬件核心或者中央處理單元(CPU)的。
[0044]在步驟130處,可以基于目標(biāo)程序代碼為每一個(gè)采納分支跟蹤構(gòu)造全分支跟蹤。全分支跟蹤可以包括目標(biāo)程序代碼中在采納分支跟蹤的第一個(gè)采納分支和最后一個(gè)采納分支之間并且包括采納分支跟蹤的第一個(gè)采納分支和最后一個(gè)采納分支在內(nèi)的所有已完成分支。具體參考圖2,針對(duì)每一個(gè)采納分支跟蹤T,PFT 270可以掃描程序二進(jìn)制代碼200中從采納分支跟蹤T中的最舊分支以后的代碼。PFT 270隨后在其檢查如在采納分支跟蹤T中采樣的程序執(zhí)行流時(shí)可以記錄其可以找到的所有已完成分支(包括采納的和未被采納的在內(nèi)),從而為每一個(gè)采納分支跟蹤T構(gòu)造全分支跟蹤。
[0045]現(xiàn)在對(duì)圖3進(jìn)行參考,圖3示出了示例性程序的CFG。說明文字bcl、bc2等指示條件分支(即,“be”代表“分支條件(branch condit1nal)” )。說明文字T指示采納該分支的選項(xiàng)。說明文字NT指示不采納該分支的選項(xiàng)。實(shí)線指示實(shí)際程序流,即哪些分支被完成以及它們被采納與否。條紋線指示代碼中的未執(zhí)行路徑。例如,在TBT尺寸等于4并且采樣速率大于或者等于5的情況下,可以為該CFG生成全分支跟蹤,其相應(yīng)地可以包括四個(gè)采納分支:bcl、bc2、bc4和觸發(fā)分支(8卩,假定觸發(fā)分支是采納分支),以及五個(gè)已完成分支:bcl、bc2、bc3、bc4和觸發(fā)分支。最舊采納分支是bcl,而最新采納分支是觸發(fā)分支。所有采納分支一一即bcl、bc2、bc4和觸發(fā)分支一一可以是從采納分支跟蹤中提取的。全分支跟蹤可以相應(yīng)地在最舊采納分支“bcl”與最新采納分支“觸發(fā)分支”之間延伸。未采納分支--S卩bc3--可以是從目標(biāo)程序代碼中提取的。
[0046]在步驟140中,預(yù)定義截?cái)喾种Ц?CBT)尺寸的最后分支(S卩,預(yù)定義數(shù)目的最后分支)可以是從每一個(gè)全分支跟蹤中提取的,以接收每一個(gè)采納分支跟蹤的截?cái)喾种Ц?。CBT尺寸可以至多等于預(yù)定義TBT尺寸,以包括全分支跟蹤中的分支都是采納分支時(shí)的情況。
[0047]參考圖2,PFT 270可以提取每一個(gè)全分支跟蹤中的最后記錄的CBT尺寸的分支,從而根據(jù)它們形成由F指示的截?cái)喾种Ц?。PFT270隨后可以將截?cái)喾种Ц橣傳送到邊緣收集器(ECWSOt3EC 180可以為程序中的每一個(gè)執(zhí)行邊緣(即分支)保持計(jì)數(shù)器,以對(duì)其被采樣的數(shù)目進(jìn)行計(jì)數(shù)。這種計(jì)數(shù)器可以例如通過使用傳統(tǒng)的散列、緩存方法或者邊緣帶有權(quán)重的CFG來訪問。有利地,CBT尺寸可以被定義為盡可能地大,以允許在每一個(gè)采樣實(shí)例處收集最多信息并且使得CBT尺寸是固定的,以實(shí)現(xiàn)均勻性。因此,CBT尺寸可以對(duì)應(yīng)于可在每一個(gè)采納分支跟蹤中找到的分支的最大數(shù)目,因而CBT尺寸可以被定義為等于TBT尺寸。在一些實(shí)施例中,當(dāng)造成警告(即,根據(jù)采樣速率)的分支指令B是未采納分支時(shí),其可以被附加到全分支跟蹤。參考圖2,在這種情況下,PMC事件處理器260可以完成從最后采納分支直到B的全分支跟蹤。相應(yīng)地,截?cái)喾种Ц橣在B中結(jié)束。如果B由于某種原因(例如,其不是被架構(gòu)可靠地記錄的)而無法被附加,那么因?yàn)椴蓸痈欀械淖詈笠粋€(gè)分支總是采納分支而可能存在朝向米納分支的小偏倚。
[0048]在步驟150中,每一個(gè)截?cái)喾种Ц櫩梢员贿f增地存儲(chǔ),以生成目標(biāo)程序代碼的邊緣簡檔。參考圖2,EC 280可以將每一個(gè)截?cái)喾种Ц欉f增地存儲(chǔ)在存儲(chǔ)設(shè)備(未示出)中。EC 280隨后可以在程序二進(jìn)制代碼200完成時(shí)或者完成之后、或者在運(yùn)行時(shí)期間當(dāng)被請(qǐng)求時(shí)生成由此得到的簡檔。
[0049]根據(jù)所公開的邊緣剖析,TBT尺寸的采納分支的原始采納分支跟蹤T考慮到這種分支的最后CBT尺寸而被轉(zhuǎn)化為CBT尺寸分支樣本F。因此,當(dāng)TBTF按照例如已執(zhí)行分支的相等間隔而被采樣時(shí),每當(dāng)對(duì)這種分支的恰好CBT尺寸采樣時(shí),可以接收均勻的邊緣簡檔。可以將在運(yùn)行期間執(zhí)行的所有分支的完整跟蹤看作一長串S的(采納或未采納)分支。根據(jù)采樣速率(例如,每一個(gè)定義數(shù)目的分支)的采樣和查看分支的最后CBT尺寸有效地以固定間隔(即,根據(jù)已執(zhí)行分支)對(duì)S進(jìn)行采樣。因此分支在采樣跟蹤中出現(xiàn)的概率可以與其在S中的比例相同。
[0050]還公開了一種系統(tǒng)。該系統(tǒng)可以包括硬件處理器。該硬件處理器可以根據(jù)圖1中的方法操作,并且可以類似于圖2中的硬件處理器。硬件處理器可以包括TBTC和至少一個(gè)PMC。TBTC可以包括緩沖區(qū)。TBTC可被配置為在目標(biāo)程序代碼的執(zhí)行期間將預(yù)定義TBT尺寸的最后采納分支依次且連續(xù)地存儲(chǔ)在緩沖區(qū)中。PMC可以被配置為在目標(biāo)程序代碼的執(zhí)行期間對(duì)硬件事件的每一次出現(xiàn)進(jìn)行計(jì)數(shù),并且每當(dāng)計(jì)數(shù)等于采樣速率就觸發(fā)對(duì)BTF的采樣以接收采納分支跟蹤。采納分支跟蹤可以包括當(dāng)前預(yù)定義TBT尺寸的最后采納分支。該系統(tǒng)可以包括被配置為執(zhí)行圖1中的方法的一個(gè)或多個(gè)硬件處理器。
[0051]通過執(zhí)行專用軟件(S卩,包括在這里將被稱作操作程序代碼而不是目標(biāo)程序代碼的程序代碼)硬件處理器可以被配置成基于目標(biāo)程序代碼為每一個(gè)采納分支跟蹤構(gòu)造全分支跟蹤,并且從每一個(gè)全分支跟蹤中提取預(yù)定義CBT尺寸的最后分支,以接收每一個(gè)采納分支跟蹤的截?cái)喾种Ц櫋A硗?,通過執(zhí)行專用軟件硬件處理器可以被配置成將每一個(gè)截?cái)喾种Ц欉f增地存儲(chǔ)在存儲(chǔ)設(shè)備中,以生成目標(biāo)程序代碼的邊緣簡檔。在一些實(shí)施例中,附加的單獨(dú)硬件處理器可以執(zhí)行專用軟件以構(gòu)造全分支跟蹤、生成截?cái)喾种Ц櫤瓦吘壓啓n。在一些實(shí)施例中,如上所述的全分支跟蹤、截?cái)喾种Ц櫤瓦吘壓啓n的構(gòu)造也可以由諸如硬件處理器之類的硬件來執(zhí)行。
[0052]在一些實(shí)施例中,邊緣簡檔可以是調(diào)用圖簡檔。調(diào)用圖簡檔可以是僅包括函數(shù)調(diào)用邊緣的邊緣簡檔的子集。調(diào)用圖簡檔可以是像函數(shù)內(nèi)聯(lián)一樣的重要函數(shù)級(jí)優(yōu)化的基礎(chǔ)。因?yàn)槠涫且话氵吘壓啓n的更小子集,因此其可以被以更高頻率采樣以在沒有附加開銷的情況下接收更多詳細(xì)調(diào)用簡檔。
[0053]調(diào)用圖簡檔可以以與如在這里上面描述的邊緣簡檔類似的方式利用所需修改來生成。例如,在這種實(shí)施例中,TBTF可被配置為僅記錄直接和間接函數(shù)調(diào)用,并且PMC可被配置為對(duì)所有直接和間接函數(shù)調(diào)用進(jìn)行計(jì)數(shù)。
[0054]本發(fā)明可以是系統(tǒng)、方法和/或計(jì)算機(jī)程序產(chǎn)品。計(jì)算機(jī)程序產(chǎn)品可以包括計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其上載有用于使處理器實(shí)現(xiàn)本發(fā)明的各個(gè)方面的計(jì)算機(jī)可讀程序指令。
[0055]計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以是可以保持和存儲(chǔ)由指令執(zhí)行設(shè)備使用的指令的有形設(shè)備。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)例如可以是一一但不限于一一電存儲(chǔ)設(shè)備、磁存儲(chǔ)設(shè)備、光存儲(chǔ)設(shè)備、電磁存儲(chǔ)設(shè)備、半導(dǎo)體存儲(chǔ)設(shè)備或者上述的任意合適的組合。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)的更具體的例子(非窮舉的列表)包括:便攜式計(jì)算機(jī)盤、硬盤、隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、可擦式可編程只讀存儲(chǔ)器(EPROM或閃存)、靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)、便攜式壓縮盤只讀存儲(chǔ)器(CD-ROM)、數(shù)字多功能盤(DVD)、記憶棒、軟盤、機(jī)械編碼設(shè)備、例如其上存儲(chǔ)有指令的打孔卡或凹槽內(nèi)凸起結(jié)構(gòu)、以及上述的任意合適的組合。這里所使用的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)不被解釋為瞬時(shí)信號(hào)本身,諸如無線電波或者其他自由傳播的電磁波、通過波導(dǎo)或其他傳輸媒介傳播的電磁波(例如,通過光纖電纜的光脈沖)、或者通過電線傳輸?shù)碾娦盘?hào)。
[0056]這里所描述的計(jì)算機(jī)可讀程序指令可以從計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)下載到各個(gè)計(jì)算/處理設(shè)備,或者通過網(wǎng)絡(luò)、例如因特網(wǎng)、局域網(wǎng)、廣域網(wǎng)和/或無線網(wǎng)下載到外部計(jì)算機(jī)或外部存儲(chǔ)設(shè)備。網(wǎng)絡(luò)可以包括銅傳輸電纜、光纖傳輸、無線傳輸、路由器、防火墻、交換機(jī)、網(wǎng)關(guān)計(jì)算機(jī)和/或邊緣服務(wù)器。每個(gè)計(jì)算/處理設(shè)備中的網(wǎng)絡(luò)適配卡或者網(wǎng)絡(luò)接口從網(wǎng)絡(luò)接收計(jì)算機(jī)可讀程序指令,并轉(zhuǎn)發(fā)該計(jì)算機(jī)可讀程序指令,以供存儲(chǔ)在各個(gè)計(jì)算/處理設(shè)備中的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中。
[0057]用于執(zhí)行本發(fā)明操作的計(jì)算機(jī)程序指令可以是匯編指令、指令集架構(gòu)(ISA)指令、機(jī)器指令、機(jī)器相關(guān)指令、微代碼、固件指令、狀態(tài)設(shè)置數(shù)據(jù)、或者以一種或多種編程語言的任意組合編寫的源代碼或目標(biāo)代碼,所述編程語言包括面向?qū)ο蟮木幊陶Z言一一諸如
Smalltalk、C++等,以及常規(guī)的過程式編程語言--諸如“C”語言或類似的編程語言。計(jì)算機(jī)可讀程序指令可以完全地在用戶計(jì)算機(jī)上執(zhí)行、部分地在用戶計(jì)算機(jī)上執(zhí)行、作為一個(gè)獨(dú)立的軟件包執(zhí)行、部分在用戶計(jì)算機(jī)上部分在遠(yuǎn)程計(jì)算機(jī)上執(zhí)行、或者完全在遠(yuǎn)程計(jì)算機(jī)或服務(wù)器上執(zhí)行。在涉及遠(yuǎn)程計(jì)算機(jī)的情形中,遠(yuǎn)程計(jì)算機(jī)可以通過任意種類的網(wǎng)絡(luò)一一包括局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)—一連接到用戶計(jì)算機(jī),或者,可以連接到外部計(jì)算機(jī)(例如利用因特網(wǎng)服務(wù)提供商來通過因特網(wǎng)連接)。在一些實(shí)施例中,通過利用計(jì)算機(jī)可讀程序指令的狀態(tài)信息來個(gè)性化定制電子電路,例如可編程邏輯電路、現(xiàn)場(chǎng)可編程門陣列(FPGA)或可編程邏輯陣列(PLA),該電子電路可以執(zhí)行計(jì)算機(jī)可讀程序指令,從而實(shí)現(xiàn)本發(fā)明的各個(gè)方面。
[0058]這里參照根據(jù)本發(fā)明實(shí)施例的方法、裝置(系統(tǒng))和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或框圖描述了本發(fā)明的各個(gè)方面。應(yīng)當(dāng)理解,流程圖和/或框圖的每個(gè)方框以及流程圖和/或框圖中各方框的組合,都可以由計(jì)算機(jī)可讀程序指令實(shí)現(xiàn)。
[0059]這些計(jì)算機(jī)可讀程序指令可以提供給通用計(jì)算機(jī)、專用計(jì)算機(jī)或其它可編程數(shù)據(jù)處理裝置的處理器,從而生產(chǎn)出一種機(jī)器,使得這些指令在通過計(jì)算機(jī)或其它可編程數(shù)據(jù)處理裝置的處理器執(zhí)行時(shí),產(chǎn)生了實(shí)現(xiàn)流程圖和/或框圖中的一個(gè)或多個(gè)方框中規(guī)定的功能/動(dòng)作的裝置。也可以把這些計(jì)算機(jī)可讀程序指令存儲(chǔ)在計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,這些指令使得計(jì)算機(jī)、可編程數(shù)據(jù)處理裝置和/或其他設(shè)備以特定方式工作,從而,存儲(chǔ)有指令的計(jì)算機(jī)可讀介質(zhì)則包括一個(gè)制造品,其包括實(shí)現(xiàn)流程圖和/或框圖中的一個(gè)或多個(gè)方框中規(guī)定的功能/動(dòng)作的各個(gè)方面的指令。
[0060]也可以把計(jì)算機(jī)可讀程序指令加載到計(jì)算機(jī)、其它可編程數(shù)據(jù)處理裝置、或其它設(shè)備上,使得在計(jì)算機(jī)、其它可編程數(shù)據(jù)處理裝置或其它設(shè)備上執(zhí)行一系列操作步驟,以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的過程,從而使得在計(jì)算機(jī)、其它可編程數(shù)據(jù)處理裝置、或其它設(shè)備上執(zhí)行的指令實(shí)現(xiàn)流程圖和/或框圖中的一個(gè)或多個(gè)方框中規(guī)定的功能/動(dòng)作。
[0061]附圖中的流程圖和框圖顯示了根據(jù)本發(fā)明的多個(gè)實(shí)施例的系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品的可能實(shí)現(xiàn)的體系架構(gòu)、功能和操作。在這點(diǎn)上,流程圖或框圖中的每個(gè)方框可以代表一個(gè)模塊、程序段或指令的一部分,所述模塊、程序段或指令的一部分包含一個(gè)或多個(gè)用于實(shí)現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。在有些作為替換的實(shí)現(xiàn)中,方框中所標(biāo)注的功能也可以以不同于附圖中所標(biāo)注的順序發(fā)生。例如,兩個(gè)連續(xù)的方框?qū)嶋H上可以基本并行地執(zhí)行,它們有時(shí)也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個(gè)方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或動(dòng)作的專用的基于硬件的系統(tǒng)來實(shí)現(xiàn),或者可以用專用硬件與計(jì)算機(jī)指令的組合來實(shí)現(xiàn)。
[0062]對(duì)本發(fā)明的各種實(shí)施例的描述已經(jīng)為了例示目的而被給出,但是并非旨在是窮盡無遺的或者局限于所公開的實(shí)施例。在不脫離所描述的實(shí)施例的范圍和精神的情況下許多修改和變更對(duì)本領(lǐng)域普通技術(shù)人員而言將是顯而易見的。這里所使用的術(shù)語是為了最好地說明實(shí)施例的原理、相對(duì)于在市場(chǎng)上找到的技術(shù)的實(shí)際應(yīng)用或技術(shù)改進(jìn)、或是為了使得本領(lǐng)域其他普通技術(shù)人員能夠理解在這里公開的實(shí)施例而選擇的。
【主權(quán)項(xiàng)】
1.一種方法,包括: 在目標(biāo)程序代碼的執(zhí)行期間由至少一個(gè)硬件處理器中的性能監(jiān)視計(jì)數(shù)器(PMC)對(duì)硬件事件的每一次出現(xiàn)進(jìn)行計(jì)數(shù); 在所述目標(biāo)程序代碼的執(zhí)行期間將所述目標(biāo)程序代碼的預(yù)定義采納分支跟蹤(TBT)尺寸的最后采納分支依次且連續(xù)地存儲(chǔ)在所述至少一個(gè)硬件處理器的采納分支跟蹤設(shè)施(TBTC)的緩沖區(qū)中; 每當(dāng)所述計(jì)數(shù)等于采樣速率時(shí),觸發(fā)對(duì)所述緩沖區(qū)的采樣,以接收包括當(dāng)前所述預(yù)定義TBT尺寸的最后采納分支的采納分支跟蹤; 基于所述目標(biāo)程序代碼為每一個(gè)所述采納分支跟蹤構(gòu)造全分支跟蹤,其中所述全分支跟蹤包括所述目標(biāo)程序代碼中在所述采納分支跟蹤的第一個(gè)采納分支和最后一個(gè)采納分支之間并且包括所述采納分支跟蹤的第一個(gè)采納分支和最后一個(gè)采納分支在內(nèi)的所有已完成分支; 從每一個(gè)所述全分支跟蹤中提取預(yù)定義截?cái)喾种Ц?CBT)尺寸的最后分支,以接收所述每一個(gè)采納分支跟蹤的截?cái)喾种Ц?;以?遞增地存儲(chǔ)每一個(gè)所述截?cái)喾种Ц櫼陨伤瞿繕?biāo)程序代碼的邊緣簡檔。2.根據(jù)權(quán)利要求1所述的方法,其中,所述預(yù)定義TBT尺寸的最后采納分支的存儲(chǔ)是以循環(huán)方式執(zhí)行的。3.根據(jù)權(quán)利要求1所述的方法,其中: 所述采樣速率是可變的, 所述采樣速率的值等于預(yù)定義數(shù)目與隨機(jī)選擇的德爾塔的求和,并且 所述隨機(jī)選擇的德爾塔的值大大低于所述預(yù)定義數(shù)目的值。4.根據(jù)權(quán)利要求1所述的方法,其中,一旦未采納分支完成則所述計(jì)數(shù)等于所述采樣速率,并且其中所述方法還包括將所述未采納分支附加到所述全分支跟蹤。5.根據(jù)權(quán)利要求1所述的方法,其中,所述邊緣簡檔是調(diào)用圖簡檔,而分支是函數(shù)調(diào)用。6.根據(jù)權(quán)利要求1所述的方法,其中,硬件事件的出現(xiàn)是所述目標(biāo)程序代碼的分支的完成。7.根據(jù)權(quán)利要求1所述的方法,其中,硬件事件的出現(xiàn)是所述目標(biāo)程序代碼的指令的完成。8.—種計(jì)算機(jī)系統(tǒng),包括用于實(shí)現(xiàn)權(quán)利要求1-7中任一項(xiàng)所述的方法的任何步驟的裝置。9.一種包括至少一個(gè)硬件處理器的系統(tǒng),所述至少一個(gè)硬件處理器包括: 包括緩沖區(qū)的采納分支跟蹤設(shè)施(TBTC),該TBTC被配置為在目標(biāo)程序代碼的執(zhí)行期間將所述目標(biāo)程序代碼的多個(gè)分支中的預(yù)定義TBT尺寸的最后采納分支依次且連續(xù)地存儲(chǔ)在所述緩沖區(qū)中; 性能監(jiān)視計(jì)數(shù)器(PMC),被配置為在所述目標(biāo)程序代碼的執(zhí)行期間: a.對(duì)硬件事件的每一次出現(xiàn)進(jìn)行計(jì)數(shù),以及 b.每當(dāng)所述計(jì)數(shù)等于采樣速率時(shí),觸發(fā)對(duì)所述BTF的采樣,以接收包括當(dāng)前所述預(yù)定義TBT尺寸的最后采納分支的采納分支跟蹤, 其中,所述硬件處理器通過執(zhí)行操作程序代碼而被配置為: 基于所述目標(biāo)程序代碼為每一個(gè)采納分支跟蹤構(gòu)造全分支跟蹤,其中所述全分支跟蹤包括所述目標(biāo)程序代碼中在所述采納分支跟蹤的第一個(gè)采納分支和最后一個(gè)采納分支之間并且包括所述采納分支跟蹤的第一個(gè)采納分支和最后一個(gè)采納分支在內(nèi)的所有已完成分支, 從每一個(gè)所述全分支跟蹤中提取預(yù)定義CBT尺寸的最后分支,以接收所述每一個(gè)采納分支跟蹤的截?cái)喾种Ц?,以?將每一個(gè)所述截?cái)喾种Ц欉f增地存儲(chǔ)在存儲(chǔ)設(shè)備中以生成所述目標(biāo)程序代碼的邊緣簡檔。10.根據(jù)權(quán)利要求9所述的系統(tǒng),其中,所述緩沖區(qū)是循環(huán)的。11.根據(jù)權(quán)利要求9所述的系統(tǒng),其中: 所述采樣速率是可變的, 所述采樣速率的值等于預(yù)定義數(shù)目與隨機(jī)選擇的德爾塔的求和,并且 所述隨機(jī)選擇的德爾塔的值大大低于所述預(yù)定義數(shù)目的值。12.根據(jù)權(quán)利要求9所述的系統(tǒng),其中,一旦未采納分支完成則所述計(jì)數(shù)等于所述采樣速率,并且其中所述至少一個(gè)硬件處理器還被配置為通過執(zhí)行所述操作程序代碼而將所述未采納分支附加到所述全分支跟蹤。13.根據(jù)權(quán)利要求9所述的系統(tǒng),其中,所述邊緣簡檔是調(diào)用圖簡檔,而所述多個(gè)分支是函數(shù)調(diào)用。14.根據(jù)權(quán)利要求9所述的系統(tǒng),其中,硬件事件的出現(xiàn)是從由以下各項(xiàng)組成的組中選擇的:所述目標(biāo)程序代碼的分支的完成和所述目標(biāo)程序代碼的指令的完成。
【文檔編號(hào)】G06F9/45GK105912378SQ201610091582
【公開日】2016年8月31日
【申請(qǐng)日】2016年2月19日
【發(fā)明人】G·徹特拉斯貝格, M·克勞斯內(nèi)爾, N·佩雷格, Y·雅瑞
【申請(qǐng)人】國際商業(yè)機(jī)器公司