專利名稱:使能跟蹤重復(fù)指令的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明一般地涉及微處理器,具體地涉及跟蹤微處理器的指令流。更具體地,本發(fā)明涉及跟蹤微處理器的計(jì)數(shù)寄存器,從而評(píng)估重復(fù)指令的執(zhí)行。
背景技術(shù):
在分析數(shù)據(jù)處理系統(tǒng)或者在該數(shù)據(jù)處理系統(tǒng)中執(zhí)行的應(yīng)用程序的性能時(shí),理解執(zhí)行流程和系統(tǒng)資源的使用是有幫助的。指令跟蹤可以包括列出當(dāng)應(yīng)用程序或系統(tǒng)程序正運(yùn)行時(shí)由處理器執(zhí)行的指令。對(duì)指令跟蹤進(jìn)行分析,從而建立性能模型,并統(tǒng)計(jì)地監(jiān)視系統(tǒng)行為的一些部分。指令類型和其它字段的動(dòng)態(tài)使用,地址變換和存儲(chǔ)器引用模式,以及分支行為和基本塊大小是跟蹤分析當(dāng)中的一些課題。所提取的統(tǒng)計(jì)數(shù)據(jù)反映體系結(jié)構(gòu)、實(shí)現(xiàn)、系統(tǒng)軟件以及從中采集跟蹤的應(yīng)用程序的特定組合的行為,因此可用于引導(dǎo)所有這些部件的開發(fā)者的設(shè)計(jì)決定。
具體地說,跟蹤可以含有各種層面的信息。例如地址跟蹤,則含有用于存取指令和操作數(shù)的存儲(chǔ)器地址序列。指令跟蹤則除去存儲(chǔ)器地址序列之外還含有指令操作碼和寄存器說明符。
常規(guī)的跟蹤工具可以使用硬件、軟件或者硬件和軟件的組合,來獲得蹤跡。在硬件方面,許多處理器包括允許進(jìn)行跟蹤的模式。當(dāng)前處理器的一個(gè)焦點(diǎn)是分支跟蹤特性,它會(huì)在檢測(cè)到被取分支(taken branch)指令時(shí)引起中斷,并跟蹤所述被取分支指令。收集關(guān)于哪些分支指令是最經(jīng)常被取用的,哪些分支是最經(jīng)常異常的信息,這些信息是有用的信息。
雖然跟蹤工具已集中在跟蹤分支和異常上,但收集關(guān)于其它類型的指令的執(zhí)行的蹤跡將是有利的。具體地說,監(jiān)視重復(fù)指令,例如重復(fù)字符串指令的執(zhí)行將是有利的。例如,監(jiān)視一個(gè)指令是否被重復(fù)了所請(qǐng)求的次數(shù),或者監(jiān)視一個(gè)中斷是否終止了重復(fù)循環(huán)將是有利的。通過跟蹤一個(gè)重復(fù)指令,可以監(jiān)視執(zhí)行重復(fù)指令的速度。
因此,具有一些硬件和軟件跟蹤工具,用于監(jiān)視和檢查重復(fù)指令,以確定重復(fù)指令對(duì)軟件性能的影響將是有利的。此外,跟蹤重復(fù)指令和分支指令兩種指令,也是有利的。
發(fā)明內(nèi)容
因此,由上述可見,本發(fā)明的一個(gè)目的在于提供改進(jìn)的微處理器功能。
本發(fā)明的另一個(gè)目的在于提供一種用于跟蹤微處理器的指令流的方法、系統(tǒng)和程序。
本發(fā)明的又一個(gè)目的在于提供一種用于跟蹤微處理器的指令流,從而評(píng)估重復(fù)指令的執(zhí)行的方法、系統(tǒng)和程序。
按照本發(fā)明的一個(gè)方面,一個(gè)重復(fù)指令在處理器內(nèi)被執(zhí)行。響應(yīng)檢測(cè)到在所述重復(fù)指令的最后一次執(zhí)行期間設(shè)置(置位)的重復(fù)指令標(biāo)志,在所述處理器內(nèi)啟動(dòng)一個(gè)中斷。在所述中斷期間,借助于一個(gè)跟蹤程序或者外部硬件,該處理器使能(enable)從該處理器內(nèi)的一個(gè)存儲(chǔ)單元中讀取用于所述重復(fù)指令的執(zhí)行的計(jì)數(shù)。
按照一個(gè)實(shí)施例,第一次執(zhí)行重復(fù)指令時(shí),把CX寄存器值復(fù)制到該處理器內(nèi)的一重復(fù)計(jì)數(shù)寄存器中。當(dāng)檢測(cè)到重復(fù)指令的最后一次執(zhí)行時(shí),則產(chǎn)生中斷。該處理器啟動(dòng)(使能)一個(gè)跟蹤程序,以讀出CX寄存器中的值和重復(fù)計(jì)數(shù)寄存器中的值之間的差,從而確定重復(fù)指令被執(zhí)行的實(shí)際次數(shù)。
按照另一個(gè)實(shí)施例,可以利用處理器內(nèi)的重復(fù)指令信息緩沖器,來存儲(chǔ)多個(gè)重復(fù)指令執(zhí)行的次數(shù)。可替代地,處理器可以指向該處理器外部的緩沖存儲(chǔ)位置(單元)。當(dāng)重復(fù)指令被第一次執(zhí)行時(shí),CX寄存器值被復(fù)制到該處理器內(nèi)的重復(fù)計(jì)數(shù)寄存器中。然后,當(dāng)檢測(cè)到重復(fù)指令的最后一次執(zhí)行時(shí),處理器把當(dāng)前的CX寄存器的值和重復(fù)計(jì)數(shù)寄存器中的值之間的差復(fù)制到該重復(fù)指令信息緩沖器中,使得重復(fù)指令的實(shí)際執(zhí)行次數(shù)被保存。當(dāng)該指令信息緩沖器滿時(shí),觸發(fā)一個(gè)中斷。處理器啟動(dòng)跟蹤程序,以便讀取該指令信息緩沖器。
按照另一個(gè)實(shí)施例,處理器包括具有計(jì)數(shù)器寄存器的性能監(jiān)視器。所述計(jì)數(shù)器寄存器包括重復(fù)出現(xiàn)計(jì)數(shù)器(rep occurrence counter)。按照第一選擇,該重復(fù)出現(xiàn)計(jì)數(shù)器通過被編程為差一步溢出而被設(shè)置成對(duì)重復(fù)指令的出現(xiàn)進(jìn)行計(jì)數(shù)。在檢測(cè)到重復(fù)指令的出現(xiàn)時(shí),該計(jì)數(shù)器增加而溢出,從而觸發(fā)一個(gè)中斷。按照第二選擇,該重復(fù)出現(xiàn)計(jì)數(shù)器被設(shè)置用于對(duì)重復(fù)指令的最后一次執(zhí)行的發(fā)生進(jìn)行計(jì)數(shù),使該計(jì)數(shù)器增加而溢出,從而觸發(fā)一個(gè)中斷。另一個(gè)重復(fù)執(zhí)行計(jì)數(shù)器在檢測(cè)到重復(fù)指令時(shí)開始對(duì)重復(fù)指令的每次執(zhí)行進(jìn)行計(jì)數(shù)。因而,當(dāng)觸發(fā)所述中斷時(shí),處理器便啟動(dòng)跟蹤程序,以便讀取該重復(fù)執(zhí)行計(jì)數(shù)器,該計(jì)數(shù)器已經(jīng)計(jì)數(shù)了重復(fù)指令被執(zhí)行的實(shí)際次數(shù)。
按照另一個(gè)實(shí)施例,由跟蹤程序修改第一順序重復(fù)指令(sequentialrepeat instruction),以便在處理器中引起中斷。響應(yīng)檢測(cè)到該處理器中的中斷,通過訪問含有重復(fù)指令執(zhí)行的實(shí)際次數(shù)的存儲(chǔ)單元跟蹤該重復(fù)指令。然后修改該重復(fù)指令以從中斷返回(return-from-interrupt)??商娲?,響應(yīng)檢測(cè)到經(jīng)過該第一順序重復(fù)指令的分支中斷,恢復(fù)所述重復(fù)指令,并修改下一個(gè)順序重復(fù)指令,使得其如果被執(zhí)行則引起中斷。
本發(fā)明的所有目的、特征和優(yōu)點(diǎn)在下面的詳細(xì)的書面說明中將會(huì)變得顯而易見。
被認(rèn)為是本發(fā)明的新特征在所附權(quán)利要求中提出。不過,本發(fā)明本身以及本發(fā)明的優(yōu)選的使用方式、本發(fā)明的進(jìn)一步的目的和優(yōu)點(diǎn),通過結(jié)合附圖參看下面示例性的實(shí)施例的詳細(xì)說明,可以得到最好的理解,其中圖1表示在其中可以實(shí)施本發(fā)明的計(jì)算機(jī)系統(tǒng)的一個(gè)實(shí)施例的方框圖;圖2是可用于例如圖1所示的計(jì)算機(jī)系統(tǒng)等計(jì)算系統(tǒng)內(nèi)的處理器和存儲(chǔ)器子系統(tǒng)中的典型結(jié)構(gòu)的方框圖;圖3表示按照本發(fā)明的方法、系統(tǒng)和程序,顯示在一種計(jì)算機(jī)系統(tǒng)內(nèi)的軟件的部分,并說明在作為軟件的功能層的這些部分之間的邏輯關(guān)系的方框圖;圖4表示按照本發(fā)明的方法、系統(tǒng)和程序,利用跟蹤工具分析的數(shù)據(jù)處理系統(tǒng)中的各軟件部分之間的關(guān)系的方框圖;圖5表示按照本發(fā)明的方法、系統(tǒng)和程序,跟蹤程序的一些典型階段的高層邏輯流程圖;圖6表示按照本發(fā)明的方法、系統(tǒng)和程序,在處理器內(nèi)的可用于揭示關(guān)于重復(fù)指令執(zhí)行的信息的重復(fù)指令寄存器的方框圖;圖7表示按照本發(fā)明的方法、系統(tǒng)和程序,使能跟蹤重復(fù)指令的處理器的方框圖;圖8表示用于使用處理器內(nèi)的重復(fù)使能標(biāo)志的進(jìn)程和程序的高層邏輯流程圖;圖9表示用于使用處理器內(nèi)的重復(fù)使能標(biāo)志以跟蹤一個(gè)完成的重復(fù)指令的進(jìn)程和程序的高層邏輯流程圖;圖10表示按照本發(fā)明的方法、系統(tǒng)和程序,使能跟蹤和存儲(chǔ)重復(fù)指令的處理器的方框圖;圖11表示按照本發(fā)明的方法、系統(tǒng)和程序,使能跟蹤重復(fù)指令和在處理器外部的存儲(chǔ)器內(nèi)保存重復(fù)指令的處理器的方框圖;圖12表示利用重復(fù)使能標(biāo)志跟蹤緩沖器中的重復(fù)指令計(jì)數(shù)的進(jìn)程和程序的高層邏輯流程圖;圖13表示按照本發(fā)明的方法、系統(tǒng)和程序,使能控制對(duì)重復(fù)指令的跟蹤的處理器的方框圖;圖14表示利用性能監(jiān)視計(jì)數(shù)器控制中斷以便跟蹤重復(fù)指令的進(jìn)程和程序的高層邏輯流程圖;圖15表示用于控制中斷以通過多個(gè)性能監(jiān)視計(jì)數(shù)器跟蹤重復(fù)指令的進(jìn)程和程序的高層邏輯流程圖;以及圖16表示用于在應(yīng)用程序中一次一個(gè)重復(fù)指令地插入跟蹤異常分支(hook)的進(jìn)程和程序的高層邏輯流程圖。
具體實(shí)施例方式
現(xiàn)在參看附圖,圖1表示在其中可以實(shí)施本發(fā)明的計(jì)算機(jī)系統(tǒng)的一個(gè)實(shí)施例。計(jì)算機(jī)系統(tǒng)10包括總線22或其它用于在計(jì)算機(jī)系統(tǒng)10內(nèi)傳遞信息的通信裝置,以及至少一個(gè)處理裝置,例如處理器12,該處理裝置和總線22相連以用于處理信息??偩€22優(yōu)選包括低延遲通路和較高延遲通路。它們由橋接器連接,并由多個(gè)總線控制器在計(jì)算機(jī)系統(tǒng)10內(nèi)進(jìn)行控制。
處理器12可以是通用處理器,例如IBM的PowerPCTM處理器,其在正常操作期間,在存儲(chǔ)于例如隨機(jī)存取存儲(chǔ)器(RAM)14等動(dòng)態(tài)存儲(chǔ)裝置和例如只讀存儲(chǔ)器(ROM)16等靜態(tài)存儲(chǔ)裝置中的操作系統(tǒng)和應(yīng)用軟件的控制下處理數(shù)據(jù)。該操作系統(tǒng)首選地向用戶提供圖形用戶界面(GUI)。在優(yōu)選實(shí)施例中,應(yīng)用軟件含有機(jī)器可執(zhí)行指令,其在處理器12上被執(zhí)行時(shí),則執(zhí)行圖8、9、12、14、15和16的流程圖以及本說明所述的其它部分所描述的操作?;蛘?,本發(fā)明的步驟可以由含有用于執(zhí)行這些步驟的硬連線邏輯(hardwired logic)的特定的硬件組件執(zhí)行,或者由程序控制的計(jì)算機(jī)組件和定制的硬件組件的任意組合執(zhí)行。
本發(fā)明可以作為計(jì)算機(jī)程序產(chǎn)品來提供,該產(chǎn)品被包括在機(jī)器可讀的介質(zhì)上,該介質(zhì)具有在其上存儲(chǔ)的機(jī)器可執(zhí)行指令,以用于對(duì)計(jì)算機(jī)系統(tǒng)10編程,從而執(zhí)行按照本發(fā)明的進(jìn)程。這里使用的術(shù)語“機(jī)器可讀介質(zhì)”包括任何參與向處理器12或者計(jì)算機(jī)系統(tǒng)10的其它組件提供用于執(zhí)行的指令的介質(zhì)。這種介質(zhì)可以采用許多形式,其中包括但不限于非易失性介質(zhì)、易失性介質(zhì)和傳輸介質(zhì)。非易失性介質(zhì)的通常形式包括例如軟盤,軟磁盤,硬盤,磁帶或任何其它磁介質(zhì),壓縮光盤ROM(CD-ROM)或任何其它光學(xué)介質(zhì),穿孔卡片或任何其它具有孔模式的物理介質(zhì),可編程ROM(PROM),可擦寫PROM(EPROM),電EPROM(EEPROM),閃存,任何其它存儲(chǔ)器芯片或盒裝芯片,或者任何其它的計(jì)算機(jī)系統(tǒng)10可從中讀取指令并適用于存儲(chǔ)指令的介質(zhì)。在本實(shí)施例中,非易失性介質(zhì)的例子是海量存儲(chǔ)裝置18。易失性介質(zhì)包括動(dòng)態(tài)存儲(chǔ)器,例如RAM 14。傳輸介質(zhì)包括同軸電纜、銅導(dǎo)線或光纖,包括構(gòu)成總線22的導(dǎo)線。傳輸介質(zhì)也可以采用聲波或光波的形式,例如在射頻或紅外數(shù)據(jù)通信期間產(chǎn)生的聲波和光波。
此外,本發(fā)明可作為計(jì)算機(jī)程序產(chǎn)品被下載,其中程序指令可以經(jīng)由至與總線22相耦合的通信接口32的網(wǎng)絡(luò)鏈路34(例如調(diào)制解調(diào)器或網(wǎng)絡(luò)連接),通過被嵌入在載波或其它傳播介質(zhì)中的數(shù)據(jù)信號(hào),從遠(yuǎn)程計(jì)算機(jī)例如服務(wù)器39傳送到請(qǐng)求計(jì)算機(jī)系統(tǒng)10。通信接口32提供耦合網(wǎng)絡(luò)鏈路34的雙向數(shù)據(jù)通信,所述網(wǎng)絡(luò)鏈路34例如可以和局域網(wǎng)(LAN)、廣域網(wǎng)(WAN)相連,或者如本文所述,直接和因特網(wǎng)服務(wù)提供者(ISP)37相連。具體地說,網(wǎng)絡(luò)鏈路34可以對(duì)一個(gè)或多個(gè)網(wǎng)絡(luò)提供有線與/或無線網(wǎng)絡(luò)通信。
ISP 37也通過因特網(wǎng)38或其它網(wǎng)絡(luò)提供數(shù)據(jù)通信業(yè)務(wù)。因特網(wǎng)38可以是全球的使用特定協(xié)議的網(wǎng)絡(luò)和網(wǎng)關(guān)的集合,例如使用傳輸控制協(xié)議(TCP)和因特網(wǎng)協(xié)議(IP),以便彼此進(jìn)行通信。ISP 37和因特網(wǎng)38兩者都使用用于承載數(shù)字?jǐn)?shù)據(jù)流的電信號(hào)、電磁信號(hào)或光信號(hào)。通過該各種網(wǎng)絡(luò)的信號(hào),以及在網(wǎng)絡(luò)鏈路34上的并通過通信接口32的信號(hào)是傳輸信息的載波的幾種示例性的形式,它們向或從計(jì)算機(jī)系統(tǒng)10傳輸數(shù)字?jǐn)?shù)據(jù)。
此外,可以對(duì)計(jì)算機(jī)系統(tǒng)10添加多個(gè)外圍組件,它們與耦合至總線22的輸入/輸出(I/O)控制器11相連。例如,音頻輸入/輸出設(shè)備28和I/O控制器11相連,用于控制通過麥克風(fēng)或其它聲音或嘴唇運(yùn)動(dòng)捕獲裝置的音頻輸入,并用于控制通過揚(yáng)聲器或其它音頻發(fā)射裝置的音頻輸出。顯示器24也和I/O控制器11相連,用于提供可視的、可觸的或其它圖形表現(xiàn)格式。鍵盤26和光標(biāo)控制裝置30,例如鼠標(biāo)、軌跡球、或光標(biāo)方向鍵,和I/O控制器11相連,作為用戶對(duì)計(jì)算機(jī)系統(tǒng)10輸入的接口。在本發(fā)明的另一個(gè)實(shí)施例中,可以增加其它的輸入和輸出外圍組件。
圖1旨在作為一種在其中可以使處理器工作的計(jì)算環(huán)境的例子,而不作為一種體系結(jié)構(gòu)的限制。本發(fā)明可以在多種系統(tǒng)中執(zhí)行,包括在許多不同操作系統(tǒng)下的各種計(jì)算系統(tǒng)和電子裝置。在本發(fā)明的一個(gè)實(shí)施例中,所述計(jì)算系統(tǒng)是便攜式計(jì)算系統(tǒng),例如筆記本計(jì)算機(jī),掌上計(jì)算機(jī),個(gè)人數(shù)字助理,電話或其它也可以具有用于提供電話技術(shù)、增強(qiáng)的電話技術(shù)、消息發(fā)送和信息服務(wù)的通信功能的電子計(jì)算系統(tǒng)。不過,所述計(jì)算系統(tǒng)還可以是例如臺(tái)式計(jì)算機(jī),網(wǎng)絡(luò)計(jì)算機(jī),中型計(jì)算機(jī),服務(wù)器系統(tǒng)或大型機(jī)。因此,一般地說,本發(fā)明在用于執(zhí)行例如操作計(jì)算機(jī)系統(tǒng)可訪問的存儲(chǔ)裝置中的數(shù)據(jù)等計(jì)算任務(wù)的計(jì)算機(jī)系統(tǒng)中執(zhí)行。此外,所述計(jì)算機(jī)系統(tǒng)可以包括至少一個(gè)輸出裝置和至少一個(gè)輸入裝置。
現(xiàn)在參看圖2,圖2是可用于例如圖1所示的計(jì)算機(jī)系統(tǒng)等計(jì)算系統(tǒng)內(nèi)的處理器和存儲(chǔ)器子系統(tǒng)的典型結(jié)構(gòu)的方框圖。分級(jí)存儲(chǔ)器110表示可由處理器12訪問的一種存儲(chǔ)器層次的例子。在這個(gè)例子中,分級(jí)存儲(chǔ)器110包括二級(jí)高速緩存112,RAM14,以及非易失性存儲(chǔ)器116。二級(jí)高速緩存112以本領(lǐng)域已知的方式提供一種對(duì)數(shù)據(jù)和指令的快速存取高速緩存,所述數(shù)據(jù)和指令可以存儲(chǔ)在RAM14中。應(yīng)當(dāng)理解,也可以使用許多種高速緩存體系結(jié)構(gòu)。RAM14提供用于數(shù)據(jù)和指令的主存儲(chǔ)器存儲(chǔ),也可以提供在例如圖1所示的海量存儲(chǔ)裝置18等非易失性存儲(chǔ)器116中存儲(chǔ)的數(shù)據(jù)和指令的高速緩存。
處理器12是一種能夠在一個(gè)周期內(nèi)執(zhí)行多個(gè)指令的流水線處理器。應(yīng)當(dāng)理解,也可以使用其它類型的處理器。在所述數(shù)據(jù)處理系統(tǒng)操作期間,指令和數(shù)據(jù)被存儲(chǔ)在分級(jí)存儲(chǔ)器110內(nèi)。數(shù)據(jù)和指令可以在總線22上從分級(jí)存儲(chǔ)器傳送到處理器??偩€22可以包括公共數(shù)據(jù)通路或獨(dú)立數(shù)據(jù)通路。在每種情況下,處理器12可以和指令高速緩存122以及數(shù)據(jù)高速緩存124結(jié)合而提供在處理器12內(nèi)的單獨(dú)的指令和數(shù)據(jù)傳送通路。指令高速緩存122包含已被高速緩存的用于在該處理器內(nèi)執(zhí)行的指令。某些指令可以通過數(shù)據(jù)高速緩存124向或從分級(jí)存儲(chǔ)器110傳送數(shù)據(jù)。其它指令可以操作已被裝入通用數(shù)據(jù)寄存器126中的數(shù)據(jù)。通用數(shù)據(jù)寄存器126一般包括多個(gè)寄存器,例如累加寄存器(AX),基址寄存器(BX),計(jì)數(shù)寄存器(CX)和數(shù)據(jù)寄存器(DX)。在該圖中,專門示出了計(jì)數(shù)寄存器(CX)139,因?yàn)槠渑c本發(fā)明的實(shí)施有關(guān)。此外,某些指令可以執(zhí)行關(guān)于通用控制寄存器128的控制操作。
指令提取單元130按照需要從指令高速緩存122中提取指令,高速緩存122接著根據(jù)需要從分級(jí)存儲(chǔ)器110中提取指令。指令譯碼單元132對(duì)指令進(jìn)行譯碼,以確定關(guān)于該指令的基本信息,例如指令類型、源寄存器和目的寄存器。
在該實(shí)例中,處理器12是一種亂序執(zhí)行處理器。應(yīng)當(dāng)理解,也可以使用其它執(zhí)行類型的處理器。定序單元134使用該被譯碼的信息調(diào)度指令以供執(zhí)行。為了跟蹤指令,完成單元136可以具有數(shù)據(jù)和控制結(jié)構(gòu),用于存儲(chǔ)和提取關(guān)于被調(diào)度的指令的信息。當(dāng)指令由執(zhí)行單元138執(zhí)行時(shí),關(guān)于正在執(zhí)行和已經(jīng)執(zhí)行的指令的信息被收集在完成單元136中。執(zhí)行單元138可以使用多個(gè)執(zhí)行子單元。當(dāng)指令完成時(shí),完成單元136便提交這些指令的執(zhí)行結(jié)果;使這些指令的目的寄存器可以由隨后的指令利用,或者通過利用各種控制標(biāo)志指示這些目的寄存器中的值是有效的。一旦隨后的指令的源數(shù)據(jù)可獲得,便可向合適的執(zhí)行子單元發(fā)出這些隨后的指令。
此外,在這個(gè)例子中,處理器12被描述為一種推測(cè)(speculative)執(zhí)行處理器。一般地說,指令按順序被取出和執(zhí)行,直到一個(gè)分支型的指令有條件地或者無條件地改變?cè)撝噶盍鞒獭T谥噶钭g碼單元132識(shí)別一個(gè)條件分支操作之后,定序單元134可以認(rèn)識(shí)到所述條件基于的數(shù)據(jù)仍然是不可用的。在這種情況下,指令提取單元130可以使用分支預(yù)測(cè)單元140中的一個(gè)或多個(gè)分支預(yù)測(cè)機(jī)制來預(yù)測(cè)該條件的結(jié)果。然后控制被推測(cè)地改變,直到該條件的結(jié)果可被確定為止。根據(jù)處理器的能力,可以采用多個(gè)預(yù)測(cè)路徑,并從執(zhí)行流水線中清除不必要的分支。
具體地說,在這個(gè)例子中,當(dāng)指令譯碼單元132識(shí)別一個(gè)重復(fù)指令操作時(shí),定序單元134便調(diào)度所述指令以供執(zhí)行。重復(fù)指令操作一般由之前加有前綴“REP”的指令進(jìn)行標(biāo)識(shí)。指令要被重復(fù)的次數(shù)“n”被裝入CX寄存器139中。具體到本發(fā)明,CX寄存器139是一個(gè)每當(dāng)重復(fù)指令被執(zhí)行一次便減一(遞減)的計(jì)數(shù)寄存器。因而,執(zhí)行單元138將該指令執(zhí)行n次,或者直到滿足一個(gè)條件為止,每執(zhí)行一次使CX寄存器139減一。應(yīng)當(dāng)注意,本發(fā)明也可以利用每執(zhí)行一次重復(fù)指令便加一(遞增),直到一個(gè)指定的值的CX寄存器來實(shí)現(xiàn)。此外,本發(fā)明還可以利用在執(zhí)行重復(fù)指令之后便減一,直到一個(gè)指定值的CX寄存器來實(shí)現(xiàn)。
中斷控制單元142控制在指令處理期間發(fā)生的使指令流程控制被傳遞到一個(gè)可以由軟件或者由外部硬件提供的中斷處理例程的事件。在中斷時(shí)一些處理器狀態(tài)被處理器自動(dòng)保存。在完成中斷處理之后,可以執(zhí)行從中斷返回(return-from-interrupt,RFI),從而恢復(fù)被保存的處理器狀態(tài),此時(shí)處理器12可以繼續(xù)被中斷的指令的執(zhí)行。中斷控制單元142可以包括用于協(xié)助中斷處理的各種數(shù)據(jù)寄存器和控制寄存器。
當(dāng)指令被執(zhí)行時(shí)處理器發(fā)生的某些事件,例如高速緩存訪問、轉(zhuǎn)換旁視緩沖器(Trans1ation Lookaside Buffer,TLB)未命中。性能監(jiān)視器144監(jiān)視這些事件,并累計(jì)作為處理指令的結(jié)果而發(fā)生的事件的數(shù)量。性能監(jiān)視器144是一個(gè)軟件可訪問的機(jī)制,用于提供關(guān)于指令執(zhí)行和數(shù)據(jù)存儲(chǔ)的信息;其計(jì)數(shù)器寄存器和控制寄存器可在軟件控制下通過用于讀寫的專用指令被讀寫。性能監(jiān)視器144包括多個(gè)性能監(jiān)視計(jì)數(shù)器(PMC)或用于在一個(gè)或多個(gè)控制寄存器148的控制下對(duì)事件進(jìn)行計(jì)數(shù)的計(jì)數(shù)器寄存器146。控制寄存器一般被劃分成多個(gè)位字段,其允許進(jìn)行事件/信號(hào)選擇和累計(jì)。選擇事件的可允許組合使得這些計(jì)數(shù)器可以同時(shí)進(jìn)行操作;性能監(jiān)視器可用作監(jiān)視指令流水線的各個(gè)階段的性能的機(jī)制。
本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解,圖2的硬件可以根據(jù)該系統(tǒng)的實(shí)施而改變。所示的例子不意味著對(duì)本發(fā)明的體系結(jié)構(gòu)的限制。
現(xiàn)在參看圖3,圖3表示按照本發(fā)明的方法、系統(tǒng)和程序,顯示在一種計(jì)算機(jī)系統(tǒng)內(nèi)的多個(gè)軟件部分,并說明在作為軟件的功能層的這些部分之間的邏輯關(guān)系的方框圖。該計(jì)算系統(tǒng)的硬件處于層50中。位于該操作系統(tǒng)的層52中的內(nèi)核提供作為和所述硬件的接口的核心功能集。I/O功能和驅(qū)動(dòng)器位于層54中,存儲(chǔ)器管理和與存儲(chǔ)器相關(guān)的功能位于層56中。位于層58中的用戶應(yīng)用程序和其它程序訪問其它層中的功能,以便進(jìn)行一般的數(shù)據(jù)處理。層52、54和56作為一個(gè)整體可看作是一個(gè)特定設(shè)備的操作系統(tǒng)。假定所述操作系統(tǒng)是可擴(kuò)充的,可以對(duì)該操作系統(tǒng)添加軟件驅(qū)動(dòng)程序,以便支持用戶應(yīng)用程序所需的各種附加功能,例如用于支持添加到該系統(tǒng)中的新設(shè)備的設(shè)備驅(qū)動(dòng)程序。
本發(fā)明可以在各種硬件平臺(tái)上以及各種軟件環(huán)境中實(shí)施??梢栽谝粋€(gè)計(jì)算系統(tǒng)內(nèi)執(zhí)行多個(gè)操作系統(tǒng)。
現(xiàn)在參看圖4,圖4表示按照本發(fā)明的方法、系統(tǒng)和程序,利用跟蹤工具分析的數(shù)據(jù)處理系統(tǒng)中的多個(gè)軟件部分之間的關(guān)系的方框圖。跟蹤程序150包含用于分析應(yīng)用程序151的中斷處理例程。跟蹤程序150可被配置成用于處理正被分析的數(shù)據(jù)處理系統(tǒng)中的中斷的子集。例如,當(dāng)由于一個(gè)被取分支陷阱(taken-branch trap)或者重復(fù)指令中斷而發(fā)生中斷時(shí),跟蹤程序150可以功能上執(zhí)行各種跟蹤功能、簡(jiǎn)檔(profiling)功能或者調(diào)試功能;下文將可互換地使用跟蹤、簡(jiǎn)檔和調(diào)試這些術(shù)語。此外,在執(zhí)行一個(gè)異常分支時(shí),可以使用跟蹤程序150記錄數(shù)據(jù),所述的異常分支是在一個(gè)應(yīng)用進(jìn)程中的指定位置上的一段專用的代碼。跟蹤異常分支一般為了調(diào)試、性能分析或者增強(qiáng)功能而被插入。
一般地說,跟蹤程序150產(chǎn)生各種類型的信息的跟蹤數(shù)據(jù),其被寫入一個(gè)固定的(pinned)跟蹤數(shù)據(jù)緩沖器中,使得在處理異常或中斷時(shí)不需要輸入或輸出。接著,被寫入該固定的跟蹤數(shù)據(jù)緩沖器中的數(shù)據(jù)被寫入用于后處理的數(shù)據(jù)文件中。在本發(fā)明的情況下,跟蹤程序150產(chǎn)生重復(fù)指令執(zhí)行、以及被取分支指令和影響系統(tǒng)性能的其它類型的指令的跟蹤數(shù)據(jù)。
跟蹤程序150和應(yīng)用程序151都使用內(nèi)核152,所述內(nèi)核包括并支持系統(tǒng)級(jí)調(diào)用、實(shí)用程序和設(shè)備驅(qū)動(dòng)程序。根據(jù)實(shí)施,跟蹤程序150可以具有在層58上運(yùn)行的具有應(yīng)用級(jí)優(yōu)先權(quán)的一些模塊,以及在層52上運(yùn)行的具有可信的(trusted)系統(tǒng)級(jí)優(yōu)先權(quán)的其它模塊。具體地說,被使能處理異?;蛑袛嗟母櫝绦?50或其它驅(qū)動(dòng)程序由可信代碼處理(在特權(quán)的狀態(tài)下)。
應(yīng)當(dāng)注意,本發(fā)明的指令跟蹤功能可被置于多種環(huán)境中,包括內(nèi)核,內(nèi)核驅(qū)動(dòng)程序、操作系統(tǒng)模塊,或者跟蹤進(jìn)程或程序。下文將使用“跟蹤程序”或者“跟蹤軟件”來區(qū)分典型的內(nèi)核功能和由應(yīng)用程序產(chǎn)生的進(jìn)程。
現(xiàn)在參看圖5,圖5表示按照本發(fā)明的方法、系統(tǒng)和程序,跟蹤程序的一些典型階段的高層邏輯流程圖。首先,初始化階段155捕獲在跟蹤被啟動(dòng)時(shí)的計(jì)算機(jī)系統(tǒng)的狀態(tài)。該跟蹤初始化數(shù)據(jù)可以包括用于識(shí)別所有現(xiàn)有線程、所有被裝入的類,以及用于所述被裝入的類的所有方法的跟蹤記錄;隨后產(chǎn)生的跟蹤數(shù)據(jù)可以指示線程的切換,中斷,以及類和運(yùn)行時(shí)編譯執(zhí)行(jitted)的方法的加載和上載。可以寫入一個(gè)特殊的記錄,用于在跟蹤輸出中指示在何時(shí)所有的啟動(dòng)信息被寫入。接著,簡(jiǎn)檔階段156跟蹤記錄并把所述記錄寫入一個(gè)跟蹤緩沖器或文件中。在存儲(chǔ)器許可的前提下,產(chǎn)生的跟蹤輸出的長(zhǎng)度和詳細(xì)程度可以根據(jù)分析者用于簡(jiǎn)檔或調(diào)試特定程序的需要而定。
最后,后處理階段157把收集在所述緩沖器中的數(shù)據(jù)發(fā)送給一個(gè)文件以用于后處理。在后處理期間,按照在每個(gè)跟蹤記錄內(nèi)的信息的類型處理該跟蹤記錄。在所有這些跟蹤記錄被處理之后,所述信息通常被格式化,以便以報(bào)告的形式輸出。該跟蹤輸出可被發(fā)送給服務(wù)器,所述服務(wù)器分析來自計(jì)算系統(tǒng)上的進(jìn)程的跟蹤輸出。當(dāng)然,根據(jù)可利用的資源或其它因素,也可以在所述計(jì)算系統(tǒng)上進(jìn)行后處理,甚至在進(jìn)行跟蹤的同時(shí)進(jìn)行后處理。
具體地,在跟蹤初始化期間,為所有被裝入的代碼識(shí)別地址、可執(zhí)行程序(例如應(yīng)用程序)名稱以及其它相關(guān)的信息。然后跟蹤程序被啟動(dòng)(使能)把被跟蹤的地址映射到可執(zhí)行程序,由此把地址映射到該代碼內(nèi)的指令和所述代碼的符號(hào)信息。當(dāng)代碼被動(dòng)態(tài)地裝入時(shí),該信息也被識(shí)別。具體地說,當(dāng)代碼不是在后處理期間可以從盤上讀出的可執(zhí)行程序一部分(或者從盤上讀出的所述代碼的符號(hào)信息)時(shí),則使用該代碼的裝載地址及其長(zhǎng)度捕獲用于隨后的后處理的代碼。這個(gè)功能被許多使用Java虛擬機(jī)簡(jiǎn)檔接口(Java Virtual Machine Profiling Interface,JVMPI)的Java簡(jiǎn)檔程序(profiler)支持。
借助于在初始化階段識(shí)別地址、可執(zhí)行程序名稱和其它相關(guān)信息,然后在簡(jiǎn)檔階段期間,簡(jiǎn)單地記錄被執(zhí)行的代碼的進(jìn)程和地址便足夠了。根據(jù)在初始化階段期間識(shí)別的信息和在簡(jiǎn)檔階段期間記錄的進(jìn)程和地址,后處理階段使用符號(hào)映射來識(shí)別正被執(zhí)行的函數(shù)和方法的名稱,并確定執(zhí)行了哪個(gè)代碼。
現(xiàn)在參看圖6,圖6表示按照本發(fā)明的方法、系統(tǒng)和程序,在處理器內(nèi)的可用于揭示關(guān)于重復(fù)指令的執(zhí)行信息的重復(fù)指令寄存器的方框圖。如圖所示,處理器180,和處理器12類似,包括專用的重復(fù)計(jì)數(shù)寄存器182。重復(fù)計(jì)數(shù)寄存器182含有表示重復(fù)指令被調(diào)度的重復(fù)的次數(shù)的CX值的副本。重復(fù)計(jì)數(shù)寄存器182在物理上可被適當(dāng)?shù)刂糜谔幚砥?80內(nèi)的各個(gè)單元內(nèi)。此外,重復(fù)計(jì)數(shù)寄存器182可以作為CX寄存器來實(shí)現(xiàn)。應(yīng)當(dāng)注意,重復(fù)計(jì)數(shù)寄存器182不必是專用寄存器;處理器180可以向通用寄存器、性能監(jiān)視寄存器、或其它可被配置為或可適用于該被實(shí)施的處理器體系結(jié)構(gòu)的寄存器傳遞最近被執(zhí)行的指令的副本。此外,應(yīng)當(dāng)注意,重復(fù)計(jì)數(shù)寄存器可被共用,用于存儲(chǔ)至和來自被取分支指令的地址。
現(xiàn)在參看圖7,圖7表示按照本發(fā)明的方法、系統(tǒng)和程序,使能跟蹤重復(fù)指令的處理器的方框圖。如圖所示,處理器190包括中斷控制單元192,如圖2所述。中斷控制單元包括重復(fù)計(jì)數(shù)寄存器182。此外,中斷控制單元192包括控制寄存器196??刂萍拇嫫?96可以使用一個(gè)或多個(gè)位,所述的一個(gè)或多個(gè)位按照需要被置位或者被清除,用于表示該處理器內(nèi)的模式、條件或某些其它類型的操作狀態(tài)?!皹?biāo)志”這個(gè)術(shù)語一般用于描述一位(比特)字段。雖然在這個(gè)例子中被描述成中斷控制單元192內(nèi)的一種結(jié)構(gòu),但控制寄存器196可位于處理器內(nèi)的多個(gè)位置。
控制寄存器196包括重復(fù)使能(RE)標(biāo)志198。RE標(biāo)志198是一種可用軟件指定的標(biāo)志,其在檢測(cè)到重復(fù)指令時(shí)觸發(fā)一個(gè)中斷。圖4和圖5所示的跟蹤程序,以及更具體地重復(fù)中斷處理程序200可以置位(設(shè)置)RE標(biāo)志198,以便當(dāng)檢測(cè)到重復(fù)指令時(shí),或者當(dāng)重復(fù)指令已經(jīng)完成執(zhí)行時(shí)停止所述處理器。
此外,控制寄存器196包括單步使能(SSE)標(biāo)志199。SSE標(biāo)志199也是一種可用軟件指定的標(biāo)志,當(dāng)該標(biāo)志被置位時(shí),其使得在一個(gè)指令的成功執(zhí)行之后產(chǎn)生一個(gè)單步陷阱。此外,控制寄存器196包括被取分支使能(TBE)標(biāo)志197,當(dāng)該標(biāo)志被置位時(shí),其使得當(dāng)分支型指令成功地完成時(shí)產(chǎn)生被取分支陷阱。應(yīng)當(dāng)理解,在控制寄存器196內(nèi)也可能需要其它的標(biāo)志。例如,控制寄存器196也可以包括一些標(biāo)志,例如中斷使能(IE)標(biāo)志,其表示是否將要發(fā)生中斷,即,外部中斷是否將使該處理器把控制轉(zhuǎn)移給一個(gè)外部中斷處理程序。此外,應(yīng)當(dāng)注意,該重復(fù)中斷處理程序和被取分支中斷處理程序可以作為一個(gè)單獨(dú)處理程序來提供功能,其檢測(cè)在中斷之前出現(xiàn)的指令類型,并執(zhí)行用于所述指令類型的功能。
在第一選擇中,當(dāng)置位RE標(biāo)志198并且檢測(cè)到重復(fù)指令時(shí),中斷控制單元192則產(chǎn)生一個(gè)中斷(陷阱模式)。跟蹤程序、重復(fù)中斷處理程序200收集機(jī)器狀態(tài)信息,包括CX寄存器,其指示該重復(fù)指令被設(shè)置要執(zhí)行的次數(shù)。此外,重復(fù)中斷處理程序200可以置位SSE標(biāo)志199,以便跟蹤該重復(fù)指令的執(zhí)行,其重復(fù)次數(shù)在CX寄存器中被指示。
在第二選擇中,當(dāng)RE標(biāo)志置位并且檢測(cè)到重復(fù)指令時(shí),則中斷控制單元192直到最后一次執(zhí)行該重復(fù)指令時(shí)才中斷處理器。不過,第一次執(zhí)行重復(fù)指令時(shí),CX寄存器便被復(fù)制到重復(fù)計(jì)數(shù)寄存器182中。當(dāng)檢測(cè)到重復(fù)指令的最后的執(zhí)行時(shí),中斷控制單元192則產(chǎn)生一個(gè)中斷。重復(fù)指令處理程序讀出在CX寄存器中的值和重復(fù)計(jì)數(shù)寄存器中的值之間的差。
第二選擇提供的優(yōu)點(diǎn)是,如果重復(fù)指令已經(jīng)出現(xiàn),則只跟蹤所述重復(fù)指令。此外,一些重復(fù)指令是有條件的重復(fù)指令。使用這些指令可能需要把CX寄存器設(shè)置為其最高值,使得所述指令可以重復(fù)許多次,直到檢測(cè)到一個(gè)條件。在有條件的重復(fù)指令的情況下,在最后執(zhí)行之后跟蹤該重復(fù)指令將提供更精確的跟蹤。
現(xiàn)在參看圖8,圖8表示使用處理器內(nèi)的重復(fù)使能標(biāo)志的進(jìn)程和程序的高層邏輯流程圖。如圖所示,該進(jìn)程在框210開始,然后前進(jìn)到框212???12表示執(zhí)行一個(gè)指令。接著,框216判斷是否RE標(biāo)志被置位。如果該RE標(biāo)志沒有被置位,則進(jìn)程結(jié)束。如果RE標(biāo)志被置位,則該進(jìn)程轉(zhuǎn)到框214???14判斷該被執(zhí)行的指令是否是重復(fù)指令的第一次執(zhí)行。如果該指令不是重復(fù)指令的第一次執(zhí)行,則該進(jìn)程結(jié)束。如果該指令是重復(fù)指令的第一次執(zhí)行,則該進(jìn)程轉(zhuǎn)到框218。框218描述把CX寄存器中的值寫入重復(fù)計(jì)數(shù)寄存器中。接著,框220描述產(chǎn)生跟蹤中斷,并且該進(jìn)程結(jié)束。應(yīng)當(dāng)注意,在執(zhí)行一個(gè)指令之后,如果所述指令不是重復(fù)指令,則可以判斷所述指令是被取分支指令還是其它類型的專用指令。如果該指令是被取分支指令并且TBE標(biāo)志被置位,則該進(jìn)程將產(chǎn)生一個(gè)中斷跟蹤,以便跟蹤該被取分支指令。
現(xiàn)在參看圖9,圖9表示使用處理器內(nèi)的重復(fù)使能標(biāo)志以跟蹤一個(gè)已完成的重復(fù)指令的進(jìn)程和程序的高層邏輯流程圖。如圖所示,該進(jìn)程在框230開始,然后前進(jìn)到框232???32表示執(zhí)行一個(gè)指令。接著,框240判斷是否RE標(biāo)志被置位。如果RE標(biāo)志未被置位,則該進(jìn)程結(jié)束。如果RE標(biāo)志被置位,則該進(jìn)程轉(zhuǎn)到框234???34判斷該被執(zhí)行的指令是否是重復(fù)指令。如果該指令不是重復(fù)指令,則該進(jìn)程結(jié)束。如果該指令是重復(fù)指令,則該進(jìn)程轉(zhuǎn)到框236。框236確定指令是否是重復(fù)指令的第一次執(zhí)行。如果是第一次執(zhí)行,則進(jìn)程轉(zhuǎn)到框242。框242描述把CX寄存器的副本寫入重復(fù)計(jì)數(shù)寄存器,然后進(jìn)程返回到框232。
回到框236,如果該指令不是第一次執(zhí)行,則該進(jìn)程轉(zhuǎn)到框238,以判斷其是否是最后一次執(zhí)行。如果其不是最后一次執(zhí)行,則該進(jìn)程轉(zhuǎn)到框232;如果其是最后一次執(zhí)行,則進(jìn)程轉(zhuǎn)到框244???44描述產(chǎn)生一個(gè)跟蹤中斷,并且該進(jìn)程結(jié)束。優(yōu)選地,跟蹤程序讀出在重復(fù)計(jì)數(shù)寄存器中的值和CX寄存器中的值之間的差,以便記錄該重復(fù)指令被執(zhí)行的實(shí)際次數(shù)。
現(xiàn)在參看圖10,圖10表示按照本發(fā)明的方法、系統(tǒng)和程序,使能跟蹤和存儲(chǔ)重復(fù)指令的處理器的方框圖。如圖所示,處理器250包括一個(gè)中斷控制單元252,其具有重復(fù)計(jì)數(shù)寄存器182和控制寄存器196,如圖7所示。此外,中斷控制單元252包括重復(fù)指令信息緩沖器259,用于存儲(chǔ)多個(gè)重復(fù)指令而不僅僅是一個(gè)重復(fù)指令的計(jì)數(shù)。指令信息緩沖器259可以是一組專用寄存器,或者被并入現(xiàn)有寄存器內(nèi)。重要的是,指令信息緩沖器259可以被跟蹤程序讀取。應(yīng)當(dāng)注意,指令信息緩沖器259可被共用,用于寫重復(fù)指令的CX值,并用于寫至和自被取分支指令的地址。例如,在指令緩沖器中的項(xiàng)目253包括重復(fù)指令和被取分支指令的信息。重復(fù)指令和被取分支指令的項(xiàng)目可以利用屏蔽技術(shù)或者可用于對(duì)緩沖器中的數(shù)據(jù)之間進(jìn)行區(qū)分的其它技術(shù)來區(qū)分。
處理器在指令信息緩沖器259中放置CX寄存器值的副本。RE標(biāo)志198和TBE標(biāo)志197可用于限定指令信息緩沖器259的使用。如果置位RE標(biāo)志198,則處理器應(yīng)在重復(fù)指令信息緩沖器中存儲(chǔ)CX寄存器值(指示該重復(fù)指令的計(jì)數(shù))。此外,如果置位TBE標(biāo)志197,則處理器應(yīng)當(dāng)存儲(chǔ)自和至被取分支指令的地址。在這個(gè)例子中,指令信息緩沖器259以輪轉(zhuǎn)的方式被填充。始端指針258和末端指針256用于指向指令信息緩沖器259中的第一項(xiàng)和最后一項(xiàng)。
作為第一選擇,在RE標(biāo)志198被置位時(shí),當(dāng)檢測(cè)到第一個(gè)重復(fù)指令,CX寄存器的值被復(fù)制到指令信息緩沖器259中。然后,指令信息緩沖器259包含至少被執(zhí)行一次的每個(gè)重復(fù)指令的預(yù)期的計(jì)數(shù)。
作為第二選擇,在RE標(biāo)志198被置位時(shí),當(dāng)檢測(cè)到重復(fù)指令的第一次執(zhí)行,CX寄存器值可被復(fù)制到重復(fù)計(jì)數(shù)寄存器182中。然后,當(dāng)檢測(cè)到該重復(fù)指令的最后執(zhí)行時(shí),處理器復(fù)制在重復(fù)計(jì)數(shù)寄存器182中的原始CX寄存器值和在最后重復(fù)指令執(zhí)行之后的CX寄存器值之間的差,使得該重復(fù)指令被執(zhí)行的實(shí)際次數(shù)被存儲(chǔ)在指令信息緩沖器259中。
為了避免緩沖器溢出,將RE滿標(biāo)志254和指令信息緩沖器259相關(guān)聯(lián)。當(dāng)指令信息緩沖器259滿時(shí),RE滿標(biāo)志254被置位,因而產(chǎn)生中斷??商娲?,其它類型的標(biāo)志能夠引起中斷。例如,如果響應(yīng)被取分支指令而置位TBE標(biāo)志197,則可以啟動(dòng)一個(gè)中斷,以便清空指令信息緩沖器259。
響應(yīng)所述中斷,處理器250調(diào)用一個(gè)跟蹤程序,例如重復(fù)中斷處理程序200,以試圖清空指令信息緩沖器259。在重復(fù)中斷處理程序200的控制下把指令信息緩沖器259騰空到另一個(gè)存儲(chǔ)器單元。一旦完成被緩沖的信息的轉(zhuǎn)移,重復(fù)中斷處理程序200便發(fā)出一個(gè)從中斷返回(RFI),從而將控制返還給處理器260,此時(shí)處理器260復(fù)位始端指針258和末端指針256。
現(xiàn)在參看圖11,圖11表示按照本發(fā)明的方法、系統(tǒng)和程序,使能跟蹤和在處理器外部的存儲(chǔ)器內(nèi)存儲(chǔ)重復(fù)指令的處理器的方框圖。處理器260與處理器250類似,不同之處在于,處理器260利用重復(fù)指令信息緩沖器指針269代替指令信息緩沖器。在處理器260內(nèi)的緩沖器的大小限制與在處理器260的外部的存儲(chǔ)器中可利用的存儲(chǔ)區(qū)域相比是一種較大的限制。因此,重復(fù)指令緩沖器指針269指向該處理器外部的存儲(chǔ)器中的一個(gè)可以找到指令信息緩沖器的位置。應(yīng)當(dāng)注意,也可以使用指令信息緩沖器存儲(chǔ)被取分支指令。此外,應(yīng)當(dāng)注意,可以使用一種指向一個(gè)單獨(dú)的被取分支指令信息緩沖器的一種單獨(dú)的被取分支指令信息緩沖器指針。
當(dāng)合適時(shí),所述處理器向由重復(fù)指令緩沖器指針269所指的指令信息緩沖器寫入CX寄存器值的副本?;蛘撸撎幚砥飨蛴芍貜?fù)指令緩沖器指針269所指的指令信息緩沖器寫入CX寄存器值和重復(fù)計(jì)數(shù)寄存器182中存儲(chǔ)的值之間的差。指令信息緩沖器(IB)的大小被保持在IB大小寄存器268內(nèi)。下一個(gè)未使用的項(xiàng)目偏移緩沖器的指示器被保持在“下一”寄存器266中。當(dāng)重復(fù)指令信息緩沖器滿時(shí),置位滿標(biāo)志264,這產(chǎn)生一個(gè)中斷,調(diào)用重復(fù)中斷處理程序200,以控制將指令信息緩沖器存儲(chǔ)到一個(gè)跟蹤緩沖器單元。
現(xiàn)在參看圖12,圖12表示利用重復(fù)使能標(biāo)志跟蹤緩沖器中的重復(fù)指令計(jì)數(shù)的進(jìn)程和程序的高層邏輯流程圖。如圖所示,該進(jìn)程在框270開始,而后前進(jìn)到框272。框272表示執(zhí)行一個(gè)指令。接著,框276判斷是否已置位RE標(biāo)志。如果RE標(biāo)志被置位,則該進(jìn)程轉(zhuǎn)到框274,否則該進(jìn)程轉(zhuǎn)到框286???74判斷該被執(zhí)行的指令是否是重復(fù)指令的第一次執(zhí)行。如果該被執(zhí)行的指令是重復(fù)指令的第一次執(zhí)行,則該進(jìn)程轉(zhuǎn)到框278;否則該進(jìn)程結(jié)束???78描述把CX寄存器計(jì)數(shù)的副本寫入指令信息緩沖器中?;蛘?,CX寄存器計(jì)數(shù)的副本可被寫入由重復(fù)指令信息緩沖器指針?biāo)傅闹噶钚畔⒕彌_器中。此外,或者,當(dāng)檢測(cè)到重復(fù)指令的第一次執(zhí)行時(shí),CX寄存器的值可被存儲(chǔ)在一個(gè)重復(fù)計(jì)數(shù)寄存器中。此后當(dāng)檢測(cè)到該重復(fù)指令的最后一次執(zhí)行時(shí),在重復(fù)計(jì)數(shù)寄存器中存儲(chǔ)的CX寄存器中的值和CX寄存器的當(dāng)前值之間的差被存入指令信息緩沖器中。
接著,框280判斷指令信息緩沖器是否已滿。如果指令信息緩沖器未滿,則使末端指針遞增并結(jié)束該進(jìn)程;否則,該進(jìn)程轉(zhuǎn)到框282。框282表示置位滿標(biāo)志。接著,框284描述產(chǎn)生一個(gè)跟蹤中斷,并結(jié)束該進(jìn)程。
回該到進(jìn)程的開始步驟,框286描述判斷是否置位了TBE標(biāo)志。如果TBE標(biāo)志被置位,則該進(jìn)程轉(zhuǎn)到框285;否則該進(jìn)程結(jié)束???85判斷一個(gè)分支是否被采取。如果未采取一個(gè)分支,則該進(jìn)程結(jié)束。如果采取了一個(gè)分支,則該進(jìn)程轉(zhuǎn)到框287???87表示將自和至地址復(fù)制到標(biāo)為被取分支記錄的指令信息緩沖器中,然后進(jìn)程轉(zhuǎn)到框280。
現(xiàn)在參看圖13,圖13表示按照本發(fā)明的方法、系統(tǒng)和程序,允許控制對(duì)重復(fù)指令的跟蹤的處理器的方框圖。如圖所示,除去一個(gè)處理器內(nèi)一般具有的其它部件之外,處理器290包括性能監(jiān)視器292。性能監(jiān)視器292包括計(jì)數(shù)寄存器294和控制寄存器196。
計(jì)數(shù)寄存器294包括重復(fù)出現(xiàn)計(jì)數(shù)器296。按照一種選擇,重復(fù)出現(xiàn)計(jì)數(shù)器296被設(shè)置用于計(jì)數(shù)重復(fù)指令的出現(xiàn)。該計(jì)數(shù)器被編程為差一步溢出。在檢測(cè)到出現(xiàn)重復(fù)指令時(shí),該計(jì)數(shù)器增加而溢出,從而觸發(fā)一個(gè)中斷。所述中斷調(diào)用重復(fù)中斷處理程序,用于跟蹤該指令流,包括CX寄存器中的值。CX寄存器中的值可以指示重復(fù)指令被調(diào)度而執(zhí)行的次數(shù)。
此外,計(jì)數(shù)寄存器294包括重復(fù)執(zhí)行計(jì)數(shù)器298。按照第二選擇,重復(fù)出現(xiàn)計(jì)數(shù)器296被設(shè)置來計(jì)數(shù)重復(fù)指令的完成的出現(xiàn)。重復(fù)執(zhí)行計(jì)數(shù)器298被設(shè)置用于計(jì)數(shù)一個(gè)單個(gè)重復(fù)指令實(shí)際上被執(zhí)行的次數(shù)。在檢測(cè)到第一個(gè)重復(fù)指令時(shí),重復(fù)執(zhí)行計(jì)數(shù)器298開始計(jì)數(shù)該重復(fù)指令執(zhí)行的次數(shù)。在檢測(cè)到該重復(fù)指令的完成時(shí),重復(fù)出現(xiàn)計(jì)數(shù)器296加一,從而引起溢出,其觸發(fā)一個(gè)中斷。所述中斷調(diào)用重復(fù)中斷處理程序200,以便讀取重復(fù)執(zhí)行計(jì)數(shù)器298中的值。具體地,從重復(fù)執(zhí)行計(jì)數(shù)器298中讀取的值是該重復(fù)指令實(shí)際被執(zhí)行的次數(shù)。應(yīng)當(dāng)注意,計(jì)數(shù)寄存器294可以包括其它的計(jì)數(shù)器,使得在中斷發(fā)生之前可以計(jì)數(shù)多個(gè)重復(fù)指令執(zhí)行的次數(shù)。
現(xiàn)在參看圖14,圖14表示利用性能監(jiān)視計(jì)數(shù)器控制中斷以便跟蹤重復(fù)指令的進(jìn)程和程序的高層邏輯流程圖。如圖所示,該進(jìn)程在框300開始,此后前進(jìn)到框302。框302表示被執(zhí)行的指令的檢測(cè)。接著,框306判斷是否RE標(biāo)志被置位。如果RE標(biāo)志被置位,則該進(jìn)程轉(zhuǎn)到框304;否則該進(jìn)程結(jié)束???04判斷該被執(zhí)行的指令是否是重復(fù)指令的第一次執(zhí)行。如果該被執(zhí)行的指令是重復(fù)指令的第一次執(zhí)行,則該進(jìn)程轉(zhuǎn)到框308;否則該進(jìn)程結(jié)束???08描述使重復(fù)出現(xiàn)計(jì)數(shù)器加一。接著,框310判斷重復(fù)出現(xiàn)計(jì)數(shù)器是否溢出。如果該重復(fù)出現(xiàn)計(jì)數(shù)器溢出,則該進(jìn)程轉(zhuǎn)到框312;否則該進(jìn)程結(jié)束???12描述產(chǎn)生一個(gè)跟蹤中斷,并且該進(jìn)程結(jié)束。
現(xiàn)在參看圖15,圖15表示通過多個(gè)性能監(jiān)視計(jì)數(shù)器控制中斷以便跟蹤重復(fù)指令的進(jìn)程和程序的高層邏輯流程圖。如圖所示,該進(jìn)程在框320開始,然后前進(jìn)到框322。框322表示被執(zhí)行的指令的檢測(cè)。接著,框326判斷是否RE標(biāo)志被置位。如果RE標(biāo)志被置位,則該進(jìn)程轉(zhuǎn)到框324;否則該進(jìn)程結(jié)束???24判斷該被執(zhí)行的指令是否是重復(fù)指令的第一次執(zhí)行。如果該被執(zhí)行的指令是重復(fù)指令的第一次執(zhí)行,則該進(jìn)程轉(zhuǎn)到框328;否則該進(jìn)程結(jié)束。框328表示使重復(fù)執(zhí)行計(jì)數(shù)器加一。接著,框330表示檢測(cè)一個(gè)被執(zhí)行的指令。此后,框332判斷該被執(zhí)行的指令是否是重復(fù)指令的最后一次執(zhí)行。如果該被執(zhí)行的指令是重復(fù)指令的最后一次執(zhí)行,則該進(jìn)程轉(zhuǎn)到框334;否則該進(jìn)程轉(zhuǎn)到框328,除非檢測(cè)到一個(gè)越權(quán)(override)中斷指令???34描述使重復(fù)執(zhí)行計(jì)數(shù)器加一。接著,框336描述使重復(fù)出現(xiàn)計(jì)數(shù)器加一。框338判斷重復(fù)出現(xiàn)計(jì)數(shù)器是否溢出。如果重復(fù)出現(xiàn)計(jì)數(shù)器溢出,則該進(jìn)程轉(zhuǎn)到框340;否則該進(jìn)程結(jié)束???40描述產(chǎn)生一個(gè)跟蹤中斷,并且結(jié)束該進(jìn)程。
現(xiàn)在參看圖16,圖16表示用于在一個(gè)應(yīng)用程序中一次一個(gè)重復(fù)指令地插入跟蹤異常分支的進(jìn)程和程序的高層邏輯流程圖。所述的進(jìn)程和程序可以由跟蹤程序,例如重復(fù)中斷處理程序執(zhí)行。所述進(jìn)程最好一次一個(gè)重復(fù)指令地插入中斷異常分支。如圖所示,該進(jìn)程在框350開始,然后前進(jìn)到框351???51中,對(duì)于第一順序重復(fù)指令,修改操作碼以便引起異常(引起中斷)。接著,框352判斷是否檢測(cè)到使程序經(jīng)過該被修改的重復(fù)指令的被取分支中斷。如果檢測(cè)到經(jīng)過該被修改的重復(fù)指令的被取分支中斷,則該進(jìn)程轉(zhuǎn)到框354。框354恢復(fù)先前被修改的重復(fù)指令的操作碼。接著,框35 6修改下一個(gè)順序重復(fù)指令的操作碼,從而引起中斷,并且該進(jìn)程返回到框352。
回到框352,如果未檢測(cè)到被取分支中斷,則該進(jìn)程轉(zhuǎn)到框358。框358判斷是否檢測(cè)到用于該被修改的重復(fù)指令的陷阱。如果未檢測(cè)到陷阱,則該進(jìn)程判斷是否在框364達(dá)到應(yīng)用程序的結(jié)尾,并且如果未達(dá)到應(yīng)用程序的結(jié)尾則返回框352。如果檢測(cè)到陷阱,則該進(jìn)程轉(zhuǎn)到框360,將CX寄存器和該指令流的其它部分讀入跟蹤緩沖器。接著,框362中恢復(fù)該重復(fù)指令的操作碼,使得從中斷返回并且該進(jìn)程轉(zhuǎn)到框356。
重要的是注意到,雖然本發(fā)明在具有完整功能的數(shù)據(jù)處理系統(tǒng)的環(huán)境下進(jìn)行了說明,但是本領(lǐng)域普通技術(shù)人員應(yīng)當(dāng)理解,本發(fā)明的進(jìn)程能夠以計(jì)算機(jī)可讀介質(zhì)的指令的形式以及各種形式分發(fā),并且不管實(shí)際上用于實(shí)現(xiàn)該分發(fā)的信號(hào)承載介質(zhì)的具體類型,本發(fā)明都同樣適用。計(jì)算機(jī)可讀介質(zhì)的例子包括可記錄型的介質(zhì),例如軟盤、硬盤驅(qū)動(dòng)器、RAM、CD-ROM、DVD-ROM以及傳輸型介質(zhì),例如數(shù)字和模擬通信鏈路,利用傳輸形式的有線或無線通信鏈路,例如射頻和光波傳輸。計(jì)算機(jī)可讀介質(zhì)還可以采取編碼格式的形式,其在實(shí)際地用于特定的數(shù)據(jù)處理系統(tǒng)中時(shí)被譯碼。
雖然本發(fā)明參照優(yōu)選實(shí)施例進(jìn)行了特定的顯示和描述,但是本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,不脫離本發(fā)明的精神和范圍,可以對(duì)本發(fā)明的形式和細(xì)節(jié)進(jìn)行各種改變。
權(quán)利要求
1.一種使能跟蹤重復(fù)指令的方法,包括在處理器內(nèi)執(zhí)行一個(gè)重復(fù)指令;響應(yīng)檢測(cè)到在所述重復(fù)指令的最后一次執(zhí)行期間置位的重復(fù)指令標(biāo)志,在所述處理器內(nèi)啟動(dòng)一個(gè)中斷;以及使能在所述中斷期間從所述處理器內(nèi)的一個(gè)存儲(chǔ)單元中讀取所述重復(fù)指令的執(zhí)行的計(jì)數(shù)。
2.按照權(quán)利要求1所述的使能跟蹤重復(fù)指令的方法,還包括響應(yīng)檢測(cè)到所述重復(fù)指令的第一次執(zhí)行,把所述重復(fù)指令的第一計(jì)數(shù)值復(fù)制到所述存儲(chǔ)單元中,所述存儲(chǔ)單元包括在所述處理器內(nèi)的重復(fù)計(jì)數(shù)寄存器和可由所述處理器訪問的指令信息緩沖器當(dāng)中的至少一個(gè)。
3.按照權(quán)利要求1所述的使能跟蹤重復(fù)指令的方法,其中所述重復(fù)指令標(biāo)志是以下當(dāng)中的至少一個(gè)被置位引起中斷的重復(fù)使能標(biāo)志,由溢出、跟蹤異常分支指令、性能監(jiān)視計(jì)數(shù)器的溢出置位的緩沖器滿標(biāo)志。
4.按照權(quán)利要求1所述的使能跟蹤重復(fù)指令的方法,其中使能讀取所述重復(fù)指令的執(zhí)行的計(jì)數(shù)的步驟還包括使能一個(gè)跟蹤程序從包含保持所述執(zhí)行的計(jì)數(shù)的所述處理器內(nèi)的CX寄存器、保持所述執(zhí)行的計(jì)數(shù)的所述處理器內(nèi)的重復(fù)計(jì)數(shù)寄存器、可以通過所述處理器訪問的保持所述執(zhí)行的計(jì)數(shù)的指令信息緩沖器中的至少一個(gè)的所述存儲(chǔ)單元,讀取保持執(zhí)行的第一計(jì)數(shù)的所述重復(fù)計(jì)數(shù)寄存器和保持執(zhí)行的第二計(jì)數(shù)的所述CX寄存器之間的差。
5.按照權(quán)利要求1所述的使能跟蹤重復(fù)指令的方法,還包括跟蹤作為所述處理器內(nèi)的存儲(chǔ)單元的性能監(jiān)視計(jì)數(shù)器內(nèi)的所述執(zhí)行的計(jì)數(shù);以及使能從所述性能監(jiān)視計(jì)數(shù)器讀取所述執(zhí)行的計(jì)數(shù)。
6.按照權(quán)利要求5所述的使能跟蹤重復(fù)指令的方法,還包括只在跟蹤多個(gè)重復(fù)指令的執(zhí)行的計(jì)數(shù)之后,啟動(dòng)所述中斷。
7.按照權(quán)利要求1所述的使能跟蹤重復(fù)指令的方法,包括響應(yīng)檢測(cè)到中斷,使能一個(gè)跟蹤程序從所述存儲(chǔ)單元中讀取重復(fù)指令的執(zhí)行的計(jì)數(shù)以及執(zhí)行的地址到固定緩沖器中;以及控制所述執(zhí)行的地址與在所述執(zhí)行的地址存儲(chǔ)的可執(zhí)行程序的指令的匹配,以將所述執(zhí)行的計(jì)數(shù)映射到所述可執(zhí)行程序內(nèi)的一個(gè)特定的重復(fù)指令。
8.一種使能跟蹤重復(fù)指令的系統(tǒng),包括可由跟蹤程序跟蹤的處理器;用于在所述處理器內(nèi)執(zhí)行重復(fù)指令的裝置;用于響應(yīng)檢測(cè)到在所述重復(fù)指令的最后一次執(zhí)行期間置位的重復(fù)指令標(biāo)志,在所述處理器內(nèi)啟動(dòng)一個(gè)中斷的裝置;以及用于使能在所述中斷期間從所述處理器內(nèi)的存儲(chǔ)單元中讀取所述重復(fù)指令的執(zhí)行的計(jì)數(shù)的裝置。
9.按照權(quán)利要求8所述的使能跟蹤重復(fù)指令的系統(tǒng),還包括用于響應(yīng)檢測(cè)到所述重復(fù)指令的第一次執(zhí)行,把所述重復(fù)指令的第一計(jì)數(shù)值復(fù)制到所述存儲(chǔ)單元中的裝置,所述存儲(chǔ)單元包括在所述處理器內(nèi)的重復(fù)計(jì)數(shù)寄存器和可由所述處理器訪問的指令信息緩沖器中的至少一個(gè)。
10.按照權(quán)利要求8所述的使能跟蹤重復(fù)指令的系統(tǒng),其中所述重復(fù)指令標(biāo)志是以下當(dāng)中的至少一個(gè)被置位引起中斷的重復(fù)使能標(biāo)志,由溢出、跟蹤異常分支指令、性能監(jiān)視計(jì)數(shù)器的溢出置位的緩沖器滿標(biāo)志。
11.按照權(quán)利要求8所述的使能跟蹤重復(fù)指令的系統(tǒng),其中使能讀取所述重復(fù)指令的執(zhí)行的計(jì)數(shù)的裝置還包括用于使能一個(gè)跟蹤程序從包含保持所述執(zhí)行的計(jì)數(shù)的所述處理器內(nèi)的CX寄存器、保持所述執(zhí)行的計(jì)數(shù)的所述處理器內(nèi)的重復(fù)計(jì)數(shù)寄存器、可以通過所述處理器訪問的用于保持所述執(zhí)行的計(jì)數(shù)的指令信息緩沖器中的至少一個(gè)的所述存儲(chǔ)單元,讀取保持執(zhí)行的第一計(jì)數(shù)的所述重復(fù)計(jì)數(shù)寄存器和保持執(zhí)行的第二計(jì)數(shù)的所述CX寄存器之間的差的裝置。
12.按照權(quán)利要求8所述的使能跟蹤重復(fù)指令的系統(tǒng),還包括用于跟蹤作為所述處理器內(nèi)的存儲(chǔ)單元的性能監(jiān)視計(jì)數(shù)器內(nèi)的所述執(zhí)行的計(jì)數(shù)的裝置;以及用于使能從所述性能監(jiān)視計(jì)數(shù)器讀取所述執(zhí)行的計(jì)數(shù)的裝置。
13.按照權(quán)利要求12所述的使能跟蹤重復(fù)指令的系統(tǒng),還包括用于只在跟蹤多個(gè)重復(fù)指令的執(zhí)行的計(jì)數(shù)之后,啟動(dòng)所述中斷的裝置。
14.按照權(quán)利要求8所述的使能跟蹤重復(fù)指令的系統(tǒng),包括用于響應(yīng)檢測(cè)到中斷,使能一個(gè)跟蹤程序從所述存儲(chǔ)單元中讀取重復(fù)指令的執(zhí)行的計(jì)數(shù)以及執(zhí)行的地址到固定緩沖器中的裝置;以及用于控制所述執(zhí)行的地址與在所述執(zhí)行的地址存儲(chǔ)的可執(zhí)行程序的指令的匹配,以將所述執(zhí)行的計(jì)數(shù)映射到所述可執(zhí)行程序內(nèi)的一個(gè)特定的重復(fù)指令的裝置。
15.一種用于控制重復(fù)指令的跟蹤的方法,包括修改第一順序重復(fù)指令,從而在處理器中引起中斷;響應(yīng)檢測(cè)到所述處理器中的所述中斷,跟蹤所述重復(fù)指令,并修改所述重復(fù)指令以從中斷返回;以及響應(yīng)檢測(cè)到經(jīng)過所述第一順序重復(fù)指令的分支中斷,恢復(fù)所述重復(fù)指令,并修改下一個(gè)順序重復(fù)指令以引起中斷。
全文摘要
本發(fā)明提供了一種使能跟蹤重復(fù)指令的方法和系統(tǒng)。在處理器內(nèi)執(zhí)行一個(gè)重復(fù)指令。響應(yīng)檢測(cè)到在所述重復(fù)指令的最后一次執(zhí)行期間置位重復(fù)指令標(biāo)志,在所述處理器內(nèi)啟動(dòng)一個(gè)中斷。在所述中斷期間,所述處理器利用跟蹤程序或外部硬件啟動(dòng)從所述處理器內(nèi)的一個(gè)存儲(chǔ)單元中讀取所述重復(fù)指令的執(zhí)行的計(jì)數(shù)。
文檔編號(hào)G06F11/28GK1508690SQ20031012155
公開日2004年6月30日 申請(qǐng)日期2003年12月18日 優(yōu)先權(quán)日2002年12月19日
發(fā)明者J·E·小德威特, F·E·萊文, R·J·厄克特, J E 小德威特, 厄克特, 萊文 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司