專利名稱:用于指令和數(shù)據(jù)訪問的選擇性計(jì)數(shù)的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明一般地涉及改進(jìn)的數(shù)據(jù)處理系統(tǒng)。特別是,本發(fā)明提供一種方法和裝置,用于獲得數(shù)據(jù)處理系統(tǒng)中的性能數(shù)據(jù)。更特別的是,本發(fā)明提供一種方法和裝置,用于對(duì)獲得數(shù)據(jù)處理系統(tǒng)中的性能數(shù)據(jù)的軟件工具的硬件輔助。
背景技術(shù):
在分析和增強(qiáng)數(shù)據(jù)處理系統(tǒng)的性能和數(shù)據(jù)處理系統(tǒng)內(nèi)執(zhí)行的應(yīng)用中,了解數(shù)據(jù)處理系統(tǒng)內(nèi)的哪個(gè)軟件模塊正在使用系統(tǒng)資源是有幫助的。數(shù)據(jù)處理系統(tǒng)的有效的管理和增強(qiáng)要求知道各種系統(tǒng)資源如何以及何時(shí)正在使用。當(dāng)各種軟件應(yīng)用正在數(shù)據(jù)處理系統(tǒng)中執(zhí)行時(shí),性能工具用來(lái)監(jiān)視和檢查數(shù)據(jù)處理系統(tǒng)以確定資源消耗。例如,性能工具可以識(shí)別數(shù)據(jù)處理系統(tǒng)中最頻繁執(zhí)行的模塊和指令,或者可以識(shí)別那些分配最大數(shù)量的存儲(chǔ)器或執(zhí)行最多的I/O請(qǐng)求的模塊。硬件性能工具可以嵌入到系統(tǒng)中或在以后的時(shí)間添加。
一個(gè)已知的軟件性能工具是跟蹤工具。跟蹤工具可以使用一種以上的技術(shù)提供跟蹤信息,該信息指明一個(gè)執(zhí)行程序的執(zhí)行流程。通過當(dāng)某些事件發(fā)生時(shí)記錄它們,一種技術(shù),所謂的基于事件的剖面技術(shù)(profiling technique),跟蹤指令的特定的序列。例如,跟蹤工具可以記錄每次進(jìn)入和每次離開模塊、子程序、方法、函數(shù)或系統(tǒng)部件?;蛘?,跟蹤工具可以記錄為每個(gè)存儲(chǔ)器分配請(qǐng)求分配的存儲(chǔ)器的請(qǐng)求者和數(shù)量。典型地,為每個(gè)這樣的事件產(chǎn)生打了時(shí)間戳的記錄。相應(yīng)的記錄對(duì),類似于進(jìn)入-離開記錄,也用于跟蹤任意代碼段的執(zhí)行、I/O的開始和完成或數(shù)據(jù)的傳輸,并且用于其它很多感興趣事件。
為改善由各種計(jì)算機(jī)族生成的代碼的性能,確定在執(zhí)行代碼時(shí)處理器正在將時(shí)間花在哪里經(jīng)常是必要的,這樣的努力通常在計(jì)算機(jī)處理技術(shù)中稱為定位“熱點(diǎn)”。理想地,一個(gè)人愿意在指令和/或代碼的源碼行級(jí)隔離這樣的熱點(diǎn),以便集中注意力于可能從對(duì)代碼的改善收益最多的區(qū)域。
另一種跟蹤技術(shù)涉及周期性地采樣程序的執(zhí)行流程以識(shí)別程序中的某個(gè)位置,在該位置程序看來(lái)花費(fèi)大量的時(shí)間。這種技術(shù)基于這樣的思想在規(guī)則的間隔周期性地中斷應(yīng)用或者數(shù)據(jù)處理系統(tǒng)執(zhí)行,所謂的基于采樣的剖面。在每次中斷,對(duì)預(yù)定長(zhǎng)度的時(shí)間或預(yù)定數(shù)目的感興趣的事件記錄信息。例如,在時(shí)間間隔期間,可記錄當(dāng)前執(zhí)行線程的程序計(jì)數(shù)器,它是正在剖析的更大的程序的可執(zhí)行部分。在后處理時(shí)間,可以對(duì)數(shù)據(jù)處理系統(tǒng)的負(fù)載圖和符號(hào)表信息解析這些值,并且從這個(gè)分析可以得到時(shí)間正花費(fèi)在哪里的剖面。
創(chuàng)造如這些的工具以找到與特定的情形或問題相關(guān)的答案可花費(fèi)很多工作量并且可能很難校準(zhǔn),因?yàn)檐浖ぞ咦陨碛绊懕粶y(cè)試系統(tǒng)。本發(fā)明認(rèn)識(shí)到用于工具開發(fā)和問題分析的硬件輔助可明顯減輕開發(fā)軟件性能工具需要的工作量。進(jìn)而,隨著處理器密度的增大,硬件輔助可能被包括以提供附加的調(diào)試和分析特征。
因此,擁有用來(lái)為性能工具提供硬件輔助的改進(jìn)的方法、裝置和計(jì)算機(jī)指令會(huì)是有益的,該性能工具用來(lái)分析數(shù)據(jù)處理系統(tǒng)的性能。
發(fā)明內(nèi)容
本發(fā)明提供數(shù)據(jù)處理系統(tǒng)中用于處理指令的一種方法、裝置和計(jì)算機(jī)指令。指令在數(shù)據(jù)處理系統(tǒng)中的處理器接收。如果指示器(indicator)與指令相關(guān)聯(lián),該指令和所有隨后的指令的執(zhí)行被計(jì)數(shù)直到接收另一個(gè)指示器。指示器也使用于數(shù)據(jù)位置從而對(duì)數(shù)據(jù)位置中的數(shù)據(jù)的訪問計(jì)數(shù)。如果指示器與數(shù)據(jù)位置相關(guān)聯(lián),所有隨后的數(shù)據(jù)位置的訪問被計(jì)數(shù)直到接收另一個(gè)指示器。
在附加的權(quán)利要求中闡明被認(rèn)為是本發(fā)明的特性的新穎特征。但是,當(dāng)結(jié)合附圖閱讀時(shí),通過參考下面說明性的實(shí)施例的詳細(xì)描述,將最好地理解本發(fā)明自身以及其使用的優(yōu)選方式、進(jìn)一步的目標(biāo)和優(yōu)勢(shì),其中圖1是可以實(shí)現(xiàn)本發(fā)明的數(shù)據(jù)處理系統(tǒng)的方塊圖;圖2是根據(jù)本發(fā)明的優(yōu)選實(shí)施例用于處理信息的處理器系統(tǒng)的方塊圖;圖3是根據(jù)本發(fā)明的優(yōu)選實(shí)施例說明在處理與指示器相關(guān)聯(lián)的處理指令中使用的部件的圖;圖4是根據(jù)優(yōu)選實(shí)施例說明用于使性能指示器與指令或存儲(chǔ)器位置相關(guān)聯(lián)的一種機(jī)制的圖;
圖5是根據(jù)本發(fā)明的優(yōu)選實(shí)施例說明束(bundle)的圖;圖6是根據(jù)本發(fā)明的優(yōu)選實(shí)施例的包含性能指示器的子程序的圖;圖7是根據(jù)本發(fā)明的優(yōu)選實(shí)施例用于處理包含性能指示器的指令的過程的流程圖;圖8是根據(jù)本發(fā)明的優(yōu)選實(shí)施例用于選擇性地發(fā)送指令到中斷單元的過程的流程圖;圖9是根據(jù)本發(fā)明的優(yōu)選實(shí)施例用于產(chǎn)生中斷以響應(yīng)對(duì)與性能指示器相關(guān)聯(lián)的存儲(chǔ)器位置的訪問的過程的流程圖;圖10是根據(jù)本發(fā)明的優(yōu)選實(shí)施例用于對(duì)事件計(jì)數(shù)的過程的流程圖;圖11是根據(jù)本發(fā)明的優(yōu)選實(shí)施例用于指令的選擇性計(jì)數(shù)的過程的流程圖;圖12是根據(jù)本發(fā)明的優(yōu)選實(shí)施例用于指令的選擇性計(jì)數(shù)的過程的流程圖;圖13是根據(jù)本發(fā)明的優(yōu)選實(shí)施例用于識(shí)別超過閾值的指令的過程的流程圖;圖14是根據(jù)本發(fā)明的優(yōu)選實(shí)施例用于對(duì)存儲(chǔ)器位置的訪問的過程的流程圖;圖15是根據(jù)本發(fā)明的優(yōu)選實(shí)施例說明用于產(chǎn)生元數(shù)據(jù)(meta data)如性能指示器的部件的方塊圖;圖16是根據(jù)本發(fā)明的優(yōu)選實(shí)施例說明元數(shù)據(jù)的圖;圖17是根據(jù)本發(fā)明的優(yōu)選實(shí)施例說明涉及裝載和維護(hù)性能儀器影子高速緩沖存儲(chǔ)器(performance instrumentation shadow cache)的部件的圖;圖18是根據(jù)本發(fā)明的優(yōu)選實(shí)施例用于為指令產(chǎn)生元數(shù)據(jù)的過程的流程圖;圖19是根據(jù)本發(fā)明的優(yōu)選實(shí)施例用于為存儲(chǔ)器位置產(chǎn)生元數(shù)據(jù)的過程的流程圖;圖20是根據(jù)本發(fā)明的優(yōu)選實(shí)施例用于對(duì)用于特定指令的執(zhí)行計(jì)數(shù)的過程的流程圖;圖21是根據(jù)本發(fā)明的優(yōu)選實(shí)施例用于對(duì)訪問特定存儲(chǔ)器位置計(jì)數(shù)的過程的流程圖;圖22是說明根據(jù)本發(fā)明的優(yōu)選實(shí)施例的各部件的圖,所述各部件用于訪問相對(duì)于指令的執(zhí)行或存儲(chǔ)器位置的訪問而收集的信息;圖23是根據(jù)本發(fā)明的優(yōu)選實(shí)施例用來(lái)自動(dòng)修改程序中的代碼從而允許代碼的部分的選擇性計(jì)數(shù)或剖面的部件的方塊圖;圖24是根據(jù)本發(fā)明的優(yōu)選實(shí)施例用于動(dòng)態(tài)地添加或關(guān)聯(lián)性能指示器到指令的過程的流程圖;圖25是根據(jù)本發(fā)明的優(yōu)選實(shí)施例說明用來(lái)通過使性能指示器和頁(yè)中的指令相關(guān)聯(lián)來(lái)掃描頁(yè)的部件的圖;圖26是根據(jù)本發(fā)明的優(yōu)選實(shí)施例用于使指示器與頁(yè)中的指令相關(guān)聯(lián)的過程的流程圖;圖27是根據(jù)本發(fā)明的優(yōu)選實(shí)施例描述包含堆棧幀的調(diào)用堆棧的圖;圖28是根據(jù)本發(fā)明的優(yōu)選實(shí)施例用于識(shí)別與調(diào)用和返回指令相關(guān)聯(lián)的事件的過程的流程圖,其中從性能監(jiān)視器單元收集數(shù)據(jù);圖29是根據(jù)本發(fā)明的優(yōu)選實(shí)施例用于識(shí)別已經(jīng)執(zhí)行超過所選擇的次數(shù)的指令的過程的流程圖;圖30是根據(jù)本發(fā)明的優(yōu)選實(shí)施例用于當(dāng)執(zhí)行特定指令超過某個(gè)所選擇的次數(shù)時(shí)檢查調(diào)用堆棧和識(shí)別程序的調(diào)用者的過程的流程圖;圖31是根據(jù)本發(fā)明的優(yōu)選實(shí)施例說明已經(jīng)為監(jiān)視選擇的數(shù)據(jù)和指令的范圍的圖;以及圖32是根據(jù)本發(fā)明的優(yōu)選實(shí)施例用于對(duì)設(shè)置的范圍的訪問數(shù)以及設(shè)置的范圍內(nèi)執(zhí)行的指令數(shù)計(jì)數(shù)的過程的流程圖。
具體實(shí)施例方式
現(xiàn)在參考圖1,顯示其中可以實(shí)現(xiàn)本發(fā)明的數(shù)據(jù)處理系統(tǒng)的方塊圖??蛻?00是計(jì)算機(jī)的例子,實(shí)現(xiàn)本發(fā)明的過程的代碼或指令可以位于其中。客戶100使用外圍部件互連(PCI)本地總線架構(gòu)。雖然描述的例子使用PCI總線,但可以使用其它總線架構(gòu),如加速圖形端口(AGP)和工業(yè)標(biāo)準(zhǔn)架構(gòu)(ISA)。處理器102和主存儲(chǔ)器104通過PCI橋108連接到PCI本地總線106。PCI橋108也可以包括集成的存儲(chǔ)器控制器和高速緩沖存儲(chǔ)器用于處理器102。到PCI本地總線106的另外的連接可以通過直接部件互連或通過附加板實(shí)現(xiàn)。在描述的例子中,局域網(wǎng)(LAN)適配器110、小計(jì)算機(jī)系統(tǒng)接口(SCSI)主機(jī)總線適配器112和擴(kuò)展總線接口114通過直接部件互連連接到PCI本地總線106。相比之下,語(yǔ)音適配器116、圖形適配器118和音頻/視頻適配器119通過插入到擴(kuò)展槽的附加板連接到PCI本地總線106。擴(kuò)展總線接口114為鍵盤和鼠標(biāo)適配器120、調(diào)制解調(diào)器122和附加的存儲(chǔ)器124提供連接。SCSI主機(jī)總線適配器112為硬盤驅(qū)動(dòng)器126、磁帶驅(qū)動(dòng)器128和CD-ROM驅(qū)動(dòng)器130提供連接。典型的PCI本地總線實(shí)現(xiàn)將支持三或四個(gè)PCI擴(kuò)展槽或附加連接器。
在圖1的數(shù)據(jù)處理系統(tǒng)100內(nèi),操作系統(tǒng)在處理器102上運(yùn)行并用來(lái)對(duì)各種部件進(jìn)行協(xié)調(diào)和提供控制。操作系統(tǒng)可能是商業(yè)上可得到的操作系統(tǒng)如Windows XP,它可從微軟公司得到。面向?qū)ο蟮木幊滔到y(tǒng)如Java可以與操作系統(tǒng)一起運(yùn)行,并且提供從Java程序或客戶100上執(zhí)行的應(yīng)用對(duì)操作系統(tǒng)的調(diào)用?!癑ava”是Sun微系統(tǒng)公司的商標(biāo)。用于操作系統(tǒng)、面向?qū)ο蟮木幊滔到y(tǒng)和應(yīng)用或程序的指令位于存儲(chǔ)設(shè)備如硬盤驅(qū)動(dòng)器126上,并且為了由處理器102執(zhí)行可以裝入主存儲(chǔ)器104。
本領(lǐng)域普通技術(shù)人員將意識(shí)到,圖1中的硬件可以依賴于實(shí)現(xiàn)變化。其它的內(nèi)部硬件或外設(shè),如只讀(ROM)閃存、相當(dāng)?shù)姆且资Т鎯?chǔ)器或光盤驅(qū)動(dòng)器等,可以用來(lái)添加到或替代圖1中所描述的硬件。同樣地,本發(fā)明的過程可以應(yīng)用到多處理器數(shù)據(jù)處理系統(tǒng)。
例如,客戶100,如果可選地配置為網(wǎng)絡(luò)計(jì)算機(jī),可以不包括SCSI主機(jī)總線適配器112、硬盤驅(qū)動(dòng)器126、磁帶驅(qū)動(dòng)器128和CD-ROM驅(qū)動(dòng)器130。在那種情況下,計(jì)算機(jī),恰當(dāng)?shù)胤Q為客戶計(jì)算機(jī),包括某種類型的網(wǎng)絡(luò)通信接口,如LAN適配器110或調(diào)制解調(diào)器122等。作為另一個(gè)例子,客戶100可以是單機(jī)系統(tǒng),它配置為可啟動(dòng)而不依賴某種類型的網(wǎng)絡(luò)通信接口,無(wú)論客戶100是否包含某種類型的網(wǎng)絡(luò)通信接口。作為進(jìn)一步的例子,客戶100可以是個(gè)人數(shù)字助理(PDA),它配置有ROM和/或閃存ROM從而為存儲(chǔ)操作系統(tǒng)文件和/或用戶產(chǎn)生的數(shù)據(jù)提供非易失存儲(chǔ)器。圖1中所描述的例子和上述的例子不意味著暗示架構(gòu)的限制。
本發(fā)明的過程由處理器102利用計(jì)算機(jī)實(shí)現(xiàn)的指令執(zhí)行,指令可以位于存儲(chǔ)器如例如主存儲(chǔ)器104、存儲(chǔ)器124中,或位于一個(gè)或更多的外設(shè)126-130中。
接下來(lái)轉(zhuǎn)向圖2,根據(jù)本發(fā)明的優(yōu)選實(shí)施例,描述用于處理信息的處理器系統(tǒng)的方塊圖。處理器210可以如圖1中的處理器102一樣實(shí)現(xiàn)。
在優(yōu)選實(shí)施例中,處理器210是單個(gè)超大規(guī)模集成電路微處理器。因此,如在這里下面進(jìn)一步討論的,處理器210包括各種單元、寄存器、緩沖器、存儲(chǔ)器和其它部分,它們都由集成電路構(gòu)成。同樣地,在優(yōu)選實(shí)施例中,處理器210根據(jù)精減指令集計(jì)算機(jī)(“RISC”)技術(shù)操作。如圖2中所示,系統(tǒng)總線211連接到處理器210的總線接口單元(“BIU”)212。BIU 212控制處理器210和系統(tǒng)總線211之間的信息傳遞。
BIU 212連接到指令高速緩沖存儲(chǔ)器214和處理器210的數(shù)據(jù)高速緩沖存儲(chǔ)器216。指令高速緩沖存儲(chǔ)器214輸出指令到定序器(sequencer)單元218。為響應(yīng)來(lái)自指令高速緩沖存儲(chǔ)器214的這樣的指令,定序器單元218選擇性地輸出指令到處理器210的其它執(zhí)行電路。
除了定序器單元218,在優(yōu)選實(shí)施例中,處理器210的執(zhí)行電路包括多個(gè)執(zhí)行單元,即分支單元220、定點(diǎn)單元A(“FXUA”)222、定點(diǎn)單元B(“FXUB”)224、復(fù)定點(diǎn)單元(“CFXU”)226、裝載/存儲(chǔ)單元(“LSU”)228和浮點(diǎn)單元(“FPU”)230。FXUA 222、FXUB 224、CFXU 226和LSU 228從通用架構(gòu)寄存器(“GPR”)232和定點(diǎn)重命名緩沖器234輸入其源操作數(shù)信息。此外,F(xiàn)XUA 222和FXUB 224從進(jìn)位比特(“CA”)寄存器239輸入“進(jìn)位比特”。FXUA222、FXUB 224、CFXU 226和LSU 228輸出其操作的結(jié)果(目的操作數(shù)信息),用來(lái)在定點(diǎn)重命名緩沖器234中的選擇的登記項(xiàng)上存儲(chǔ)。同樣地,CFXU226輸入和輸出源操作數(shù)信息和目的操作數(shù)信息到和從特殊用途寄存器處理單元(“SPR單元”)237。
FPU 230從浮點(diǎn)架構(gòu)寄存器(“FPR”)236和浮點(diǎn)重命名緩沖器238輸入它的源操作數(shù)信息。FPU 230輸出它的操作的結(jié)果(目的操作數(shù)信息)用來(lái)在浮點(diǎn)重命名緩沖器238中的選擇的登記項(xiàng)存儲(chǔ)。
為響應(yīng)裝載指令,LSU 228從數(shù)據(jù)高速緩沖存儲(chǔ)器216輸入信息并復(fù)制這樣的信息到所選擇的重命名緩存器234和238。如果這樣的信息未存儲(chǔ)在數(shù)據(jù)高速緩沖存儲(chǔ)器216中,那么數(shù)據(jù)高速緩沖存儲(chǔ)器216從連接到系統(tǒng)總線211的系統(tǒng)存儲(chǔ)器239(通過BIU 212和系統(tǒng)總線211)輸入這樣的信息。此外,數(shù)據(jù)高速緩沖存儲(chǔ)器216能夠從數(shù)據(jù)高速緩沖存儲(chǔ)器216到連接到系統(tǒng)總線211的系統(tǒng)存儲(chǔ)器239(通過BIU 212和系統(tǒng)總線211)輸出信息。為響應(yīng)存儲(chǔ)指令,LSU 228從GPR 232和FPR 236中選擇的一個(gè)輸入信息并復(fù)制這樣的信息到數(shù)據(jù)高速緩沖存儲(chǔ)器216。
定序器單元218輸入和輸出信息到和從GPR 232和FPR 236。分支單元220從定序器單元218輸入指令和信號(hào)指示處理器210的目前狀態(tài)。為響應(yīng)這樣的指令和信號(hào),分支單元220輸出信號(hào)(到定序器單元218)指示適當(dāng)?shù)拇鎯?chǔ)器地址,該存儲(chǔ)器地址存儲(chǔ)用于處理器210的執(zhí)行的指令序列。為響應(yīng)來(lái)自分支單元220的這樣的信號(hào),定序器單元218從指令高速緩沖存儲(chǔ)器214輸入指示的指令序列。如果一個(gè)或更多的指令序列未存儲(chǔ)于指令高速緩沖存儲(chǔ)器214,那么指令高速緩沖存儲(chǔ)器214從連接到系統(tǒng)總線211的系統(tǒng)存儲(chǔ)器239(通過BIU 212和系統(tǒng)總線211)輸入這樣的指令。
為響應(yīng)從指令高速緩沖存儲(chǔ)器214輸入的指令,定序器單元21 8選擇性地分派指令到所選擇的執(zhí)行單元220、222、224、226、228和230。每個(gè)執(zhí)行單元執(zhí)行特定的指令類的一個(gè)或更多的指令。例如,F(xiàn)XUA 222和FXUB 224對(duì)源操作數(shù)執(zhí)行第一類定點(diǎn)數(shù)學(xué)操作,如加、減、與、或和異或。CFXU 226對(duì)源操作數(shù)執(zhí)行第二類定點(diǎn)操作,如定點(diǎn)乘和除。FPU 230對(duì)源操作數(shù)執(zhí)行浮點(diǎn)操作,如浮點(diǎn)乘和除。
當(dāng)信息存儲(chǔ)于所選擇的重命名緩沖器234之一時(shí),這樣的信息與如由指令指定的存儲(chǔ)位置(如GPR 232或進(jìn)位比特(CA)寄存器242之一)相關(guān)聯(lián),所選擇的重命名緩沖器對(duì)該存儲(chǔ)位置分配。存儲(chǔ)于所選擇的重命名緩沖器234之一的信息被復(fù)制到它的相關(guān)聯(lián)的GPR 232(或CA寄存器242)之一,以響應(yīng)來(lái)自定序器單元218的信號(hào)。定序器單元218指揮(direct)存儲(chǔ)于所選擇的重命名緩沖器234之一的信息的這樣的復(fù)制,以響應(yīng)“完成”產(chǎn)生信息的指令。這樣的復(fù)制稱為“回寫”。
當(dāng)信息存儲(chǔ)于所選擇的重命名緩沖器238之一時(shí),這樣的信息與FPR 236之一相關(guān)聯(lián)。存儲(chǔ)于所選擇的重命名緩沖器238之一的信息被復(fù)制到它的相關(guān)聯(lián)的FPR 236之一,以響應(yīng)來(lái)自定序器單元218的信號(hào)。定序器單元218指揮存儲(chǔ)于所選擇的重命名緩沖器238之一的信息的這樣的復(fù)制,以響應(yīng)“完成”產(chǎn)生信息的指令。
處理器210通過在各種執(zhí)行單元220、222、224、226、228和230同時(shí)處理多個(gè)指令達(dá)到高性能。因此,每個(gè)指令作為階段的序列處理,每個(gè)階段可與其它指令的階段并行執(zhí)行。這樣的技術(shù)稱為“流水線(pipelining)”。在解說性的實(shí)施例的重要方面,指令通常作為六個(gè)階段處理,即取、解碼、分派、執(zhí)行、完成和回寫。
在取階段,定序器單元218選擇性地(從指令高速緩沖存儲(chǔ)器214)輸入一個(gè)或更多指令,該指令來(lái)自存儲(chǔ)指令的序列的一個(gè)或更多存儲(chǔ)器地址,指令的序列在上文與分支單元220和定序器單元218進(jìn)一步進(jìn)行了討論。
在解碼階段,定序器單元218對(duì)多達(dá)四個(gè)取到的指令解碼。
在分派階段,定序器單元218為分派的指令的結(jié)果(目的操作數(shù)信息)保留重命名緩沖器登記項(xiàng)后,選擇性地分派多達(dá)四個(gè)解碼的指令到選擇的(響應(yīng)于解碼階段的解碼)執(zhí)行單元220、222、224、226、228和230。在分派階段,操作數(shù)信息被提供給選擇的執(zhí)行單元用于分派的指令。處理器210按照指令編程的順序分派它們。
在執(zhí)行階段,執(zhí)行單元執(zhí)行其分派的指令并輸出其操作的結(jié)果(目的操作數(shù)信息),以存儲(chǔ)于重命名緩沖器234和重命名緩沖器238中所選擇的登記項(xiàng),如在上文進(jìn)一步討論的。以這種方式,相對(duì)于指令的編程順序,處理器210能夠次序顛倒地執(zhí)行指令。
在完成階段,定序器單元218指示指令“完成”。處理器210按照指令的編程的順序“完成”它們。
在回寫階段,定序器單元218分別指揮從重命名緩沖器234和238到GPR232和FPR 236的信息的復(fù)制。定序器單元218指揮存儲(chǔ)于所選擇的重命名緩沖器的信息的這樣的復(fù)制。同樣地,在特定指令的回寫階段,處理器210更新其架構(gòu)的狀態(tài)以相應(yīng)特定的指令。處理器210按照其編程的順序處理指令的各“回寫”階段。在特定的情形處理器210有益地合并指令的完成階段和回寫階段。
在說明性的實(shí)施例中,每個(gè)指令要求一個(gè)機(jī)器周期完成指令處理的每個(gè)階段。但是,一些指令(如由CFXU 226執(zhí)行的復(fù)定點(diǎn)指令)可能要求多于一個(gè)周期。因此,特定指令的執(zhí)行和完成階段之間可能產(chǎn)生可變的延遲以響應(yīng)前面的指令的完成要求的時(shí)間的變化。
定序器單元218內(nèi)提供完成緩沖器248以跟蹤正在執(zhí)行單元內(nèi)執(zhí)行的多個(gè)指令的完成。指示指令或指令組已經(jīng)成功地完成之后,以應(yīng)用指定的順序,完成緩沖器248可以用來(lái)開始傳輸那些完成的指令的結(jié)果到相關(guān)聯(lián)的通用寄存器。
另外,處理器210也包括性能監(jiān)視器單元240,它連接到指令高速緩沖存儲(chǔ)器214以及處理器210中的其它單元。利用性能監(jiān)視器單元240可以監(jiān)視處理器210的操作,性能監(jiān)視器單元240在這個(gè)說明性的實(shí)施例中是軟件可訪問的機(jī)制,該機(jī)制能夠提供描述利用指令執(zhí)行資源和存儲(chǔ)控制的詳細(xì)信息。雖然圖2中未說明,但性能監(jiān)視器單元240耦合到處理器210的每個(gè)功能單元以允許對(duì)處理器210的操作的所有方面的監(jiān)視,包括例如重建事件之間的關(guān)系、識(shí)別錯(cuò)誤的觸發(fā)、識(shí)別性能瓶頸、監(jiān)視流水線停止、監(jiān)視空閑處理器周期、確定分派效率、確定分支效率、確定未對(duì)準(zhǔn)的數(shù)據(jù)訪問的性能懲罰、識(shí)別序列化指令的執(zhí)行的頻率、識(shí)別抑制的中斷和確定性能效率。感興趣的事件也可以包括例如,指令解碼的時(shí)間、指令的執(zhí)行、分支事件、高速緩沖存儲(chǔ)器未命中和高速緩沖存儲(chǔ)器命中。
性能監(jiān)視器單元240包括計(jì)數(shù)器241-242的依賴于實(shí)現(xiàn)的數(shù)目(如2-8),標(biāo)注為PMC1和PMC2,它們用來(lái)對(duì)選擇的事件的發(fā)生計(jì)數(shù)。性能監(jiān)視器單元240進(jìn)而包括至少一個(gè)監(jiān)視器模式控制寄存器(MMCR)。在這個(gè)例子中,存在兩個(gè)控制寄存器,MMCR 243和244,指定計(jì)數(shù)器241-242的功能。計(jì)數(shù)器241-242和MMCR 243-244最好實(shí)現(xiàn)為SPR,它們對(duì)通過CFXU 226可執(zhí)行的MFSPR(從SPR移走)和MTSPR(移到SPR)指令的讀或?qū)懯强稍L問的。但是,在一個(gè)替代實(shí)施例中,計(jì)數(shù)器241-242和MMCR 243-244可以簡(jiǎn)單地實(shí)現(xiàn)為I/O空間中的地址。在另一個(gè)替代實(shí)施例中,控制寄存器和計(jì)數(shù)器可以通過索引寄存器間接地訪問。這個(gè)實(shí)施例在來(lái)自英特爾公司的處理器中的IA-64架構(gòu)中實(shí)現(xiàn)。
另外,處理器210還包括中斷單元250,它連接到指令高速緩沖存儲(chǔ)器214。另外,雖然未在圖2中顯示,中斷單元250連接到處理器210內(nèi)的其它功能單元。中斷單元250可從其它功能單元接收信號(hào)并初始化動(dòng)作,如開始誤差處理或俘獲(trap)過程。在這些例子中,使用中斷單元250產(chǎn)生中斷和異常,它們可能在程序的執(zhí)行期間產(chǎn)生。
在程序的執(zhí)行期間,本發(fā)明提供監(jiān)視特定指令的執(zhí)行以及特定存儲(chǔ)器位置的訪問的能力。特別地,空閑的域(field)可以用來(lái)保存指示器(indicator),它識(shí)別要由性能監(jiān)視器單元或處理器中的某個(gè)其它單元監(jiān)視的指令或存儲(chǔ)器位置?;蛘撸甘酒骺梢源鎯?chǔ)在與指令或存儲(chǔ)器位置相關(guān)聯(lián)的另一個(gè)位置。在指示器放在指令中的情況下,典型地使用空閑的域,但是在某些情況下,指令可以擴(kuò)展以包括指示器需要的空間。對(duì)這種情況,處理器的架構(gòu)可能要求變化。例如,64比特架構(gòu)可以變化到65比特架構(gòu)以容納指示器。關(guān)于數(shù)據(jù)的訪問,指示器可以與數(shù)據(jù)或數(shù)據(jù)所處的存儲(chǔ)器位置相關(guān)聯(lián)。
現(xiàn)在轉(zhuǎn)向圖3,根據(jù)本發(fā)明的優(yōu)選實(shí)施例,描述說明與指示器相關(guān)聯(lián)的處理指令中使用的部件的圖。指令高速緩沖存儲(chǔ)器300接收束302。指令高速緩沖存儲(chǔ)器300是圖2中的指令高速緩沖存儲(chǔ)器214的例子。束是指令的分組。這種類型的指令的分組典型地在可以從英特爾公司得到的IA-64處理器中發(fā)現(xiàn)。指令高速緩沖存儲(chǔ)器300處理用來(lái)執(zhí)行的指令。
作為這個(gè)指令的處理的一部分,指令高速緩沖存儲(chǔ)器300確定哪些指令與指示器相關(guān)聯(lián)。這些指示器在這些例子中也稱為“性能指示器”。信號(hào)304已經(jīng)與性能指示器相關(guān)聯(lián)。結(jié)果,用于指令的信號(hào)304被送到性能監(jiān)視器單元306。性能監(jiān)視器單元306是圖2中性能監(jiān)視器單元240的例子。
當(dāng)指令高速緩沖存儲(chǔ)器300確定存在與指示器相關(guān)的指令時(shí),發(fā)送信號(hào)以指示標(biāo)記的指令正在執(zhí)行。在這些例子中,標(biāo)記的指令是與性能指示器相關(guān)聯(lián)的指令?;蛘?,性能指示器可以指示束中的所有登記項(xiàng)或指令被標(biāo)記要計(jì)數(shù)。另外,用于這些指令的信號(hào)由指令高速緩沖存儲(chǔ)器300發(fā)送到適當(dāng)?shù)墓δ軉卧?。依賴于特定的?shí)現(xiàn),除了性能監(jiān)視器單元306的功能單元可以對(duì)指令的執(zhí)行計(jì)數(shù)。在性能指示器在指令或束中的情況,高速緩沖存儲(chǔ)器單元,指令高速緩沖存儲(chǔ)器300檢測(cè)指示器并發(fā)送信號(hào)到性能監(jiān)視器單元306。
當(dāng)用于這些指令的信號(hào)由性能監(jiān)視器單元306接收時(shí),性能監(jiān)視器單元306對(duì)與指令304的執(zhí)行相關(guān)聯(lián)的事件計(jì)數(shù)。如所說明的,僅對(duì)性能監(jiān)視器單元306編程從而為與性能指示器相關(guān)聯(lián)的指令對(duì)事件計(jì)數(shù)。換句話說,使用與指令或存儲(chǔ)器位置相關(guān)聯(lián)的指示器,以允許性能監(jiān)視器單元306對(duì)與指令或存儲(chǔ)器位置相關(guān)聯(lián)的事件計(jì)數(shù)。如果指令高速緩沖存儲(chǔ)器300而非性能指示器接收指令,那么不對(duì)與那個(gè)指令相關(guān)聯(lián)的事件計(jì)數(shù)??傊阅苤甘酒髟试S根據(jù)處理器中的指令或存儲(chǔ)器位置計(jì)數(shù)。
如果在一種模式中設(shè)置性能監(jiān)視器單元306以對(duì)為這些類型的標(biāo)記的指令允許的度量計(jì)數(shù),性能監(jiān)視器單元306為與性能指示器相關(guān)聯(lián)的指令對(duì)事件計(jì)數(shù)。在某些情況下,可以設(shè)置性能監(jiān)視器單元306以執(zhí)行某種其它類型的計(jì)數(shù),如對(duì)所有指令的執(zhí)行計(jì)數(shù),它是當(dāng)前可用的功能。
關(guān)于存儲(chǔ)器位置中的數(shù)據(jù)訪問,由數(shù)據(jù)高速緩沖存儲(chǔ)器,如圖2中的數(shù)據(jù)高速緩沖存儲(chǔ)器216,而不是指令高速緩沖存儲(chǔ)器對(duì)數(shù)據(jù)和指示器進(jìn)行處理。數(shù)據(jù)高速緩沖存儲(chǔ)器發(fā)送指示正在訪問標(biāo)記的存儲(chǔ)器位置的信號(hào)到性能監(jiān)視器單元306。標(biāo)記的存儲(chǔ)器位置類似于標(biāo)記的指令。這些類型的存儲(chǔ)器位置是與性能指示器相關(guān)聯(lián)的。
接下來(lái)轉(zhuǎn)向圖4,根據(jù)本發(fā)明的優(yōu)選實(shí)施例,顯示說明一種用于使性能指示器和指令或存儲(chǔ)器位置相關(guān)聯(lián)的機(jī)制的圖。處理器400從高速緩沖存儲(chǔ)器402接收指令。在這個(gè)例子中,指示器不隨指令存儲(chǔ)或存儲(chǔ)在其中發(fā)現(xiàn)數(shù)據(jù)的存儲(chǔ)器位置。而是,指示器存儲(chǔ)于單獨(dú)的存儲(chǔ)區(qū)域,性能儀器影子高速緩沖存儲(chǔ)器(performance instrumentation shadow cache)404。存儲(chǔ)可以是任何存儲(chǔ)設(shè)備,如例如系統(tǒng)存儲(chǔ)器、閃存、高速緩沖存儲(chǔ)器或盤。
當(dāng)處理器400從高速緩沖存儲(chǔ)器402接收指令時(shí),處理器400檢查性能儀器影子高速緩沖存儲(chǔ)器404以了解是否性能指示器與指令相關(guān)聯(lián)。對(duì)于包含數(shù)據(jù)的存儲(chǔ)器位置的訪問進(jìn)行類似的檢查。在一個(gè)實(shí)施例中,為不影響實(shí)際的數(shù)據(jù)段的每個(gè)相應(yīng)字提供整個(gè)影子字。換句話說,處理器400考慮高速緩沖存儲(chǔ)器402的架構(gòu)或配置保持不變。在這些例子中,描述的映射是字對(duì)字。但是,可以使用某種其它類型的映射,如每數(shù)據(jù)字一個(gè)影子比特,其中性能儀器影子高速緩沖存儲(chǔ)器404中的一個(gè)比特對(duì)應(yīng)于一個(gè)數(shù)據(jù)字。
關(guān)于這種類型的架構(gòu),使用這個(gè)特征的編譯器在與它們自身的數(shù)據(jù)區(qū)域分離的工作區(qū)域、以類似于調(diào)試符號(hào)的方式產(chǎn)生調(diào)試信息。當(dāng)裝載模塊時(shí),附加的信息,性能指示器由裝載者準(zhǔn)備,使得當(dāng)指令被裝入高速緩沖存儲(chǔ)器402時(shí),并入性能儀器影子高速緩沖存儲(chǔ)器404將是可用的。這些高速緩沖存儲(chǔ)器區(qū)域可以是混合的,并且或者如這樣標(biāo)記,或者由操作模式理解。處理器400使用性能指示器確定如何對(duì)有關(guān)的數(shù)據(jù)訪問和指令執(zhí)行計(jì)數(shù)或使得產(chǎn)生異常。在這些例子中,由調(diào)試器或性能分析程序?qū)^程編程,以分辨當(dāng)它執(zhí)行指令時(shí)是否使用影子信息。
接下來(lái)轉(zhuǎn)向圖5,根據(jù)本發(fā)明的優(yōu)選實(shí)施例顯示說明束的圖。束500包含指令時(shí)隙502、指令時(shí)隙504、指令時(shí)隙506和模板508。如說明的,束500包含128個(gè)比特。每個(gè)指令時(shí)隙包含41個(gè)比特,模板508包含5個(gè)比特。模板508用來(lái)識(shí)別當(dāng)前束內(nèi)的停止并映射時(shí)隙內(nèi)的指令到不同類型的執(zhí)行單元。
束500中的空閑比特用來(lái)保存本發(fā)明的指示器。例如,指示器510、512和514分別位于指令時(shí)隙502、504和506內(nèi)。依賴于特定的實(shí)現(xiàn),這些指示器可以采用各種形式并且可以采用各種大小。指示器可以使用單個(gè)比特或可以使用多個(gè)比特。單個(gè)比特可以用來(lái)指示事件要被計(jì)數(shù)以響應(yīng)那個(gè)指令的執(zhí)行。多個(gè)比特可以用來(lái)識(shí)別閾值,如用于指令執(zhí)行的處理器或時(shí)鐘周期的數(shù)目,它可以在事件應(yīng)該計(jì)數(shù)之前傳遞。進(jìn)而,這些比特甚至可以用作特定指令的計(jì)數(shù)器。類似的域的使用可以用于標(biāo)記數(shù)據(jù)或存儲(chǔ)器位置的指示器。
或者,模板508可以用于包含一束有關(guān)的指示器,使得一個(gè)比特用來(lái)識(shí)別束中的所有指令。同樣地,束自身可以擴(kuò)展到256個(gè)比特或某個(gè)其它數(shù)目的比特以包含額外的信息用于性能指示器。
接下來(lái)轉(zhuǎn)向圖6A和6B,根據(jù)本發(fā)明的優(yōu)選實(shí)施例,顯示包含性能指示器的子程序和包含性能指示器的數(shù)據(jù)的圖。在這個(gè)例子中,圖6A中的子程序600包括許多指令,其中,指令602、604和606與性能指示器相關(guān)聯(lián)。這些指令也稱為標(biāo)記的指令。當(dāng)執(zhí)行這些指令時(shí),對(duì)與這些指令相關(guān)聯(lián)的事件計(jì)數(shù)以得到用于軟件工具的數(shù)據(jù)從而分析執(zhí)行子程序600的數(shù)據(jù)處理系統(tǒng)的性能。
數(shù)據(jù)或包含數(shù)據(jù)的存儲(chǔ)器位置可以以類似的方式用指示器標(biāo)記。這些指示器用于對(duì)這些例子中的數(shù)據(jù)或存儲(chǔ)器位置的訪問的計(jì)數(shù)。在圖6B中,數(shù)據(jù)610包括與性能指示器相關(guān)聯(lián)的數(shù)據(jù)。數(shù)據(jù)612和數(shù)據(jù)614是數(shù)據(jù)610的與性能指示器相關(guān)聯(lián)的部分。這些與性能指示器相關(guān)聯(lián)的數(shù)據(jù)的部分也稱為標(biāo)記的數(shù)據(jù)。
現(xiàn)在轉(zhuǎn)向圖7,根據(jù)本發(fā)明的優(yōu)選實(shí)施例,顯示用于處理包含性能指示器的指令的過程的流程圖。圖7中說明的過程可以在指令高速緩沖存儲(chǔ)器中實(shí)現(xiàn),如圖2中的指令高速緩沖存儲(chǔ)器214。
過程由接收束開始(步驟700)。在這些例子中,每個(gè)束具有與圖5中的束500相似的格式。識(shí)別束中的指令(步驟702)。關(guān)于是否存在與指令相關(guān)聯(lián)的性能指示器進(jìn)行確定(步驟704)。這個(gè)確定可以通過檢查指令或束中的適當(dāng)?shù)挠蜻M(jìn)行。或者,可以檢查性能儀器影子高速緩沖存儲(chǔ)器,如圖4中的性能儀器影子高速緩沖存儲(chǔ)器404以了解是否性能指示器與指令相關(guān)聯(lián)。
如果存在性能指示器,信號(hào)被送到性能監(jiān)視器單元(步驟706)。接收這個(gè)信號(hào)后,性能監(jiān)視器單元將對(duì)與指令的執(zhí)行相關(guān)聯(lián)的事件計(jì)數(shù)。另外,處理指令(步驟708)。指令的處理包括,例如發(fā)送指令到適合的功能單元用于執(zhí)行。
其后,關(guān)于是否束中存在額外的未處理的指令進(jìn)行確定(步驟710)。如果束中存在額外的未處理的指令,如上所述過程返回到步驟702。否則,過程結(jié)束。轉(zhuǎn)回到步驟704,如果不存在性能指示器,過程直接前進(jìn)到步驟708。
現(xiàn)在轉(zhuǎn)向圖8,根據(jù)本發(fā)明的優(yōu)選實(shí)施例,顯示用于選擇性地發(fā)送信號(hào)到中斷單元的過程的流程圖。圖8中說明的過程可以在指令高速緩沖存儲(chǔ)器如圖2中的指令高速緩沖存儲(chǔ)器242中實(shí)現(xiàn)。在使用性能監(jiān)視器單元監(jiān)視事件可能丟失某些事件的情況下使用這個(gè)過程。例如,性能監(jiān)視器單元對(duì)事件計(jì)數(shù)。當(dāng)高速緩沖存儲(chǔ)器丟失發(fā)生時(shí),發(fā)送信號(hào)到性能監(jiān)視器單元。當(dāng)用于相應(yīng)的高速緩沖存儲(chǔ)器行的元數(shù)據(jù)(meat data)裝入高速緩沖存儲(chǔ)器時(shí),也產(chǎn)生適當(dāng)?shù)男盘?hào)或多個(gè)信號(hào)。如果元數(shù)據(jù)指示要產(chǎn)生異常,那么發(fā)送信號(hào)到中斷單元,其中信號(hào)指示要產(chǎn)生異常。
過程由接收束開始(步驟800)。識(shí)別束中的指令(步驟802)。關(guān)于是否存在與指令相關(guān)聯(lián)的性能指示器進(jìn)行確定(步驟804)。發(fā)送到中斷單元指示異常要產(chǎn)生的信號(hào)不同于發(fā)送到性能監(jiān)視器單元的信號(hào)。例如,指令可能與具有使信號(hào)發(fā)送到中斷單元的第一個(gè)值的特定的性能指示器相關(guān)聯(lián)。用于性能指示器的第二個(gè)值可以用來(lái)發(fā)送不同的信號(hào)到性能監(jiān)視器單元。如果存在具有第一個(gè)值的性能指示器,信號(hào)發(fā)送到中斷單元(步驟806)。接收這個(gè)信號(hào)后,中斷單元發(fā)起適當(dāng)?shù)恼{(diào)用流支持以處理這個(gè)中斷。調(diào)用流支持可以,例如,記錄可能被試圖訪問高速緩沖存儲(chǔ)器中的指令或數(shù)據(jù)的功能單元丟失的高速緩沖存儲(chǔ)器丟失。
另外,處理指令(步驟808)。指令的處理包括,例如,發(fā)送指令到適當(dāng)?shù)墓δ軉卧糜趫?zhí)行。
其后,關(guān)于是否束中存在額外的未處理的指令進(jìn)行確定(步驟810)。如果束中存在額外的未處理的指令,如上所述過程返回到步驟802。否則,過程結(jié)束。轉(zhuǎn)回到步驟804,如果不存在性能指示器,過程直接前進(jìn)到步驟808。
現(xiàn)在參考圖9,根據(jù)本發(fā)明的優(yōu)選實(shí)施例,顯示這樣的過程的流程圖,該過程用于產(chǎn)生中斷以響應(yīng)與性能指示器相關(guān)聯(lián)的存儲(chǔ)器位置的訪問。圖9中說明的過程可以在數(shù)據(jù)高速緩沖存儲(chǔ)器中實(shí)現(xiàn),如圖2中的數(shù)據(jù)高速緩沖存儲(chǔ)器246。
過程由識(shí)別訪問存儲(chǔ)器位置的請(qǐng)求開始(步驟900)。響應(yīng)識(shí)別這個(gè)請(qǐng)求,關(guān)于是否性能指示器與存儲(chǔ)器位置相關(guān)聯(lián)進(jìn)行確定(步驟902)。如果性能指示器與存儲(chǔ)器位置相關(guān)聯(lián),通過發(fā)送信號(hào)到中斷單元產(chǎn)生中斷(步驟904)。其后,處理對(duì)存儲(chǔ)器位置的訪問(步驟906),其后過程結(jié)束。
在圖10中,根據(jù)本發(fā)明的優(yōu)選實(shí)施例,顯示用于對(duì)事件計(jì)數(shù)的過程的流程圖。圖10中說明的過程可以在性能監(jiān)視器單元如圖2中的性能監(jiān)視器單元240實(shí)現(xiàn)。
過程由從指令高速緩沖存儲(chǔ)器接收信號(hào)開始,該信號(hào)指示正在處理具有性能指示器的指令(步驟1000)。接下來(lái),對(duì)與正在處理的指令相關(guān)聯(lián)的事件計(jì)數(shù)(步驟1002),其后,過程結(jié)束。事件的計(jì)數(shù)可以存儲(chǔ)在計(jì)數(shù)器中,如圖2中的計(jì)數(shù)器241。
接下來(lái)參考圖11,根據(jù)本發(fā)明的優(yōu)選實(shí)施例,顯示用于指令的選擇性計(jì)數(shù)的過程的流程圖。圖11中說明的過程可以在指令高速緩沖存儲(chǔ)器中實(shí)現(xiàn),如圖2中的指令高速緩沖存儲(chǔ)器214。
過程由確定是否已經(jīng)接收與性能指示器相關(guān)聯(lián)的指令開始(步驟1100)。在這個(gè)例子中,指示器導(dǎo)致用于由處理器執(zhí)行的這個(gè)指令和所有隨后的指令的事件的計(jì)數(shù)?;蛘?,指示器可能是指令自身,它指示要開始計(jì)數(shù)的新的模式。如果已經(jīng)接收具有指示器的指令,設(shè)置標(biāo)志以開始用于指令的事件計(jì)數(shù)(步驟1102)。這個(gè)標(biāo)志指示用于指令的事件計(jì)數(shù)應(yīng)該開始。
接下來(lái),關(guān)于是否已經(jīng)接收具有指示器的指令進(jìn)行確定(步驟1104)?;蛘撸甘酒骺赡苁侵噶钭陨?,它指示要停止計(jì)數(shù)的新的模式。如果接收具有指示器的指令,不設(shè)置標(biāo)志以停止對(duì)事件的計(jì)數(shù)(步驟1106),其后過程結(jié)束。
步驟1100和步驟1104的指示器可以是同一指示器,其中指示器觸發(fā)標(biāo)志的設(shè)置和去除設(shè)置。在另一種實(shí)現(xiàn)中,可以使用兩個(gè)不同的指示器,其中第一個(gè)指示器僅設(shè)置標(biāo)記。第二個(gè)指示器用來(lái)去除設(shè)置標(biāo)記。當(dāng)計(jì)數(shù)要發(fā)生時(shí)用高信號(hào),當(dāng)計(jì)數(shù)不再允許時(shí)用低信號(hào),可以簡(jiǎn)單地實(shí)現(xiàn)高速緩沖存儲(chǔ)器單元,如指令高速緩沖存儲(chǔ)器或數(shù)據(jù)高速緩沖存儲(chǔ)器,以及指示計(jì)數(shù)的模式的性能監(jiān)視器單元之間的通信。
接下來(lái)參考圖12,根據(jù)本發(fā)明的優(yōu)選實(shí)施例,顯示用于指令的選擇性計(jì)數(shù)的過程的流程圖。圖12中說明的過程可以在指令高速緩沖存儲(chǔ)器中實(shí)現(xiàn),如圖2中的指令高速緩沖存儲(chǔ)器214。
過程由檢查標(biāo)記開始(步驟1200)。關(guān)于是否設(shè)置標(biāo)記進(jìn)行確定(步驟1202)。如果設(shè)置標(biāo)記,發(fā)送信號(hào)到性能監(jiān)視器單元從而使這個(gè)單元能夠?qū)κ录?jì)數(shù)(步驟1204),其后過程結(jié)束。否則,發(fā)送信號(hào)到性能監(jiān)視器單元從而禁止對(duì)事件計(jì)數(shù)(步驟1206),其后過程結(jié)束。
圖11和圖12中說明的過程在指令與性能指示器相關(guān)聯(lián)后為所有指令對(duì)事件計(jì)數(shù)。以這種方式,可以用較少的比特觸發(fā)事件的計(jì)數(shù)。進(jìn)而,通過所有指令的計(jì)數(shù),可以對(duì)與對(duì)外部子程序的調(diào)用相關(guān)聯(lián)的事件計(jì)數(shù)。
現(xiàn)在轉(zhuǎn)向圖13,根據(jù)本發(fā)明的優(yōu)選實(shí)施例,顯示用于識(shí)別超過閾值的指令的過程的流程圖。圖13說明的過程可以在指令高速緩沖存儲(chǔ)器中實(shí)現(xiàn),如圖2中的指令高速緩沖存儲(chǔ)器214。
過程由接收與性能指示器相關(guān)聯(lián)的指令開始(步驟1300)。為指令識(shí)別閾值(步驟1302)。在這些例子中,閾值涉及一些完成指令需要的處理器或時(shí)鐘周期。如果高速緩沖存儲(chǔ)器延遲或訪問高速緩沖存儲(chǔ)器需要的時(shí)間量超過閾值,就對(duì)那個(gè)事件計(jì)數(shù)。在這些例子中在指示器內(nèi)設(shè)置閾值。
例如,可以用3個(gè)比特為閾值設(shè)置8個(gè)不同的值。例如,“xx1”=10周期,“x1x”=50周期,而“1xx”=100周期??梢允褂眠@3個(gè)比特的一些組合為閾值設(shè)置值??梢允褂酶嗷蚋俚谋忍兀⑶乙蕾囉谔囟ǖ膶?shí)現(xiàn)可以分配給比特不同的值。比特的意義也可以通過接口控制,如可以用來(lái)設(shè)置每個(gè)比特的意義的一組寄存器。這些寄存器是為這個(gè)特定目的增加到處理器架構(gòu)中的寄存器。
監(jiān)視用于執(zhí)行指令的周期(步驟1304)。關(guān)于對(duì)這個(gè)指令是否已經(jīng)超過閾值進(jìn)行確定(步驟1306)。如果已經(jīng)超過閾值,那么執(zhí)行選擇的動(dòng)作(步驟1308)。依賴于特定的實(shí)現(xiàn),這個(gè)選擇的動(dòng)作可以采取不同的形式。例如,每次超過閾值可以增加計(jì)數(shù)器?;蛘?,可以產(chǎn)生中斷。中斷可以傳遞控制到另一個(gè)過程以收集數(shù)據(jù)。例如,這個(gè)數(shù)據(jù)可以包括調(diào)用堆棧和關(guān)于調(diào)用堆棧的信息。堆棧是保留的存儲(chǔ)器區(qū)域,其中程序存儲(chǔ)狀態(tài)數(shù)據(jù),如過程或函數(shù)調(diào)用地址、傳遞的參數(shù)、性能監(jiān)視器計(jì)數(shù)器值,以及有時(shí)的局部變量。
關(guān)于是否監(jiān)視要結(jié)束進(jìn)行確定(步驟1310)。一次一個(gè)指令可以實(shí)現(xiàn)步驟1310。當(dāng)執(zhí)行指令或超過閾值時(shí),發(fā)送信號(hào)。在這個(gè)例子中,單個(gè)指令的執(zhí)行引起發(fā)送一個(gè)信號(hào)。在可以同時(shí)執(zhí)行多個(gè)指令的情況下,可能需要多個(gè)信號(hào)以指示每個(gè)指令的執(zhí)行。在一些實(shí)施例中,可以支持采樣方法,其中只對(duì)每次一個(gè)指令支持閾值。通過只對(duì)那些位于處理器的指令隊(duì)列中特定位置的指令支持閾值可以實(shí)現(xiàn)這一點(diǎn)。在其它實(shí)施例中,如果標(biāo)記的指令的至少之一超過閾值,可以發(fā)送一個(gè)信號(hào)。對(duì)超過閾值的每條指令,為那條指令發(fā)出(raise)或產(chǎn)生單獨(dú)的信號(hào)。
如果監(jiān)視要結(jié)束,發(fā)送收集的信息到監(jiān)視程序(步驟1312),其后過程結(jié)束。否則,如上所述過程返回步驟1304。在步驟1306,如果對(duì)那條指令沒有超過閾值,過程直接前進(jìn)到步驟1310。
在數(shù)據(jù)高速緩沖存儲(chǔ)器如圖2中的數(shù)據(jù)高速緩沖存儲(chǔ)器216中,可以實(shí)現(xiàn)類似的過程以監(jiān)視對(duì)存儲(chǔ)器位置的訪問。圖13闡明的過程可以適用于識(shí)別訪問存儲(chǔ)器位置中的數(shù)據(jù)需要的周期。當(dāng)訪問存儲(chǔ)器位置中的數(shù)據(jù)需要的時(shí)間量超過特定的閾值時(shí),隨著指令的執(zhí)行產(chǎn)生計(jì)數(shù)或產(chǎn)生中斷。
對(duì)于其它例子,作為指令的一部分或隨著存儲(chǔ)器位置中的數(shù)據(jù)可以包含這些指示器?;蛘?,在與指令或數(shù)據(jù)關(guān)聯(lián)的性能儀器影子高速緩沖存儲(chǔ)器或存儲(chǔ)器中可以發(fā)現(xiàn)這些指示器。
參考圖14,根據(jù)本發(fā)明的優(yōu)選實(shí)施例,顯示用于監(jiān)視對(duì)存儲(chǔ)器位置的訪問的過程的流程圖。在數(shù)據(jù)高速緩沖存儲(chǔ)器,如圖2中的數(shù)據(jù)高速緩沖存儲(chǔ)器216中可以實(shí)現(xiàn)圖14中闡明的過程。這個(gè)過程用于計(jì)數(shù)對(duì)存儲(chǔ)器位置中的數(shù)據(jù)的訪問。
由接收與性能指示器相關(guān)聯(lián)的數(shù)據(jù)開始過程(步驟1400)。關(guān)于是否已經(jīng)訪問用于數(shù)據(jù)的存儲(chǔ)器位置進(jìn)行確定(步驟1402)。如果已經(jīng)訪問存儲(chǔ)器位置,那么計(jì)數(shù)器增加(步驟1404)。關(guān)于是否監(jiān)視要結(jié)束進(jìn)行確定(步驟1406)。如果存儲(chǔ)器位置的監(jiān)視要結(jié)束,過程結(jié)束。否則,過程返回到步驟1402。在步驟1402,如果未訪問存儲(chǔ)器位置,那么過程前進(jìn)到步驟1406。
轉(zhuǎn)到圖15,根據(jù)本發(fā)明的優(yōu)選實(shí)施例,顯示方塊圖,該方塊圖說明用于產(chǎn)生元數(shù)據(jù)如性能指示器的部件。編譯器支持嵌入到源碼中的指示要產(chǎn)生的元數(shù)據(jù)的指令。編譯器1500可以產(chǎn)生用于執(zhí)行的指令1502或用于監(jiān)視的元數(shù)據(jù)。當(dāng)指令或數(shù)據(jù)高速緩沖存儲(chǔ)器頁(yè)裝入存儲(chǔ)器中時(shí),操作系統(tǒng)程序裝載器/鏈接器和/或性能監(jiān)視程序讀取由編譯器1500產(chǎn)生的元數(shù)據(jù),并且裝載元數(shù)據(jù)到存儲(chǔ)器如這些例子中的性能監(jiān)視器部分1506中。該部分本身標(biāo)記為元數(shù)據(jù)1504。處理器可以以在性能監(jiān)視器部分1506中的編譯器產(chǎn)生部分?jǐn)?shù)據(jù)的格式接受元數(shù)據(jù)1504,并且將數(shù)據(jù)裝到處理器的內(nèi)部性能儀器影子高速緩沖存儲(chǔ)器。參考下面的圖17描述面向塊的方法。
在一個(gè)實(shí)施例中,格式僅僅對(duì)其每個(gè)塊或扇區(qū)參考包含性能儀器影子高速緩沖存儲(chǔ)器登記項(xiàng),并且移動(dòng)元數(shù)據(jù)1504到其相應(yīng)的影子登記項(xiàng)或各登記項(xiàng)。高速緩沖存儲(chǔ)器自身的內(nèi)部的格式可以修改以包含元數(shù)據(jù)1504,而不是包含性能儀器影子高速緩沖存儲(chǔ)器。在修改指令流自身以包含元數(shù)據(jù)的實(shí)施例中,那么不是裝載器更新指令流以包含適當(dāng)?shù)闹甘酒骱凸ぷ鲄^(qū)域,就是編譯器1500已經(jīng)產(chǎn)生代碼以包含元數(shù)據(jù)1504。在任何一種情況,在裝載代碼后,處理器接收元數(shù)據(jù)1504。
另外,元數(shù)據(jù)1504可以與指令1502關(guān)聯(lián)放入性能儀器影子存儲(chǔ)器1505。編譯器1500在表中或調(diào)試數(shù)據(jù)部分產(chǎn)生信息。性能監(jiān)視程序?qū)⑦@個(gè)信息裝入性能儀器影子存儲(chǔ)器1505中的影子數(shù)據(jù)區(qū)域?;蛘?,由共同工作的操作系統(tǒng)和處理器,可以自動(dòng)裝載(populate)調(diào)試區(qū)域。
然后可以由處理器1508執(zhí)行指令1502。編譯器1500可以在處理器1508中設(shè)置寄存器,如模式寄存器1510。當(dāng)設(shè)置這個(gè)寄存器時(shí),處理器1508在執(zhí)行指令1502時(shí)察看性能儀器影子存儲(chǔ)器1505中的元數(shù)據(jù)1504,以確定元數(shù)據(jù)1504中的性能指示器是否與指令1502中正在執(zhí)行的指令相關(guān)聯(lián)。使用如上述那些參考圖2-14的過程處理性能指示器。如果為設(shè)置模式寄存器1510,那么當(dāng)執(zhí)行指令1502時(shí)忽略元數(shù)據(jù)1504。
對(duì)于存儲(chǔ)器位置1512中的數(shù)據(jù)可以執(zhí)行類似的過程。依賴于特定的實(shí)現(xiàn),元數(shù)據(jù)1504可以放入指令內(nèi)或數(shù)據(jù)內(nèi),而不是性能儀器影子存儲(chǔ)器1505中。但是,通過將元數(shù)據(jù)1504放到性能儀器影子存儲(chǔ)器1505中,當(dāng)將元數(shù)據(jù)1504放到性能儀器影子存儲(chǔ)器1505中時(shí),可以動(dòng)態(tài)地進(jìn)行元數(shù)據(jù)1504的產(chǎn)生。
這個(gè)特征考慮指令的選擇和監(jiān)視發(fā)生而不必修改程序。換句話說,指令1502已經(jīng)為處理器1508執(zhí)行被編譯之后,編譯器1500可以產(chǎn)生元數(shù)據(jù)1504。設(shè)置模式寄存器1510引起處理器1508在性能儀器影子存儲(chǔ)器1505中尋找元數(shù)據(jù)1504而不必修改指令1502。在這些例子中,元數(shù)據(jù)1504采用性能指示器的形式,它表明處理器1508如何處理指令1502的執(zhí)行和/或?qū)Υ鎯?chǔ)器位置1512的數(shù)據(jù)訪問。
接下來(lái)轉(zhuǎn)向圖16,根據(jù)本發(fā)明的優(yōu)選實(shí)施例,顯示說明元數(shù)據(jù)的圖。元數(shù)據(jù)1600是圖15中的元數(shù)據(jù)1504的例子。這個(gè)元數(shù)據(jù)由如編譯器1500的編譯器產(chǎn)生。
在這個(gè)例子中,元數(shù)據(jù)1600包含5個(gè)登記項(xiàng),登記項(xiàng)1602、1604、1606、1608和1610,如元數(shù)據(jù)1600中行1612所指示的。這些登記項(xiàng)的每個(gè)包含用于描述這個(gè)例子中代碼的方法(instrumentation)的標(biāo)記、長(zhǎng)度和偏置。
登記項(xiàng)1602具有0偏置和120字節(jié)的登記項(xiàng)長(zhǎng)度。標(biāo)記1614指示由登記項(xiàng)長(zhǎng)度1616指示的范圍內(nèi)的所有指令需要計(jì)數(shù)。在這些例子中,每個(gè)指令具有4字節(jié)的長(zhǎng)度。登記項(xiàng)1604具有對(duì)應(yīng)于指令的4字節(jié)登記項(xiàng)長(zhǎng)度。標(biāo)記1618指示執(zhí)行這個(gè)指令時(shí)應(yīng)該產(chǎn)生異常。
在登記項(xiàng)1606中,以160字節(jié)偏置開始的指令與標(biāo)記1620相關(guān)聯(lián)。這個(gè)標(biāo)記指示如果超過閾值100周期,應(yīng)該對(duì)指令計(jì)數(shù)。
登記項(xiàng)1608中的標(biāo)記1622指示跟蹤應(yīng)該在具有256字節(jié)的偏置的指令處開始。如登記項(xiàng)1610中的標(biāo)記1624所指示的,跟蹤停止,該登記項(xiàng)1610具有用于512字節(jié)偏置處的指令的標(biāo)記。
這些標(biāo)記用來(lái)產(chǎn)生與指令相關(guān)聯(lián)的性能指示器。操作系統(tǒng)移動(dòng)這個(gè)由編譯器產(chǎn)生的元數(shù)據(jù)并將元數(shù)據(jù)處理到性能儀器影子高速緩沖存儲(chǔ)器中,如圖15中的性能儀器影子高速緩沖存儲(chǔ)器1506。或者,依賴于特定的實(shí)現(xiàn),這個(gè)元數(shù)據(jù)可以放入指令內(nèi)的域中。
現(xiàn)在參考圖17,根據(jù)本發(fā)明的優(yōu)選實(shí)施例,顯示說明涉及裝載和維護(hù)性能儀器影子高速緩沖存儲(chǔ)器的部件的圖。在這個(gè)例子中,現(xiàn)有的高速緩沖存儲(chǔ)器1700包含主段1702。主段1702包括塊1704、1706、1708、1710、1712、1714、1716、1718、1720、1722和1724。轉(zhuǎn)換表1726用于為主段1702中的塊1704-1724提供到perfint段1728中的塊的映射。這個(gè)段中的數(shù)據(jù)放入新的性能儀器影子高速緩沖存儲(chǔ)器1730。
在程序編譯時(shí),編譯器產(chǎn)生如上述的新的性能儀器數(shù)據(jù)部分。在程序裝載時(shí),裝載器查詢處理器以確定高速緩沖存儲(chǔ)器行大小。裝載器解析perfint段1728,并且對(duì)裝載器裝載的任何文本和數(shù)據(jù)段,以處理器需要的格式構(gòu)造影子段。該影子段放入新的性能儀器影子高速緩沖存儲(chǔ)器1730。
影子段中的每個(gè)塊包含元數(shù)據(jù)用于對(duì)應(yīng)的主高速緩沖存儲(chǔ)器塊中的指令和數(shù)據(jù)。這個(gè)元數(shù)據(jù)包括例如,標(biāo)記、標(biāo)簽域、閾值和用于主段1702中的塊中的每個(gè)加標(biāo)簽的項(xiàng)的計(jì)數(shù)域。這個(gè)元數(shù)據(jù)也包括表示塊中的所有指令和數(shù)據(jù)的標(biāo)記。
裝載器為主段1702中的每個(gè)塊到對(duì)應(yīng)的perfint塊,如perfint段1728中的塊1732、1734、1736、1738、1740、1742、1744、1746、1748、1750和1752構(gòu)造表映射,轉(zhuǎn)換表1726。進(jìn)而,裝載器用處理器登記轉(zhuǎn)換表1726、這個(gè)表的頭和主段1702的位置和大小。
在頁(yè)交換時(shí),換頁(yè)軟件提供新的接口使perfint段1728與對(duì)應(yīng)的主段即主段1702相關(guān)聯(lián)。當(dāng)主段1702換頁(yè)入或換頁(yè)出時(shí),perfint段1728也換頁(yè)入或換頁(yè)出。
在高速緩沖存儲(chǔ)器行交換時(shí)間,處理器包含新的性能儀器影子高速緩沖存儲(chǔ)器1730,高速緩沖存儲(chǔ)器幀直接與現(xiàn)有的數(shù)據(jù)和指令高速緩沖存儲(chǔ)器,如現(xiàn)有的高速緩沖存儲(chǔ)器1700中的幀相關(guān)聯(lián)。當(dāng)處理器的指令或數(shù)據(jù)高速緩沖存儲(chǔ)器裝載新的行時(shí),高速緩沖存儲(chǔ)器也必須裝載相應(yīng)的perfint塊到性能儀器影子高速緩沖存儲(chǔ)器,即新的性能儀器影子高速緩沖存儲(chǔ)器1730中。處理器(從裝載器在程序裝載時(shí)給出的登記數(shù)據(jù))看到處理器正在將塊帶入到具有相關(guān)聯(lián)的perfint段,即perfint段1728的其高速緩沖存儲(chǔ)器。處理器查詢與這個(gè)段相關(guān)聯(lián)的轉(zhuǎn)換表1726,找到對(duì)與它要裝載的塊對(duì)應(yīng)的perfint塊的引用,并將perfint塊裝載到新的性能儀器影子高速緩沖存儲(chǔ)器1730中。在這些例子中,與元數(shù)據(jù)相關(guān)聯(lián)的高速緩沖存儲(chǔ)器遺漏(miss)不用信號(hào)通知,或與主高速緩沖存儲(chǔ)器塊,如主段1702中的數(shù)據(jù)相關(guān)聯(lián)的高速緩沖存儲(chǔ)器遺漏進(jìn)行不同的處理。
現(xiàn)在參考圖18,根據(jù)本發(fā)明的優(yōu)選實(shí)施例,顯示為指令產(chǎn)生元數(shù)據(jù)的過程的流程圖。圖18中說明的過程可以由性能監(jiān)視程序?qū)崿F(xiàn)。
過程由識(shí)別用于剖面的指令開始(步驟1800)。這個(gè)指令可以是,例如,已經(jīng)執(zhí)行超過所選擇的次數(shù)的指令。為所識(shí)別的指令產(chǎn)生元數(shù)據(jù)(步驟1802)。這個(gè)元數(shù)據(jù)采用性能指示器的形式。性能指示器可以,例如,每次執(zhí)行指令時(shí)增大計(jì)數(shù)器;如果執(zhí)行指令需要的周期數(shù)超過閾值就增大計(jì)數(shù)器;為這個(gè)指令后的所有事件觸發(fā)用于所有指令的事件的計(jì)數(shù);或者對(duì)響應(yīng)執(zhí)行指令而發(fā)生的事件計(jì)數(shù)。在優(yōu)選實(shí)施例中,計(jì)數(shù)器在相關(guān)聯(lián)的性能儀器影子高速緩沖存儲(chǔ)器中,并占用一定數(shù)目的比特從而考慮高速緩沖存儲(chǔ)器中的數(shù)據(jù)或指令與為計(jì)數(shù)保留的比特之間的一對(duì)一的對(duì)應(yīng)。
然后元數(shù)據(jù)與指令相關(guān)聯(lián)(步驟1804)。接下來(lái),關(guān)于是否存在更多的用于處理的指令進(jìn)行確定(步驟1806)。如果存在另外的指令,處理返回到步驟1800。否則,過程結(jié)束。相似的過程可以用來(lái)動(dòng)態(tài)地產(chǎn)生元數(shù)據(jù)用于存儲(chǔ)器位置中的數(shù)據(jù)。
現(xiàn)在參考圖19,根據(jù)本發(fā)明的優(yōu)選實(shí)施例,顯示為存儲(chǔ)器位置產(chǎn)生元數(shù)據(jù)的過程的流程圖。圖19中說明的過程可以在編譯器如圖15中的編譯器1500中實(shí)現(xiàn)。
過程由識(shí)別用于剖面的存儲(chǔ)器位置開始(步驟1900)。步驟1900通過檢測(cè)對(duì)標(biāo)記的位置的訪問開始。為已識(shí)別的存儲(chǔ)器位置產(chǎn)生元數(shù)據(jù)(步驟1902)。這個(gè)元數(shù)據(jù)采用性能指示器的形式。性能指示器可以,例如,每次訪問存儲(chǔ)器位置時(shí)增大計(jì)數(shù)器;如果訪問存儲(chǔ)器位置需要的周期數(shù)超過閾值就增大計(jì)數(shù)器;或者觸發(fā)所有對(duì)存儲(chǔ)器位置訪問的計(jì)數(shù)。然后元數(shù)據(jù)與存儲(chǔ)器位置相關(guān)聯(lián)(步驟1904)。接下來(lái),關(guān)于是否存在更多的存儲(chǔ)器位置用于處理進(jìn)行確定(步驟1906)。如果存在另外的存儲(chǔ)器位置,處理返回到步驟1900。否則,過程結(jié)束。
現(xiàn)在轉(zhuǎn)向圖20,根據(jù)本發(fā)明的優(yōu)選實(shí)施例,顯示為特定指令的執(zhí)行計(jì)數(shù)的過程的流程圖。圖20中說明的過程可以在指令高速緩沖存儲(chǔ)器,如圖2中的指令高速緩沖存儲(chǔ)器214中實(shí)現(xiàn)。
過程由執(zhí)行指令開始(步驟2000)。關(guān)于是否計(jì)數(shù)器與指令相關(guān)聯(lián)進(jìn)行確定(步驟2002)。計(jì)數(shù)器可以包含在指令內(nèi)的域中或可以在性能儀器影子存儲(chǔ)器中。如果計(jì)數(shù)器與指令相關(guān)聯(lián),就增大計(jì)數(shù)器(步驟2004),其后過程結(jié)束。否則,過程結(jié)束而不增大計(jì)數(shù)器。如果計(jì)數(shù)器超過閾值,可以復(fù)位計(jì)數(shù)器。
當(dāng)計(jì)數(shù)器作為指令的一部分實(shí)現(xiàn)時(shí),計(jì)數(shù)器可能是有限大小的。在這種情況下,可以設(shè)置計(jì)數(shù)器的閾值以便指示計(jì)數(shù)器何時(shí)處于溢出的危險(xiǎn)中。然后已經(jīng)讀出值后可以復(fù)位計(jì)數(shù)器。這個(gè)值可以由性能監(jiān)視單元或用于分析數(shù)據(jù)的程序讀取??梢詫?shí)現(xiàn)API以訪問這個(gè)數(shù)據(jù)。
現(xiàn)在轉(zhuǎn)向圖21,根據(jù)本發(fā)明的優(yōu)選實(shí)施例,顯示對(duì)訪問特定存儲(chǔ)器位置計(jì)數(shù)的過程的流程圖。圖21中說明的過程可以在數(shù)據(jù)高速緩沖存儲(chǔ)器如圖2中的數(shù)據(jù)高速緩沖存儲(chǔ)器216和指令高速緩沖存儲(chǔ)器214中實(shí)現(xiàn)。
過程由檢測(cè)對(duì)存儲(chǔ)器位置的訪問開始(步驟2100)。關(guān)于是否計(jì)數(shù)器與存儲(chǔ)器位置相關(guān)聯(lián)進(jìn)行確定(步驟2102)。計(jì)數(shù)器可以包含在存儲(chǔ)器位置內(nèi)或可以在性能儀器影子存儲(chǔ)器中。如果計(jì)數(shù)器與存儲(chǔ)器位置相關(guān)聯(lián),就增大計(jì)數(shù)器(步驟2104),其后過程結(jié)束。否則,過程結(jié)束而不增大計(jì)數(shù)器。
接下來(lái)參考圖22,根據(jù)本發(fā)明的優(yōu)選實(shí)施例,顯示說明各部件的圖,所述各部件用于關(guān)于指令的執(zhí)行或存儲(chǔ)器位置的訪問而收集的訪問信息。在這個(gè)例子中,指令單元2200執(zhí)行指令2202并增大計(jì)數(shù)器2204。每次執(zhí)行指令2202時(shí)增大這個(gè)計(jì)數(shù)器。在這個(gè)例子中,指令單元2200可以如圖2中的指令高速緩沖存儲(chǔ)器214那樣實(shí)現(xiàn)。
當(dāng)指令或數(shù)據(jù)高速緩沖存儲(chǔ)器頁(yè)裝入存儲(chǔ)器時(shí),操作系統(tǒng)程序裝載器/鏈接器和/或性能監(jiān)視程序讀取由編譯器產(chǎn)生的元數(shù)據(jù),并確定計(jì)數(shù)與指令或數(shù)據(jù)訪問相關(guān)聯(lián),然后裝載過程分配數(shù)據(jù)區(qū)域以保持計(jì)數(shù)器作為其perfint段的一部分。計(jì)數(shù)器的大小和數(shù)據(jù)訪問的粒度確定要分配的工作區(qū)域的量。
在簡(jiǎn)單情況下,數(shù)據(jù)或指令訪問的粒度可能是字大小(使得對(duì)字中任何字節(jié)的訪問被認(rèn)為是訪問),并且計(jì)數(shù)可能也是字大小。在這種情況下,主段和perfint段(不要求包含計(jì)數(shù)或閾值的整個(gè)字)之間存在一對(duì)多的映射。裝載過程分配影子頁(yè)或多頁(yè)并告訴處理器使用影子頁(yè)(多頁(yè))來(lái)包含計(jì)數(shù)。上面參考圖17描述了這個(gè)映射的細(xì)節(jié)。處理器中的高速緩沖存儲(chǔ)器單元維護(hù)影子塊登記項(xiàng)以指示包含計(jì)數(shù)信息的相應(yīng)的頁(yè)??赡芴峁┎煌挠成浜筒煌闹С值募?jí)別。
在替代實(shí)施例中,編譯器分配工作區(qū)域以維護(hù)計(jì)數(shù)并指示這些工作區(qū)域在其產(chǎn)生的數(shù)據(jù)區(qū)域中的放置。元數(shù)據(jù)中的登記項(xiàng)可能指示數(shù)據(jù)的開始、數(shù)據(jù)的字節(jié)數(shù)、數(shù)據(jù)的粒度、計(jì)數(shù)區(qū)域的開始和每個(gè)計(jì)數(shù)單元的粒度。在任何一種情況下,元數(shù)據(jù)裝入處理器并且處理器將元數(shù)據(jù)裝到其內(nèi)部的(影子)高速緩沖存儲(chǔ)器中。在修改指令流本身以包含元數(shù)據(jù)的說明性的實(shí)施例中,那么或者裝載器更新指令流以包含適當(dāng)?shù)闹甘酒骱凸ぷ鲄^(qū)域,或者編譯器已經(jīng)產(chǎn)生代碼以包含元數(shù)據(jù)。在如何一種情況下,裝載代碼后,處理器接收元數(shù)據(jù)。
數(shù)據(jù)單元2206可以如圖2中的數(shù)據(jù)高速緩沖存儲(chǔ)器206那樣實(shí)現(xiàn)。在這個(gè)例子中,每次訪問數(shù)據(jù)2208,計(jì)數(shù)器2210增大。數(shù)據(jù)2208和計(jì)數(shù)器2210都位于特定的存儲(chǔ)器位置。在這些例子中,可以使用新的指令,其中指令稱作ReadDataAcceCount(讀數(shù)據(jù)訪問計(jì)數(shù),RDAC),它使用數(shù)據(jù)地址和寄存器并且將與那個(gè)數(shù)據(jù)地址相關(guān)聯(lián)的計(jì)數(shù)放入寄存器。
這些事件,即指令執(zhí)行和數(shù)據(jù)訪問的每一個(gè),引起計(jì)數(shù)器的增大。本發(fā)明的機(jī)制提供接口,即硬件接口2212,以訪問這個(gè)收集的數(shù)據(jù)。在這些例子中,硬件接口2212采用用于操作系統(tǒng)2214的應(yīng)用編程接口(API)的形式。以這種方式,分析工具2216可以從計(jì)數(shù)器2204和計(jì)數(shù)器2210得到數(shù)據(jù)。分析工具2216可以采用很多形式,如例如,Oprofile,它是已知的用于Linux系統(tǒng)的系統(tǒng)范圍剖析器(system wide profiler)。雖然圖22中的例子說明提供接口給指令單元和數(shù)據(jù)單元,但可以實(shí)現(xiàn)硬件接口2212以提供對(duì)來(lái)自處理器中其它單元的信息的訪問。例如,可以為硬件接口2212創(chuàng)建API,它考慮訪問位于性能監(jiān)視器單元中的計(jì)數(shù)器中的訪問信息,如圖2中的性能監(jiān)視器單元240中的計(jì)數(shù)器241和242。
在圖23中,根據(jù)本發(fā)明的優(yōu)選實(shí)施例,顯示各部件的方塊圖,所述各部件用于自動(dòng)修改程序中的代碼以允許選擇性計(jì)數(shù)或代碼的部分的剖面。在這個(gè)例子中,剖析器2300是一個(gè)程序,如tprof,它可以用來(lái)識(shí)別如程序2302的程序中高使用率的例程。在這些例子中,“tprof”是定時(shí)器剖析器,它與來(lái)自國(guó)際商用機(jī)器(IBM)公司的高級(jí)交互執(zhí)行(AIX)操作系統(tǒng)一起發(fā)送。這個(gè)程序使用由定時(shí)器發(fā)起的采樣。定時(shí)器到期后,tprof識(shí)別執(zhí)行的指令。tprof是可以用于系統(tǒng)性能分析的CPU剖面工具。該工具是分析工具的例子并且基于包括下列步驟的采樣技術(shù)通過時(shí)間或性能監(jiān)視器計(jì)數(shù)器周期性地中斷系統(tǒng);確定中斷的代碼的地址和過程id(pid)和線程id(tid);在軟件跟蹤緩沖器中記錄TPROF鉤;并返回中斷的代碼。
或者,可以使用性能監(jiān)視器計(jì)數(shù)器的固定數(shù)目的計(jì)數(shù)代替定時(shí)器。這個(gè)程序剖析用來(lái)指示程序內(nèi)時(shí)間花費(fèi)在何處的例程。具有超過某個(gè)閾值的使用率的程序也稱為是“熱(hot)”的。通過使用來(lái)自剖析器2300的信息,可以識(shí)別感興趣的例程,如程序2302中的子程序2304。
利用這個(gè)信息,通過分析工具2306可以自動(dòng)修改子程序2304中的指令以允許子程序2304的執(zhí)行的計(jì)數(shù)。通過分析工具2306可以識(shí)別用于修改的另外的例程。例如,也可以將子程序2304識(shí)別為感興趣的例程,這個(gè)程序的指令正被修改以允許子程序2304的執(zhí)行的計(jì)數(shù)。這些例程中的代碼的修改包括將性能指示器與在這些子程序的每個(gè)內(nèi)的一個(gè)或多個(gè)指令關(guān)聯(lián)。
已經(jīng)通過分析工具2306修改這些例程中的指令之后,然后由處理器2308執(zhí)行程序2302。處理器2308執(zhí)行程序2302,并為這些例程提供計(jì)數(shù)。例如,利用上述的機(jī)制,可由處理器2308進(jìn)行執(zhí)行例程中執(zhí)行的指令和使用的周期數(shù)的計(jì)數(shù)。
參考圖24,根據(jù)本發(fā)明的優(yōu)選實(shí)施例,顯示用于動(dòng)態(tài)地增加或關(guān)聯(lián)性能指示器到指令的過程的流程圖。圖24中說明的過程可以實(shí)現(xiàn)在程序中,如圖23中的分析工具2306。分析工具是用來(lái)獲得關(guān)于程序的執(zhí)行的度量的程序。這些度量可以是任何可測(cè)量的參數(shù),如執(zhí)行時(shí)間、執(zhí)行的例程、執(zhí)行的特定指令和訪問的存儲(chǔ)器位置。
過程由使用來(lái)自剖析器的數(shù)據(jù)識(shí)別感興趣的指令開始(步驟2400)。這個(gè)剖析器可以是如AIX中發(fā)現(xiàn)的定時(shí)器剖析器。從識(shí)別的指令中選擇指令用于修改(步驟2402)。其后,動(dòng)態(tài)地添加性能指示器到選擇的指令中(步驟2404)。
在步驟2404中,可以以這樣的方式添加指令使得不需要為執(zhí)行修改指令。可以使用性能儀器影子存儲(chǔ)器,如圖15中的性能儀器影子存儲(chǔ)器1506保存性能指示器。在這種情形,在處理器中設(shè)置寄存器以指示當(dāng)執(zhí)行指令時(shí),應(yīng)該為性能指示器檢查性能儀器影子存儲(chǔ)器。
然后關(guān)于是否存在另外的識(shí)別的指令用于修改進(jìn)行確定(步驟2406)。如果用于修改的另外的指令存在,過程返回到步驟2402。否則,過程結(jié)束。
接下來(lái)轉(zhuǎn)向圖25,根據(jù)本發(fā)明的優(yōu)選實(shí)施例,顯示說明各部件的圖,所述各部件用來(lái)通過使性能指示器與頁(yè)中的指令相關(guān)聯(lián)掃描頁(yè)。本發(fā)明的機(jī)制使用性能指示器以允許在程序中每次一頁(yè)的指令的儀器化(instrumenting)或修改。
在這個(gè)例子中,程序2500包含三頁(yè)頁(yè)2502、頁(yè)2504和頁(yè)2506。掃描后臺(tái)精靈程序(daemon)2508使性能指示器與每次一頁(yè)或多頁(yè)程序2500中的指令相關(guān)聯(lián)。例如,頁(yè)2502中的指令可以通過掃描后臺(tái)精靈程序2508與性能指示器相關(guān)聯(lián)。然后由處理器2510執(zhí)行程序2500。然后可以從程序2500的執(zhí)行收集數(shù)據(jù)。這個(gè)數(shù)據(jù)包括例如,響應(yīng)頁(yè)2502中的指令而發(fā)生的事件的計(jì)數(shù)、對(duì)頁(yè)2502中的每個(gè)指令執(zhí)行的次數(shù)計(jì)數(shù)、和/或識(shí)別對(duì)頁(yè)2502的訪問數(shù)。
接下來(lái),掃描后臺(tái)精靈程序可以從頁(yè)2502的指令中去除性能指示器并使性能指示器與頁(yè)2504中的指令相關(guān)聯(lián)。然后由處理器2510再執(zhí)行程序2500,并且從這個(gè)程序的執(zhí)行收集數(shù)據(jù)。然后,在執(zhí)行的程序2500中可以修改頁(yè)2506中的指令以收集那個(gè)頁(yè)上的數(shù)據(jù)。
以這種方式,可以識(shí)別典型地不由程序如定時(shí)器剖析器記錄的例程的使用率。因?yàn)橹袛嗫赡鼙唤够蛘卟蓸拥亩〞r(shí)可能引起同步非隨機(jī)行為,定時(shí)器剖析器可能不記錄例程的某些使用率。通過修改程序2500中的指令,可以得到對(duì)例程或其它模塊的計(jì)數(shù),其中計(jì)數(shù)是無(wú)偏的并且系統(tǒng)是不受干擾的。以這種方式,避免了中斷驅(qū)動(dòng)的計(jì)數(shù)。進(jìn)而,雖然代碼的儀器化是每次一頁(yè),但掃描程序中可以使用其它的指令的分組,如構(gòu)成程序的模塊。例如,分組可以是單個(gè)的可執(zhí)行程序、庫(kù)、選擇的函數(shù)組和選擇的頁(yè)的組。
接下來(lái)轉(zhuǎn)向圖26,根據(jù)本發(fā)明的優(yōu)選實(shí)施例,顯示用于添加指示器到頁(yè)中的指令的過程的流程圖。圖26中說明的過程可以在程序中實(shí)現(xiàn),如圖25中的掃描后臺(tái)精靈程序2508。
首先,識(shí)別頁(yè)的選擇(步驟2600)。在這個(gè)例子中,頁(yè)是程序中那些要掃描的或儀器化的。接下來(lái),在頁(yè)的選擇內(nèi)選擇頁(yè)用于修改(步驟2602)。然后使指示器與所選擇的頁(yè)中的所有指令相關(guān)聯(lián)(步驟2604)。然后執(zhí)行程序(步驟2606)。接下來(lái),關(guān)于是否選擇的所有頁(yè)已經(jīng)掃描進(jìn)行確定(步驟2608)。如果所有的頁(yè)已經(jīng)掃描,其后過程結(jié)束。但是,如果不是所有的頁(yè)已經(jīng)掃描,選擇要掃描的下一頁(yè)(步驟2610),如上所述過程返回到步驟2604。
圖26說明的過程顯示了作為頁(yè)的指令的掃描分組。依賴于特定的實(shí)現(xiàn),以這種方式可以掃描或儀器化指令的其它類型的分組,如構(gòu)成程序的模塊。
從調(diào)用堆棧中發(fā)現(xiàn)的信息,使用程序識(shí)別來(lái)自例程的調(diào)用者。這個(gè)程序考慮例程中已經(jīng)發(fā)生了什么的識(shí)別,并且通過識(shí)別已經(jīng)進(jìn)行的函數(shù)調(diào)用提供程序中已經(jīng)發(fā)生了什么的總結(jié)。但是,這個(gè)程序要求插入代碼中的指令以獲得這個(gè)信息。
本發(fā)明的機(jī)制考慮識(shí)別調(diào)用并返回,而不必進(jìn)行特定代碼儀器化。特別地,對(duì)指令的特定集合產(chǎn)生中斷的功能可以用來(lái)收集關(guān)于系統(tǒng)和應(yīng)用的信息。在這些例子中,用于調(diào)用和返回的指令與產(chǎn)生中斷的性能指示器相關(guān)聯(lián)。
通過后退調(diào)用堆棧,可以得到完整的堆棧調(diào)用用于分析。“堆棧行走(stack walk)”也可以描述為“堆棧展開(stack unwind)”,并且“沿堆棧行走”的過程也可以描述為“展開堆棧”。這些術(shù)語(yǔ)的每個(gè)說明了對(duì)過程的不同的比喻??梢悦枋鲞^程為“行走”,因?yàn)檫^程必須一步一步地或一幀一幀地得到和處理堆棧幀。過程也可以描述為“展開”,因?yàn)檫^程必須得到和處理指向另一個(gè)的堆棧幀,并且這些指針及其信息必須通過很多指針去引用“被展開”。
堆棧展開在中斷時(shí)依照函數(shù)/方法調(diào)用的序列,并且被產(chǎn)生以響應(yīng)與性能指示器相關(guān)聯(lián)的指令的執(zhí)行。調(diào)用堆棧是程序執(zhí)行期間已經(jīng)進(jìn)入的例程(即模塊、函數(shù)、方法等)內(nèi)例程加偏置的有序的列表。例如,如果例程A調(diào)用例程B,然后例程B調(diào)用例程C,當(dāng)處理器正在執(zhí)行例程C中的指令時(shí),調(diào)用堆棧是ABC。當(dāng)控制從例程C返回到例程B時(shí),調(diào)用堆棧是AB。為在產(chǎn)生的報(bào)告內(nèi)更緊湊的表示和解釋容易,呈現(xiàn)例程的名字而沒有任何關(guān)于偏置的信息。偏置可以用于程序的執(zhí)行的更詳細(xì)的分析,但是,這里不進(jìn)一步考慮偏置。
因此,在中斷處理期間或由與特定的性能指示器相關(guān)聯(lián)的指令的執(zhí)行開始的后處理時(shí),產(chǎn)生的基于采樣的剖面信息反映調(diào)用堆棧的采樣,而不僅是可能的調(diào)用堆棧的葉子,如在某些程序計(jì)數(shù)器采樣技術(shù)中那樣。葉子是在分支末端的節(jié)點(diǎn),即沒有后代的節(jié)點(diǎn)。后代是父節(jié)點(diǎn)的孩子,并且葉子是沒有孩子的節(jié)點(diǎn)。
現(xiàn)在參考圖27,根據(jù)本發(fā)明的優(yōu)選實(shí)施例,顯示描述包含堆棧幀的調(diào)用堆棧的圖。“堆?!笔潜A舻拇鎯?chǔ)器區(qū)域,在其中程序或多個(gè)程序存儲(chǔ)狀態(tài)數(shù)據(jù),如過程和函數(shù)調(diào)用地址、傳遞的參數(shù)和有時(shí)的局部變量?!岸褩笔蔷€程的堆棧的部分,它表示用于單個(gè)函數(shù)調(diào)用的局部存儲(chǔ)(自變量、返回地址、返回值和局部變量)。每個(gè)執(zhí)行的活躍的線程具有為其堆??臻g分配的部分系統(tǒng)存儲(chǔ)器。線程的堆棧由堆棧幀的序列組成。線程堆棧上的幀集合表示那個(gè)線程在任何時(shí)刻的執(zhí)行的狀態(tài)。因?yàn)槎褩堑湫偷鼗ハ噫溄拥?例如每個(gè)堆棧幀指向前一個(gè)堆棧幀),后退跟蹤堆棧幀的序列并展開“調(diào)用堆棧”通常是可能的。調(diào)用堆棧表示所有還未完成的函數(shù)調(diào)用--換句話說,它反映在任何時(shí)間點(diǎn)上的函數(shù)調(diào)用序列。
調(diào)用堆棧2700包含這樣的信息識(shí)別當(dāng)前正在運(yùn)行的例程、調(diào)用它的例程等,直到主程序的所有路徑。調(diào)用堆棧2700包含很多堆棧幀2702、2704、2706和2708。在描述的例子中,堆棧幀2702在調(diào)用堆棧2700的頂部,而堆棧幀2708位于調(diào)用堆棧2700的底部。調(diào)用堆棧的頂部也稱為“根”。修改(在大多數(shù)操作系統(tǒng)中找到的)中斷以獲得中斷的線程的程序計(jì)數(shù)器的值(pcv)以及指向用于那個(gè)線程的當(dāng)前活躍的堆棧幀的指針。在Intel架構(gòu)中,這典型地由寄存器的內(nèi)容表示EIP(程序計(jì)數(shù)器)和EBP(指向堆棧幀的指針)。
通過訪問當(dāng)前活躍的堆棧幀,利用(典型的)堆棧幀鏈接協(xié)定的優(yōu)點(diǎn)以便將所有的幀串鏈在一起是可能的。標(biāo)準(zhǔn)的鏈接協(xié)定的部分也規(guī)定函數(shù)返回地址放在被調(diào)用的函數(shù)的堆棧幀的上面;這可以用來(lái)確定用于被調(diào)用函數(shù)的地址。雖然這個(gè)討論使用基于Intel的架構(gòu),這個(gè)例子不是限制。大多數(shù)架構(gòu)使用可以由修改的剖面中斷處理程序類似地操縱的鏈接協(xié)定。
當(dāng)中斷產(chǎn)生時(shí),第一個(gè)獲得的參數(shù)是程序計(jì)數(shù)器值。下一個(gè)值是指向用于中斷的線程的當(dāng)前堆棧幀的頂部的指針。在所描述的例子中,這個(gè)值會(huì)指向堆棧幀2708中的EBP 2708a。反過來(lái),EBP 2708指向堆棧幀2706中的EBP2706a,它反過來(lái)指向堆棧幀2704中的EBP 2704a。反過來(lái),這個(gè)EBP指向堆棧幀2702中的EBP 2702a。堆棧幀2702-2708內(nèi)是EIP 2702b-2708b,它們識(shí)別調(diào)用例程的返回地址??梢詮倪@些地址識(shí)別各例程。因此,由通過堆棧往上或往回走收集所有的返回地址來(lái)定義各例程。
得到完整的調(diào)用堆棧在某些情況下可能是困難的,因?yàn)榄h(huán)境可能使跟蹤困難,如當(dāng)具有一個(gè)調(diào)用堆棧的應(yīng)用對(duì)具有不同的調(diào)用堆棧的內(nèi)核進(jìn)行調(diào)用時(shí)。由本發(fā)明的機(jī)制提供的硬件支持避免這些問題的一些。
接下來(lái)轉(zhuǎn)向圖28,根據(jù)本發(fā)明的優(yōu)選實(shí)施例,顯示用于識(shí)別與調(diào)用和返回指令相關(guān)聯(lián)的事件的過程的流程圖,其中從性能監(jiān)視器單元收集數(shù)據(jù)。也可以實(shí)現(xiàn)圖28中說明的過程用于分析工具,如圖22中的分析工具2216。
過程由識(shí)別調(diào)用和返回指令開始(步驟2800)。用于調(diào)用和返回的指令是用于確定什么時(shí)候例程已經(jīng)被調(diào)用和什么時(shí)候例程完成的感興趣的指令。這可以完成用于中斷、中斷返回、系統(tǒng)調(diào)用和從系統(tǒng)調(diào)用返回。
接下來(lái),性能指示器與識(shí)別的調(diào)用和返回指令相關(guān)聯(lián)(步驟2802)。然后執(zhí)行程序(步驟2804),并從性能監(jiān)視器單元收集數(shù)據(jù)(步驟2806),其后過程結(jié)束。該信息可以通過接口,如圖22中說明的硬件接口2212收集,其中使用API獲得由處理器中的不同功能單元收集的數(shù)據(jù)。
使用這個(gè)數(shù)據(jù)可以進(jìn)行例程的調(diào)用者的識(shí)別。這個(gè)信息可以用來(lái)產(chǎn)生數(shù)據(jù)結(jié)構(gòu),如跟蹤和呈現(xiàn)關(guān)于程序的執(zhí)行的信息的樹。使用類似于分析工具中提供的過程的過程,可以實(shí)現(xiàn)這個(gè)數(shù)據(jù)結(jié)構(gòu)的產(chǎn)生。
接下來(lái)轉(zhuǎn)向圖29,根據(jù)本發(fā)明的優(yōu)選實(shí)施例,顯示用來(lái)識(shí)別已經(jīng)執(zhí)行了超過選擇的次數(shù)的例程的過程的流程圖??梢栽谔幚砥鲀?nèi)的功能單元,如圖2中的指令高速緩沖存儲(chǔ)器214中實(shí)現(xiàn)圖29中說明的過程。這個(gè)過程用來(lái)識(shí)別執(zhí)行的指令的計(jì)數(shù),并且當(dāng)這些指令已經(jīng)發(fā)生超過某個(gè)選擇的次數(shù)時(shí)產(chǎn)生中斷。
首先,關(guān)于是否檢測(cè)到選擇的指令的執(zhí)行進(jìn)行確定(步驟2900)。通過檢查執(zhí)行的每個(gè)指令以觀察是否性能指示器與指令相關(guān)聯(lián)進(jìn)行該確定。通過不同的工具,如圖15中的編譯器1500或圖22中的分析工具2216,這些性能指示器可以與指令相關(guān)聯(lián)。
如果未識(shí)別包含性能指示器的指令的執(zhí)行,過程返回到步驟2900直到檢測(cè)到選擇的指令。如果選擇的指令被識(shí)別為正在執(zhí)行,為那個(gè)選擇的指令增大具有設(shè)置的閾值的計(jì)數(shù)器,以對(duì)執(zhí)行那個(gè)特定的指令的頻度計(jì)數(shù)(步驟2902)。在這些例子中,分配計(jì)數(shù)器給為監(jiān)視識(shí)別的每個(gè)指令。
接下來(lái),關(guān)于是否已經(jīng)達(dá)到設(shè)置的閾值進(jìn)行確定(步驟2904)。最初通過使用記錄的高速緩沖存儲(chǔ)器遺漏次數(shù),為每個(gè)高速緩沖存儲(chǔ)器水平確定閾值。但是,增大次數(shù)用來(lái)確定由高速緩沖存儲(chǔ)器介入(intervention)(來(lái)自其它處理器的訪問)引起的問題??梢允褂镁哂胁煌闹档闹貜?fù)運(yùn)行以識(shí)別具有最壞性能的區(qū)域。
在這些例子中,指令可以與指示器相關(guān)聯(lián),該指示器包括指令的執(zhí)行要被監(jiān)視以及提供計(jì)數(shù)器的指示。進(jìn)而,可以包括計(jì)數(shù)準(zhǔn)則以識(shí)別何時(shí)要產(chǎn)生中斷。例如,當(dāng)指令已經(jīng)執(zhí)行超過13次時(shí)可以產(chǎn)生中斷。
如果還未達(dá)到閾值,如上所述過程返回到步驟2900。如果已經(jīng)達(dá)到設(shè)置的閾值,發(fā)送中斷到監(jiān)視程序(步驟2906),其后過程結(jié)束。這個(gè)中斷可以發(fā)送到中斷單元,如圖2中的中斷單元250,它傳遞控制到適當(dāng)?shù)倪M(jìn)程或過程以處理中斷。
這個(gè)過程對(duì)有很多分支的例程可能特別有用。在這種情況下,會(huì)為計(jì)數(shù)標(biāo)記所有分支指令。通過在使用的處理器的指令架構(gòu)中支持的調(diào)整提示(hint)標(biāo)記或最少化分支,由這種類型的計(jì)數(shù)得到的信息對(duì)識(shí)別編譯器和正好及時(shí)(JIT)代碼產(chǎn)生的改進(jìn)可能有用。
接下來(lái)轉(zhuǎn)向圖30,根據(jù)本發(fā)明的優(yōu)選實(shí)施例,顯示下面過程的流程圖,該過程用于當(dāng)執(zhí)行特定的指令超過某個(gè)選擇的次數(shù)時(shí)檢查調(diào)用堆棧和識(shí)別例程的調(diào)用者。圖7中說明的過程可以由中斷單元發(fā)起,如圖2中的中斷單元250。這個(gè)過程用來(lái)識(shí)別例程中的調(diào)用并可以遞歸地獲得用于調(diào)用者的信息。
首先,檢查調(diào)用堆棧并識(shí)別例程的調(diào)用者(步驟3000)。接下來(lái),從指令高速緩沖存儲(chǔ)器獲取執(zhí)行的指令的數(shù)目的計(jì)數(shù)(步驟3002)。該計(jì)數(shù)是為圖29中的步驟2902中使用的計(jì)數(shù)器。然后計(jì)數(shù)器復(fù)位(步驟3004),其后從中斷返回控制(步驟3006)。在圖30中的過程中得到的信息可以用來(lái)識(shí)別用于監(jiān)視的另外例程以便遞歸地識(shí)別例程的調(diào)用者。
接下來(lái)轉(zhuǎn)向圖31,根據(jù)本發(fā)明的優(yōu)選實(shí)施例,顯示說明已經(jīng)為監(jiān)視選擇的指令的范圍和數(shù)據(jù)的圖。在這個(gè)例子中,程序3100包括指令范圍3102和3104。已經(jīng)為監(jiān)視作為感興趣的范圍識(shí)別這些范圍的每個(gè)。這些范圍的每個(gè)設(shè)置在指令單元內(nèi),如圖2中的指令高速緩沖存儲(chǔ)器214。每個(gè)范圍用來(lái)告訴處理器在范圍內(nèi)執(zhí)行的指令的數(shù)目,以及程序3100執(zhí)行期間進(jìn)入范圍的次數(shù)。
指令高速緩沖存儲(chǔ)器3106使用范圍寄存器3108定義指令范圍。這些寄存器可以是現(xiàn)有的寄存器,或者修改指令高速緩沖存儲(chǔ)器3106以包含定義指令范圍的寄存器。這些范圍可以基于指令的地址。另外,可以通過各種調(diào)試器程序和性能工具更新范圍寄存器3108。
如果在范圍內(nèi)執(zhí)行指令,如指令范圍3102或指令范圍3104,就增大指令高速緩沖存儲(chǔ)器3106中的計(jì)數(shù)器?;蛘撸梢园l(fā)送指令到性能監(jiān)視器單元,如圖2中的性能監(jiān)視器單元240。在這些例子中,性能監(jiān)視器單元跟蹤范圍內(nèi)執(zhí)行的指令的數(shù)目和進(jìn)入指令范圍的次數(shù)的計(jì)數(shù)。
可以以類似的方式監(jiān)視數(shù)據(jù)訪問。例如,數(shù)據(jù)3112包括數(shù)據(jù)范圍3114。以類似于指令范圍3102或指令范圍3104內(nèi)指令的執(zhí)行的方式,計(jì)數(shù)對(duì)數(shù)據(jù)范圍3114的數(shù)據(jù)訪問。這些范圍可以定義在數(shù)據(jù)單元內(nèi)的寄存器中,如圖2中的數(shù)據(jù)高速緩沖存儲(chǔ)器216。在寄存器中可以定義這些用于數(shù)據(jù)的范圍為用于數(shù)據(jù)的存儲(chǔ)器位置的范圍。
接下來(lái)轉(zhuǎn)向圖32,根據(jù)本發(fā)明的優(yōu)選實(shí)施例,顯示下面過程的流程圖,該過程用于計(jì)數(shù)對(duì)設(shè)置的范圍的訪問的數(shù)目以及設(shè)置的范圍內(nèi)執(zhí)行的指令的數(shù)目??梢栽谥噶顔卧鐖D2中的指令高速緩沖存儲(chǔ)器214中實(shí)現(xiàn)圖32中說明的過程。
首先,為執(zhí)行識(shí)別指令(步驟3200)。接下來(lái),關(guān)于是否指令在設(shè)置的指令的范圍內(nèi)進(jìn)行確定(步驟3202)。通過檢查定義一個(gè)或多個(gè)指令范圍的寄存器可以識(shí)別范圍。如果指令不在指令的設(shè)置的范圍內(nèi),如上所述過程就返回到步驟3200。如果指令在指令的設(shè)置的范圍內(nèi),就關(guān)于前一個(gè)指令是否在指令的設(shè)置的范圍內(nèi)進(jìn)行確定(步驟3204)。如果前一個(gè)指令不在指令的設(shè)置的范圍內(nèi),增大訪問計(jì)數(shù)器以告訴處理器進(jìn)入指令范圍多少次(步驟3206)。另外,增大執(zhí)行計(jì)數(shù)器以對(duì)指令的設(shè)置范圍內(nèi)的執(zhí)行的指令數(shù)計(jì)數(shù)(步驟3208),其后過程返回步驟3200。
重新參考步驟3204,如果前一個(gè)指令在指令的設(shè)置的范圍內(nèi),如上所述過程前進(jìn)到步驟3208。
可以實(shí)現(xiàn)與圖32中說明的過程類似的過程用于對(duì)數(shù)據(jù)的訪問。在這種情況下,過程會(huì)典型地在數(shù)據(jù)單元中而不是在指令單元中實(shí)現(xiàn)。
因此,本發(fā)明提供改進(jìn)的方法、裝置和計(jì)算機(jī)指令用于在監(jiān)視程序的執(zhí)行中提供幫助。本發(fā)明的機(jī)制包括使用指示器,該指示器由處理器識(shí)別以便允許與指示器相關(guān)聯(lián)的指令的執(zhí)行的計(jì)數(shù)。通過這個(gè)機(jī)制允許如上所述各種類型的計(jì)數(shù)。進(jìn)而,使用通過利用將指示器與特定的指令相關(guān)聯(lián)而提供的信息,在監(jiān)視和分析程序的性能中,本發(fā)明的機(jī)制也提供各種類型的調(diào)整給程序。進(jìn)而,如上所述,可以自動(dòng)地調(diào)整程序以考慮監(jiān)視選擇的指令甚至例程和模塊,而不必修改程序。
重要的是注意雖然在完全用作為數(shù)據(jù)處理系統(tǒng)的環(huán)境已經(jīng)描述本發(fā)明,但本領(lǐng)域一般技術(shù)人員將意識(shí)到本發(fā)明的過程能夠以指令的計(jì)算機(jī)可讀媒體的形式和各種形式分發(fā);不管實(shí)際用來(lái)執(zhí)行分發(fā)的信號(hào)承載媒體的特定類型,本發(fā)明同樣適用。計(jì)算機(jī)可讀媒體的例子包括可記錄型媒體,如軟盤、硬盤驅(qū)動(dòng)、RAM、CD-ROM、DVD-ROM,和傳輸類型媒體,如數(shù)字和模擬通信鏈路、有線或無(wú)線通信鏈路,使用傳輸形式如例如射頻和光波傳輸。計(jì)算機(jī)可讀媒體可以采用被解碼實(shí)際使用于特定的數(shù)據(jù)處理系統(tǒng)中的編碼格式的形式。
本發(fā)明的描述已經(jīng)為說明和描述的目的提供,并不視為詳盡的或限制為此公開形式的發(fā)明。對(duì)本領(lǐng)域一般技術(shù)人員許多修改和變化將是顯然的。例如,可以使用新的指令或操作碼指示隨后的指令或隨后的指令的集合是標(biāo)記的指令,而不是在指令或束中使用域。同樣地,在希望指令中的域內(nèi)包含性能指示器的情況下,如果用于性能指示器的空閑域不可獲得,可以改變處理器的架構(gòu)以包含額外的比特。同樣地,雖然已經(jīng)給出事件的例子,如指令的執(zhí)行,執(zhí)行指令需要的時(shí)間、如時(shí)鐘或處理器周期,訪問數(shù)據(jù)的時(shí)間,進(jìn)入代碼部分的入口,但這些例子并不意味著限制本發(fā)明為能計(jì)數(shù)的事件的類型。任何有關(guān)指令的執(zhí)行或?qū)Υ鎯?chǔ)器位置的訪問的事件均可以使用本發(fā)明的機(jī)制計(jì)數(shù)。
選擇和描述說明性的實(shí)施例以便最好地解釋本發(fā)明的原理、實(shí)際的應(yīng)用,并且使其他本領(lǐng)域一般技術(shù)人員對(duì)具有各種修改的各實(shí)施例能夠理解本發(fā)明,這些修改適合于預(yù)期的特定使用。
權(quán)利要求
1.一種用于處理指令的數(shù)據(jù)處理系統(tǒng)中的方法,該方法包含響應(yīng)在數(shù)據(jù)處理系統(tǒng)中的處理器接收指令,確定是否指示器與指令相關(guān)聯(lián);并且如果指示器與指令相關(guān)聯(lián),對(duì)與指令和隨后的指令的執(zhí)行相關(guān)聯(lián)的事件計(jì)數(shù)。
2.根據(jù)權(quán)利要求1所述的方法,其中計(jì)數(shù)步驟包含發(fā)送信號(hào)到處理器中的性能監(jiān)視器單元以響應(yīng)對(duì)指示器與指令相關(guān)聯(lián)的確定;并且使用性能監(jiān)視器單元對(duì)與指令和隨后的指令的執(zhí)行相關(guān)聯(lián)的事件計(jì)數(shù)。
3.根據(jù)權(quán)利要求1所述的方法,其中事件包括至少下列之一進(jìn)入模塊的入口、離開模塊的出口、進(jìn)入子程序的入口、離開子程序的出口、進(jìn)入函數(shù)的入口、輸入/輸出的開始、輸入/輸出的完成、指令的執(zhí)行和執(zhí)行指令需要的時(shí)間。
4.根據(jù)權(quán)利要求1所述的方法,進(jìn)一步包含指令的接收之后接收另一個(gè)指令,其中另一個(gè)指令與指示器相關(guān)聯(lián);并且停止對(duì)與指令和隨后的指令的執(zhí)行相關(guān)聯(lián)的事件計(jì)數(shù)以響應(yīng)接收與指示器相關(guān)聯(lián)的另一個(gè)指令。
5.根據(jù)權(quán)利要求1所述的方法,其中指示器是第一種類型的指示器并進(jìn)一步包含指令的接收之后接收另一個(gè)指令,其中另一個(gè)指令與第二種類型的指示器相關(guān)聯(lián);并且停止對(duì)與指令和隨后的指令的執(zhí)行相關(guān)聯(lián)的事件計(jì)數(shù)以響應(yīng)接收與第二種類型的指示器相關(guān)聯(lián)的另一個(gè)指令。
6.根據(jù)權(quán)利要求1所述的方法,其中在指令高速緩沖存儲(chǔ)器中接收指令和隨后的指令,并且其中計(jì)數(shù)步驟包含從指令高速緩沖存儲(chǔ)器發(fā)送信號(hào)到性能監(jiān)視器單元,以使性能監(jiān)視器單元對(duì)與指令和隨后的指令的執(zhí)行相關(guān)聯(lián)的事件計(jì)數(shù);并且使用性能監(jiān)視器單元對(duì)與指令和隨后的指令的執(zhí)行相關(guān)聯(lián)的事件計(jì)數(shù),以響應(yīng)從指令高速緩沖存儲(chǔ)器接收信號(hào)。
7.根據(jù)權(quán)利要求1所述的方法,其中指示器位于指令中的域中。
8.根據(jù)權(quán)利要求1所述的方法,其中與指令相關(guān)聯(lián)的指示器位于影子存儲(chǔ)器中。
9.根據(jù)權(quán)利要求1所述的方法,其中在束中接收指令,并且其中指示器在束中包含至少一個(gè)空閑比特。
10.根據(jù)權(quán)利要求1所述的方法,其中指示器位于影子高速緩沖存儲(chǔ)器中。
11.根據(jù)權(quán)利要求1所述的方法,其中事件中的一個(gè)事件包括至少下列之一進(jìn)入模塊的入口、離開模塊的出口、進(jìn)入子程序的入口、離開子程序的出口、進(jìn)入函數(shù)的入口、輸入/輸出的開始、輸入/輸出的完成和指令的執(zhí)行。
12.一種用于監(jiān)視對(duì)數(shù)據(jù)的訪問的數(shù)據(jù)處理系統(tǒng)中的方法,該方法包含響應(yīng)在數(shù)據(jù)處理系統(tǒng)中的處理器接收數(shù)據(jù),確定指示器是否與數(shù)據(jù)相關(guān)聯(lián);并且如果指示器與指令相關(guān)聯(lián),對(duì)與訪問數(shù)據(jù)相關(guān)聯(lián)的事件計(jì)數(shù)。
13.根據(jù)權(quán)利要求12所述的方法,還包含當(dāng)?shù)诙斡龅脚c數(shù)據(jù)相關(guān)聯(lián)的指示器時(shí),停止與訪問數(shù)據(jù)相關(guān)聯(lián)的事件的計(jì)數(shù)。
14.根據(jù)權(quán)利要求12所述的方法,還包含當(dāng)遇到與數(shù)據(jù)相關(guān)聯(lián)的不同的指示器時(shí),停止與訪問數(shù)據(jù)相關(guān)聯(lián)的事件的計(jì)數(shù)。
15.根據(jù)權(quán)利要求12所述的方法,其中指示器位于用于數(shù)據(jù)的數(shù)據(jù)地址位置中的域中。
16.根據(jù)權(quán)利要求12所述的方法,其中數(shù)據(jù)在一個(gè)存儲(chǔ)器位置或存儲(chǔ)器位置的范圍之一中。
17.根據(jù)權(quán)利要求12所述的方法,其中事件中的一個(gè)事件至少包括一次對(duì)存儲(chǔ)器位置的訪問。
18.一種數(shù)據(jù)處理系統(tǒng),包含性能監(jiān)視器單元,其中性能監(jiān)視器單元當(dāng)接收信號(hào)時(shí)為指令和隨后的指令對(duì)事件計(jì)數(shù);以及指令高速緩沖存儲(chǔ)器,其中指令高速緩沖存儲(chǔ)器接收指令,并且當(dāng)指令與指示器相關(guān)聯(lián)時(shí),發(fā)送信號(hào)到性能監(jiān)視器單元以對(duì)與指令和隨后的指令相關(guān)聯(lián)的事件計(jì)數(shù)。
19.一種用于處理指令的數(shù)據(jù)處理系統(tǒng),該數(shù)據(jù)處理系統(tǒng)包含確定裝置,響應(yīng)在數(shù)據(jù)處理系統(tǒng)中的處理器的指令,用于確定指示器是否與指令相關(guān)聯(lián);以及計(jì)數(shù)裝置,用于如果指示器與指令相關(guān)聯(lián),就對(duì)與指令和隨后的指令的執(zhí)行相關(guān)聯(lián)的事件計(jì)數(shù)。
20.根據(jù)權(quán)利要求19所述的數(shù)據(jù)處理系統(tǒng),其中計(jì)數(shù)裝置是第一計(jì)數(shù)裝置并還包含發(fā)送裝置,用于發(fā)送信號(hào)到處理器中的性能監(jiān)視器單元以響應(yīng)對(duì)指示器與指令相關(guān)聯(lián)的確定;以及第二計(jì)數(shù)裝置,用于使用性能監(jiān)視器單元對(duì)與指令和隨后的指令的執(zhí)行相關(guān)聯(lián)的事件計(jì)數(shù)。
21.根據(jù)權(quán)利要求19所述的數(shù)據(jù)處理系統(tǒng),其中事件包括至少下列之一進(jìn)入模塊的入口、離開模塊的出口、進(jìn)入子程序的入口、離開子程序的出口、進(jìn)入函數(shù)的入口、輸入/輸出的開始、輸入/輸出的完成、指令的執(zhí)行和執(zhí)行指令需要的時(shí)間。
22.一種數(shù)據(jù)處理系統(tǒng),用于監(jiān)視對(duì)數(shù)據(jù)的訪問,該數(shù)據(jù)處理系統(tǒng)包含確定裝置,響應(yīng)在數(shù)據(jù)處理系統(tǒng)中的處理器接收數(shù)據(jù),用于確定是否指示器與數(shù)據(jù)相關(guān)聯(lián);以及計(jì)數(shù)裝置,用于如果指示器與指令相關(guān)聯(lián),就對(duì)與對(duì)數(shù)據(jù)的訪問相關(guān)聯(lián)的事件計(jì)數(shù)。
23.根據(jù)權(quán)利要求22所述的數(shù)據(jù)處理系統(tǒng),其中事件中的一個(gè)事件至少包括一次對(duì)存儲(chǔ)器位置的訪問。
24.一種計(jì)算機(jī)可讀媒體中用于處理指令的計(jì)算機(jī)程序產(chǎn)品,該計(jì)算機(jī)程序產(chǎn)品包含第一指令,響應(yīng)在數(shù)據(jù)處理系統(tǒng)中的處理器接收指令,用于確定是否指示器與指令相關(guān)聯(lián);以及第二指令,用于如果指示器與指令相關(guān)聯(lián),就對(duì)與指令和隨后的指令的執(zhí)行相關(guān)聯(lián)的事件計(jì)數(shù)。
25.根據(jù)權(quán)利要求24所述的計(jì)算機(jī)程序產(chǎn)品,其中事件中的一個(gè)事件至少包括一次對(duì)存儲(chǔ)器位置的訪問。
全文摘要
一種數(shù)據(jù)處理系統(tǒng)中用于處理指令的方法、裝置和計(jì)算機(jī)指令。在數(shù)據(jù)處理系統(tǒng)中的處理器接收指令。如果指示器與指令相關(guān)聯(lián),那么該指令和所有隨后的指令的執(zhí)行被計(jì)數(shù)直到接收另一個(gè)指示器。指示器也與數(shù)據(jù)位置一起使用以計(jì)數(shù)對(duì)數(shù)據(jù)位置中的數(shù)據(jù)的訪問。如果指示器與數(shù)據(jù)位置相關(guān)聯(lián),對(duì)所有隨后的數(shù)據(jù)位置訪問計(jì)數(shù)直到接收另一個(gè)指示器。
文檔編號(hào)G06F9/318GK1604044SQ200410056579
公開日2005年4月6日 申請(qǐng)日期2004年8月10日 優(yōu)先權(quán)日2003年9月30日
發(fā)明者小吉米·E·德威特, 弗蘭克·E·萊文, 伊尼奧·M·皮內(nèi)達(dá), 克里斯托弗·M·理查森, 羅伯特·J·厄克特 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司