專利名稱:頁表中維護(hù)性能監(jiān)測結(jié)構(gòu)用于監(jiān)測程序性能的方法和設(shè)備的制作方法
技術(shù)領(lǐng)域:
本發(fā)明一般涉及一種改進(jìn)的數(shù)據(jù)處理系統(tǒng)。具體地說,本發(fā)明提供一種用于獲得數(shù)據(jù)處理系統(tǒng)內(nèi)的性能數(shù)據(jù)的方法和設(shè)備。更具體地說,本發(fā)明提供一種用于在獲得數(shù)據(jù)處理系統(tǒng)內(nèi)的性能數(shù)據(jù)時(shí)對(duì)軟件工具提供硬件協(xié)助的方法和設(shè)備。
背景技術(shù):
在分析和增強(qiáng)數(shù)據(jù)處理系統(tǒng)和在該數(shù)據(jù)處理系統(tǒng)內(nèi)執(zhí)行的應(yīng)用程序的性能時(shí),知道數(shù)據(jù)處理系統(tǒng)內(nèi)的哪些軟件模塊正在使用系統(tǒng)資源是有幫助的。數(shù)據(jù)處理系統(tǒng)的有效管理和增強(qiáng)需要知道如何和何時(shí)使用了各種系統(tǒng)資源。性能工具用來監(jiān)測和檢查數(shù)據(jù)處理系統(tǒng),以確定各種軟件應(yīng)用程序在數(shù)據(jù)處理系統(tǒng)內(nèi)執(zhí)行時(shí)的資源消耗。例如,性能工具可以識(shí)別數(shù)據(jù)處理系統(tǒng)中最頻繁執(zhí)行的模塊和指令,或者可以識(shí)別分配最大量的存儲(chǔ)器或執(zhí)行最多I/O請(qǐng)求的那些模塊。硬件性能工具可以內(nèi)置在系統(tǒng)中,或者在以后的時(shí)間點(diǎn)添加。
一種公知的軟件性能工具是跟蹤工具。跟蹤工具可以使用多種技術(shù)來提供表示執(zhí)行程序的執(zhí)行流的跟蹤信息。一種技術(shù)通過隨著特定事件的發(fā)生而對(duì)其進(jìn)行記錄來跟蹤特定指令序列,即所謂的基于事件的概略(profiling)技術(shù)。例如,跟蹤工具可以記錄對(duì)模塊、子例程、方法、函數(shù)或系統(tǒng)組件的每一次進(jìn)入和每一次退出?;蛘撸櫣ぞ呖梢杂涗浢恳粋€(gè)存儲(chǔ)器分配請(qǐng)求的請(qǐng)求者以及為其分配的存儲(chǔ)器量。典型地,為每一個(gè)這樣的事件產(chǎn)生時(shí)間戳記錄。還使用類似于進(jìn)入-退出記錄的對(duì)應(yīng)記錄對(duì)來跟蹤開始和完成I/O或數(shù)據(jù)傳輸以及用于很多其它感興趣事件的任意代碼段的執(zhí)行。
為了改善由不同計(jì)算機(jī)家族生成的代碼的性能,經(jīng)常有必要確定處理器在執(zhí)行代碼時(shí)在何處花費(fèi)了時(shí)間,這樣的工作在計(jì)算機(jī)處理領(lǐng)域內(nèi)通常稱作定位“熱點(diǎn)”。在理想情況下,希望以指令和/或源代碼行級(jí)別查出這樣的熱點(diǎn),從而將注意力集中在通過代碼改進(jìn)而可能受益最大的區(qū)域。
另一種跟蹤技術(shù)涉及周期性地對(duì)程序的執(zhí)行流進(jìn)行采樣,以識(shí)別該程序似乎花費(fèi)大量時(shí)間的特定程序位置。該技術(shù)基于以規(guī)則間隔周期性地中斷應(yīng)用程序或數(shù)據(jù)處理系統(tǒng)執(zhí)行的思想,即所謂的基于樣本的概略。每次中斷時(shí),對(duì)預(yù)定時(shí)間長度或者預(yù)定次數(shù)的感興趣事件記錄信息。例如,在每個(gè)間隔期間可以記錄當(dāng)前執(zhí)行線程的程序計(jì)數(shù)器,其中該線程是正被進(jìn)行概略的較大程序的可執(zhí)行部分。可以在后處理時(shí)對(duì)照數(shù)據(jù)處理系統(tǒng)的裝載圖(load map)和符號(hào)表信息來解析這些值,并且可以通過這一分析獲得正在何處花費(fèi)時(shí)間的概略信息(profile)。
創(chuàng)建諸如得到與特定情形或問題有關(guān)的答案的工具可能非常費(fèi)力,并且可能非常難以校準(zhǔn),因?yàn)檐浖ぞ弑旧碛绊憸y試中的系統(tǒng)。本發(fā)明認(rèn)識(shí)到對(duì)工具開發(fā)和問題分析的硬件協(xié)助可以極大地減輕開發(fā)軟件性能工具所需的工作量。此外,隨著處理器的密度增大,可以包括硬件協(xié)助來提供附加調(diào)試和分析特性。
因此,具有一種用于為用來分析數(shù)據(jù)處理系統(tǒng)的性能的性能工具提供硬件協(xié)助的改進(jìn)方法、設(shè)備和計(jì)算機(jī)指令將是有利的。
發(fā)明內(nèi)容
本發(fā)明提供了一種用于處理指令的數(shù)據(jù)處理系統(tǒng)中的方法、設(shè)備和計(jì)算機(jī)指令。在數(shù)據(jù)處理系統(tǒng)中的處理器處接收指令。如果選定指示符與該指令相關(guān)聯(lián),則使得能夠?qū)εc該指令的執(zhí)行相關(guān)聯(lián)的每個(gè)事件進(jìn)行計(jì)數(shù)。
在本發(fā)明的一些實(shí)施例中,可以檢查與這些指示符相關(guān)聯(lián)的計(jì)數(shù),以確定這些計(jì)數(shù)是否高于閾值。如果計(jì)數(shù)高于閾值,則可識(shí)別關(guān)聯(lián)指令/數(shù)據(jù)地址為熱點(diǎn),并且可以根據(jù)熱點(diǎn)的識(shí)別來進(jìn)行代碼執(zhí)行的優(yōu)化。
在本發(fā)明的另外實(shí)施例中,可以生成根據(jù)性能指示符的遇見(encounter)而生成的計(jì)數(shù)器值的算術(shù)組合,并且將其與閾值進(jìn)行比較,以確定是否向監(jiān)測應(yīng)用程序產(chǎn)生中斷。在這些實(shí)施例中,處理器的微代碼被編程為檢查由監(jiān)測應(yīng)用程序指定的計(jì)數(shù)器的計(jì)數(shù)器值,以由監(jiān)測應(yīng)用程序指定的方式組合計(jì)數(shù)器值,然后將組合值與由性能監(jiān)測應(yīng)用程序提供的閾值進(jìn)行比較。這樣,可以在處理器的硬件內(nèi)提供更復(fù)雜的中斷調(diào)節(jié)。
在本發(fā)明的其它實(shí)施例中,在性能監(jiān)測應(yīng)用程序中提供用于根據(jù)初級(jí)度量(metric)的計(jì)數(shù)器值啟動(dòng)關(guān)于所識(shí)別的指令、數(shù)據(jù)地址、所識(shí)別指令的范圍、或所識(shí)別數(shù)據(jù)地址的范圍的次級(jí)度量的測量的功能性。因此,例如,當(dāng)初級(jí)度量計(jì)數(shù)器或初級(jí)度量計(jì)數(shù)器的組合滿足或超過預(yù)定閾值時(shí),可以產(chǎn)生中斷。響應(yīng)于接收到中斷,可以啟動(dòng)與測量一定范圍的指令/數(shù)據(jù)地址的次級(jí)度量相關(guān)聯(lián)的計(jì)數(shù)器。這樣,可以使用初級(jí)度量性能計(jì)數(shù)器首先識(shí)別特定感興趣的區(qū)域,并且通過使用涉及測量與特定感興趣的區(qū)域相關(guān)聯(lián)的度量的次級(jí)度量性能計(jì)數(shù)器來獲得更詳細(xì)的信息。
在本發(fā)明的另外實(shí)施例中,性能指示符和計(jì)數(shù)器值可以用作識(shí)別高速緩沖存儲(chǔ)器命中(hit)和高速緩沖存儲(chǔ)器未中(miss)的機(jī)制。采用該實(shí)施例,將性能指示符與計(jì)算機(jī)程序中的選定感興趣例程的指令相關(guān)聯(lián)。每次執(zhí)行這些例程的指令時(shí),以及每次必須將這些指令重載(reload)到高速緩沖存儲(chǔ)器中時(shí),遞增性能計(jì)數(shù)器。根據(jù)這些計(jì)數(shù)器的值,可以確定高速緩沖存儲(chǔ)器命中-未中率。
當(dāng)高速緩沖存儲(chǔ)器命中-未中率變得小于預(yù)定閾值,即高速緩沖存儲(chǔ)器未中的次數(shù)大于高速緩沖存儲(chǔ)器命中的次數(shù)時(shí),本發(fā)明可以確定出現(xiàn)了問題狀態(tài)。對(duì)該小高速緩沖存儲(chǔ)器命中-未中率的一個(gè)貢獻(xiàn)者可能是“追尾(chase tail)”狀態(tài)。當(dāng)指令/數(shù)據(jù)塊必須被裝載到高速緩沖存儲(chǔ)器中、但是在高速緩沖存儲(chǔ)器中沒有足夠可用空間來存儲(chǔ)整個(gè)指令/數(shù)據(jù)塊時(shí),發(fā)生“追尾”狀態(tài)。在這種情況下,向高速緩沖存儲(chǔ)器中的可用空間寫入指令/數(shù)據(jù),并且在高速緩沖存儲(chǔ)器的最近最少使用部分上寫入任何溢出。這可導(dǎo)致被覆寫的指令/數(shù)據(jù)上的高速緩沖存儲(chǔ)器未中,從而增大高速緩沖存儲(chǔ)器未中的次數(shù)。
當(dāng)由于表示低的高速緩沖存儲(chǔ)器命中-未中率的性能計(jì)數(shù)器值而檢測到問題狀態(tài)時(shí),本發(fā)明可以在模式寄存器中設(shè)置模式位,其表示處理器應(yīng)當(dāng)在處理器的微代碼內(nèi)實(shí)現(xiàn)“追尾”操作。采用該“追尾”操作,當(dāng)處理用于將指令/數(shù)據(jù)塊重載到高速緩沖存儲(chǔ)器中的重載操作時(shí),處理器進(jìn)行檢查,以確定對(duì)于整個(gè)指令/數(shù)據(jù)塊,高速緩沖存儲(chǔ)器中是否存在可用空間。如果高速緩沖存儲(chǔ)器中存在可用空間,則以正常方式在高速緩沖存儲(chǔ)器中存儲(chǔ)該指令/數(shù)據(jù)塊。然而,如果在高速緩沖存儲(chǔ)器中沒有足夠的空間來存儲(chǔ)要被重載的該指令/數(shù)據(jù)塊,則將該指令/數(shù)據(jù)塊或者該指令/數(shù)據(jù)塊的至少溢出部分裝載到高速緩沖存儲(chǔ)器的保留部分中,其中高速緩沖存儲(chǔ)器的保留部分采用與將指令/數(shù)據(jù)重載到高速緩沖存儲(chǔ)器的非保留區(qū)域中、并且覆寫高速緩沖存儲(chǔ)器中已經(jīng)存在的指令/數(shù)據(jù)的算法不同的算法來重載。
另外,可以將性能指示符與指令塊相關(guān)聯(lián),從而表示當(dāng)再次執(zhí)行該指令塊中的指令時(shí),或者當(dāng)再次訪問該數(shù)據(jù)地址塊中的數(shù)據(jù)地址時(shí),處理器應(yīng)當(dāng)在高速緩沖存儲(chǔ)器保留區(qū)域中查找該指令/數(shù)據(jù)。
因此,通過當(dāng)高速緩沖存儲(chǔ)器命中-未中率低于預(yù)定閾值時(shí)調(diào)用本實(shí)施例的“追尾”操作,本發(fā)明通過使不能被高速緩沖存儲(chǔ)器內(nèi)的可用空間容納的指令/數(shù)據(jù)的任何重載存儲(chǔ)在高速緩沖存儲(chǔ)器的保留區(qū)域中、而不是覆寫高速緩沖存儲(chǔ)器非保留區(qū)域中的現(xiàn)有高速緩沖存儲(chǔ)器條目來避免“追尾”情形。這樣,可以避免與由于覆寫高速緩沖存儲(chǔ)器中最近最少使用的條目而引起的覆寫和重載有關(guān)的多米諾效應(yīng)。
在本發(fā)明的另外實(shí)施例中,本發(fā)明的性能指示符可用來獲得有關(guān)指令或數(shù)據(jù)高速緩沖存儲(chǔ)器內(nèi)高速緩沖存儲(chǔ)器命中和高速緩沖存儲(chǔ)器線重載的性質(zhì)的信息。例如,本發(fā)明的這些實(shí)施例可用來確定多處理器系統(tǒng)(如對(duì)稱多處理器(SMP)系統(tǒng))的處理器是否真正共享高速緩沖存儲(chǔ)器線,或者是否存在假高速緩沖存儲(chǔ)器線共享。然后,該確定可以用作確定如何更佳地存儲(chǔ)高速緩沖存儲(chǔ)器線的指令/數(shù)據(jù)、以防止假高速緩沖存儲(chǔ)器線共享的手段。
真或假高速緩沖存儲(chǔ)器線共享的確定可以有益于確定在高速緩沖存儲(chǔ)器中存儲(chǔ)數(shù)據(jù)和指令的方式。也就是,如果確定高速緩沖存儲(chǔ)器線是假共享的,因此由于第一處理器向沒有正在被第二處理器訪問的高速緩沖存儲(chǔ)器線區(qū)域?qū)懭攵?jīng)常執(zhí)行高速緩沖存儲(chǔ)器線重載,則可采取適當(dāng)?shù)拇胧﹣碜钚』俑咚倬彌_存儲(chǔ)器線共享量。
例如,在本發(fā)明的另外實(shí)施例中,當(dāng)使用上述機(jī)制確定高速緩沖存儲(chǔ)器線是假共享的時(shí),可以將正被訪問的數(shù)據(jù)或指令寫入到專用于假高速緩沖存儲(chǔ)器線共享數(shù)據(jù)的獨(dú)立存儲(chǔ)器區(qū)域中。
然后,可以通過插入指向該新存儲(chǔ)器區(qū)域的指針來修改代碼。因此,當(dāng)代碼再次試圖訪問原始存儲(chǔ)器區(qū)域時(shí),將該訪問重定向到新存儲(chǔ)器區(qū)域而非遭受假共享的先前存儲(chǔ)器區(qū)域。這樣,可以避免高速緩沖存儲(chǔ)器線的重載。
在本發(fā)明的另外實(shí)施例中,編譯器可隨同計(jì)算機(jī)程序的指令/數(shù)據(jù)一起獲得該性能概略數(shù)據(jù),并且使用該信息來優(yōu)化執(zhí)行計(jì)算機(jī)程序、存儲(chǔ)指令/數(shù)據(jù)等的方式。也就是,編譯器可以在初始應(yīng)用程序裝載期間花費(fèi)額外的時(shí)間來優(yōu)化應(yīng)用程序和指令/數(shù)據(jù)存儲(chǔ),以便優(yōu)化應(yīng)用程序的運(yùn)行時(shí)組件。
編譯器優(yōu)化計(jì)算機(jī)程序的運(yùn)行時(shí)各方面的方式可根據(jù)所獲得的特定性能概略數(shù)據(jù)而變化,其由通過使用前述性能指示符、計(jì)數(shù)器、標(biāo)志等而獲得的輸出來注解。該優(yōu)化可以是優(yōu)化指令路徑、優(yōu)化在初始應(yīng)用程序裝載中所花的時(shí)間、利用高速緩沖存儲(chǔ)器和存儲(chǔ)器的方式等。
在本發(fā)明的其它實(shí)施例中,性能指示符、計(jì)數(shù)器、閾值和其它性能監(jiān)測結(jié)構(gòu)可以存儲(chǔ)在用來將虛擬地址轉(zhuǎn)換成物理存儲(chǔ)地址的頁表中。標(biāo)準(zhǔn)頁表以用于存儲(chǔ)性能監(jiān)測結(jié)構(gòu)的附加字段擴(kuò)增。當(dāng)發(fā)生需要對(duì)存儲(chǔ)器訪問的事件時(shí),可以由性能監(jiān)測應(yīng)用程序設(shè)置這些結(jié)構(gòu),并且可以對(duì)其進(jìn)行查詢和修改。
在邏輯上,對(duì)于每次指令提取和數(shù)據(jù)訪問都必須參考頁表,以將程序地址或虛擬地址轉(zhuǎn)換成物理地址。為了改善性能,最近使用的頁表?xiàng)l目保存在高速緩沖存儲(chǔ)器中(轉(zhuǎn)換后備緩沖器或有效到真實(shí)地址后備緩沖器),從而提供對(duì)將程序地址轉(zhuǎn)換成物理地址所需的信息的快速訪問。包含在頁表?xiàng)l目中的性能跟蹤指示符也可以高速緩存在相同的后備緩沖器中。
在將程序地址轉(zhuǎn)換成物理地址的過程期間,可以從性能監(jiān)測結(jié)構(gòu)確定指令/數(shù)據(jù)是否具有關(guān)聯(lián)性能指示符、計(jì)數(shù)器值、閾值等。通過根據(jù)本發(fā)明的本實(shí)施例的擴(kuò)增式頁表,可以提供在本發(fā)明的其它實(shí)施例中所述的性能指示符和硬件計(jì)數(shù)器所提供的相同功能性。
通過閱讀下面對(duì)優(yōu)選實(shí)施例的詳細(xì)描述,本發(fā)明的這些和其它特性和優(yōu)點(diǎn)將會(huì)得到更詳細(xì)的描述,或者對(duì)于本領(lǐng)域的普通技術(shù)人員而言將會(huì)變得更加清楚。
在所附權(quán)利要求中闡述了被認(rèn)為是本發(fā)明特征的新穎特性。然而,通過參考下面結(jié)合附圖對(duì)示例性實(shí)施例的詳細(xì)描述,本發(fā)明本身以及優(yōu)選使用模式及其進(jìn)一步目的和優(yōu)點(diǎn)將會(huì)得到更好的理解,其中圖1是可以實(shí)現(xiàn)本發(fā)明的數(shù)據(jù)處理系統(tǒng)的方框圖;圖2是根據(jù)優(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)的圖;
圖6A-6B是根據(jù)本發(fā)明優(yōu)選實(shí)施例的包含性能指示符的子例程的圖;圖7是根據(jù)本發(fā)明優(yōu)選實(shí)施例的用于處理包含性能指示符的指令的過程的流程圖;圖8是根據(jù)本發(fā)明優(yōu)選實(shí)施例用于選擇性地發(fā)送指令到中斷單元的過程的流程圖;圖9是根據(jù)本發(fā)明優(yōu)選實(shí)施例用于響應(yīng)對(duì)與性能指示符相關(guān)聯(lián)的存儲(chǔ)器位置的訪問而產(chǎn)生中斷的過程的流程圖;圖10是根據(jù)本發(fā)明優(yōu)選實(shí)施例的用于對(duì)事件進(jìn)行計(jì)數(shù)的過程的流程圖;圖11是根據(jù)本發(fā)明優(yōu)選實(shí)施例的用于對(duì)指令進(jìn)行選擇性計(jì)數(shù)的過程的流程圖;圖12是根據(jù)本發(fā)明優(yōu)選實(shí)施例的用于對(duì)指令進(jìn)行選擇性計(jì)數(shù)的過程的流程圖;圖13是根據(jù)本發(fā)明優(yōu)選實(shí)施例的用于識(shí)別超過閾值的指令的過程的流程圖;圖14是根據(jù)本發(fā)明優(yōu)選實(shí)施例的用于訪問存儲(chǔ)器位置的過程的流程圖;圖15是示出根據(jù)本發(fā)明優(yōu)選實(shí)施例的用于生成如性能指示符的元數(shù)據(jù)的組件的方框圖;圖16是示出根據(jù)本發(fā)明優(yōu)選實(shí)施例的元數(shù)據(jù)的圖;圖17是示出根據(jù)本發(fā)明優(yōu)選實(shí)施例的裝載和維護(hù)性能檢測影象高速緩沖存儲(chǔ)器(performance instrumentation shadow cache)時(shí)所涉及的組件的圖;圖18是根據(jù)本發(fā)明優(yōu)選實(shí)施例的用于生成指令元數(shù)據(jù)的過程的流程圖;圖19是根據(jù)本發(fā)明優(yōu)選實(shí)施例的用于生成存儲(chǔ)器位置元數(shù)據(jù)的過程的流程圖;圖20是根據(jù)本發(fā)明優(yōu)選實(shí)施例的用于對(duì)特定指令的執(zhí)行進(jìn)行計(jì)數(shù)的過程的流程圖;圖21是根據(jù)本發(fā)明優(yōu)選實(shí)施例的用于對(duì)特定存儲(chǔ)器位置的訪問進(jìn)行計(jì)數(shù)的過程的流程圖;圖22是示出用于訪問關(guān)于對(duì)指令的執(zhí)行或?qū)Υ鎯?chǔ)器位置的訪問所收集的信息的組件的圖;圖23是根據(jù)本發(fā)明優(yōu)選實(shí)施例的用于自主修改程序中的代碼以允許對(duì)代碼部分進(jìn)行選擇性計(jì)數(shù)或概略的組件的方框圖;
圖24是根據(jù)本發(fā)明優(yōu)選實(shí)施例的用于將性能指示符動(dòng)態(tài)添加到指令中或者使其與指令相關(guān)聯(lián)的過程的流程圖;圖25是示出根據(jù)本發(fā)明優(yōu)選實(shí)施例的用來通過將性能指示符與頁內(nèi)的指令相關(guān)聯(lián)來掃描頁的組件的圖;圖26是根據(jù)本發(fā)明優(yōu)選實(shí)施例的用于將指示符關(guān)聯(lián)到頁內(nèi)的指令的過程的流程圖;圖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í)別已被執(zhí)行多于選定次數(shù)的指令的過程的流程圖;圖30是根據(jù)本發(fā)明優(yōu)選實(shí)施例的用于在特定指令被執(zhí)行多于某選定次數(shù)時(shí)檢查調(diào)用堆棧并識(shí)別例程調(diào)用者的過程的流程圖;圖31是示出根據(jù)本發(fā)明優(yōu)選實(shí)施例的為進(jìn)行監(jiān)測而選擇的指令和數(shù)據(jù)范圍的圖;圖32是根據(jù)本發(fā)明優(yōu)選實(shí)施例的用于對(duì)設(shè)定范圍的訪問次數(shù)以及在設(shè)定范圍內(nèi)執(zhí)行的指令數(shù)進(jìn)行計(jì)數(shù)的過程的流程圖;圖33是當(dāng)確定高速緩沖存儲(chǔ)器/存儲(chǔ)器的熱點(diǎn)時(shí)本發(fā)明一個(gè)示例性實(shí)施例的主要操作單元的示例性方框圖;圖34是概述當(dāng)識(shí)別高速緩沖存儲(chǔ)器或存儲(chǔ)器中的指令/數(shù)據(jù)的熱點(diǎn)時(shí)、本發(fā)明實(shí)施例的示例性操作的流程圖;圖35是概述當(dāng)重新裝配(repackage)代碼中的指令以進(jìn)行連續(xù)執(zhí)行時(shí)、本發(fā)明實(shí)施例的示例性操作的流程圖;圖36是概述當(dāng)使用影象(shadow)數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)熱點(diǎn)來優(yōu)化代碼執(zhí)行時(shí)、本發(fā)明實(shí)施例的示例性操作的流程圖;圖37是示出當(dāng)執(zhí)行計(jì)數(shù)器值的算術(shù)組合以確定是否向監(jiān)測應(yīng)用程序發(fā)送中斷時(shí)、本發(fā)明的示例性實(shí)施例的示例圖;圖38是概述當(dāng)組合計(jì)數(shù)器的值以確定是否應(yīng)當(dāng)產(chǎn)生中斷時(shí)、本發(fā)明的示例性操作的流程圖;圖39是概述根據(jù)本發(fā)明實(shí)施例的當(dāng)根據(jù)初級(jí)度量(metrics)的性能計(jì)數(shù)器值而啟動(dòng)次級(jí)度量的監(jiān)測時(shí)本發(fā)明的示例性操作的流程圖;
圖40是概述當(dāng)用來調(diào)用處理器的“追尾(chase tail)”操作時(shí)本發(fā)明的示例性操作的流程圖;圖41是概述根據(jù)本發(fā)明當(dāng)在處理器內(nèi)執(zhí)行“追尾”操作時(shí)本發(fā)明的示例性操作的流程圖;圖42是根據(jù)本發(fā)明示例性實(shí)施例的數(shù)據(jù)高速緩沖存儲(chǔ)器的一部分的示例性方框圖;圖43是根據(jù)本發(fā)明一個(gè)示例性實(shí)施例的寫標(biāo)志位區(qū)域的示例性方框圖;圖44是概述當(dāng)處理對(duì)高速緩沖存儲(chǔ)器線區(qū)域的訪問請(qǐng)求時(shí)、本發(fā)明一個(gè)示例性實(shí)施例的示例性操作的流程圖;圖45是概述當(dāng)處理高速緩沖存儲(chǔ)器線的重載時(shí)、本發(fā)明示例性實(shí)施例的示例性操作的流程圖;圖46是概述當(dāng)處理例如通過圖45的操作而產(chǎn)生的高速緩沖存儲(chǔ)器線重載中斷時(shí)、本發(fā)明示例性實(shí)施例的示例性操作的流程圖;圖47是概述移動(dòng)被識(shí)別為假共享的高速緩沖存儲(chǔ)器區(qū)域以避免假共享的本發(fā)明示例性實(shí)施例的示例性操作的流程圖;圖48是概述當(dāng)優(yōu)化應(yīng)用程序執(zhí)行時(shí)本發(fā)明示例性實(shí)施例的示例性操作的流程圖;圖49示出利用頁表將虛擬地址映射成物理地址的數(shù)據(jù)流的示例性方框圖;圖50示出根據(jù)本發(fā)明示例性實(shí)施例的示例性頁表?xiàng)l目;以及圖51是概述當(dāng)使用擴(kuò)增式頁表來存儲(chǔ)性能監(jiān)測結(jié)構(gòu)時(shí)本發(fā)明的示例性操作的流程圖。
具體實(shí)施例方式
現(xiàn)在參照?qǐng)D1,其示出了可以實(shí)現(xiàn)本發(fā)明的數(shù)據(jù)處理系統(tǒng)的方框圖??蛻魴C(jī)100是計(jì)算機(jī)的例子,實(shí)現(xiàn)本發(fā)明的過程的代碼或指令可以位于其中??蛻魴C(jī)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還可以包括用于處理器102的集成存儲(chǔ)器控制器和高速緩沖存儲(chǔ)器。與PCI局部總線106的附加連接可以通過直接組件互連或者通過內(nèi)插板來實(shí)現(xiàn)。
在所示例子中,局域網(wǎng)(LAN)適配器110、小型計(jì)算機(jī)系統(tǒng)接口SCSI主機(jī)總線適配器112和擴(kuò)展總線接口114通過直接組件連接而連接到PCI局部總線106。與此相反,音頻適配器116、圖形適配器118和音頻/視頻適配器119通過插入到擴(kuò)展槽中的內(nèi)插板而連接到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è)或四個(gè)PCI擴(kuò)展槽或內(nèi)插連接器。
操作系統(tǒng)運(yùn)行在處理器102上,并且用來協(xié)調(diào)和提供對(duì)圖1的數(shù)據(jù)處理系統(tǒng)100內(nèi)的各個(gè)組件的控制。操作系統(tǒng)可以是市場上可買到的操作系統(tǒng),如可從微軟公司獲得的Windows XP。面向?qū)ο蟮木幊滔到y(tǒng)如Java可以結(jié)合操作系統(tǒng)運(yùn)行,并且提供從在客戶機(jī)100上執(zhí)行的Java程序或應(yīng)用程序?qū)Σ僮飨到y(tǒng)的調(diào)用?!癑ava”是太陽微系統(tǒng)公司(Sun Microsystems,Inc.)的商標(biāo)。操作系統(tǒng)、面向?qū)ο蟮木幊滔到y(tǒng)、以及應(yīng)用程序或程序的指令位于諸如硬盤驅(qū)動(dòng)器126的存儲(chǔ)裝置上,并且可以裝載到主存儲(chǔ)器104中以由處理器102執(zhí)行。
本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解,圖1中的硬件可以根據(jù)具體實(shí)現(xiàn)而不同。作為對(duì)圖1所示的硬件的補(bǔ)充或替代,可以使用其它內(nèi)部硬件或外圍裝置,如快閃只讀存儲(chǔ)器(ROM)、等效非易失性存儲(chǔ)器或光盤驅(qū)動(dòng)器等。另外,本發(fā)明的過程也可以應(yīng)用于多處理器數(shù)據(jù)處理系統(tǒng)。
例如,客戶機(jī)100,如果可選地配置為網(wǎng)絡(luò)計(jì)算機(jī),則可以不包括SCSI主機(jī)總線適配器112、硬盤驅(qū)動(dòng)器126、磁帶驅(qū)動(dòng)器128和CD-ROM 130。在這種情況下,該計(jì)算機(jī)可以適當(dāng)?shù)胤Q作客戶計(jì)算機(jī),并包括某種網(wǎng)絡(luò)通信接口,如LAN適配器110、調(diào)制解調(diào)器122等。作為另一個(gè)例子,客戶機(jī)100可以是配置成在不依賴于某種網(wǎng)絡(luò)通信接口的情況下可啟動(dòng)的獨(dú)立系統(tǒng),而不管客戶機(jī)100是否包括某種網(wǎng)絡(luò)通信接口。作為另外一個(gè)例子,客戶機(jī)100可以是個(gè)人數(shù)字助理(PDA),其配置有ROM和/或快閃ROM,以提供用于存儲(chǔ)操作系統(tǒng)文件和/或用戶所產(chǎn)生數(shù)據(jù)的非易失性存儲(chǔ)器。圖1所示的例子和上述例子不意味著隱含結(jié)構(gòu)性限制。
本發(fā)明的過程使用計(jì)算機(jī)實(shí)現(xiàn)指令由處理器102執(zhí)行,其中該指令可以位于例如主存儲(chǔ)器104、存儲(chǔ)器124的存儲(chǔ)器或者一個(gè)或多個(gè)外圍裝置126-130中。
接下來參照?qǐng)D2,其示出了根據(jù)本發(fā)明優(yōu)選實(shí)施例的用于處理信息的處理器系統(tǒng)的方框圖。處理器210可以作為圖1中的處理器102實(shí)現(xiàn)。
在優(yōu)選實(shí)施例中,處理器210是單個(gè)集成電路超標(biāo)量微處理器。從而,如下面進(jìn)一步所述,處理器210包括各種單元、寄存器、緩沖器、存儲(chǔ)器和其它部分,所有這些都由集成電路形成。另外,在優(yōu)選實(shí)施例中,處理器210根據(jù)簡化指令集計(jì)算機(jī)(“RISC”)技術(shù)運(yùn)行。如圖2所示,系統(tǒng)總線211連接到處理器210的總線接口單元(“BIU”)212。BIU 212控制處理器210與系統(tǒng)總線211之間的信息傳輸。
BIU 212連接到處理器210的指令高速緩沖存儲(chǔ)器214和數(shù)據(jù)高速緩沖存儲(chǔ)器216。指令高速緩沖存儲(chǔ)器214將指令輸出到定序器單元218。響應(yīng)來自指令高速緩沖存儲(chǔ)器214的這些指令,定序器單元218將指令選擇性地輸出到處理器210的其它執(zhí)行電路。
除了定序器單元218之外,在本優(yōu)選實(shí)施例中,處理器210的執(zhí)行電路還包括多個(gè)執(zhí)行單元,即分支(branch)單元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)重命名(rename)緩沖器234輸入其源操作數(shù)信息。而且,F(xiàn)XUA 222和FXUB 224從進(jìn)位(“CA”)寄存器239輸入“進(jìn)位”。FXUA 222、FXUB 224、CFXU 226和LSU 228輸出它們的運(yùn)算結(jié)果(目的操作數(shù)信息),以存儲(chǔ)在定點(diǎn)重命名緩沖器234內(nèi)的選定條目(entry)上。另外,CFXU 226從專用寄存器處理單元(“SPR單元”)240輸入并向其輸出源操作數(shù)信息和目的操作數(shù)信息。
FPU 230從浮點(diǎn)架構(gòu)寄存器(“FPR”)236和浮點(diǎn)重命名緩沖器238輸入其源操作數(shù)信息。FPU 230輸出其運(yùn)算結(jié)果(目的操作數(shù)信息),以存儲(chǔ)在浮點(diǎn)重命名緩沖器238內(nèi)的選定條目上。
響應(yīng)裝載指令,LSU 228從數(shù)據(jù)高速緩沖存儲(chǔ)器216輸入信息,并且將該信息拷貝到重命名緩沖器234和238中選定的一個(gè)。如果該信息未存儲(chǔ)在數(shù)據(jù)高速緩沖存儲(chǔ)器216中,則數(shù)據(jù)高速緩沖存儲(chǔ)器216(通過BIU 212和系統(tǒng)總線211)從連接到系統(tǒng)總線211的系統(tǒng)存儲(chǔ)器260輸入該信息。而且,數(shù)據(jù)高速緩沖存儲(chǔ)器216能夠(通過BIU 212和系統(tǒng)總線211)將信息從數(shù)據(jù)高速緩沖存儲(chǔ)器216輸出到連接到系統(tǒng)總線211的系統(tǒng)存儲(chǔ)器260。響應(yīng)存儲(chǔ)指令,LSU 228從GPR 232和FPR 236中選定的一個(gè)輸入信息,并且將該信息拷貝到數(shù)據(jù)高速緩沖存儲(chǔ)器216。
定序器單元218從GPR 232和FPR 236輸入信息,并且向其輸出信息。分支單元220從定序器單元218輸入指令和表示處理器210的當(dāng)前狀態(tài)的信號(hào)。響應(yīng)該指令和信號(hào),分支單元220(向定序器單元218)輸出表示存儲(chǔ)要由處理器210執(zhí)行的指令序列的合適存儲(chǔ)器地址的信號(hào)。響應(yīng)來自分支單元220的該信號(hào),定序器單元218從指令高速緩沖存儲(chǔ)器214輸入所指示的指令序列。如果指令序列中的一條或多條指令沒有存儲(chǔ)在指令高速緩沖存儲(chǔ)器214中,則指令高速緩沖存儲(chǔ)器214(通過BIU 212和系統(tǒng)總線211)從連接到系統(tǒng)總線211的系統(tǒng)存儲(chǔ)器260輸入這些指令。
響應(yīng)從指令高速緩沖存儲(chǔ)器214輸入的指令,定序器單元218選擇性地將指令調(diào)度到執(zhí)行單元220、222、224、226、228和230中選定的執(zhí)行單元。每個(gè)執(zhí)行單元執(zhí)行一條或多條特定指令類的指令。例如,F(xiàn)XUA 222和FXUB224對(duì)源操作數(shù)執(zhí)行第一類定點(diǎn)算數(shù)運(yùn)算,如加法、減法、與運(yùn)算、或運(yùn)算以及異或運(yùn)算。CFXU 226對(duì)源操作數(shù)執(zhí)行第二類定點(diǎn)運(yùn)算,如定點(diǎn)乘法和除法。FPU 230對(duì)源操作數(shù)執(zhí)行浮點(diǎn)運(yùn)算,如浮點(diǎn)乘法和除法。
當(dāng)信息存儲(chǔ)在選定的一個(gè)重命名緩沖器234上時(shí),該信息與由為其分配了選定重命名緩沖器的指令指定的存儲(chǔ)位置(例如,GPR 232或CA寄存器242之一)相關(guān)聯(lián)。響應(yīng)來自定序器單元218的信號(hào),將選定的一個(gè)重命名緩沖器234上存儲(chǔ)的信息拷貝到與其關(guān)聯(lián)的一個(gè)GPR 232(或CA寄存器242)中。定序器單元218響應(yīng)“完成”產(chǎn)生了該信息的指令,引導(dǎo)拷貝在選定的一個(gè)重命名緩沖器234上存儲(chǔ)的信息。該拷貝稱作“寫回”。
當(dāng)信息存儲(chǔ)在選定的一個(gè)重命名緩沖器238上時(shí),該信息與一個(gè)FPR 236相關(guān)聯(lián)。響應(yīng)來自定序器單元218的信號(hào),將選定的一個(gè)重命名緩沖器238上存儲(chǔ)的信息拷貝到與其關(guān)聯(lián)的一個(gè)FPR 236中。定序器單元218響應(yīng)“完成”產(chǎn)生該信息的指令,引導(dǎo)拷貝在選定的一個(gè)重命名緩沖器238上存儲(chǔ)的信息。
處理器210通過在執(zhí)行單元220、222、224、226、228和230中的各個(gè)單元上同時(shí)處理多條指令來實(shí)現(xiàn)高性能。因此,每條指令分成一系列階段來處理,其中每個(gè)階段可以與其它指令的階段并行執(zhí)行。該技術(shù)稱作“流水線技術(shù)”。在該示例性實(shí)施例的一個(gè)重要方面,指令通常分成以下六個(gè)階段來處理,即提取(fetch)、譯碼、調(diào)度、執(zhí)行、完成和寫回。
在提取階段,定序器單元218選擇性地(從指令高速緩沖存儲(chǔ)器214)從上面有關(guān)分支單元220和定序器單元218而作過進(jìn)一步討論的存儲(chǔ)指令序列的一個(gè)或多個(gè)存儲(chǔ)器地址輸入一條或多條指令。
在譯碼階段,定序器單元218對(duì)多達(dá)四條所提取的指令進(jìn)行譯碼。
在調(diào)度階段,定序器單元218在為所調(diào)度指令結(jié)果(目的操作數(shù)信息)保留重命名緩沖器條目之后,將多達(dá)四條已譯碼的指令選擇性地調(diào)度到執(zhí)行單元220、222、224、226、228和230中(響應(yīng)譯碼階段中的譯碼)選定的執(zhí)行單元。在調(diào)度階段,將操作數(shù)信息提供給所調(diào)度指令的選定執(zhí)行單元。處理器210以指令編程序列的次序調(diào)度指令。
在執(zhí)行階段,如上所述,執(zhí)行單元執(zhí)行其調(diào)度指令,并且輸出其操作結(jié)果(目的操作數(shù)信息)以存儲(chǔ)在重命名緩沖器234和重命名緩沖器238內(nèi)的選定條目上。以這種方式,處理器210能夠相對(duì)于指令編程序列無序地執(zhí)行指令。
在完成階段,定序器單元218指示指令“完成”。處理器210以指令編程序列的次序“完成”指令。
在寫回階段,定序器218引導(dǎo)將信息分別從重命名緩沖器234和238拷貝到GPR 232和FPR 236。定序器單元218引導(dǎo)拷貝選定的重命名緩沖器上存儲(chǔ)的信息。同樣,在特定指令的寫回階段,處理器210響應(yīng)該特定指令更新其架構(gòu)狀態(tài)。處理器210以指令編程序列的次序處理指令的相應(yīng)“寫回”階段。處理器210在特定情形下有利地合并指令的完成階段和寫回階段。
在該示例性實(shí)施例中,每條指令需要一個(gè)機(jī)器周期來完成指令處理的每一個(gè)階段。但是,一些指令(例如由CFXU 226執(zhí)行的復(fù)合定點(diǎn)指令)可能需要多個(gè)周期。因此,響應(yīng)完成先前指令所需的時(shí)間的變化,在特定指令的執(zhí)行和完成階段之間可能發(fā)生可變延遲。
完成緩沖器248安設(shè)在定序器218內(nèi),以跟蹤正在執(zhí)行單元內(nèi)執(zhí)行的多條指令的完成。一旦出現(xiàn)以應(yīng)用程序指定順序成功地完成了一條指令或一組指令的指示時(shí),可以利用完成緩沖器248來啟動(dòng)將這些已完成指令的結(jié)果傳輸?shù)疥P(guān)聯(lián)通用寄存器。
另外,處理器210還包括連接到指令高速緩沖存儲(chǔ)器214以及處理器210中的其它單元的處理器監(jiān)測單元240。可以利用性能監(jiān)測器單元240來監(jiān)測處理器210的操作,在本示例性實(shí)施例中,性能監(jiān)測器單元240是能夠提供描述指令執(zhí)行資源的利用和存儲(chǔ)控制的詳細(xì)信息的軟件可訪問機(jī)制。雖然圖2中未示出,性能監(jiān)測器單元240耦接到處理器210的每個(gè)功能單元,以允許監(jiān)測處理器210的操作的所有方面,包括例如重建事件之間的關(guān)系、識(shí)別假觸發(fā)、識(shí)別性能瓶頸、監(jiān)測流水線停頓(pipeline stall)、監(jiān)測空閑處理器周期、確定調(diào)度效率、確定分支效率、確定未對(duì)齊數(shù)據(jù)訪問的性能損失(penalty)、識(shí)別串行化指令的執(zhí)行頻率、識(shí)別被禁止的中斷、以及確定性能效率。
性能監(jiān)測器單元240包括其數(shù)目依賴于具體實(shí)現(xiàn)的(例如,2-8個(gè))計(jì)數(shù)器241-242,其被標(biāo)記為PMC1和PMC2,用來對(duì)選定事件的發(fā)生進(jìn)行計(jì)數(shù)。性能監(jiān)測器單元240還包括至少一個(gè)監(jiān)測模式控制寄存器(MMCR)。在本例中,存在兩個(gè)指定計(jì)數(shù)器241-242功能的控制寄存器MMCR 243和244。計(jì)數(shù)器241-242和MMCR 243-244最好作為通過可由CFXU 226執(zhí)行的MFSPR(從SPR傳送)和MTSPR(傳送至SPR)指令可訪問、以進(jìn)行讀或?qū)懙腟PR來實(shí)現(xiàn)。然而,在一個(gè)可替換實(shí)施例中,計(jì)數(shù)器241-242和MMCR 243-244可以簡單地作為I/O空間中的地址實(shí)現(xiàn)。在另一個(gè)可替換實(shí)施例中,控制寄存器和計(jì)數(shù)器可以通過變址寄存器來間接訪問。該實(shí)施例以來自英特爾公司(IntelCorporation)的處理器內(nèi)的IA-64架構(gòu)來實(shí)現(xiàn)。
另外,處理器210還包括連接到指令高速緩沖存儲(chǔ)器214的中斷單元250。另外,雖然圖2中未示出,中斷單元250連接到處理器210內(nèi)的其它功能單元。中斷單元250可以從其它功能單元接收信號(hào),并且啟動(dòng)諸如開始錯(cuò)誤處理或捕獲過程的操作。在這些例子中,中斷單元250用來產(chǎn)生在程序執(zhí)行期間可能發(fā)生的中斷和異常。
本發(fā)明提供了在程序執(zhí)行期間監(jiān)測對(duì)特定指令的執(zhí)行以及對(duì)特定存儲(chǔ)器位置的訪問的能力。具體地說,可以使用空閑字段來保存用于標(biāo)識(shí)指令或存儲(chǔ)器位置為要由性能監(jiān)測器單元或處理器中的某個(gè)其它單元監(jiān)測的指令或存儲(chǔ)器位置的指示符?;蛘撸甘痉梢源鎯?chǔ)在與指令或存儲(chǔ)器位置相關(guān)聯(lián)的另一個(gè)位置中。在指示符置于指令中的情況下,典型地使用空閑字段,但是在一些情況下可以擴(kuò)展指令以包括指示符所需的空間。在這種情況下,處理器的架構(gòu)可能需要改變。例如,64位架構(gòu)可以改成65位架構(gòu)以容納指示符。對(duì)于數(shù)據(jù)訪問,指示符可以與數(shù)據(jù)或該數(shù)據(jù)所在的存儲(chǔ)器位置相關(guān)聯(lián)。
現(xiàn)在參照?qǐng)D3,其示出了根據(jù)本發(fā)明優(yōu)選實(shí)施例的用于處理與指示符相關(guān)聯(lián)的指令的組件的圖。指令高速緩沖存儲(chǔ)器300接收指令包(bundle)302。指令高速緩沖存儲(chǔ)器300是圖2中的指令高速緩沖存儲(chǔ)器214的示例。指令包是一種指令編組。這種指令編組典型地出現(xiàn)于可從英特爾公司獲得的IA-64處理器中。指令高速緩沖存儲(chǔ)器300處理所要執(zhí)行的指令。
作為該指令處理的一部分,指令高速緩沖存儲(chǔ)器300確定哪些指令與指示符相關(guān)聯(lián)。在這些例子中,這些指示符也稱作“性能指示符”。信號(hào)304已與性能指示符相關(guān)聯(lián)。結(jié)果,將指令的信號(hào)304發(fā)送到性能監(jiān)測器單元306。性能監(jiān)測器單元306是圖2中的性能監(jiān)測器單元240的例子。
當(dāng)指令高速緩沖存儲(chǔ)器300確定存在與指示符相關(guān)聯(lián)的指令時(shí),發(fā)送信號(hào)以表示正在執(zhí)行被標(biāo)記(marked)的指令。在這些例子中,被標(biāo)記的指令是與性能指示符相關(guān)聯(lián)的指令。或者,性能指示符可以指示指令包中的所有項(xiàng)目或指令均被標(biāo)記以被計(jì)數(shù)。另外,這些指令的信號(hào)由指令高速緩沖存儲(chǔ)器300發(fā)送到適當(dāng)?shù)墓δ軉卧8鶕?jù)具體實(shí)現(xiàn),不同于性能監(jiān)測器單元306的功能單元可以對(duì)指令執(zhí)行進(jìn)行計(jì)數(shù)。在性能指示符位于指令或指令包中的情況下,高速緩沖存儲(chǔ)器單元,即指令高速緩沖存儲(chǔ)器300檢測指示符,并且向性能監(jiān)測器單元306發(fā)送信號(hào)。
當(dāng)性能監(jiān)測器單元306接收到這些指令的信號(hào)時(shí),性能監(jiān)測器單元306對(duì)與指令304的執(zhí)行相關(guān)聯(lián)的事件進(jìn)行計(jì)數(shù)。如圖所示,性能監(jiān)測器單元306被編程為僅對(duì)與性能指示符相關(guān)聯(lián)的指令的事件進(jìn)行計(jì)數(shù)。換句話說,使用與指令或存儲(chǔ)器位置相關(guān)聯(lián)的指示符來使得能夠由性能監(jiān)測器單元306對(duì)與指令或存儲(chǔ)器位置相關(guān)聯(lián)的事件進(jìn)行計(jì)數(shù)。如果指令高速緩沖存儲(chǔ)器300接收到?jīng)]有性能指示符的指令,則不對(duì)與該指令相關(guān)聯(lián)的事件進(jìn)行計(jì)數(shù)。總而言之,性能指示符使得能夠在處理器中逐指令地或逐存儲(chǔ)器位置地進(jìn)行計(jì)數(shù)。
如果性能監(jiān)測器單元306設(shè)成對(duì)這些類型的被標(biāo)記指令所允許的度量(metrics)進(jìn)行計(jì)數(shù)的模式,則性能監(jiān)測器單元306對(duì)與性能指示符相關(guān)聯(lián)的指令的事件進(jìn)行計(jì)數(shù)。在某些情況下,性能監(jiān)測器單元306可以設(shè)成執(zhí)行作為當(dāng)前可用功能的某種其它類型的計(jì)數(shù),例如對(duì)所有指令的執(zhí)行進(jìn)行計(jì)數(shù)。
對(duì)于訪問存儲(chǔ)器位置中的數(shù)據(jù),由數(shù)據(jù)高速緩沖存儲(chǔ)器,如圖2中的數(shù)據(jù)高速緩沖存儲(chǔ)器216而不是由指令高速緩沖存儲(chǔ)器來處理數(shù)據(jù)和指示符。數(shù)據(jù)高速緩沖存儲(chǔ)器將表示正在訪問被標(biāo)記存儲(chǔ)器位置的信號(hào)發(fā)送到性能監(jiān)測器單元308。被標(biāo)記存儲(chǔ)器位置類似于被標(biāo)記指令。這些類型的存儲(chǔ)器位置是與性能指示符相關(guān)聯(lián)的存儲(chǔ)器位置。
接下來參照?qǐng)D4,其示出了根據(jù)本發(fā)明優(yōu)選實(shí)施例的一種用于將性能指示符與指令或存儲(chǔ)器位置相關(guān)聯(lián)的機(jī)制的圖。處理器400從高速緩沖存儲(chǔ)器402接收指令。在本例中,指示符不與指令一起存儲(chǔ),也不存儲(chǔ)于找到數(shù)據(jù)的存儲(chǔ)器位置中。相反,指示符存儲(chǔ)在單獨(dú)的存儲(chǔ)區(qū)域,即性能檢測影象高速緩沖存儲(chǔ)器(shadow cache)404內(nèi)。該存儲(chǔ)裝置可以是任何存儲(chǔ)裝置,例如系統(tǒng)存儲(chǔ)器、閃速存儲(chǔ)器、高速緩沖存儲(chǔ)器或盤。
當(dāng)處理器400從高速緩沖存儲(chǔ)器402接收指令時(shí),處理器400檢查性能檢測影象高速緩沖存儲(chǔ)器404,以查看性能指示符是否與指令相關(guān)聯(lián)。對(duì)包含數(shù)據(jù)的存儲(chǔ)器位置的訪問進(jìn)行類似的檢查。在一個(gè)實(shí)施例中,為每個(gè)不影響實(shí)際數(shù)據(jù)段的對(duì)應(yīng)字提供完全影象字。換句話說,處理器400允許高速緩沖存儲(chǔ)器402的架構(gòu)或配置保持不變。在這些例子中,所述映射是逐字的。然而,也可以使用某種其它類型的映射,例如每數(shù)據(jù)字一個(gè)影象位,其中性能檢測影象高速緩沖存儲(chǔ)器404中的位對(duì)應(yīng)于一個(gè)數(shù)據(jù)字。
對(duì)于這種類型的架構(gòu),利用該特性,編譯器以類似于調(diào)試符號(hào)的方式、在與數(shù)據(jù)區(qū)域本身分開的單獨(dú)工作區(qū)域內(nèi)創(chuàng)建調(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ìn)行計(jì)數(shù),或者使其采取異常。在這些例子中,通過調(diào)試器或性能分析程序?qū)⒃撨^程編程,以知道在執(zhí)行指令時(shí)是否使用影象信息。
接下來參照?qǐng)D5,其示出了根據(jù)本發(fā)明優(yōu)選實(shí)施例的指令包的圖。指令包500包含指令槽(slot)502、指令槽504、指令槽506和模板508。如圖所示,指令包500包含128位(bit)。每個(gè)指令槽包含41位,而模板508包含5位。模板508用來標(biāo)識(shí)當(dāng)前指令包內(nèi)的終止,并且將槽內(nèi)的指令映射到不同類型的執(zhí)行單元。
指令包500內(nèi)的空閑位用來保存本發(fā)明的指示符。例如,指示符510、512和514分別位于指令槽502、504和506內(nèi)。這些指示符可以根據(jù)具體實(shí)現(xiàn)而采取各種形式和各種大小。指示符可以使用單個(gè)位或者可以使用多個(gè)位。單個(gè)位可以用來指示響應(yīng)該指令的執(zhí)行要對(duì)事件進(jìn)行計(jì)數(shù)。多個(gè)位可以用來標(biāo)識(shí)閾值,例如用于可以在應(yīng)該對(duì)事件進(jìn)行計(jì)數(shù)之前過去的指令執(zhí)行的多個(gè)處理器或時(shí)鐘周期。此外,這些位甚至可以用作特定指令的計(jì)數(shù)器。類似的字段使用可以用于標(biāo)記數(shù)據(jù)或存儲(chǔ)器位置的指示符。
或者,模板508可以用來包含一組相關(guān)指示符,從而使用一位來標(biāo)識(shí)指令包中的所有指令。另外,指令包本身可以擴(kuò)展成256位或某一其它位數(shù),以包含性能指示符的額外信息。
接下來參照?qǐng)D6A和6B,其示出了根據(jù)本發(fā)明優(yōu)選實(shí)施例的包含性能指示符的子例程和包含性能指示符的數(shù)據(jù)的圖。在本例中,圖6A中的子例程600包括多條指令,其中指令602、604和606與性能指示符相關(guān)聯(lián)。這些指令也稱作被標(biāo)記指令。當(dāng)執(zhí)行這些指令時(shí),對(duì)與這些指令相關(guān)聯(lián)的事件進(jìn)行計(jì)數(shù),從而為軟件工具獲得數(shù)據(jù),以分析執(zhí)行子例程600的數(shù)據(jù)處理系統(tǒng)的性能。
數(shù)據(jù)或包含數(shù)據(jù)的存儲(chǔ)器位置可以采用類似方式以指示符標(biāo)記。在這些例子中,這些指示符用于對(duì)數(shù)據(jù)或存儲(chǔ)器位置訪問進(jìn)行計(jì)數(shù)。在圖6B中,數(shù)據(jù)610包括與性能指示符相關(guān)聯(lián)的數(shù)據(jù)。數(shù)據(jù)612和數(shù)據(jù)614是與性能指示符相關(guān)聯(lián)的數(shù)據(jù)612的部分。與性能指示符相關(guān)聯(lián)的這些數(shù)據(jù)部分也稱作被標(biāo)記數(shù)據(jù)。
現(xiàn)在參照?qǐng)D7,其示出了根據(jù)本發(fā)明優(yōu)選實(shí)施例的用于處理包含性能指示符的指令的過程的流程圖。圖7所示的過程可以在指令高速緩沖存儲(chǔ)器,如圖2中的指令高速緩沖存儲(chǔ)器214中實(shí)現(xiàn)。
該過程以接收指令包(步驟700)開始。在這些例子中,每個(gè)指令包具有類似于圖5中的指令包500的格式。識(shí)別指令包中的指令(步驟702)。確定是否存在與指令相關(guān)聯(lián)的性能指示符(步驟704)。該確定可以通過檢查指令或指令包中的適當(dāng)字段來進(jìn)行?;蛘?,可以檢查性能檢測影象高速緩沖存儲(chǔ)器,如圖4中的性能檢測影象高速緩沖存儲(chǔ)器404,以查看性能指示符是否與指令相關(guān)聯(lián)。
如果存在性能指示符,則發(fā)送信號(hào)到性能監(jiān)測器單元(步驟706)。當(dāng)接收到該信號(hào)時(shí),性能監(jiān)測器單元將對(duì)與指令執(zhí)行相關(guān)聯(lián)的事件進(jìn)行計(jì)數(shù)。另外,對(duì)指令進(jìn)行處理(步驟708)。指令處理包括例如將指令發(fā)送到適當(dāng)?shù)墓δ軉卧员銏?zhí)行。
然后,確定在指令包中是否存在另外的未處理指令(步驟710)。如果在指令包中存在另外的未處理指令,則該過程返回到如上所述的步驟702。否則,該過程終止?;氐讲襟E704,如果不存在性能指示符,則該過程直接進(jìn)入步驟708。
現(xiàn)在參照?qǐng)D8,其示出了根據(jù)本發(fā)明優(yōu)選實(shí)施例的用于選擇性地發(fā)送信號(hào)到中斷單元的過程的流程圖。圖8所示的過程可以在指令高速緩沖存儲(chǔ)器,如圖2的指令高速緩沖存儲(chǔ)器242中實(shí)現(xiàn)。在使用性能監(jiān)測器單元監(jiān)測事件可能錯(cuò)過特定事件的情況下采用該過程。例如,性能監(jiān)測器單元對(duì)事件進(jìn)行計(jì)數(shù)。當(dāng)發(fā)生高速緩沖存儲(chǔ)器未中時(shí),發(fā)送信號(hào)到性能監(jiān)測器單元。當(dāng)將對(duì)應(yīng)高速緩沖存儲(chǔ)器線的元數(shù)據(jù)裝載到高速緩沖存儲(chǔ)器中時(shí),也引發(fā)(raise)一個(gè)或多個(gè)適當(dāng)信號(hào)。如果元數(shù)據(jù)表示要引發(fā)異常,則發(fā)送信號(hào)到中斷單元,其中該信號(hào)表示要引發(fā)異常。
該過程以接收指令包(步驟800)開始。識(shí)別指令包中的指令(步驟802)。確定是否存在與該指令相關(guān)聯(lián)的性能指示符(步驟804)。發(fā)送到中斷單元以表示要引發(fā)異常的信號(hào)不同于發(fā)送到性能監(jiān)測器單元的信號(hào)。例如,指令可以與具有導(dǎo)致發(fā)送信號(hào)到中斷單元的第一值的特定性能指示符相關(guān)聯(lián)。性能指示符的第二值可以用來發(fā)送不同信號(hào)到性能監(jiān)測器單元。如果存在具有第一值的性能指示符,則發(fā)送信號(hào)到中斷單元(步驟806)。當(dāng)接收到該信號(hào)時(shí),中斷單元啟動(dòng)適當(dāng)?shù)恼{(diào)用流支持以處理該中斷。調(diào)用流支持可以例如記錄試圖訪問高速緩沖存儲(chǔ)器中的指令或數(shù)據(jù)的功能單元可能發(fā)生的高速緩沖存儲(chǔ)器未中。
另外,對(duì)指令進(jìn)行處理(步驟808)。指令的處理包括例如發(fā)送指令到適當(dāng)?shù)墓δ軉卧员銏?zhí)行。
然后,確定指令包中是否存在另外的未處理指令(步驟810)。如果指令包中存在另外的未處理指令,則該過程返回到如上所述的步驟802。否則,該過程終止?;氐讲襟E804,如果不存在性能指示符,則該過程直接進(jìn)入步驟808。
現(xiàn)在參照?qǐng)D9,其示出了根據(jù)本發(fā)明優(yōu)選實(shí)施例的用于響應(yīng)對(duì)與性能指示符相關(guān)聯(lián)的存儲(chǔ)器位置的訪問而產(chǎn)生中斷的過程的流程圖。圖9所示的過程可以在數(shù)據(jù)高速緩沖存儲(chǔ)器,如圖2的數(shù)據(jù)高速緩沖存儲(chǔ)器246中實(shí)現(xiàn)。
該過程以識(shí)別訪問存儲(chǔ)器位置的請(qǐng)求(步驟900)開始。響應(yīng)識(shí)別出該請(qǐng)求,確定性能指示符是否與存儲(chǔ)器位置相關(guān)聯(lián)(步驟902)。如果性能指示符與存儲(chǔ)器位置相關(guān)聯(lián),則通過發(fā)送信號(hào)到中斷單元來產(chǎn)生中斷(步驟904)。然后,處理對(duì)存儲(chǔ)器位置的訪問(步驟906),然后該過程終止。
在圖10中,示出了根據(jù)本發(fā)明優(yōu)選實(shí)施例的用于對(duì)事件進(jìn)行計(jì)數(shù)的過程的流程圖。圖10所示的過程可以在性能監(jiān)測器單元,如圖2的性能監(jiān)測器單元240中實(shí)現(xiàn)。
該過程以從指令高速緩沖存儲(chǔ)器接收表示正在處理帶有性能指示符的指令的信號(hào)(步驟1000)開始。接下來,對(duì)與正被處理的指令相關(guān)聯(lián)的事件進(jìn)行計(jì)數(shù)(步驟1002),然后該過程終止。事件計(jì)數(shù)可以存儲(chǔ)在計(jì)數(shù)器,如圖2的計(jì)數(shù)器241中。
接下來參照?qǐng)D11,其示出了根據(jù)本發(fā)明優(yōu)選實(shí)施例的用于對(duì)指令進(jìn)行選擇性計(jì)數(shù)的過程的流程圖。圖11所示的過程可以在指令高速緩沖存儲(chǔ)器,如圖2的指令高速緩沖存儲(chǔ)器214中實(shí)現(xiàn)。
該過程以確定是否接收到與性能指示符相關(guān)聯(lián)的指令(步驟1100)開始。在本例中,該指示符導(dǎo)致對(duì)由處理器執(zhí)行的這一指令和所有后續(xù)指令的事件進(jìn)行計(jì)數(shù)?;蛘?,該指示符可以是指示要開始新計(jì)數(shù)模式的指令本身。如果接收到帶有指示符的指令,則設(shè)置標(biāo)志以開始對(duì)指令的事件進(jìn)行計(jì)數(shù)(步驟1102)。該標(biāo)志表示應(yīng)開始對(duì)指令的事件進(jìn)行計(jì)數(shù)。
接下來,確定是否接收到帶有指示符的指令(步驟1104)?;蛘撸甘痉梢允侵甘疽V剐掠?jì)數(shù)模式的指令本身。如果接收到帶有指示符的指令,則清除(unset)該標(biāo)志以停止對(duì)事件的計(jì)數(shù)(步驟1106),然后該過程終止。
步驟1100和步驟1104中的指示符可以是相同的指示符,其中該指示符觸發(fā)標(biāo)志的設(shè)置和清除。在另一種實(shí)現(xiàn)中,可以使用兩個(gè)不同的指示符,其中第一指示符僅設(shè)置標(biāo)志。第二指示符用來清除標(biāo)志??梢酝ㄟ^在要進(jìn)行計(jì)數(shù)時(shí)采用高信號(hào)而在不再激活計(jì)數(shù)時(shí)采用低信號(hào)來簡單地實(shí)現(xiàn)高速緩沖存儲(chǔ)器單元,如指令高速緩沖存儲(chǔ)器或數(shù)據(jù)高速緩沖存儲(chǔ)器與性能監(jiān)測器單元之間為表示計(jì)數(shù)模式而進(jìn)行的通信。
接下來參照?qǐng)D12,其示出了根據(jù)本發(fā)明優(yōu)選實(shí)施例的用于對(duì)指令進(jìn)行選擇性計(jì)數(shù)的過程的流程圖。圖12所示的過程可以在指令高速緩沖存儲(chǔ)器,如圖2的指令高速緩沖存儲(chǔ)器214中實(shí)現(xiàn)。
該過程以檢查標(biāo)志(步驟1200)開始。確定是否設(shè)置了標(biāo)志(步驟1202)。如果設(shè)置了標(biāo)志,則發(fā)送信號(hào)到性能監(jiān)測器單元,以激活該單元對(duì)事件進(jìn)行計(jì)數(shù)(步驟1204),然后該過程終止。否則,發(fā)送信號(hào)到性能監(jiān)測器單元,以禁止對(duì)事件計(jì)數(shù)(步驟1206),然后該過程終止。
圖11和12所示的過程在指令與性能指示符相關(guān)聯(lián)之后,對(duì)所有指令的事件進(jìn)行計(jì)數(shù)。通過這種方式,可以使用較少的位來觸發(fā)對(duì)事件的計(jì)數(shù)。此外,在對(duì)所有指令計(jì)數(shù)的情況下,可以對(duì)與外部子例程調(diào)用相關(guān)聯(lián)的事件進(jìn)行計(jì)數(shù)。
現(xiàn)在參照?qǐng)D13,其示出了根據(jù)本發(fā)明優(yōu)選實(shí)施例的用于識(shí)別超過閾值的指令的過程的流程圖。圖13所示的過程可以在指令高速緩沖存儲(chǔ)器,如圖2的指令高速緩沖存儲(chǔ)器214中實(shí)現(xiàn)。
該過程以接收與性能指示符相關(guān)聯(lián)的指令(步驟1300)開始。為指令識(shí)別閾值(步驟1302)。在這些例子中,閾值與完成指令所需的多個(gè)處理器或時(shí)鐘周期相關(guān)。如果訪問高速緩沖存儲(chǔ)器所需的高速緩沖存儲(chǔ)器延遲或時(shí)間量超過該閾值,則對(duì)該事件進(jìn)行計(jì)數(shù)。在這些例子中,閾值設(shè)置在指示符內(nèi)。
例如,可以使用三個(gè)位來設(shè)置八個(gè)不同的閾值。例如,“xx1”=10個(gè)周期,“x1x”=50個(gè)周期,以及“1xx”=100個(gè)周期。這三位的某些組合可以用來設(shè)置閾值。根據(jù)具體實(shí)現(xiàn),可以使用更多或更少的位,并且可以將不同值分配給這些位。這些位的含義也可以通過接口來控制,例如可以用來設(shè)置每個(gè)位的含義的一組寄存器。這些寄存器是為此特定目的而添加到處理器架構(gòu)的寄存器。
監(jiān)測用于執(zhí)行該指令的周期(步驟1304)。確定對(duì)于該指令是否超過了閾值(步驟1306)。如果超過了閾值,則執(zhí)行選定操作(步驟1308)。該選定操作可以根據(jù)具體實(shí)現(xiàn)而采取不同的形式。例如,每次超過閾值時(shí),可以遞增計(jì)數(shù)器?;蛘?,可以產(chǎn)生中斷。中斷可以將控制傳遞給另一個(gè)過程以收集數(shù)據(jù)。例如,該數(shù)據(jù)可以包括調(diào)用堆棧和獲得有關(guān)該調(diào)用堆棧的信息。堆棧是保留存儲(chǔ)器的區(qū)域,其中一個(gè)或多個(gè)程序存儲(chǔ)狀態(tài)數(shù)據(jù),如過程和函數(shù)調(diào)用地址、所傳遞的參數(shù)、性能監(jiān)測器計(jì)數(shù)器值以及有時(shí)還有局部變量。
確定監(jiān)測是否結(jié)束(步驟1310)。步驟1310可以一次一條指令地實(shí)現(xiàn)。當(dāng)執(zhí)行了指令或者超過了閾值時(shí),發(fā)送信號(hào)。在本例中,單條指令的執(zhí)行導(dǎo)致發(fā)送一個(gè)信號(hào)。在可以同時(shí)執(zhí)行多條指令的情況下,可能需要多個(gè)信號(hào)來表示每條指令的執(zhí)行。在一些實(shí)施例中,可以支持采樣方案,其中僅對(duì)一次一條指令支持閾值。這可以通過僅支持處理器指令隊(duì)列內(nèi)的特定位置中的那些指令的閾值來實(shí)現(xiàn)。在其它實(shí)施例中,如果至少一條被標(biāo)記指令超過閾值,則可以發(fā)送一個(gè)信號(hào)。對(duì)于超過閾值的每條指令,為該指令引發(fā)或產(chǎn)生單獨(dú)的信號(hào)。
如果監(jiān)測結(jié)束,則將所收集的信息發(fā)送到監(jiān)測程序(步驟1312),然后,該過程終止。否則,該過程返回到如上所述的步驟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ù)所需的周期。如同指令執(zhí)行一樣,當(dāng)訪問存儲(chǔ)器位置中的數(shù)據(jù)所需的時(shí)間量超過指定閾值時(shí),進(jìn)行計(jì)數(shù)或產(chǎn)生中斷。
如同其它例子一樣,可以作為指令的一部分或者與存儲(chǔ)器位置中的數(shù)據(jù)一起包括這些指示符?;蛘撸@些指示符可以與指令或數(shù)據(jù)相關(guān)聯(lián)地在性能檢測影象高速緩沖存儲(chǔ)器或存儲(chǔ)器中找到。
參照?qǐng)D14,其示出了根據(jù)本發(fā)明優(yōu)選實(shí)施例的用于監(jiān)測對(duì)存儲(chǔ)器位置的訪問的過程的流程圖。圖14所示的過程可以在數(shù)據(jù)高速緩沖存儲(chǔ)器,如圖2的數(shù)據(jù)高速緩沖存儲(chǔ)器216中實(shí)現(xiàn)。該過程用來對(duì)存儲(chǔ)器位置中的數(shù)據(jù)訪問進(jìn)行計(jì)數(shù)。
該過程以接收與性能指示符相關(guān)聯(lián)的數(shù)據(jù)(步驟1400)開始。確定是否訪問了該數(shù)據(jù)的存儲(chǔ)器位置(步驟1402)。如果訪問了該存儲(chǔ)器位置,則遞增計(jì)數(shù)器(步驟1404)。確定監(jiān)測是否結(jié)束(步驟1406)。如果對(duì)存儲(chǔ)器位置的監(jiān)測結(jié)束,則該過程終止。否則,該過程返回到步驟1402。在步驟1402,如果沒有訪問存儲(chǔ)器位置,則該過程進(jìn)入步驟1406。
參照?qǐng)D15,其示出了根據(jù)本發(fā)明優(yōu)選實(shí)施例的用于生成元數(shù)據(jù),如性能指示符的組件的方框圖。編譯器支持指示要生成元數(shù)據(jù)的、嵌入在源中的命令(directive)。編譯器1500可以生成用于執(zhí)行的指令1502和用于監(jiān)測的元數(shù)據(jù)。在這些例子中,當(dāng)指令或數(shù)據(jù)高速緩沖存儲(chǔ)器頁被裝載到存儲(chǔ)器中時(shí),操作系統(tǒng)程序裝載器/鏈接器和/或性能監(jiān)測程序讀取由編譯器1500生成的元數(shù)據(jù),并且將元數(shù)據(jù)裝載到存儲(chǔ)器,如性能監(jiān)測器部分1506中。該部分本身被標(biāo)記為元數(shù)據(jù)1504。處理器可以接受性能監(jiān)測器部分1506中具有編譯器所生成部分?jǐn)?shù)據(jù)的格式的元數(shù)據(jù)1504,并且向處理器的內(nèi)部性能檢測影象高速緩沖存儲(chǔ)器填充該數(shù)據(jù)。下面參照?qǐng)D17描述面向塊的方案。
在一個(gè)實(shí)施例中,該格式對(duì)于其塊或扇區(qū)(sector)引用中的每一個(gè)都簡單地具有性能檢測影象高速緩沖存儲(chǔ)器條目,并且將元數(shù)據(jù)1504傳送至其對(duì)應(yīng)的一個(gè)或多個(gè)影象條目。代替具有性能檢測影象高速緩沖存儲(chǔ)器,可以修改高速緩沖存儲(chǔ)器本身的內(nèi)部格式來包含元數(shù)據(jù)1504。在修改指令流本身以包含元數(shù)據(jù)的實(shí)施例中,裝載器更新指令流以包含適當(dāng)?shù)闹甘痉凸ぷ鲄^(qū)域,或者編譯器1500生成了代碼來包含元數(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ū)⒃撔畔⒀b載到性能檢測影象存儲(chǔ)器1505內(nèi)的影象數(shù)據(jù)區(qū)域中?;蛘?,調(diào)試區(qū)域可以由一起工作的操作系統(tǒng)和處理器自動(dòng)填充。
然后,可以由處理器1508執(zhí)行指令1502。編譯器1500可以設(shè)置處理器1508中的寄存器,如模式寄存器1510。當(dāng)設(shè)置了該寄存器時(shí),處理器1508在執(zhí)行指令1502時(shí)查看性能檢測影象存儲(chǔ)器1505中的元數(shù)據(jù)1504,以確定元數(shù)據(jù)1504中的性能指示符是否與指令1502中正被執(zhí)行的指令相關(guān)聯(lián)。使用例如上面參照?qǐng)D2-14所述的過程處理這些性能指示符。如果沒有設(shè)置模式寄存器1510,則在執(zhí)行指令1502時(shí)忽略元數(shù)據(jù)1504。
可以對(duì)存儲(chǔ)器位置1512中的數(shù)據(jù)執(zhí)行類似的過程。根據(jù)具體實(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)執(zhí)行元數(shù)據(jù)1504的生成。
該特性允許在不必修改程序的情況下進(jìn)行對(duì)指令的選擇和監(jiān)測。換句話說,編譯器1500可以在編譯了指令1502以便由處理器1508執(zhí)行之后生成元數(shù)據(jù)1504。設(shè)置模式寄存器1510使處理器1508在性能檢測影象存儲(chǔ)器1505中查找元數(shù)據(jù)1504,而不必修改指令1502。在這些例子中,元數(shù)據(jù)1504采取告訴處理器1508如何處理對(duì)指令1502的執(zhí)行和/或?qū)Υ鎯?chǔ)器位置1512的數(shù)據(jù)訪問的性能指示符的形式。
接下來參照?qǐng)D16,其示出了根據(jù)本發(fā)明優(yōu)選實(shí)施例的元數(shù)據(jù)的圖。元數(shù)據(jù)1600是圖15中的元數(shù)據(jù)1504的例子。該元數(shù)據(jù)由編譯器如編譯器1500生成。
在本例中,元數(shù)據(jù)1600包括5個(gè)條目,即條目1602、1604、1606、1608和1610,如元數(shù)據(jù)1600中的行1612所示。在本例中,這些條目中的每一個(gè)都包括偏移、長度和用于描述代碼的檢測(instrumentation)的標(biāo)志。
條目1602的偏移為0,而其條目長度為120字節(jié)。標(biāo)志1614表示需要對(duì)由條目長度1616表示的范圍內(nèi)的所有指令進(jìn)行計(jì)數(shù)。在這些例子中,每條指令的長度為4字節(jié)。條目1604的條目長度為4字節(jié),這與指令相對(duì)應(yīng)。標(biāo)志1618表示當(dāng)執(zhí)行該指令時(shí)應(yīng)當(dāng)產(chǎn)生異常。
在條目1606中,以160字節(jié)的偏移開始的指令與標(biāo)志1620相關(guān)聯(lián)。該標(biāo)志表示如果超過閾值,即100個(gè)周期,則應(yīng)當(dāng)對(duì)指令進(jìn)行計(jì)數(shù)。
條目1608中的標(biāo)志1622表示應(yīng)當(dāng)在偏移為256字節(jié)的指令處開始跟蹤。如條目1610中的標(biāo)志1624所指示而停止跟蹤,其中條目1610在偏移為512字節(jié)處具有用于指令的標(biāo)志。
這些標(biāo)志用來生成與這些指令相關(guān)聯(lián)的性能指示符。操作系統(tǒng)將由編譯器生成的該元數(shù)據(jù)傳送到性能檢測影象存儲(chǔ)器,如圖15的性能檢測影象存儲(chǔ)器1506中,并且處理該元數(shù)據(jù)。或者,根據(jù)具體實(shí)現(xiàn),該元數(shù)據(jù)可以置于指令內(nèi)的字段中。
現(xiàn)在參照?qǐng)D17,示出根據(jù)本發(fā)明優(yōu)選實(shí)施例的在裝載和維護(hù)性能檢測影象高速緩沖存儲(chǔ)器時(shí)所涉及的組件的圖。在本例中,現(xiàn)有高速緩沖存儲(chǔ)器1700包含主段1702。主段1702包括塊1704、1706、1708、1710、1712、1714、1716、1718、1720、1722和1724。轉(zhuǎn)換表1726用來提供主段1702中的塊1704-1724到性能檢測(perfinst)段1728中的塊的映射。該段中的數(shù)據(jù)置于新性能檢測影象高速緩沖存儲(chǔ)器1730中。
在程序編譯的時(shí)候,編譯器生成如前所述的新性能檢測數(shù)據(jù)部分。在程序裝載時(shí)候,裝載器向處理器查詢以確定高速緩沖存儲(chǔ)器線大小。裝載器以處理器所要求的格式,為裝載器所裝載的任何文本或數(shù)據(jù)段解析性能檢測段1728、并且構(gòu)造影象段。該影象段置于新性能檢測影象高速緩沖存儲(chǔ)器1730中。
影象段中的每一塊包含對(duì)應(yīng)主高速緩沖存儲(chǔ)器塊中的指令或數(shù)據(jù)的元數(shù)據(jù)。該元數(shù)據(jù)例如包括主段1702中的塊內(nèi)每個(gè)帶標(biāo)簽(tagged)項(xiàng)目的標(biāo)志、標(biāo)簽字段、閾值和計(jì)數(shù)字段。該元數(shù)據(jù)還可以包括代表塊中的所有指令或數(shù)據(jù)的標(biāo)志。
裝載器構(gòu)造將主段1702中的每個(gè)塊映射到性能檢測段1728中對(duì)應(yīng)的性能檢測塊,如塊1732、1734、1736、1738、1740、1742、1744、1746、1748、1750和1752的表,即轉(zhuǎn)換表1726。此外,裝載器還向處理器登記該表即轉(zhuǎn)換表1726的頭,以及主段1702的位置和大小。
在頁更替的時(shí)候,頁面調(diào)度(paging)軟件提供新接口來使性能檢測段1728與對(duì)應(yīng)主段即主段1702相關(guān)聯(lián)。當(dāng)主段1702進(jìn)行頁面調(diào)入或調(diào)出時(shí),性能檢測段1728也進(jìn)行頁面調(diào)入或調(diào)出。
在高速緩沖存儲(chǔ)器線更替的時(shí)候,處理器包含新性能檢測影象高速緩沖存儲(chǔ)器1730,其中的高速緩沖存儲(chǔ)器幀與現(xiàn)有數(shù)據(jù)和指令高速緩沖存儲(chǔ)器,如現(xiàn)有高速緩沖存儲(chǔ)器1700中的幀直接相關(guān)聯(lián)。當(dāng)處理器的指令或數(shù)據(jù)高速緩沖存儲(chǔ)器裝載新線(line)時(shí),它也必須將對(duì)應(yīng)性能檢測塊裝載到性能檢測影象高速緩沖存儲(chǔ)器,即新性能檢測影象高速緩沖存儲(chǔ)器1730中。處理器(從在程序裝載的時(shí)候由裝載器提供的登記數(shù)據(jù))知道處理器正在將塊帶入具有關(guān)聯(lián)性能檢測段,即性能檢測段1728的高速緩沖存儲(chǔ)器。處理器在與該段相關(guān)聯(lián)的轉(zhuǎn)換表1726中查看,得到對(duì)與將要裝載的塊相對(duì)應(yīng)的性能檢測塊的引用,并且將該性能檢測塊裝載到新性能檢測影象高速緩沖存儲(chǔ)器1730中。在這些例子中,與元數(shù)據(jù)相關(guān)聯(lián)的高速緩沖存儲(chǔ)器未中不被通知,或者以不同于與主高速緩沖存儲(chǔ)器塊,如主段1702中的數(shù)據(jù)相關(guān)聯(lián)的高速緩沖存儲(chǔ)器未中的方式進(jìn)行處理。
現(xiàn)在參照?qǐng)D18,其示出了根據(jù)本發(fā)明優(yōu)選實(shí)施例的用于生成指令的元數(shù)據(jù)的過程的流程圖。圖18所示的過程可以由性能監(jiān)測程序?qū)崿F(xiàn)。
該過程以識(shí)別要進(jìn)行概略的指令(步驟1800)開始。該指令可以是例如已被執(zhí)行多于選定次數(shù)的指令。為所識(shí)別的指令生成元數(shù)據(jù)(步驟1802)。該元數(shù)據(jù)采取性能指示符的形式。例如,性能指示符可以每當(dāng)執(zhí)行該指令時(shí)遞增計(jì)數(shù)器,在執(zhí)行指令所需的周期數(shù)超過閾值的情況下遞增計(jì)數(shù)器,在該指令之后對(duì)所有事件、所有指令觸發(fā)對(duì)事件的計(jì)數(shù),或者對(duì)響應(yīng)執(zhí)行該指令而發(fā)生的事件進(jìn)行計(jì)數(shù)。在優(yōu)選實(shí)施例中,計(jì)數(shù)器位于關(guān)聯(lián)的性能檢測影象高速緩沖存儲(chǔ)器中,并且采取若干位來允許高速緩沖存儲(chǔ)器中的數(shù)據(jù)或指令與被保留用于計(jì)數(shù)的位之間的一一對(duì)應(yīng)關(guān)系。
然后,將元數(shù)據(jù)與指令相關(guān)聯(lián)(步驟1804)。接下來,確定是否存在更多指令要處理(步驟1806)。如果存在另外的指令,則該過程返回到步驟1800。否則,該過程終止。可以使用類似的過程來動(dòng)態(tài)生成存儲(chǔ)器位置中的數(shù)據(jù)的元數(shù)據(jù)。
現(xiàn)在參照?qǐng)D19,其示出了根據(jù)本發(fā)明優(yōu)選實(shí)施例的用于生成存儲(chǔ)器位置的元數(shù)據(jù)的過程的流程圖。圖19所示的過程可以在編譯器如圖15的編譯器1500中實(shí)現(xiàn)。
該過程以識(shí)別要進(jìn)行概略的存儲(chǔ)器位置(步驟1900)開始。為所識(shí)別的存儲(chǔ)器位置生成元數(shù)據(jù)(步驟1902)。該元數(shù)據(jù)采取性能指示符的形式。性能指示符可以,例如,每當(dāng)訪問存儲(chǔ)器位置時(shí)遞增計(jì)數(shù)器,在訪問存儲(chǔ)器位置所需的周期數(shù)超過閾值的情況下遞增計(jì)數(shù)器,或者觸發(fā)對(duì)存儲(chǔ)器位置的所有訪問的計(jì)數(shù)。然后,將元數(shù)據(jù)與存儲(chǔ)器位置相關(guān)聯(lián)(步驟1904)。接下來,確定是否存在更多存儲(chǔ)器位置要處理(步驟1906)。如果存在另外的存儲(chǔ)器位置,則該過程返回到步驟1900。否則,該過程終止。
現(xiàn)在參照?qǐng)D20,其示出了根據(jù)本發(fā)明優(yōu)選實(shí)施例的用于對(duì)特定指令的執(zhí)行進(jìn)行計(jì)數(shù)的過程的流程圖。圖20所示的過程可以在指令高速緩沖存儲(chǔ)器如圖2的指令高速緩沖存儲(chǔ)器214中實(shí)現(xiàn)。
該過程以執(zhí)行指令(步驟2000)開始。確定計(jì)數(shù)器是否與指令相關(guān)聯(lián)(步驟2002)。計(jì)數(shù)器可以包括在指令內(nèi)的字段中,或者可以位于性能檢測影象存儲(chǔ)器中。如果計(jì)數(shù)器與指令相關(guān)聯(lián),則遞增計(jì)數(shù)器(步驟2004),然后該過程終止。否則,該過程終止而不遞增計(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ì)數(shù)器的值處于計(jì)數(shù)器超過閾值之前或者達(dá)到該值時(shí)。然后,在讀到該值之后,則可以復(fù)位計(jì)數(shù)器。該值可以由性能監(jiān)測器單元或用來分析數(shù)據(jù)的程序讀取??梢詫?shí)現(xiàn)API來訪問該數(shù)據(jù)。
現(xiàn)在參照?qǐng)D21,其示出了根據(jù)本發(fā)明優(yōu)選實(shí)施例的用于對(duì)特定存儲(chǔ)器位置的訪問進(jìn)行計(jì)數(shù)的過程的流程圖。圖21所示的過程可以在數(shù)據(jù)高速緩沖存儲(chǔ)器,如圖2的數(shù)據(jù)高速緩沖存儲(chǔ)器216和指令高速緩沖存儲(chǔ)器214中實(shí)現(xiàn)。
該過程以檢測對(duì)存儲(chǔ)器位置的訪問(步驟2100)開始。確定計(jì)數(shù)器是否與存儲(chǔ)器位置相關(guān)聯(lián)(步驟2102)。計(jì)數(shù)器可以包括在存儲(chǔ)器位置內(nèi),或者可以位于性能檢測影象存儲(chǔ)器中。如果計(jì)數(shù)器與存儲(chǔ)器位置相關(guān)聯(lián),則遞增計(jì)數(shù)器(步驟2104),然后該過程終止。否則,該過程終止而不遞增計(jì)數(shù)器。
接下來參照?qǐng)D22,其是示出用于訪問關(guān)于指令執(zhí)行或存儲(chǔ)器位置訪問而收集的信息的組件的圖。在本例中,指令單元2200執(zhí)行指令2202,并且遞增計(jì)數(shù)器2204。每次執(zhí)行指令2202時(shí),都遞增該計(jì)數(shù)器。在本例中,指令單元2200可以作為圖2中的指令高速緩沖存儲(chǔ)器214實(shí)現(xiàn)。
當(dāng)指令或數(shù)據(jù)高速緩沖存儲(chǔ)器頁被裝載到存儲(chǔ)器中時(shí),操作系統(tǒng)程序裝載器/鏈接器和/或性能監(jiān)測程序讀取由編譯器生成的元數(shù)據(jù),并且確定計(jì)數(shù)與指令或數(shù)據(jù)訪問相關(guān)聯(lián),然后裝載過程分配數(shù)據(jù)區(qū)域來維護(hù)計(jì)數(shù)器作為其性能檢測段的一部分。計(jì)數(shù)器的大小和數(shù)據(jù)訪問的粒度決定所要分配的工作區(qū)域的量。
在簡單的情況下,數(shù)據(jù)或指令訪問的粒度可以是字大小(從而對(duì)字中的任何字節(jié)的訪問都被認(rèn)為是訪問),并且計(jì)數(shù)也可以是字大小。在這種情況下,在主段和性能檢測段之間存在一對(duì)多映射(不需要全字來包含計(jì)數(shù)或閾值)。裝載過程分配一個(gè)或多個(gè)影象頁,并且告訴處理器使用該一個(gè)或多個(gè)影象頁來包含計(jì)數(shù)。該映射的詳細(xì)信息在上面參照?qǐng)D17作過描述。處理器中的高速緩沖存儲(chǔ)器單元維護(hù)影象塊條目,以指示對(duì)應(yīng)頁包含計(jì)數(shù)信息??梢蕴峁┎煌成浜筒煌?jí)別的支持。
在可替換實(shí)施例中,編譯器分配工作區(qū)域來維護(hù)計(jì)數(shù),并且指示將這些工作區(qū)域置于其生成的數(shù)據(jù)區(qū)域中。元數(shù)據(jù)中的條目可以表示數(shù)據(jù)的開始、數(shù)據(jù)的字節(jié)數(shù)、數(shù)據(jù)的粒度、計(jì)數(shù)區(qū)域的開始和每個(gè)計(jì)數(shù)單元的粒度。在任何情況下,將元數(shù)據(jù)裝載到處理器中,并且處理器向其內(nèi)部(影象)高速緩沖存儲(chǔ)器填充元數(shù)據(jù)。在修改指令流本身來包含元數(shù)據(jù)的實(shí)施例中,裝載器更新指令流以包含適當(dāng)?shù)闹甘痉凸ぷ鲄^(qū)域,或者編譯器生成了代碼來包含元數(shù)據(jù)。在任一種情況下,在裝載了代碼之后,處理器接收元數(shù)據(jù)。
數(shù)據(jù)單元2206可以作為圖2中的數(shù)據(jù)高速緩沖存儲(chǔ)器206實(shí)現(xiàn)。在本例中,每當(dāng)訪問數(shù)據(jù)2208時(shí),都遞增計(jì)數(shù)器2210。數(shù)據(jù)2208和計(jì)數(shù)器2210均處于特定存儲(chǔ)器位置中。在這些例子中,可以采用新指令,其中,該指令稱作ReadDataAccessCount(RDAC),其接受(take)數(shù)據(jù)地址和寄存器,并且將與該數(shù)據(jù)地址相關(guān)聯(lián)的計(jì)數(shù)置于該寄存器中。
指令執(zhí)行和數(shù)據(jù)訪問這些事件中的每一個(gè)都導(dǎo)致計(jì)數(shù)器的遞增。本發(fā)明的機(jī)制提供接口,即硬件接口2212來訪問所收集的這一數(shù)據(jù)。在這些例子中,硬件接口2212采取用于操作系統(tǒng)2214的應(yīng)用程序編程接口(API)的形式。這樣,分析工具2216可以從計(jì)數(shù)器2204和計(jì)數(shù)器2210獲得數(shù)據(jù)。
雖然圖22中的例子示出向指令單元和數(shù)據(jù)單元提供接口,但是也可以實(shí)現(xiàn)硬件接口2212來提供對(duì)來自處理器中的其它單元的信息的訪問。例如,可以為允許訪問位于性能監(jiān)測器單元的計(jì)數(shù)器,如圖2的性能監(jiān)測器單元240的計(jì)數(shù)器241和242中的信息的硬件接口2212創(chuàng)建API。
在圖23中,示出了根據(jù)本發(fā)明優(yōu)選實(shí)施例的用于自主修改程序代碼以允許對(duì)代碼部分進(jìn)行選擇性計(jì)數(shù)或概略的組件的方框圖。在本例中,概略器2300是可以用來識(shí)別程序如程序2302中具有高使用率的例程的程序,如tprof。在這些例子中,“tprof”是定時(shí)器概略器,其捆綁(ship)在來自國際商業(yè)機(jī)器(IBM)公司的高級(jí)交互性執(zhí)行體(AIX)操作系統(tǒng)上。該程序采集由定時(shí)器啟動(dòng)的樣本。當(dāng)定時(shí)器結(jié)束時(shí),tprof識(shí)別所執(zhí)行的指令。tprof是可以用于系統(tǒng)性能分析的CPU概略工具。該工具基于包括以下步驟的采樣技術(shù)通過時(shí)間或性能監(jiān)測器計(jì)數(shù)器周期性地中斷系統(tǒng);隨同進(jìn)程id(pid)和線程id(tid)一起確定被中斷代碼的地址;記錄軟件跟蹤緩沖器中的TPROF鉤子(hook);并且返回到被中斷代碼。
或者,可以使用性能監(jiān)測器計(jì)數(shù)器的固定數(shù)目的計(jì)數(shù)來代替定時(shí)器。該程序概略用來指示在程序內(nèi)何處花費(fèi)了時(shí)間的子例程。使用率超過特定閾值的程序也稱作“熱點(diǎn)(hot)”。通過使用來自概略器2300的信息,可以識(shí)別感興趣的例程,如程序2302中的子例程2304。
采用該信息,可以由分析工具2306自主修改子例程2304中的指令,以允許對(duì)子例程2304的執(zhí)行進(jìn)行計(jì)數(shù)??梢宰R(shí)別另外的例程以由分析工具2306進(jìn)行修改。例如,還可以識(shí)別子例程2304為感興趣的例程,并修改該例程的指令以允許對(duì)子例程2304的執(zhí)行進(jìn)行計(jì)數(shù)。對(duì)這些例程中的代碼的修改包括將性能指示符與這些子例程的每一個(gè)內(nèi)的一條或多條指令相關(guān)聯(lián)。
在由分析工具2306修改了這些例程中的指令之后,由處理器2308執(zhí)行程序2302。處理器2308執(zhí)行程序2302并且為這些例程提供計(jì)數(shù)。例如,對(duì)所執(zhí)行的指令和執(zhí)行例程時(shí)所用周期數(shù)的計(jì)數(shù)可以使用上述機(jī)制由處理器2308執(zhí)行。
參照?qǐng)D24,其示出了根據(jù)本發(fā)明優(yōu)選實(shí)施例的用于動(dòng)態(tài)地將性能指示符添加到指令或使其與指令關(guān)聯(lián)的過程的流程圖。圖24所示的過程可以在諸如圖23的分析工具2306的程序中實(shí)現(xiàn)。
該過程以使用來自概略器的數(shù)據(jù)識(shí)別感興趣的指令(步驟2400)開始。該概略器可以例如是AIX中見到的定時(shí)器概略器。從識(shí)別出的指令中選擇指令以作修改(步驟2402)。然后,將性能指示符動(dòng)態(tài)添加到所選指令(步驟2404)。
在步驟2404,可以以無需為執(zhí)行而修改指令的方式添加指令??梢圆捎眯阅軝z測影象存儲(chǔ)器,如圖15中的性能檢測影象存儲(chǔ)器1506來保存性能指示符。在這種情形下,設(shè)置處理器中的寄存器以指示當(dāng)執(zhí)行指令時(shí)應(yīng)檢查性能檢測影象存儲(chǔ)器以獲得性能指示符。
然后,確定是否存在另外的所識(shí)別指令要修改(步驟2406)。如果存在另外的指令要修改,則該過程返回到步驟2402。否則,該過程終止。
接下來參照?qǐng)D25,其示出了根據(jù)本發(fā)明優(yōu)選實(shí)施例的用來通過將性能指示符與頁內(nèi)的指令相關(guān)聯(lián)而掃描頁的組件的圖。本發(fā)明的機(jī)制使用性能指示符來允許每次一頁地檢測(instrument)或修改程序中的指令。
在本例中,程序2500包含三頁,即頁2502、頁2504和頁2506。掃描守護(hù)進(jìn)程(daemon)2508每次一頁或多頁地將性能指示符與程序2500中的指令相關(guān)聯(lián)。例如,頁2502中的指令可以通過掃描守護(hù)進(jìn)程2508與性能指示符相關(guān)聯(lián)。然后,由處理器2510執(zhí)行程序2500。然后,可以收集來自執(zhí)行程序2500的數(shù)據(jù)。該數(shù)據(jù)包括例如對(duì)響應(yīng)頁2502中的指令而發(fā)生的事件的計(jì)數(shù),從而對(duì)執(zhí)行頁2502中的每條指令的次數(shù)進(jìn)行計(jì)數(shù),和/或識(shí)別對(duì)頁2502的訪問次數(shù)。
接下來,掃描守護(hù)進(jìn)程可以從頁2502內(nèi)的指令中去除性能指示符,并且將性能指示符與頁2504中的指令相關(guān)聯(lián)。然后,由處理器2510再次執(zhí)行程序2500,并且收集來自對(duì)該程序的執(zhí)行的數(shù)據(jù)。然后,可以在所執(zhí)行的程序2500中修改頁2506中的指令,以收集有關(guān)該頁的數(shù)據(jù)。
以這種方式,可以識(shí)別諸如定時(shí)器概略器的程序通常不記錄的對(duì)例程的使用。由于中斷可能被禁止,或者樣本的定時(shí)可能產(chǎn)生同步非隨機(jī)行為,因此定時(shí)器概略器可能不記錄對(duì)例程的某些使用。通過修改程序2500中的指令,可以獲得對(duì)例程或其它模塊的計(jì)數(shù),其中,計(jì)數(shù)是無偏差的,并且系統(tǒng)是不受干擾的。以這種方式,避免了中斷驅(qū)動(dòng)的計(jì)數(shù)。此外,雖然對(duì)代碼的檢測是每次一頁,但是在掃描程序時(shí)也可以使用指令的其它編組,例如形成程序的模塊。例如,編組可以是單個(gè)可執(zhí)行程序、庫、一組選定函數(shù)和一組選定頁。
接下來參照?qǐng)D26,其示出了根據(jù)本發(fā)明優(yōu)選實(shí)施例的用于將指示符添加到頁內(nèi)指令的過程的流程圖。圖26所示的過程可以在諸如圖25的掃描守護(hù)進(jìn)程2508的程序中實(shí)現(xiàn)。
首先,識(shí)別頁的選擇范圍(selection)(步驟2600)。在本例中,這些頁是程序中所要掃描或檢測的那些頁。接下來,選擇頁的選擇范圍中的一頁以作修改(步驟2602)。然后,將指示符與選定頁內(nèi)的所有指令相關(guān)聯(lián)(步驟2604)。然后執(zhí)行程序(步驟2606)。接下來,確定是否掃描了選擇的所有頁(步驟2608)。如果掃描了所有頁,則該過程隨后終止。然而,如果并非所有的頁都已被掃描,則選擇要掃描的下一頁(步驟2610),并且該過程返回到如上所述的步驟2604。
圖26所示的過程示出所掃描的作為頁的指令編組。根據(jù)具體實(shí)現(xiàn),可以以這種方式掃描或檢測其它類型的指令分組,例如形成程序的模塊。
采用程序來根據(jù)調(diào)用堆棧中找到的信息從例程中識(shí)別調(diào)用者。該程序通過識(shí)別已進(jìn)行的函數(shù)調(diào)用,允許識(shí)別在例程中發(fā)生了什么,并且提供對(duì)在程序中發(fā)生了什么的總結(jié)。然而,該程序需要將指令插入代碼中以獲得該信息。
本發(fā)明的機(jī)制允許識(shí)別調(diào)用和返回,而不必執(zhí)行特別的代碼檢測。具體地說,可以使用對(duì)特定指令集產(chǎn)生中斷的函數(shù)來收集有關(guān)系統(tǒng)和應(yīng)用程序的信息。在這些例子中,調(diào)用和返回的指令與產(chǎn)生中斷的性能指示符相關(guān)聯(lián)。
通過向上回巡(walk back)調(diào)用堆棧,可以獲得完整的調(diào)用堆棧以作分析?!岸褩B?stack walk)”也可以被描述為“堆棧展開(stack unwind)”,而“漫步堆棧”的過程也可以被描述為“展開堆?!?。這些術(shù)語中的每一個(gè)闡明了對(duì)該過程的不同比喻。當(dāng)該過程必須逐步或逐幀地獲得和處理堆棧幀時(shí),該過程可以被描述為“漫步”。當(dāng)該過程必須獲得和處理指向彼此的堆棧幀時(shí),該過程也可以被描述為“展開”,而這些指針及其信息必須通過很多指針解除引用(dereference)來“展開”。
堆棧展開遵循響應(yīng)與性能指示符相關(guān)聯(lián)的指令的執(zhí)行而產(chǎn)生中斷時(shí)的函數(shù)/方法調(diào)用順序。調(diào)用堆棧是例程加上在程序執(zhí)行期間進(jìn)入的例程(即模塊、函數(shù)、方法等)內(nèi)的偏移的有序列表。例如,如果例程A調(diào)用例程B,然后例程B調(diào)用例程C,而處理器正在執(zhí)行例程C中的指令,則調(diào)用堆棧為ABC。當(dāng)控制從例程C返回到例程B時(shí),調(diào)用堆棧為AB。為了在所生成的報(bào)告內(nèi)表達(dá)更簡潔和易于解釋起見,提供例程的名稱而沒有任何偏移信息。偏移可以用于對(duì)程序執(zhí)行進(jìn)行更詳細(xì)的分析,然而,這里不進(jìn)一步考慮偏移。
因此,在通過執(zhí)行與特定性能指示符關(guān)聯(lián)的指令而啟動(dòng)的中斷處理期間或后處理時(shí),所生成的基于樣本的概略信息反映調(diào)用堆棧的采樣,而不是如同某些程序計(jì)數(shù)器采樣技術(shù)中一樣僅僅為可能調(diào)用堆棧的葉子(leaf)。葉子是分枝末端的節(jié)點(diǎn),即沒有后代的節(jié)點(diǎn)。后代是父節(jié)點(diǎn)之子,而葉子是無子節(jié)點(diǎn)。
現(xiàn)在參照?qǐng)D27,其是示出根據(jù)本發(fā)明優(yōu)選實(shí)施例的包含多個(gè)堆棧幀的調(diào)用堆棧的圖。“堆?!笔潜A舸鎯?chǔ)器區(qū)域,其中一個(gè)或多個(gè)程序存儲(chǔ)狀態(tài)數(shù)據(jù),如過程和函數(shù)調(diào)用地址、所傳遞參數(shù),并且有時(shí)還有局部變量?!岸褩笔蔷€程堆棧的一部分,其表示單個(gè)函數(shù)調(diào)用的局部存儲(chǔ)(自變量、返回地址、返回值和局部變量)。每一個(gè)活動(dòng)的執(zhí)行線程具有為其堆??臻g分配的一部分系統(tǒng)存儲(chǔ)器。線程堆棧由堆棧幀序列組成。線程堆棧上的幀集在任何時(shí)候都表示該線程的執(zhí)行狀態(tài)。由于堆棧幀典型地是相互鏈接的(例如,每個(gè)堆棧幀指向前一堆棧幀),因此經(jīng)常有可能往回跟蹤堆棧幀序列,并且形成“調(diào)用堆?!?。調(diào)用堆棧表示所有尚未完成的函數(shù)調(diào)用——換句話說,它反映任何時(shí)間點(diǎn)的函數(shù)調(diào)用序列。
調(diào)用堆棧2700包括標(biāo)識(shí)正在運(yùn)行的例程、調(diào)用其的例程等等一直到主程序的信息。調(diào)用堆棧2700包括多個(gè)堆棧幀2702、2704、2706和2708。在所示例子中,堆棧幀2702位于調(diào)用堆棧2700的頂部,而堆棧幀2708位于調(diào)用堆棧2700的底部。調(diào)用堆棧的頂部也稱作“根”。修改(大多數(shù)操作系統(tǒng)中見到)的中斷,以獲得被中斷線程的程序計(jì)數(shù)器值(pcv)以及指向該線程的當(dāng)前活動(dòng)堆棧幀的指針。在英特爾架構(gòu)中,這典型地由寄存器的內(nèi)容EIP(程序計(jì)數(shù)器)和EBP(指向堆棧幀的指針)來表示。
通過訪問當(dāng)前活動(dòng)的堆棧幀,有可能利用(典型的)堆棧幀鏈接約定,以便將所有幀鏈在一起。標(biāo)準(zhǔn)鏈接約定的一部分還規(guī)定函數(shù)返回地址正好放在被調(diào)用函數(shù)的堆棧幀之上;這可以用來確定被調(diào)用函數(shù)的地址。雖然本討論采用基于英特爾的架構(gòu),但是本例不是限制。大多數(shù)架構(gòu)采用可以類似地由修改的概略中斷處理程序?qū)Ш降逆溄蛹s定。
當(dāng)發(fā)生中斷時(shí),所獲取的第一參數(shù)是程序計(jì)數(shù)器值。下一個(gè)值是指向被中斷線程的當(dāng)前堆棧幀的頂部的指針。在所示例子中,該值將指向堆棧幀2708中的EBP 2708a。EBP 2708又指向堆棧幀2706中的EBP 2706a,而EBP 2706a又指向堆棧幀2704中的EBP 2704a。該EBP又指向堆棧幀2702中的EBP2702a。標(biāo)識(shí)調(diào)用例程的返回地址的EIP 2702b-2708b位于堆棧幀2702-2708內(nèi)??梢愿鶕?jù)這些地址來識(shí)別這些例程。因此,通過向上或向后漫步堆棧而收集所有返回地址來定義例程。
在某些情況下獲得完整的調(diào)用堆棧可能是困難的,因?yàn)榄h(huán)境可能使跟蹤困難,例如,當(dāng)具有一個(gè)調(diào)用堆棧的應(yīng)用程序?qū)哂胁煌{(diào)用堆棧的內(nèi)核進(jìn)行調(diào)用時(shí)。由本發(fā)明的機(jī)制提供的硬件支持避免了這些問題中的某些問題。
接下來參照?qǐng)D28,其示出了根據(jù)本發(fā)明優(yōu)選實(shí)施例的用于識(shí)別與調(diào)用和返回指令相關(guān)聯(lián)的事件的過程的流程圖,其中從性能監(jiān)測器單元收集數(shù)據(jù)。圖28所示的過程也可以在分析工具,如圖22的分析工具2216中實(shí)現(xiàn)。
該過程以識(shí)別調(diào)用和返回指令(步驟2800)開始。調(diào)用和返回的指令是用于確定何時(shí)調(diào)用了例程和何時(shí)例程完成的感興趣指令。這可以為中斷、中斷返回、系統(tǒng)調(diào)用和從系統(tǒng)調(diào)用返回而實(shí)現(xiàn)。
接下來,將性能指示符與所識(shí)別的調(diào)用和返回指令相關(guān)聯(lián)(步驟2802)。然后執(zhí)行程序(步驟2804),并且從性能監(jiān)測器單元收集數(shù)據(jù)(步驟2806),然后該過程終止。該信息可以通過接口,如圖22所示的硬件接口2212來收集,其中,采用API來獲得由處理器中的不同功能單元收集的數(shù)據(jù)。
利用該數(shù)據(jù),可以進(jìn)行例程調(diào)用者的識(shí)別。該信息可以用來產(chǎn)生諸如樹的數(shù)據(jù)結(jié)構(gòu),以跟蹤和呈現(xiàn)有關(guān)程序執(zhí)行的信息。數(shù)據(jù)結(jié)構(gòu)的生成可以使用類似于在分析工具中提供的過程來實(shí)現(xiàn)。
接下來參照?qǐng)D29,其示出了根據(jù)本發(fā)明優(yōu)選實(shí)施例的用于識(shí)別已被執(zhí)行多于選定次數(shù)的例程的過程的流程圖。圖29所示的過程可以在處理器內(nèi)的功能單元,如圖2的指令高速緩沖存儲(chǔ)器214中實(shí)現(xiàn)。該過程用來識(shí)別對(duì)被執(zhí)行指令的計(jì)數(shù),并且當(dāng)這些指令出現(xiàn)次數(shù)多于某選定次數(shù)時(shí)產(chǎn)生中斷。
首先,確定是否檢測到對(duì)選定指令的執(zhí)行(步驟2900)。通過檢查每條被執(zhí)行的指令來執(zhí)行該確定操作,以查看性能指示符是否與該指令相關(guān)聯(lián)。這些性能指示符可以通過不同工具,如圖15中的編譯器1500或圖22中的分析工具2216與該指令相關(guān)聯(lián)。
如果沒有識(shí)別出對(duì)包含性能指示符的指令的執(zhí)行,則該過程返回到步驟2900,直到檢測出選定指令。如果選定指令被識(shí)別為正在執(zhí)行,則為該選定指令遞增具有設(shè)定閾值的計(jì)數(shù)器,以對(duì)執(zhí)行該特定指令的頻度進(jìn)行計(jì)數(shù)(步驟2902)。在這些例子中,為被標(biāo)識(shí)以進(jìn)行監(jiān)測的每條指令分配計(jì)數(shù)器。
接下來,確定是否達(dá)到設(shè)定閾值(步驟2904)。對(duì)于每一個(gè)高速緩沖存儲(chǔ)器級(jí),起初通過使用文檔化高速緩沖存儲(chǔ)器未中次數(shù)來確定閾值。然而,增加次數(shù)用來確定因高速緩沖存儲(chǔ)器干擾(來自其它處理器的訪問)引起的問題??梢砸圆煌抵貜?fù)運(yùn)行,以識(shí)別具有最差性能的區(qū)域。
在這些例子中,指令可以與包括要監(jiān)測對(duì)指令的執(zhí)行并提供計(jì)數(shù)器的指示的指示符相關(guān)聯(lián)。此外,可以包括計(jì)數(shù)標(biāo)準(zhǔn)來識(shí)別何時(shí)要產(chǎn)生中斷。例如,當(dāng)指令被執(zhí)行多于十三次時(shí),可以產(chǎn)生中斷。
如果尚未達(dá)到閾值,則該過程返回到如上所述的步驟2900。如果達(dá)到了設(shè)定閾值,則將中斷發(fā)送到監(jiān)測程序(步驟2906),然后該過程終止。該中斷可以被發(fā)送到中斷單元,如圖2中的中斷單元250,這將控制傳到適當(dāng)?shù)倪^程或進(jìn)程以處理中斷。
該過程可能尤其有用于具有很多分支的例程。在這種情況下,將標(biāo)志所有分支指令以進(jìn)行計(jì)數(shù)。通過這種計(jì)數(shù)而獲得的信息可能有用于通過使分支最少化、或調(diào)整在所用處理器的指令架構(gòu)中支持的提示(hint)標(biāo)志來識(shí)別對(duì)編譯器和即時(shí)(just-in-time-JIT)代碼生成的改進(jìn)。
接下來參照?qǐng)D30,其示出了根據(jù)本發(fā)明優(yōu)選實(shí)施例的、用于當(dāng)特定指令被執(zhí)行的次數(shù)多于某選定次數(shù)時(shí),檢查調(diào)用堆棧并識(shí)別例程的調(diào)用者的過程的流程圖。圖7所示的過程可以由中斷單元如圖2中的中斷單元250啟動(dòng)。該過程用來識(shí)別例程中的調(diào)用,并且可以用來遞歸獲得調(diào)用者的信息。
首先,檢查調(diào)用堆棧,并且識(shí)別例程的調(diào)用者(步驟3000)。接下來,從指令高速緩沖存儲(chǔ)器捕獲對(duì)被執(zhí)行指令的計(jì)數(shù)(步驟3002)。該計(jì)數(shù)對(duì)應(yīng)于圖29的步驟2902中所用的計(jì)數(shù)器。然后,復(fù)位計(jì)數(shù)器(步驟3004),隨后從中斷返回控制(步驟3006)??梢允褂迷趫D30的過程中獲得的信息來識(shí)別另外的要監(jiān)測的例程,以遞歸識(shí)別例程的調(diào)用者。
接下來參照?qǐng)D31,其是示出根據(jù)本發(fā)明優(yōu)選實(shí)施例的、為進(jìn)行監(jiān)測而選擇的指令和數(shù)據(jù)的范圍的圖。在本例中,程序3100包括指令范圍3102和3104。這些范圍中的每一個(gè)均被識(shí)別為所要監(jiān)測的感興趣范圍。這些范圍中的每一個(gè)均設(shè)在諸如圖2的指令高速緩沖存儲(chǔ)器214的指令單元內(nèi)。每個(gè)范圍由處理器用來在程序3100的執(zhí)行期間,對(duì)在范圍內(nèi)執(zhí)行的指令數(shù)以及進(jìn)入范圍的次數(shù)進(jìn)行計(jì)數(shù)。
指令高速緩沖存儲(chǔ)器3106使用范圍寄存器3108來定義指令范圍。這些寄存器可以是現(xiàn)有寄存器,或者可以修改指令高速緩沖存儲(chǔ)器3106來包括定義指令范圍的寄存器。這些范圍可以基于指令地址。另外,范圍寄存器3108可以由各種調(diào)試器程序和性能工具更新。
如果在諸如指令范圍3102或指令范圍3104的范圍內(nèi)執(zhí)行指令,則在指令高速緩沖存儲(chǔ)器3106中遞增計(jì)數(shù)器?;蛘?,可以發(fā)送指令到性能監(jiān)測器單元,如圖2中的性能監(jiān)測器單元240。在這些例子中,性能監(jiān)測器單元跟蹤對(duì)該范圍內(nèi)執(zhí)行的指令數(shù)和進(jìn)入該指令范圍的次數(shù)的計(jì)數(shù)。
數(shù)據(jù)訪問可以以類似方式監(jiān)測。例如,數(shù)據(jù)3112包括數(shù)據(jù)范圍3114??梢砸耘c指令范圍3102或指令范圍3104內(nèi)的指令執(zhí)行類似的方式對(duì)數(shù)據(jù)范圍3114的數(shù)據(jù)訪問進(jìn)行計(jì)數(shù)。這些范圍可以定義在諸如圖2的數(shù)據(jù)高速緩沖存儲(chǔ)器216的數(shù)據(jù)單元內(nèi)的寄存器中。這些數(shù)據(jù)范圍可以作為數(shù)據(jù)的存儲(chǔ)器位置的范圍定義在寄存器中。
接下來參照?qǐng)D32,其示出了根據(jù)本發(fā)明優(yōu)選實(shí)施例的、用于對(duì)設(shè)定范圍的訪問次數(shù)以及在設(shè)定范圍內(nèi)執(zhí)行的指令數(shù)進(jìn)行計(jì)數(shù)的過程的流程圖。圖32所示的過程可以在諸如圖2的指令高速緩沖存儲(chǔ)器214的指令單元中實(shí)現(xiàn)。
首先,識(shí)別所要執(zhí)行的指令(步驟3200)。接下來,確定指令是否在設(shè)定的指令范圍內(nèi)(步驟3202)。該范圍可以通過檢查定義一條或多條指令范圍的寄存器來識(shí)別。如果指令不在設(shè)定的指令范圍內(nèi),則該過程返回到如上所述的步驟3200。如果該指令在設(shè)定的指令范圍內(nèi),則確定前一指令是否在設(shè)定范圍內(nèi)(步驟3204)。如果前一指令不在設(shè)定的指令范圍內(nèi),則遞增訪問計(jì)數(shù)器,以告訴處理器已進(jìn)入該指令范圍多少次(步驟3204)。另外,遞增執(zhí)行計(jì)數(shù)器,以對(duì)在設(shè)定的指令范圍內(nèi)執(zhí)行的指令數(shù)進(jìn)行計(jì)數(shù)(步驟3206),然后該過程終止。
回到步驟3204,如果前一指令在設(shè)定的指令范圍內(nèi),則該過程進(jìn)入如上所述的步驟3208。
可以對(duì)數(shù)據(jù)訪問實(shí)現(xiàn)類似于圖32所示的過程。在這種情況下,該過程將典型地在數(shù)據(jù)單元而非指令單元中實(shí)現(xiàn)。
如上所述,對(duì)于通過本發(fā)明的計(jì)數(shù)機(jī)制以及與指令/數(shù)據(jù)地址相關(guān)聯(lián)的性能指示符而提供的硬件協(xié)助,存在很多可能的應(yīng)用。下面描述旨在提供本發(fā)明的另外實(shí)施例,其中以不同方式利用上述性能指示符和計(jì)數(shù)機(jī)制,以實(shí)現(xiàn)關(guān)于計(jì)算機(jī)程序的改進(jìn)概略能力。可以單獨(dú)地或者以各種組合利用上述和下述實(shí)施例而不脫離本發(fā)明的精神和范圍。
上下文切換需要更新指針以指向適當(dāng)?shù)脑獢?shù)據(jù)。上下文可以從一個(gè)線程改變到另一個(gè)線程,或者從一個(gè)例程改變到另一個(gè)例程或庫。這些控制的轉(zhuǎn)移中的任一個(gè)可以具有新的上下文。作為調(diào)用序列的一部分而設(shè)置的寄存器可以包括指示新影象高速緩沖存儲(chǔ)器數(shù)據(jù)的寄存器。
如上面關(guān)于圖13、14和29所述,本發(fā)明的性能指示符和計(jì)數(shù)器可以用來確定指令被執(zhí)行、數(shù)據(jù)地址被訪問、例程被執(zhí)行等的次數(shù)。另外,可以確定指令、數(shù)據(jù)區(qū)域或例程是否被執(zhí)行/訪問多于閾值次數(shù),以便確定是否執(zhí)行隨后操作。在本發(fā)明的另外實(shí)施例中,這些機(jī)制用來確定高速緩沖存儲(chǔ)器或存儲(chǔ)器內(nèi)的熱點(diǎn),以便改善由本發(fā)明的機(jī)制概略的計(jì)算機(jī)程序的性能。
也就是,計(jì)算機(jī)程序的指令和/或數(shù)據(jù)區(qū)域、高速緩沖存儲(chǔ)器或存儲(chǔ)器通過以前述方式添加性能指示符來檢測。當(dāng)指令/數(shù)據(jù)區(qū)域訪問的計(jì)數(shù)超過設(shè)定閾值時(shí),這可以表示高速緩沖存儲(chǔ)器或存儲(chǔ)器的“熱點(diǎn)”區(qū)域,即與其它區(qū)域相比消耗相對(duì)更大處理器時(shí)間量的區(qū)域。
圖33是當(dāng)確定高速緩沖存儲(chǔ)器/存儲(chǔ)器的熱點(diǎn)時(shí)本發(fā)明一個(gè)示例性實(shí)施例的主要操作單元的示例性方框圖。采用本發(fā)明的所示實(shí)施例,當(dāng)響應(yīng)檢測到與指令/數(shù)據(jù)地址或區(qū)域相關(guān)聯(lián)的性能指示符(PI)而遞增高速緩沖存儲(chǔ)器3320或存儲(chǔ)器的指令3312或者數(shù)據(jù)地址或地址范圍的計(jì)數(shù)器3310時(shí),例如,在圖29的步驟2900-2904中,確定該計(jì)數(shù)是否超過預(yù)定閾值。如果超過預(yù)定閾值,則發(fā)送中斷到監(jiān)測程序3330(參見圖29的步驟2906)。
采用本發(fā)明的本實(shí)施例,當(dāng)接收到中斷時(shí),監(jiān)測程序3330的中斷處理程序3332識(shí)別該中斷,并且確定該指令與高速緩沖存儲(chǔ)器或存儲(chǔ)器的熱點(diǎn)區(qū)域相關(guān)聯(lián)。確定該指令所在的例程/方法為熱點(diǎn)。結(jié)果,識(shí)別被確定為熱點(diǎn)的例程/方法的指令的高速緩沖存儲(chǔ)器或存儲(chǔ)器地址。
中斷處理程序3332將與位于該例程/方法的高速緩沖存儲(chǔ)器/存儲(chǔ)器地址的這些指令相關(guān)聯(lián)的元數(shù)據(jù)拷貝到被指定以由分析引擎3350使用的存儲(chǔ)位置3340,從而分析元數(shù)據(jù)以確定該例程/方法的優(yōu)化方案。例如,元數(shù)據(jù)可被存儲(chǔ)到跟蹤文件中以用于以后的跟蹤分析。在計(jì)算機(jī)程序的概略期間可以繼續(xù)以這種方式檢測熱點(diǎn)。如果相同區(qū)域被再次檢測為熱點(diǎn)區(qū)域,則可以用該熱點(diǎn)指令/數(shù)據(jù)區(qū)域的元數(shù)據(jù)的新版本更新存儲(chǔ)區(qū)域中的信息。
然后,例如在對(duì)在概略計(jì)算機(jī)程序執(zhí)行期間所獲得的跟蹤數(shù)據(jù)進(jìn)行后處理的期間,可以分析熱點(diǎn)的元數(shù)據(jù),以確定可以用來提高計(jì)算機(jī)程序性能的性能改善方法。例如,熱點(diǎn)內(nèi)的特定指令可被識(shí)別為與其它指令相比被執(zhí)行更頻繁。然后,可以修改例程/方法的代碼,使得優(yōu)化這些指令的執(zhí)行。
例如,如果與其它指令相比被執(zhí)行更多的熱點(diǎn)例程/方法內(nèi)的指令與特定分支相關(guān)聯(lián),則可以通過重新組織這些指令以實(shí)現(xiàn)代碼流的連續(xù)執(zhí)行來優(yōu)化代碼。也就是,可以通過減少推測性處理量來節(jié)省計(jì)算周期,這是通過重新組織例程的指令,使得更頻繁地采用分支的代碼被重新裝配成以與熱點(diǎn)例程/方法的其它指令更連續(xù)的方式執(zhí)行的一組指令,從而減少代碼流分支和高速緩沖存儲(chǔ)器未中的數(shù)量。
在本發(fā)明的另一個(gè)實(shí)施例中,確定與熱點(diǎn)相關(guān)聯(lián)的高速緩沖存儲(chǔ)器或存儲(chǔ)器地址的范圍,并且將與這些高速緩沖存儲(chǔ)器或存儲(chǔ)器地址相關(guān)聯(lián)的指令/數(shù)據(jù)拷貝到熱點(diǎn)影象數(shù)據(jù)結(jié)構(gòu)3360。生成高速緩沖存儲(chǔ)器3320或存儲(chǔ)器中的舊地址到熱點(diǎn)影象數(shù)據(jù)結(jié)構(gòu)3360中的新地址的映射。該映射可以通過與舊存儲(chǔ)器地址位置相關(guān)聯(lián)的指針、映射表3370等實(shí)現(xiàn)。然后,當(dāng)嘗試對(duì)舊地址的訪問時(shí),將訪問嘗試映射到新數(shù)據(jù)結(jié)構(gòu)?;蛘?,可修改代碼本身,使得將訪問舊地址的指令改變成訪問熱點(diǎn)數(shù)據(jù)結(jié)構(gòu)中的新地址。
通過將高速緩沖存儲(chǔ)器的熱點(diǎn)安置在影象數(shù)據(jù)結(jié)構(gòu)3360中,熱點(diǎn)數(shù)據(jù)被集中安置。這允許減少否則將需要的高速緩沖存儲(chǔ)器刷新和提取。結(jié)果,節(jié)省了機(jī)器周期。如果多個(gè)處理器為不同數(shù)據(jù)共享相同高速緩沖存儲(chǔ)器線,則處理器訪問可以分離出數(shù)據(jù)。這將再次防止頻繁的高速緩沖存儲(chǔ)器刷新,從而節(jié)省機(jī)器周期。而且,在某個(gè)點(diǎn),所有地址都將被映射到高速緩沖存儲(chǔ)器或影象高速緩沖存儲(chǔ)器數(shù)據(jù)結(jié)構(gòu)。這將導(dǎo)致更快的存儲(chǔ)器訪問。
其它根據(jù)熱點(diǎn)檢測優(yōu)化代碼的方法在本技術(shù)領(lǐng)域內(nèi)一般是公知的。本發(fā)明可利用任何公知的熱點(diǎn)優(yōu)化技術(shù)。公知的熱點(diǎn)優(yōu)化技術(shù)與本發(fā)明的主要區(qū)別之一是本發(fā)明根據(jù)前述性能指示符和計(jì)數(shù)器識(shí)別熱點(diǎn)。
圖34是概述當(dāng)識(shí)別高速緩沖存儲(chǔ)器或存儲(chǔ)器中的指令/數(shù)據(jù)熱點(diǎn)時(shí),本發(fā)明實(shí)施例的示例性操作的流程圖。如圖34所示,該操作以采用前述方式監(jiān)測計(jì)算機(jī)程序的執(zhí)行(步驟3400)開始。該監(jiān)測涉及遞增采用性能指示符檢測的指令/數(shù)據(jù)地址的硬件計(jì)數(shù)器。在監(jiān)測計(jì)算機(jī)程序執(zhí)行期間的某個(gè)時(shí)間,指令被執(zhí)行或者數(shù)據(jù)地址被訪問多于閾值次數(shù),并且發(fā)送中斷到性能監(jiān)測應(yīng)用程序。由性能監(jiān)測應(yīng)用程序接收該中斷(步驟3410),并且根據(jù)計(jì)數(shù)器和設(shè)定閾值識(shí)別熱點(diǎn)(步驟3420)。
也就是,根據(jù)存儲(chǔ)在與這些指令/數(shù)據(jù)地址相關(guān)聯(lián)的計(jì)數(shù)器中的值,識(shí)別以前述方式采用性能指示符檢測且被訪問多于閾值次數(shù)的高速緩沖存儲(chǔ)器或存儲(chǔ)器的那些指令地址/數(shù)據(jù)地址。根據(jù)計(jì)算機(jī)程序代碼識(shí)別與其計(jì)數(shù)器值超過預(yù)定閾值的這些被檢測指令相關(guān)聯(lián)的例程/方法。然后,識(shí)別高速緩沖存儲(chǔ)器或存儲(chǔ)器中這些例程/方法的指令/數(shù)據(jù)地址。
將與識(shí)別出的熱點(diǎn)的這些指令/數(shù)據(jù)地址相關(guān)聯(lián)的元數(shù)據(jù)拷貝到由性能監(jiān)測應(yīng)用程序指定的存儲(chǔ)位置,如跟蹤數(shù)據(jù)文件(步驟3430)。確定是否要執(zhí)行對(duì)計(jì)算機(jī)程序執(zhí)行的繼續(xù)監(jiān)測(步驟3440)。如果是,則該操作返回到步驟3400。如果否,則執(zhí)行對(duì)在性能監(jiān)測期間獲得的數(shù)據(jù)的后處理(步驟3450)。
作為該后處理的一部分,分析存儲(chǔ)在指定存儲(chǔ)位置中的熱點(diǎn)元數(shù)據(jù),以確定可以如何優(yōu)化熱點(diǎn)元數(shù)據(jù)的處理(步驟3460)。也就是,可以識(shí)別該元數(shù)據(jù)的特征,并且將其與不同優(yōu)化技術(shù)相關(guān)聯(lián)的優(yōu)化標(biāo)準(zhǔn)進(jìn)行比較。然后,可以選擇最佳優(yōu)化技術(shù),并且可以修改代碼/數(shù)據(jù)存儲(chǔ),以實(shí)現(xiàn)所選優(yōu)化技術(shù)(步驟3470)。然后,該操作終止。
如上所述,代碼/數(shù)據(jù)存儲(chǔ)的優(yōu)化可以采取很多不同形式。在一些情況下,代碼優(yōu)化可以包括重新裝配代碼中的指令,以提供熱點(diǎn)與計(jì)算機(jī)程序中的其它指令的連續(xù)執(zhí)行。圖35示出該方法。如圖35所示,識(shí)別與熱點(diǎn)相對(duì)應(yīng)的高速緩沖存儲(chǔ)器地址范圍(步驟3500)。然后,重新裝配這些指令,以提供熱點(diǎn)的連續(xù)執(zhí)行(步驟3510)??梢灾匦卵b配指令和數(shù)據(jù)以提供熱點(diǎn)的連續(xù)訪問的方法的例子參見名稱為“Method for Optimizing Computer Code to ProvideMore Efficient Execution on Computers Having Cache Memories(優(yōu)化計(jì)算機(jī)代碼以提供具有高速緩沖存儲(chǔ)器的計(jì)算機(jī)的更有效執(zhí)行的方法)”的美國專利No.5,212,794、以及名稱為“Profile-Based Optimizing Post-Processors for DataReferences(用于數(shù)據(jù)引用的基于概略的優(yōu)化后處理器)”的美國專利No.5,689,712,在此將其全都引作參考。
圖36示出優(yōu)化代碼執(zhí)行的可替換方法。如圖36所示,通過將熱點(diǎn)移動(dòng)到專用影象數(shù)據(jù)結(jié)構(gòu)并且映射對(duì)舊高速緩沖存儲(chǔ)器或存儲(chǔ)器地址的訪問、以進(jìn)入影象數(shù)據(jù)結(jié)構(gòu)中的新地址,可以優(yōu)化代碼。
如圖36所示,該操作以識(shí)別對(duì)應(yīng)于熱點(diǎn)的高速緩沖存儲(chǔ)器地址范圍(指令或數(shù)據(jù))(步驟3600)開始。然后,創(chuàng)建熱點(diǎn)影象數(shù)據(jù)結(jié)構(gòu)(步驟3610)。然后,將來自識(shí)別出的高速緩沖存儲(chǔ)器或存儲(chǔ)器地址的指令/數(shù)據(jù)拷貝到熱點(diǎn)影象數(shù)據(jù)結(jié)構(gòu)中的新地址(步驟3620)。建立從當(dāng)前高速緩沖存儲(chǔ)器或存儲(chǔ)器地址到影象數(shù)據(jù)結(jié)構(gòu)中的新地址的映射(步驟3630),并且該操作終止。然后,當(dāng)存在對(duì)已被映射到新影象數(shù)據(jù)結(jié)構(gòu)的高速緩沖存儲(chǔ)器或存儲(chǔ)器地址的訪問時(shí),將該訪問重定向到新影象數(shù)據(jù)結(jié)構(gòu)中的新地址。該映射可以通過每當(dāng)訪問舊數(shù)據(jù)區(qū)域時(shí)產(chǎn)生中斷來實(shí)現(xiàn)。然后,中斷處理程序可以修改訪問舊數(shù)據(jù)區(qū)域的代碼,使得它現(xiàn)在將訪問新數(shù)據(jù)區(qū)域。
因此,本發(fā)明以及前述實(shí)施例提供了可以使用性能指示符、硬件計(jì)數(shù)器和設(shè)定閾值識(shí)別高速緩沖存儲(chǔ)器或存儲(chǔ)器內(nèi)的熱點(diǎn)的實(shí)施例。另外,本發(fā)明提供了可以根據(jù)熱點(diǎn)檢測來優(yōu)化代碼和/或數(shù)據(jù)存儲(chǔ)的實(shí)施例。
在本發(fā)明的另一實(shí)施例中,可以以更復(fù)雜的方式使用性能指示符和計(jì)數(shù)器,以確定何時(shí)要發(fā)送中斷到監(jiān)測應(yīng)用程序的中斷處理程序以作處理。也就是,本發(fā)明的先前實(shí)施例是按照計(jì)數(shù)器值單獨(dú)地用作確定是否發(fā)送中斷到監(jiān)測應(yīng)用程序的中斷處理程序的基礎(chǔ)來描述的。因此,例如,當(dāng)與特定指令、指令范圍、數(shù)據(jù)地址或數(shù)據(jù)地址范圍相關(guān)聯(lián)的一個(gè)計(jì)數(shù)器超過給定閾值時(shí),可以發(fā)送中斷到監(jiān)測應(yīng)用程序的中斷處理程序,從而如前所述執(zhí)行熱點(diǎn)檢測處理。
在本發(fā)明的另一實(shí)施例中,可以利用計(jì)數(shù)器值的算術(shù)組合來確定是否要發(fā)送中斷到監(jiān)測應(yīng)用程序的中斷處理程序。性能監(jiān)測器單元可以周期性地檢查預(yù)定計(jì)數(shù)器組的計(jì)數(shù)器值,并且以在性能監(jiān)測器單元的微代碼中指定的算術(shù)方式組合它們,以確定是否存在需要發(fā)送中斷到監(jiān)測應(yīng)用程序的條件。
圖37是示出當(dāng)執(zhí)行計(jì)數(shù)器值的算術(shù)組合以確定是否發(fā)送中斷到監(jiān)測應(yīng)用程序時(shí)本發(fā)明的示例性實(shí)施例的示例圖。如圖37所示,在執(zhí)行其執(zhí)行正被監(jiān)測的程序的計(jì)算裝置的處理器的硬件3700,如圖2的性能監(jiān)測器單元240的計(jì)數(shù)器241和242中,提供計(jì)數(shù)器3720和3740以及寄存器3710、3730和3750。寄存器3710維持與由性能監(jiān)測應(yīng)用程序傳送到性能監(jiān)測單元的值相對(duì)應(yīng)的寄存器值X。計(jì)數(shù)器3720維持與在性能監(jiān)測期間遇到的第一性能指示符相對(duì)應(yīng)的計(jì)數(shù)A。寄存器3730維持與由性能監(jiān)測應(yīng)用程序傳送到性能監(jiān)測器單元的另一值相對(duì)應(yīng)的另一個(gè)寄存器值Y,并且計(jì)數(shù)器3740維持在性能監(jiān)測期間的第二性能指示符的計(jì)數(shù)B。
寄存器3750存儲(chǔ)為了確定是否發(fā)送中斷而將值X、Y、A和B的算術(shù)組合與其比較的閾值Z。在本發(fā)明中,性能指示符可以與指令或部分?jǐn)?shù)據(jù)相關(guān)聯(lián)。例如,性能指示符可以與指令高速緩沖存儲(chǔ)器、數(shù)據(jù)高速緩沖存儲(chǔ)器或存儲(chǔ)器中的地址,即指令地址或數(shù)據(jù)地址相關(guān)聯(lián)。
周期性地,或者當(dāng)發(fā)生事件例如計(jì)數(shù)器3720或3740中的一個(gè)增1時(shí),性能監(jiān)測器單元的微代碼3760對(duì)照寄存器3750的閾值Z檢查計(jì)數(shù)器3720、3740和寄存器3710、3730的當(dāng)前值X、Y、A和B。根據(jù)由監(jiān)測應(yīng)用程序傳給性能監(jiān)測器單元的信息,識(shí)別為了確定是否產(chǎn)生中斷而要組合其值的特定計(jì)數(shù)器3720、3740和寄存器3710、3730。也就是,監(jiān)測應(yīng)用程序在初始化時(shí)可以向性能監(jiān)測器單元通知要隨同特定寄存器值一起組合與特定類型的指令、指令范圍、數(shù)據(jù)地址或數(shù)據(jù)地址范圍相關(guān)聯(lián)的計(jì)數(shù)器,并且將其與特定閾值進(jìn)行比較。另外,監(jiān)測應(yīng)用程序可以向性能監(jiān)測器單元指示要組合計(jì)數(shù)器和寄存器值的方式。然后,可以將該信息存儲(chǔ)在性能監(jiān)測器單元中,以在組合計(jì)數(shù)器值以確定是否要產(chǎn)生中斷時(shí)使用?;蛘?,性能監(jiān)測器單元可以用總是將被檢查的計(jì)數(shù)器和寄存器的特定組合來硬編碼。
例如,性能監(jiān)測應(yīng)用程序可以與初始化硬件中的計(jì)數(shù)器的設(shè)備驅(qū)動(dòng)程序接口。性能監(jiān)測應(yīng)用程序可以向設(shè)備驅(qū)動(dòng)程序通知要對(duì)什么進(jìn)行計(jì)數(shù),例如指令、高速緩沖存儲(chǔ)器未中、存儲(chǔ)器訪問等,要使用什么閾值,當(dāng)滿足或超過閾值時(shí)要執(zhí)行的代碼部分的向量,例如指針,以及其它各種控制信息。另外,通過設(shè)備驅(qū)動(dòng)程序,性能監(jiān)測應(yīng)用程序可以為原始計(jì)數(shù)器值設(shè)置乘數(shù),即寄存器值,以便放縮由每個(gè)計(jì)數(shù)器計(jì)數(shù)的事件等。然后,設(shè)備驅(qū)動(dòng)程序可以在硬件中設(shè)置適當(dāng)?shù)奈缓图拇嫫髦?,以表示要組合哪些計(jì)數(shù)器以及要與哪些寄存器值比較。例如,可以使用位掩碼等來識(shí)別要組合哪些計(jì)數(shù)器和寄存器以及要組合這些計(jì)數(shù)器的方式。
一旦設(shè)備驅(qū)動(dòng)程序初始化了基本事件計(jì)數(shù)器和組合事件計(jì)數(shù)器,就啟動(dòng)計(jì)算機(jī)程序的執(zhí)行。每次遞增基本計(jì)數(shù)器時(shí),硬件將根據(jù)基本計(jì)數(shù)器值和乘數(shù),即寄存器值來更新組合計(jì)數(shù)器,并且檢查是否達(dá)到或超過閾值。當(dāng)達(dá)到或者超過任何閾值時(shí),硬件可以啟動(dòng)中斷,并且將控制傳送到性能監(jiān)測應(yīng)用程序的中斷處理程序。此時(shí),中斷處理程序執(zhí)行,以執(zhí)行期望操作。例如,可以將事件記錄到性能監(jiān)測應(yīng)用程序緩沖器或日志中,可以向日志守護(hù)進(jìn)程通知發(fā)生了事件等。
微代碼3760通過首先產(chǎn)生計(jì)數(shù)器值的算術(shù)組合以產(chǎn)生組合計(jì)數(shù)器值來執(zhí)行指定計(jì)數(shù)器的檢查??梢詫⒔M合計(jì)數(shù)器值存儲(chǔ)在組合計(jì)數(shù)器或寄存器中,然后可以將其與存儲(chǔ)在寄存器3750中的值進(jìn)行比較,以確定是否存在預(yù)定關(guān)系。
在所示例子中,將寄存器3710的值X乘以計(jì)數(shù)器3720的值A(chǔ),并且將寄存器3730的值Y乘以計(jì)數(shù)器3740的值B。然后,相加這些操作的乘積以產(chǎn)生等于X*A+Y*B的組合計(jì)數(shù)器值。然后,將組合計(jì)數(shù)器值與寄存器值Z進(jìn)行比較,以確定其是否大于Z。如果否,則繼續(xù)性能監(jiān)測而不產(chǎn)生中斷。如果組合計(jì)數(shù)器值大于Z,則發(fā)送中斷到監(jiān)測應(yīng)用程序以作處理。
因此,例如,性能監(jiān)測應(yīng)用程序可以向處理器通知對(duì)特定例程感興趣,并且要監(jiān)測該例程中的每個(gè)指令的周期數(shù),并且將其用作確定是否要產(chǎn)生中斷的基礎(chǔ)。例如,可以確定當(dāng)每個(gè)指令的周期數(shù)大于3時(shí),應(yīng)產(chǎn)生和發(fā)送中斷。
在本例中,當(dāng)確定是否發(fā)送中斷時(shí),可以將計(jì)數(shù)器值與用于對(duì)指令數(shù)和處理器周期數(shù)進(jìn)行計(jì)數(shù)的例程相關(guān)聯(lián)。3的乘數(shù)值可以存儲(chǔ)在第一寄存器中,并且-1的乘數(shù)值可以存儲(chǔ)在第二寄存器中??梢詫㈤撝抵付榱悖⑶覍⑵浯鎯?chǔ)在閾值寄存器中。通過組合寄存器值和計(jì)數(shù)器而獲得的結(jié)果方程式可以為以下類型3*指令數(shù)-1*周期數(shù)>0當(dāng)滿足該關(guān)系時(shí),每個(gè)指令的周期數(shù)大于3,因此產(chǎn)生并發(fā)送中斷。例如,每當(dāng)遞增指令計(jì)數(shù)器的數(shù)值或者遞增周期計(jì)數(shù)器的數(shù)值時(shí),可以檢查該關(guān)系。因此,不是僅僅檢查以查看指令數(shù)是否大于預(yù)定數(shù)或者周期數(shù)是否大于預(yù)定數(shù),根據(jù)本實(shí)施例的計(jì)數(shù)器值組合允許更復(fù)雜的條件,其中經(jīng)過放縮的被執(zhí)行指令數(shù)和經(jīng)過放縮的周期數(shù)的組合用作確定是否產(chǎn)生中斷的基礎(chǔ)。
雖然圖37示出了與單個(gè)寄存器值比較的兩個(gè)計(jì)數(shù)器值和兩個(gè)寄存器值的特定示例性組合,但是本發(fā)明不限于此。相反,通過在性能監(jiān)測器單元的微代碼3760內(nèi)建立適當(dāng)?shù)慕M合,可以進(jìn)行計(jì)數(shù)器和寄存器值的任何組合。而且,可以比較計(jì)數(shù)器和寄存器值的各種組合與各種寄存器值,而不脫離本發(fā)明的精神和范圍。本發(fā)明的此實(shí)施例的主要概念是本發(fā)明能夠以任何適合方式組合多個(gè)性能監(jiān)測器計(jì)數(shù)器和寄存器值以確定是否產(chǎn)生中斷。
圖38是概述當(dāng)組合計(jì)數(shù)器和寄存器的值以確定是否應(yīng)產(chǎn)生中斷時(shí)本發(fā)明的示例性操作的流程圖。如圖38所示,該操作以接收閾值、乘數(shù)值以及要評(píng)測的指令/數(shù)據(jù)地址的范圍的標(biāo)識(shí)(步驟3800)開始。將閾值和乘數(shù)值存儲(chǔ)在寄存器中,并且初始化指令/數(shù)據(jù)地址的計(jì)數(shù)器(步驟3810)。根據(jù)性能指示符監(jiān)測指令執(zhí)行/數(shù)據(jù)地址訪問并且必要時(shí)遞增關(guān)聯(lián)計(jì)數(shù)器(步驟3820)。然后,確定是否要檢查計(jì)數(shù)器值(步驟3830)。如果否,則該操作返回到步驟3820,并且繼續(xù)監(jiān)測計(jì)算機(jī)程序的執(zhí)行。
如果要檢查計(jì)數(shù)器值,則隨同閾值和乘數(shù)值一起檢索指定范圍的指令/數(shù)據(jù)地址的計(jì)數(shù)器值(步驟3840)。然后,算術(shù)組合計(jì)數(shù)器值和寄存器值,并且將結(jié)果與閾值進(jìn)行比較(步驟3850)。然后,確定是否滿足或超過閾值(步驟3860)。如果否,則該操作返回到步驟3820以繼續(xù)監(jiān)測計(jì)算機(jī)程序的執(zhí)行。如果滿足或超過閾值,則產(chǎn)生中斷并將其發(fā)送到監(jiān)測應(yīng)用程序以作處理(步驟3870)。然后,該操作終止??梢灾貜?fù)步驟3810-3870,直到對(duì)計(jì)算機(jī)程序執(zhí)行的監(jiān)測完成為止。
因此,在本發(fā)明的此另外實(shí)施例中,可以使用計(jì)數(shù)器值和寄存器值的算術(shù)組合來確定何時(shí)發(fā)送中斷到監(jiān)測應(yīng)用程序。這樣,可以選擇更復(fù)雜的條件作為確定何時(shí)要產(chǎn)生中斷的基礎(chǔ)。
在本發(fā)明的另外實(shí)施例中,在性能監(jiān)測應(yīng)用程序中提供用于根據(jù)主要度量的計(jì)數(shù)器值啟動(dòng)關(guān)于所識(shí)別的指令、數(shù)據(jù)地址、所識(shí)別指令的范圍、或者所識(shí)別數(shù)據(jù)地址的范圍的次級(jí)度量的測量的功能性。因此,例如,當(dāng)初級(jí)度量計(jì)數(shù)器或初級(jí)度量計(jì)數(shù)器的組合滿足或超過預(yù)定閾值時(shí),可以產(chǎn)生中斷。響應(yīng)于接收到該中斷,可以啟動(dòng)與測量一定范圍的指令/數(shù)據(jù)地址的次級(jí)度量相關(guān)聯(lián)的計(jì)數(shù)器。這樣,可以使用初級(jí)度量性能計(jì)數(shù)器識(shí)別特定感興趣的區(qū)域,并且通過使用涉及測量與特定感興趣區(qū)域相關(guān)聯(lián)的度量的次級(jí)度量性能計(jì)數(shù)器獲得更詳細(xì)的信息。
采用該示例性實(shí)施例,以前述方式利用性能指示符和計(jì)數(shù)器檢測存儲(chǔ)器、高速緩沖存儲(chǔ)器等中的指令/數(shù)據(jù)地址,并且對(duì)其進(jìn)行初始化。以前面關(guān)于遇到性能指示符并且遞增計(jì)數(shù)器值討論過的方式,監(jiān)測計(jì)算機(jī)程序的性能。利用性能指示符和關(guān)聯(lián)計(jì)數(shù)器監(jiān)測的度量被認(rèn)為是初級(jí)度量,即起初為進(jìn)行監(jiān)測而檢測計(jì)算機(jī)程序的度量。如前所述,可以將這些計(jì)數(shù)器值與閾值進(jìn)行比較,以確定是否發(fā)生了特定狀態(tài),例如,對(duì)例程的進(jìn)入多于預(yù)定次數(shù)。
當(dāng)計(jì)數(shù)器值與閾值的比較導(dǎo)致滿足或超過閾值時(shí),產(chǎn)生中斷。性能監(jiān)測應(yīng)用程序的中斷處理程序接收該中斷,并根據(jù)所接收的中斷執(zhí)行適當(dāng)?shù)奶幚怼?br>
在本發(fā)明的本實(shí)施例中,該處理可以包括利用性能指示符檢測相同或其它指令/數(shù)據(jù)地址,并且初始化用于對(duì)次級(jí)度量進(jìn)行計(jì)數(shù)的計(jì)數(shù)器。對(duì)指令/數(shù)據(jù)地址的檢測包括以例如用來對(duì)上述初級(jí)度量檢測指令/數(shù)據(jù)地址的方式、與所識(shí)別的指令/數(shù)據(jù)地址相關(guān)聯(lián)地存儲(chǔ)性能指示符。在一個(gè)示例性實(shí)施例中,如上所述,這可以包括例如將性能指示符存儲(chǔ)在影象高速緩沖存儲(chǔ)器數(shù)據(jù)結(jié)構(gòu)中。
根據(jù)具體實(shí)現(xiàn),可以確定為監(jiān)測次級(jí)度量而要檢測的其它指令/數(shù)據(jù)地址。例如,性能監(jiān)測應(yīng)用程序的中斷處理程序可被編程,使得當(dāng)響應(yīng)于超過閾值而接收中斷時(shí),在與其計(jì)數(shù)器值超過閾值的指令相關(guān)聯(lián)的例程內(nèi),可以通過與指令地址相關(guān)聯(lián)地存儲(chǔ)性能指示符來檢測特定類別的指令。然后,當(dāng)性能監(jiān)測通過從中斷處理程序返回而繼續(xù)時(shí),該例程內(nèi)最新檢測類別的指令將以前面關(guān)于初級(jí)度量計(jì)數(shù)器所述的方式,開始累積對(duì)這些指令執(zhí)行的計(jì)數(shù)。
例如,如前所述,已利用性能指示符檢測的指令/數(shù)據(jù)地址的計(jì)數(shù)器值可以用作識(shí)別正被監(jiān)測的計(jì)算機(jī)程序內(nèi)的“熱點(diǎn)”的機(jī)制。也就是,例如,進(jìn)入例程的次數(shù)可以用作確定該例程是否是“熱點(diǎn)”的手段,即該例程是否相對(duì)于其它代碼部分使用更多計(jì)算周期。在確定例程是否是熱點(diǎn)時(shí),可以將進(jìn)入例程的次數(shù)計(jì)數(shù)的計(jì)數(shù)器值與為了識(shí)別熱點(diǎn)而設(shè)定的閾值進(jìn)行比較。如果滿足或超過該閾值,則認(rèn)為該例程為熱點(diǎn)。
采用本發(fā)明的本實(shí)施例,還可以在例程內(nèi)檢測該熱點(diǎn),以確定哪些感興趣的指令是“熱點(diǎn)”例程內(nèi)的“熱點(diǎn)”?;蛘?,次級(jí)度量可以是這樣的測量,即在計(jì)算機(jī)程序的執(zhí)行期間例程被識(shí)別為熱點(diǎn)多少次,即在計(jì)算機(jī)程序的執(zhí)行期間與例程相關(guān)聯(lián)的計(jì)數(shù)器值超過為熱點(diǎn)定義的閾值多少次??梢砸灶愃频姆绞絾?dòng)其它次級(jí)度量,而不脫離本發(fā)明的精神和范圍。
因此,根據(jù)本發(fā)明的此實(shí)施例,可以利用第一組計(jì)數(shù)器測量初級(jí)度量并且利用第二組計(jì)數(shù)器測量次級(jí)度量來進(jìn)行不同粒度級(jí)別的度量測量。當(dāng)然,根據(jù)前面度量測量超過閾值啟動(dòng)測量新度量的能力可以擴(kuò)展到甚至進(jìn)一步的迭代,而不僅僅止于初級(jí)度量集和次級(jí)度量集。
圖39是概述根據(jù)本發(fā)明此實(shí)施例的、當(dāng)根據(jù)初級(jí)度量的性能計(jì)數(shù)器值啟動(dòng)次級(jí)度量的監(jiān)測時(shí),本發(fā)明的示例性操作的流程圖。如圖39所示,該操作以接收中斷(步驟3900)開始。例如,可以響應(yīng)于根據(jù)初級(jí)度量的計(jì)數(shù)器超過閾值產(chǎn)生中斷而接收中斷。例如,所接收的中斷可以是在圖13的步驟1308、圖29的步驟2906、圖38的步驟3870等產(chǎn)生的。
響應(yīng)于接收到中斷,確定是否已經(jīng)啟動(dòng)指令/數(shù)據(jù)地址或相關(guān)指令/數(shù)據(jù)地址的次級(jí)度量(步驟3910)。如果否,則啟動(dòng)次級(jí)度量的監(jiān)測(步驟3920)。該步驟包括確定要利用性能指示符檢測哪些與激發(fā)了中斷的指令/數(shù)據(jù)地址相關(guān)聯(lián)的指令/數(shù)據(jù)地址,并且與識(shí)別出的指令/數(shù)據(jù)地址一起存儲(chǔ)性能指示符。如前所述,確定哪些指令/數(shù)據(jù)地址與激發(fā)了中斷的指令/數(shù)據(jù)地址相關(guān)聯(lián)是特定于具體實(shí)現(xiàn)的,并且可以以任何適合方式執(zhí)行??梢砸耘c前面關(guān)于為初級(jí)度量存儲(chǔ)的性能指示符所述類似的方式,執(zhí)行識(shí)別出的指令/數(shù)據(jù)地址的實(shí)際檢測。
然后,啟動(dòng)與次級(jí)度量的性能指示符相關(guān)聯(lián)的計(jì)數(shù)器(步驟3930)。然后,或者如果對(duì)于激發(fā)了中斷的指令/數(shù)據(jù)地址已經(jīng)啟動(dòng)了次級(jí)度量的監(jiān)測(步驟3910),則根據(jù)計(jì)算機(jī)程序的執(zhí)行遞增次級(jí)度量的計(jì)數(shù)器(步驟3940)。前面已作過與性能指示符相關(guān)聯(lián)遞增計(jì)數(shù)器的描述。
然后,確定次級(jí)度量的計(jì)數(shù)器值是否超過閾值(步驟3950)。如果是,則可以發(fā)送中斷到性能監(jiān)測應(yīng)用程序的中斷處理程序(步驟3960)。這可導(dǎo)致重復(fù)圖39所示的操作,在此情況下,初級(jí)度量現(xiàn)在是次級(jí)度量,并且次級(jí)度量將是第三級(jí)度量等。然后,該操作終止。
因此,采用本發(fā)明的此實(shí)施例,起初可以以第一粒度執(zhí)行計(jì)算機(jī)程序執(zhí)行的性能監(jiān)測,以識(shí)別感興趣的區(qū)域。一旦根據(jù)初級(jí)度量的監(jiān)測識(shí)別出這些感興趣的區(qū)域,就可在計(jì)算機(jī)程序的執(zhí)行期間、對(duì)于識(shí)別出的感興趣區(qū)域動(dòng)態(tài)檢測計(jì)算機(jī)程序。該動(dòng)態(tài)檢測包括檢測與識(shí)別出的感興趣區(qū)域相關(guān)聯(lián)的指令/數(shù)據(jù)地址,并且在這些感興趣區(qū)域內(nèi)啟動(dòng)次級(jí)度量的監(jiān)測。因此,通過利用根據(jù)本發(fā)明的性能指示符、基于硬件的計(jì)數(shù)器和閾值,采用可以以其監(jiān)測計(jì)算機(jī)程序的粒度的動(dòng)態(tài)修改是可實(shí)現(xiàn)的。
在本發(fā)明的另外實(shí)施例中,性能指示符和計(jì)數(shù)器值可以用作識(shí)別高速緩沖存儲(chǔ)器命中和高速緩沖存儲(chǔ)器未中的機(jī)制。采用該實(shí)施例,性能指示符與計(jì)算機(jī)程序中選定例程或感興趣代碼部分的指令相關(guān)聯(lián)。例如,如上面關(guān)于圖17、24和26所述,性能指示符可以與指令/數(shù)據(jù)地址相關(guān)聯(lián),并且可以存儲(chǔ)在指令/數(shù)據(jù)、性能指示符影象高速緩沖存儲(chǔ)器404或其它類型的元數(shù)據(jù)數(shù)據(jù)結(jié)構(gòu)內(nèi)。
每當(dāng)執(zhí)行利用性能指示符檢測的例程或代碼部分的指令時(shí),遞增性能計(jì)數(shù)器。也就是,如前所述,當(dāng)指令被執(zhí)行或者數(shù)據(jù)地址被訪問,并且它具有關(guān)聯(lián)性能指示符時(shí),性能監(jiān)測器單元遞增影象高速緩沖存儲(chǔ)器、性能監(jiān)測器單元等中的計(jì)數(shù)器。另外,如上面關(guān)于圖8所述,當(dāng)發(fā)生高速緩沖存儲(chǔ)器未中、并且必須將指令或指令塊重載到高速緩沖存儲(chǔ)器中時(shí),可以發(fā)送信號(hào)到性能監(jiān)測器單元。當(dāng)性能監(jiān)測器單元接收到信號(hào)時(shí),可以使用影象高速緩沖存儲(chǔ)器、性能監(jiān)測器單元等中的計(jì)數(shù)遞增表示在指令或代碼部分上發(fā)生高速緩沖存儲(chǔ)器未中的次數(shù)的計(jì)數(shù)器。根據(jù)表示執(zhí)行指令的次數(shù)和發(fā)生高速緩沖存儲(chǔ)器未中的次數(shù)的這些計(jì)數(shù)器的值,可以確定高速緩沖存儲(chǔ)器命中-未中率。
高速緩沖存儲(chǔ)器命中-未中率可以存儲(chǔ)在與高速緩沖存儲(chǔ)器相關(guān)聯(lián)的元數(shù)據(jù)數(shù)據(jù)結(jié)構(gòu)中。當(dāng)高速緩沖存儲(chǔ)器命中-未中率變得小于預(yù)定閾值時(shí),即高速緩沖存儲(chǔ)器未中次數(shù)大于高速緩沖存儲(chǔ)器命中次數(shù)時(shí),可以發(fā)送中斷到性能監(jiān)測應(yīng)用程序,從而表示出現(xiàn)了問題狀態(tài)。然后,與性能監(jiān)測應(yīng)用程序相關(guān)聯(lián)的中斷處理程序可以通過啟動(dòng)用來處理中斷的適當(dāng)支持來處理中斷?;蛘?,可以周期性地通過采樣方法檢查該信息來確定該狀態(tài)。
如上所述,對(duì)該小高速緩沖存儲(chǔ)器命中-未中率的一個(gè)貢獻(xiàn)者可以是“追尾”狀態(tài)。當(dāng)指令/數(shù)據(jù)塊必須被裝載到高速緩沖存儲(chǔ)器中、但是在高速緩沖存儲(chǔ)器中沒有足夠可用空間來存儲(chǔ)整個(gè)指令/數(shù)據(jù)塊時(shí),發(fā)生“追尾”狀態(tài)。在這種情況下,將指令/數(shù)據(jù)寫入到高速緩沖存儲(chǔ)器中的可用空間,并且在高速緩沖存儲(chǔ)器的最近最少使用部分上寫入任何溢出。這可導(dǎo)致被覆寫的指令/數(shù)據(jù)上的高速緩沖存儲(chǔ)器未中(miss),從而增多高速緩沖存儲(chǔ)器未中的次數(shù),導(dǎo)致更多的高速緩沖存儲(chǔ)器重載以及更多的對(duì)高速緩沖存儲(chǔ)器中的指令/數(shù)據(jù)的覆寫。
為了避免該“追尾”狀態(tài),本發(fā)明采用響應(yīng)于確定出高速緩沖存儲(chǔ)器命中-未中率降在閾值之下而激發(fā)的支持,其存儲(chǔ)指令/數(shù)據(jù),使得在高速緩沖存儲(chǔ)器中將被覆寫的指令/數(shù)據(jù)保持在高速緩沖存儲(chǔ)器中,并且正被重載的指令/數(shù)據(jù)存儲(chǔ)在高速緩沖存儲(chǔ)器的專用或保留部分中。在一個(gè)示例性實(shí)施例中,該支持可以包括在模式寄存器,如模式寄存器1510中設(shè)置表示處理器要遵循“追尾”操作的模式位。
該“追尾”操作可以包括在高速緩沖存儲(chǔ)器上處理重載操作時(shí),確定高速緩沖存儲(chǔ)器是否有足夠的可用空間來存儲(chǔ)要被重載到高速緩沖存儲(chǔ)器中的指令/數(shù)據(jù)塊。如果在高速緩沖存儲(chǔ)器中存在可用空間,則以正常方式將指令/數(shù)據(jù)塊存儲(chǔ)在高速緩沖存儲(chǔ)器中。然而,如果在高速緩沖存儲(chǔ)器中沒有足夠的空間來存儲(chǔ)要被重載的指令/數(shù)據(jù)塊,則將指令/數(shù)據(jù)塊或指令/數(shù)據(jù)塊的至少溢出部分裝載到高速緩沖存儲(chǔ)器的保留部分中,而不是將指令/數(shù)據(jù)重載到高速緩沖存儲(chǔ)器的非保留區(qū)域中、并且覆寫已經(jīng)存在于高速緩沖存儲(chǔ)器的非保留區(qū)域中的指令/數(shù)據(jù)。
另外,可以將性能指示符與指令塊相關(guān)聯(lián),從而表示當(dāng)再次執(zhí)行該指令塊中的指令時(shí),或者當(dāng)再次訪問數(shù)據(jù)地址塊中的數(shù)據(jù)地址時(shí),處理器應(yīng)當(dāng)在高速緩沖存儲(chǔ)器的保留區(qū)域中查找該指令/數(shù)據(jù)。如同上述其它性能指示符一樣,這些性能指示符可以在性能指示符影象高速緩沖存儲(chǔ)器中、與指令或代碼部分本身等一起存儲(chǔ)。
寫入指令/數(shù)據(jù)塊或者指令/數(shù)據(jù)塊的至少溢出部分的高速緩沖存儲(chǔ)器專用或保留部分本身可以通過本發(fā)明的隨后操作而被覆寫。然而,可以利用單獨(dú)的算法來確定如何覆寫高速緩沖存儲(chǔ)器保留部分中的指令/數(shù)據(jù)。例如,可以對(duì)高速緩沖存儲(chǔ)器的保留部分采用最近最少使用的算法來確定要覆寫高速緩沖存儲(chǔ)器保留部分中的哪些指令/數(shù)據(jù)。該方案允許推測性地向高速緩沖存儲(chǔ)器的保留部分裝載新數(shù)據(jù),并且仍然允許訪問最近裝載到高速緩沖存儲(chǔ)器保留區(qū)域中的數(shù)據(jù)。
或者,當(dāng)要覆寫高速緩沖存儲(chǔ)器保留區(qū)域的一部分時(shí),在確定如何處理指令/數(shù)據(jù)的重載時(shí)可以利用更復(fù)雜的算法,其中比較高速緩沖存儲(chǔ)器保留區(qū)域和高速緩沖存儲(chǔ)器非保留區(qū)域中的指令/數(shù)據(jù)。例如,當(dāng)確定重載操作將導(dǎo)致高速緩沖存儲(chǔ)器保留區(qū)域中的指令/數(shù)據(jù)被覆寫時(shí),可以比較高速緩沖存儲(chǔ)器保留區(qū)域和高速緩沖存儲(chǔ)器非保留區(qū)域中最近最少使用的指令/數(shù)據(jù)。高速緩沖存儲(chǔ)器中的哪個(gè)部分有最近未被使用的最舊指令/數(shù)據(jù),就可確定該部分為重載操作將裝載指令/數(shù)據(jù)的區(qū)域。其它類似類型的確定可以通過對(duì)覆寫高速緩沖存儲(chǔ)器的非保留和保留區(qū)域中的指令/數(shù)據(jù)的影響進(jìn)行加權(quán)來進(jìn)行。
因此,通過當(dāng)高速緩沖存儲(chǔ)器命中-未中率低于預(yù)定閾值時(shí)調(diào)用本實(shí)施例的“追尾”操作,本發(fā)明通過使不能被高速緩沖存儲(chǔ)器非保留部分中的可用空間容納的指令/數(shù)據(jù)的任何重載存儲(chǔ)在高速緩沖存儲(chǔ)器的保留部分中、而不是覆寫高速緩沖存儲(chǔ)器非保留部分中的現(xiàn)有高速緩沖存儲(chǔ)器條目,避免了“追尾”情形。這樣,可以避免關(guān)于因覆寫高速緩沖存儲(chǔ)器非保留部分中最近最少使用的條目而引起的覆寫和重載的多米諾效應(yīng)。而且,由于指令/數(shù)據(jù)塊被保證存儲(chǔ)在高速緩沖存儲(chǔ)器的保留區(qū)域中,因此高速緩沖存儲(chǔ)器命中-未中率將升高至閾值之上。
圖40是概述當(dāng)用來調(diào)用處理器的“追尾”操作時(shí)本發(fā)明的示例性操作的流程圖。圖40中的流程圖可以在指令高速緩沖存儲(chǔ)器中實(shí)現(xiàn),然而本領(lǐng)域的技術(shù)人員通過下面描述應(yīng)當(dāng)清楚,對(duì)于數(shù)據(jù)高速緩沖存儲(chǔ)器,也可執(zhí)行類似的操作。
如圖40所示,該操作以接收對(duì)要從高速緩沖存儲(chǔ)器或存儲(chǔ)器檢索的指令塊的請(qǐng)求(步驟4010)開始。確定指令塊中的指令是否具有關(guān)聯(lián)性能指示符(步驟4020)。如果是,則遞增與具有性能指示符的指令相關(guān)聯(lián)的計(jì)數(shù)器(步驟4030)。
確定指令塊是否存在于指令高速緩沖存儲(chǔ)器中(步驟4040)。如果否,則執(zhí)行將指令塊重載到高速緩沖存儲(chǔ)器中,并且執(zhí)行這些指令(步驟4050)。
另外,響應(yīng)于重載操作,遞增指令高速緩沖存儲(chǔ)器的重載計(jì)數(shù)器(步驟4060)。使用指令計(jì)數(shù)器的值和重載計(jì)數(shù)器的值來確定高速緩沖存儲(chǔ)器命中-未中率(步驟4070)。然后,將高速緩沖存儲(chǔ)器命中-未中率與由性能監(jiān)測應(yīng)用程序設(shè)定的閾值進(jìn)行比較(步驟4080)。
然后,確定高速緩沖存儲(chǔ)器命中-未中率是否滿足或低于閾值(步驟4090)。如果是,則發(fā)送中斷到性能監(jiān)測應(yīng)用程序的中斷處理程序,以便啟動(dòng)處理器的“追尾”操作(步驟4095)。如果否,或者如果指令塊不包括具有性能指示符的指令,則該操作終止。該操作可以針對(duì)每個(gè)從高速緩沖存儲(chǔ)器請(qǐng)求的指令塊而重復(fù)。
圖41是概述根據(jù)本發(fā)明的、當(dāng)在處理器內(nèi)執(zhí)行“追尾”操作時(shí)本發(fā)明的示例性操作的流程圖。同樣,該流程圖是按照指令高速緩沖存儲(chǔ)器來描述的,然而,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)容易地理解圖41的操作也適用于數(shù)據(jù)高速緩沖存儲(chǔ)器。
如圖41所示,該操作以接收表示指令高速緩沖存儲(chǔ)器的高速緩沖存儲(chǔ)器命中-未中率滿足或降到設(shè)定閾值之下的中斷(步驟4110)開始。然后,設(shè)置處理器的模式寄存器中的模式位(步驟4120)。然后,該操作等待處理器執(zhí)行重載操作(步驟4130)。
確定處理器是否執(zhí)行重載操作(步驟4140)。如果否,則該操作返回到步驟4130,并且繼續(xù)等待重載指令。如果處理器執(zhí)行重載操作,則確定指令高速緩沖存儲(chǔ)器是否有足夠的可用空間來裝載指令塊,而無需覆寫已經(jīng)存在于高速緩沖存儲(chǔ)器中的指令(步驟4150)。如果是,則以正常方式執(zhí)行重載操作(步驟4160)。如果否,則將指令塊存儲(chǔ)在高速緩沖存儲(chǔ)器的保留部分中(步驟4170)。然后,將性能指示符與指令塊相關(guān)聯(lián),從而表示在隨后執(zhí)行指令塊中的指令時(shí),應(yīng)當(dāng)從高速緩沖存儲(chǔ)器的保留部分中檢索指令(步驟4180)。然后,該操作結(jié)束。
因此,采用本發(fā)明的此實(shí)施例,可以使用性能指示符和計(jì)數(shù)器來確定高速緩沖存儲(chǔ)器命中-未中率何時(shí)降至或低于預(yù)定閾值,從而表示計(jì)算機(jī)程序執(zhí)行的問題。另外,本發(fā)明的此實(shí)施例包括處理器在操作的“追尾”操作模式下工作的能力,其中處理器的微代碼確定是否可以執(zhí)行高速緩沖存儲(chǔ)器的隨后重載,而不覆寫高速緩沖存儲(chǔ)器非保留部分中的現(xiàn)有條目。如果否,則可以向高速緩沖存儲(chǔ)器的保留部分寫入需要寫入高速緩沖存儲(chǔ)器的條目,并且可以將性能指示符與這些條目的指令/數(shù)據(jù)相關(guān)聯(lián),從而表示處理器應(yīng)當(dāng)在專用高速緩沖存儲(chǔ)器中查找這些指令/數(shù)據(jù)。
應(yīng)當(dāng)注意,雖然上面實(shí)施例是按照向?qū)S么鎯?chǔ)器或高速緩沖存儲(chǔ)器區(qū)域?qū)懭胝麄€(gè)指令/數(shù)據(jù)塊來描述的,但是本發(fā)明不限于此。相反,在一些示例性實(shí)施例中,可以向高速緩沖存儲(chǔ)器非保留部分寫入與高速緩沖存儲(chǔ)器非保留部分中的可用空間相同大小的指令/數(shù)據(jù)塊的一部分,同時(shí)向高速緩沖存儲(chǔ)器保留部分寫入剩余部分,即溢出。在該實(shí)施例中,引導(dǎo)處理器至高速緩沖存儲(chǔ)器保留部分的性能指示符將僅與寫入到高速緩沖存儲(chǔ)器保留部分的指令/數(shù)據(jù)塊內(nèi)的那些指令/數(shù)據(jù)相關(guān)聯(lián)。
作為本發(fā)明的優(yōu)點(diǎn)的例子,考慮數(shù)據(jù)的重復(fù)順序讀取。如果正被讀取的塊長得足以使高速緩沖存儲(chǔ)器溢出,則在該讀取的第二迭代中,有可能已從高速緩沖存儲(chǔ)器逐出塊首數(shù)據(jù),并且必須重載它。高速緩沖存儲(chǔ)器數(shù)據(jù)的這一重載將從高速緩沖存儲(chǔ)器逐出更多數(shù)據(jù)(可能就緊鄰在讀取其之前)。這樣,該重復(fù)讀取有可能根本未從高速緩沖存儲(chǔ)器獲得好處。
采用在此描述的本發(fā)明,數(shù)據(jù)的某部分占用高速緩沖存儲(chǔ)器的穩(wěn)定部分,并且塊的其余部分溢出到較不穩(wěn)定的溢出區(qū)域中。因而,在隨后讀取時(shí),塊首數(shù)據(jù)仍然可用于高速緩沖存儲(chǔ)器的穩(wěn)定部分中而無需重載。只有超出高速緩沖存儲(chǔ)器范圍的塊部分才必須在隨后讀取時(shí)被重載。
對(duì)于四個(gè)處理器在四個(gè)獨(dú)立代碼塊上工作、其中高速緩沖存儲(chǔ)器僅大得足夠支持這些塊中的三個(gè)塊的情況,可以獲得類似的優(yōu)點(diǎn)。本發(fā)明允許系統(tǒng)識(shí)別該狀態(tài),并且將這些指令塊中的(例如)兩個(gè)塊分裂成高速緩沖存儲(chǔ)器的(易失的)溢出區(qū)域,而保留這些塊中的兩個(gè)塊在高速緩沖存儲(chǔ)器的穩(wěn)定部分中不受干擾。
在本發(fā)明的另外實(shí)施例中,可以利用本發(fā)明的性能指示符來獲得關(guān)于指令或數(shù)據(jù)高速緩沖存儲(chǔ)器內(nèi)的高速緩沖存儲(chǔ)器命中和高速緩沖存儲(chǔ)器線重載的性質(zhì)的信息。例如,本發(fā)明的這些實(shí)施例可以用來確定多處理器系統(tǒng),如對(duì)稱多處理器(SMP)系統(tǒng)的處理器是否真正共享高速緩沖存儲(chǔ)器線,或者是否存在假高速緩沖存儲(chǔ)器線共享。然后,可以使用該確定作為用于確定如何更佳存儲(chǔ)高速緩沖存儲(chǔ)器線的指令/數(shù)據(jù)、以防止高速緩沖存儲(chǔ)器線的假共享的手段。
假高速緩沖存儲(chǔ)器共享是高速緩沖存儲(chǔ)器以比系統(tǒng)處理器大的粒度工作的結(jié)果。也就是,處理器在高速緩沖存儲(chǔ)器線內(nèi)的單獨(dú)指令/數(shù)據(jù)區(qū)域例如指令/數(shù)據(jù)塊上工作。然而,高速緩沖存儲(chǔ)器在高速緩沖存儲(chǔ)器線粒度上工作。因此,如果存在對(duì)高速緩沖存儲(chǔ)器線的任何部分的任何改變,并且接收到對(duì)高速緩沖存儲(chǔ)器線的另一部分的訪問請(qǐng)求,則在允許訪問請(qǐng)求之前必須重載高速緩沖存儲(chǔ)器線。
這可導(dǎo)致這樣的情況,其中系統(tǒng)的一個(gè)處理器向高速緩沖存儲(chǔ)器線的第一區(qū)域?qū)懭耄诙幚砥鲝母咚倬彌_存儲(chǔ)器線的第二區(qū)域讀取數(shù)據(jù),其中高速緩沖存儲(chǔ)器線的第二區(qū)域未被向高速緩沖存儲(chǔ)器線第一區(qū)域的寫入修改,但是在允許訪問第二區(qū)域之前,作為整體的高速緩沖存儲(chǔ)器線必須被重載。因此,即使第二區(qū)域內(nèi)的數(shù)據(jù)或指令尚未被向第一區(qū)域的寫入修改,從而讀取可被完成,而不必重載高速緩沖存儲(chǔ)器線,但是由于高速緩沖存儲(chǔ)器的工作粒度,因此高速緩沖存儲(chǔ)器線被重載。這導(dǎo)致由于必須處理高速緩沖存儲(chǔ)器線的重載而造成的性能下降。
這經(jīng)常稱作假高速緩沖存儲(chǔ)器線共享或“臟”高速緩沖存儲(chǔ)器命中。能夠識(shí)別何時(shí)在高速緩沖存儲(chǔ)器中存在這種情形將是有益的。本發(fā)明的實(shí)施例提供了用于識(shí)別這種情形的機(jī)制。
采用本發(fā)明的這些實(shí)施例,利用性能指示符和處理器寫和讀標(biāo)志檢測高速緩沖存儲(chǔ)器線內(nèi)的各個(gè)指令/數(shù)據(jù)區(qū)域或代碼部分。性能指示符和/或處理器寫和讀標(biāo)志可以與其指令/數(shù)據(jù)區(qū)域相關(guān)聯(lián)地存儲(chǔ)在高速緩沖存儲(chǔ)器線本身中,也可以存儲(chǔ)在性能指示符影象高速緩沖存儲(chǔ)器或者其它元數(shù)據(jù)數(shù)據(jù)結(jié)構(gòu)中。性能指示符以與上面關(guān)于本發(fā)明的前面實(shí)施例所述類似的方式工作。
采用本發(fā)明的本實(shí)施例,當(dāng)發(fā)生對(duì)指令/數(shù)據(jù)區(qū)域的訪問請(qǐng)求時(shí),確定是否存在與指令/數(shù)據(jù)區(qū)域相關(guān)聯(lián)的性能指示符。如果是,識(shí)別發(fā)出訪問請(qǐng)求的處理器,即多處理器系統(tǒng)的哪個(gè)處理器正在從高速緩沖存儲(chǔ)器的指令/數(shù)據(jù)區(qū)域讀取,或者向其寫入。在優(yōu)選實(shí)施例中,訪問請(qǐng)求包括標(biāo)識(shí)從其接收訪問請(qǐng)求的處理器的首標(biāo)信息或元數(shù)據(jù)。根據(jù)該信息,可以確定哪個(gè)處理器發(fā)送了訪問請(qǐng)求。
然后,設(shè)置與高速緩沖存儲(chǔ)器線中的指令/數(shù)據(jù)區(qū)域相關(guān)聯(lián)、且與識(shí)別出的處理器相關(guān)聯(lián)的處理器訪問標(biāo)志位。根據(jù)訪問請(qǐng)求是讀還是寫,設(shè)置讀處理器訪問標(biāo)志位或?qū)懱幚砥髟L問標(biāo)志位。也就是,通過性能指示符檢測的每個(gè)指令/數(shù)據(jù)區(qū)域或代碼部分對(duì)于與其相關(guān)聯(lián)的多處理器系統(tǒng)的每個(gè)處理器都具有讀處理器訪問標(biāo)志位和寫處理器訪問標(biāo)志位,并且將這些標(biāo)志位存儲(chǔ)在高速緩沖存儲(chǔ)器線的對(duì)應(yīng)部分中。
當(dāng)指令/數(shù)據(jù)區(qū)域被寫入,并且指令/數(shù)據(jù)區(qū)域具有關(guān)聯(lián)性能指示符時(shí),設(shè)置與發(fā)送了寫訪問請(qǐng)求的處理器相對(duì)應(yīng)的寫處理器訪問標(biāo)志位。類似地,當(dāng)指令/數(shù)據(jù)區(qū)域被讀取,并且指令/數(shù)據(jù)區(qū)域具有關(guān)聯(lián)性能指示符時(shí),設(shè)置與發(fā)送了讀訪問請(qǐng)求的處理器相對(duì)應(yīng)的讀處理器訪問標(biāo)志位。這樣,可以確定哪些處理器向哪些指令/數(shù)據(jù)區(qū)域進(jìn)行了寫入,哪些處理器從哪些指令/數(shù)據(jù)區(qū)域進(jìn)行了讀取,以及高速緩沖存儲(chǔ)器線的重載是由于處理器之間的真高速緩沖存儲(chǔ)器線共享、還是假高速緩沖存儲(chǔ)器線共享。
當(dāng)例如由于對(duì)高速緩沖存儲(chǔ)器線的區(qū)域的訪問請(qǐng)求而要執(zhí)行高速緩沖存儲(chǔ)器線的重載,但是先前已執(zhí)行過對(duì)高速緩沖存儲(chǔ)器線的改變時(shí),產(chǎn)生中斷并將其發(fā)送到性能監(jiān)測應(yīng)用程序的中斷處理程序。中斷處理程序獲得正被重載的高速緩沖存儲(chǔ)器線的指令/數(shù)據(jù)區(qū)域的寫和讀處理器訪問標(biāo)志位值。然后,比較這些寫和讀處理器訪問標(biāo)志位的值,以確定是否發(fā)生了假高速緩沖存儲(chǔ)器線共享。也就是,確定是否存在由至少一個(gè)處理器向同一高速緩沖存儲(chǔ)器線中的數(shù)據(jù)區(qū)域?qū)懭?、并且正在由另一個(gè)處理器訪問不同的數(shù)據(jù)區(qū)域。當(dāng)相同數(shù)據(jù)區(qū)域由一個(gè)處理器寫入、然后由一個(gè)或多個(gè)其它處理器訪問時(shí),發(fā)生真高速緩沖存儲(chǔ)器線共享。
圖42是根據(jù)本發(fā)明示例性實(shí)施例的數(shù)據(jù)高速緩沖存儲(chǔ)器的一部分的示例性方框圖。雖然圖42示出數(shù)據(jù)高速緩沖存儲(chǔ)器4200,但是應(yīng)當(dāng)理解,相同機(jī)制可以應(yīng)用于指令高速緩沖存儲(chǔ)器,而不脫離本發(fā)明的精神和范圍。
如圖42所示,每個(gè)數(shù)據(jù)區(qū)域4210-4260具有關(guān)聯(lián)寫標(biāo)志位4270-4280和讀標(biāo)志位4290-4299。雖然寫標(biāo)志位4270-4280和讀標(biāo)志位4290-4299被示出為與其相應(yīng)的數(shù)據(jù)區(qū)域4210-4260相關(guān)聯(lián)地存儲(chǔ)在數(shù)據(jù)高速緩沖存儲(chǔ)器4200中,但是本發(fā)明不限于此。相反,寫標(biāo)志位4270-4280和讀標(biāo)志位4290-4299可以存儲(chǔ)在性能指示符影象高速緩沖存儲(chǔ)器或數(shù)據(jù)高速緩沖存儲(chǔ)器4200之外的其它元數(shù)據(jù)數(shù)據(jù)結(jié)構(gòu)中,而不脫離本發(fā)明的精神和范圍。
如前所述,可以向數(shù)據(jù)區(qū)域4210-4260中的全部或特定區(qū)域提供根據(jù)本發(fā)明的性能指示符。這些性能指示符可以存儲(chǔ)在數(shù)據(jù)區(qū)域4210-4260、寫標(biāo)志位區(qū)域4270-4280、讀標(biāo)志位區(qū)域4290-4299、獨(dú)立的性能指示符影象高速緩沖存儲(chǔ)器或其它元數(shù)據(jù)數(shù)據(jù)結(jié)構(gòu)中。
當(dāng)處理器處理對(duì)數(shù)據(jù)區(qū)域的訪問請(qǐng)求時(shí),處理器確定是否存在與數(shù)據(jù)區(qū)域相關(guān)聯(lián)的性能指示符。如果是,則發(fā)送中斷到中斷單元,其使性能單元工作以確定哪個(gè)處理器發(fā)送了訪問請(qǐng)求。然后,確定訪問請(qǐng)求是讀訪問請(qǐng)求還是寫訪問請(qǐng)求,并且設(shè)置與數(shù)據(jù)區(qū)域相關(guān)聯(lián)的讀或?qū)憳?biāo)志位區(qū)域中的適當(dāng)讀或?qū)憳?biāo)志位,以表示處理器向數(shù)據(jù)區(qū)域進(jìn)行了寫入。因此,例如,如果訪問請(qǐng)求是對(duì)數(shù)據(jù)區(qū)域4210的寫入,并且數(shù)據(jù)區(qū)域4210具有關(guān)聯(lián)性能指示符,則可以針對(duì)發(fā)送了訪問請(qǐng)求的處理器設(shè)置寫標(biāo)志位區(qū)域4270中的寫標(biāo)志位。
圖43是根據(jù)本發(fā)明一個(gè)示例性實(shí)施例的寫標(biāo)志位區(qū)域的示例性方框圖。雖然圖43示出寫標(biāo)志位區(qū)域,但是應(yīng)當(dāng)理解,對(duì)于每個(gè)指令/數(shù)據(jù)區(qū)域,也可存在類似的讀標(biāo)志位區(qū)域。
如圖43所示,寫標(biāo)志位區(qū)域4300包括用于多處理器系統(tǒng)的每個(gè)處理器的寫標(biāo)志位4310-4340。因此,例如,寫標(biāo)志位4310用于第一處理器P1,寫標(biāo)志位4320用于第二處理器P2,寫標(biāo)志位4330用于第三處理器P3,并且寫標(biāo)志位4340用于處理器Pn。這些寫標(biāo)志位4310-4340可以與其關(guān)聯(lián)數(shù)據(jù)/指令相關(guān)聯(lián)地存在于高速緩沖存儲(chǔ)器線的一部分中,也可以存在于影象高速緩沖存儲(chǔ)器數(shù)據(jù)結(jié)構(gòu)或其它元數(shù)據(jù)數(shù)據(jù)結(jié)構(gòu)中。這些寫標(biāo)志位4310-4340可以響應(yīng)于確定出對(duì)應(yīng)處理器P1-Pn向與寫標(biāo)志位區(qū)域4300相關(guān)聯(lián)的數(shù)據(jù)區(qū)域進(jìn)行了寫入而設(shè)置。在響應(yīng)于高速緩沖存儲(chǔ)器線的重載而執(zhí)行本發(fā)明的處理之后,可以對(duì)這些寫標(biāo)志位4310-4340進(jìn)行復(fù)位、頁面調(diào)出至存儲(chǔ)器等。
可以為讀訪問請(qǐng)求提供類似的結(jié)構(gòu)和功能性。也就是,可以提供在結(jié)構(gòu)上與寫標(biāo)志位區(qū)域4300類似的讀標(biāo)志位區(qū)域,其中響應(yīng)于為特定處理器處理讀訪問請(qǐng)求而設(shè)置讀標(biāo)志位。在根據(jù)本發(fā)明處理高速緩沖存儲(chǔ)器線的重載操作之后,可以對(duì)這些讀標(biāo)志位區(qū)域進(jìn)行復(fù)位、頁面調(diào)出等。
圖44是概述當(dāng)處理對(duì)高速緩沖存儲(chǔ)器線區(qū)域的訪問請(qǐng)求時(shí)本發(fā)明一個(gè)示例性實(shí)施例的示例性操作的流程圖。如圖44所示,該操作以識(shí)別要監(jiān)測的感興趣高速緩沖存儲(chǔ)器的區(qū)域(步驟4400)開始。為識(shí)別出的要監(jiān)測的高速緩沖存儲(chǔ)器區(qū)域中的每一個(gè)設(shè)置性能指示符(步驟4410)。然后,對(duì)每個(gè)感興趣的高速緩沖存儲(chǔ)器區(qū)域啟動(dòng)(initiate)寫和讀標(biāo)志位(步驟4420)。也就是,在關(guān)聯(lián)寫標(biāo)志位區(qū)域和讀標(biāo)志位區(qū)域中,向每個(gè)感興趣的高速緩沖存儲(chǔ)器區(qū)域提供寫標(biāo)志位和讀標(biāo)志位,其中多處理器系統(tǒng)的每個(gè)處理器對(duì)應(yīng)于一個(gè)寫標(biāo)志位和讀標(biāo)志位。
然后,處理器監(jiān)測對(duì)高速緩沖存儲(chǔ)器的訪問(步驟4430)。對(duì)于每個(gè)高速緩沖存儲(chǔ)器訪問請(qǐng)求,確定對(duì)高速緩沖存儲(chǔ)器的訪問是否引用以性能指示符檢測的高速緩沖存儲(chǔ)器區(qū)域(步驟4440)。如果否,則該操作以正常方式處理訪問請(qǐng)求,然后進(jìn)入步驟4480,以確定是否通過返回步驟4430來繼續(xù)監(jiān)測對(duì)高速緩沖存儲(chǔ)器的訪問。
如果訪問請(qǐng)求引用具有關(guān)聯(lián)性能指示符的高速緩沖存儲(chǔ)器區(qū)域,則識(shí)別發(fā)出了該訪問請(qǐng)求的處理器(步驟4450)。然后,確定訪問請(qǐng)求是否是寫訪問請(qǐng)求(步驟4460)。如果訪問請(qǐng)求是寫訪問請(qǐng)求,則設(shè)置高速緩沖存儲(chǔ)器區(qū)域和所識(shí)別處理器的適當(dāng)寫標(biāo)志位(步驟4470)。如果訪問請(qǐng)求不是寫訪問請(qǐng)求,則它必定是讀訪問請(qǐng)求。結(jié)果,設(shè)置高速緩沖存儲(chǔ)器區(qū)域和所識(shí)別處理器的適當(dāng)讀標(biāo)志位(步驟4475)。然后,確定是否要執(zhí)行高速緩沖存儲(chǔ)器訪問請(qǐng)求的繼續(xù)監(jiān)測(步驟4480)。如果是,則該操作返回到步驟4430。如果否,則該操作終止。
圖45是概述當(dāng)處理高速緩沖存儲(chǔ)器線的重載時(shí)、本發(fā)明示例性實(shí)施例的示例性操作的流程圖。如圖45所示,該操作以檢測高速緩沖存儲(chǔ)器線的重載(步驟4500)開始。該檢測可以例如通過處理器檢測高速緩沖存儲(chǔ)器線重載中斷正由中斷處理程序處理來執(zhí)行。然后,啟動(dòng)高速緩沖存儲(chǔ)器線的重載(步驟4510)。然后,該操作終止。
圖46是概述當(dāng)處理例如在圖45的操作中產(chǎn)生的高速緩沖存儲(chǔ)器線重載中斷時(shí),本發(fā)明示例性實(shí)施例的示例性操作的流程圖。如圖46所示,該操作以啟動(dòng)高速緩沖存儲(chǔ)器線的重載(步驟4600)開始。然后獲得正被重載的高速緩沖存儲(chǔ)器線的區(qū)域的寫位標(biāo)志和讀位標(biāo)志值(步驟4610)。
然后,確定對(duì)于正被當(dāng)前訪問請(qǐng)求訪問的高速緩沖存儲(chǔ)器區(qū)域、其它處理器(即不同于發(fā)送了啟動(dòng)高速緩沖存儲(chǔ)器線重載的訪問請(qǐng)求的處理器的處理器)是否設(shè)置了寫標(biāo)志位和/或讀標(biāo)志位(步驟4620)。該確定基本上是確定重載是否可能是由于另一個(gè)處理器先前已經(jīng)向正被訪問的相同數(shù)據(jù)區(qū)域進(jìn)行了寫入,這是真高速緩沖存儲(chǔ)器線共享的指示。如果是,則確定重載是由于不同處理器向正被訪問的高速緩沖存儲(chǔ)器區(qū)域進(jìn)行了寫入,因此高速緩沖存儲(chǔ)器線由系統(tǒng)的處理器真正共享(步驟4630)。
如果其它處理器先前未向正被當(dāng)前訪問請(qǐng)求訪問的高速緩沖存儲(chǔ)器區(qū)域?qū)懭?,則確定是否為高速緩沖存儲(chǔ)器線的其它數(shù)據(jù)區(qū)域設(shè)置了任何其它處理器的寫標(biāo)志位或讀標(biāo)志位(步驟4640)。如果是,則確定多處理器系統(tǒng)的其它處理器訪問了高速緩沖存儲(chǔ)器線的其它區(qū)域,但是未訪問正被當(dāng)前處理器訪問的高速緩沖存儲(chǔ)器線的區(qū)域。這是假高速緩沖存儲(chǔ)器線共享的指示。結(jié)果,確定重載是由于假高速緩沖存儲(chǔ)器線共享(步驟4650)。如果沒有為高速緩沖存儲(chǔ)器線的任何其它區(qū)域設(shè)置其它處理器的寫入或讀標(biāo)志位,則確定高速緩沖存儲(chǔ)器線的重載是由于真高速緩沖存儲(chǔ)器線共享(步驟4630)。
可以輸出高速緩沖存儲(chǔ)器線重載的確定基礎(chǔ)的指示,以用于性能分析(步驟4660)。然后,重載高速緩沖存儲(chǔ)器線,并且可以復(fù)位寫標(biāo)志位和讀標(biāo)志位(步驟4670)。然后,該操作終止。
雖然上述實(shí)施例示出了本發(fā)明對(duì)高速緩沖存儲(chǔ)器線的每次重載執(zhí)行假高速緩沖存儲(chǔ)器線共享的檢查,但是本發(fā)明不限于此。相反,在可替換實(shí)施例中,可以周期性地執(zhí)行假高速緩沖存儲(chǔ)器線共享的檢查。也就是,在計(jì)算機(jī)程序運(yùn)行了預(yù)定時(shí)間量之后,可以執(zhí)行檢查,以查看是否存在假高速緩沖存儲(chǔ)器線共享。該檢查的周期性可以與自從前次對(duì)假高速緩沖存儲(chǔ)器線共享的檢查以來的預(yù)定執(zhí)行時(shí)間量、諸如確定出特定一個(gè)或多個(gè)線程不再活動(dòng)的事件的發(fā)生等相關(guān)聯(lián)。
另外,雖然本發(fā)明是按照當(dāng)重載操作的處理完成時(shí)、復(fù)位讀和寫標(biāo)志位來描述的,但是本發(fā)明不限于此。作為復(fù)位讀和寫標(biāo)志位的替代或補(bǔ)充,本發(fā)明可以將讀和寫標(biāo)志位的值頁面調(diào)出(page out)到存儲(chǔ)器,以便保存讀和寫標(biāo)志位狀態(tài)的副本,以作以后處理。
因此,本發(fā)明的機(jī)制提供了監(jiān)測高速緩沖存儲(chǔ)器線內(nèi)的性能的能力。更具體地說,本發(fā)明的機(jī)制允許識(shí)別高速緩沖存儲(chǔ)器線的重載是由于多處理器系統(tǒng)的處理器之間的真或假高速緩沖存儲(chǔ)器線共享。
真或假高速緩沖存儲(chǔ)器線共享的確定可以有益于確定數(shù)據(jù)和指令存儲(chǔ)在高速緩沖存儲(chǔ)器中的方式。也就是,如果確定高速緩沖存儲(chǔ)器線被假共享,因此經(jīng)常由于第一處理器向未由第二處理器訪問的高速緩沖存儲(chǔ)器線區(qū)域?qū)懭攵鴪?zhí)行高速緩沖存儲(chǔ)器線重載,則可采取適當(dāng)?shù)拇胧┮宰钚』俑咚倬彌_存儲(chǔ)器線共享的數(shù)量。
例如,在本發(fā)明的另外實(shí)施例中,當(dāng)使用上述機(jī)制確定出高速緩沖存儲(chǔ)器線被假共享時(shí),則可產(chǎn)生中斷,并且將其發(fā)送到性能監(jiān)測應(yīng)用程序。性能監(jiān)測應(yīng)用程序的中斷處理程序?qū)⒆R(shí)別該中斷是表示假高速緩沖存儲(chǔ)器線共享。不是以正常方式重載高速緩沖存儲(chǔ)器線,而是可以將正被訪問的數(shù)據(jù)或指令寫入到專用于避免假高速緩沖存儲(chǔ)器線共享的獨(dú)立存儲(chǔ)器區(qū)域。
然后,可以通過插入指向該高速緩沖存儲(chǔ)器或存儲(chǔ)器的新區(qū)域的指針來修改代碼。因此,當(dāng)代碼再次試圖訪問該高速緩沖存儲(chǔ)器區(qū)域時(shí),將該訪問重定向到此存儲(chǔ)器區(qū)域、而非遭受假共享的先前高速緩沖存儲(chǔ)器區(qū)域。這樣,可以避免高速緩沖存儲(chǔ)器線的重載。
圖47是概述本發(fā)明示例性實(shí)施例的示例性操作的流程圖,其中移動(dòng)被識(shí)別為假共享的高速緩沖存儲(chǔ)器區(qū)域以避免假共享。如圖47所示,該操作以接收例如可以根據(jù)圖46的操作而產(chǎn)生的中斷(步驟4600)開始。為遭受假共享的高速緩沖存儲(chǔ)器區(qū)域分配專用高速緩沖存儲(chǔ)器或存儲(chǔ)器區(qū)域的一部分(步驟4710)。然后,向新的專用高速緩沖存儲(chǔ)器或存儲(chǔ)器區(qū)域?qū)懭敫咚倬彌_存儲(chǔ)器區(qū)域中的數(shù)據(jù)/指令(步驟4720)。然后,在正被監(jiān)測的計(jì)算機(jī)程序的代碼中存儲(chǔ)指向該新專用高速緩沖存儲(chǔ)器或存儲(chǔ)器區(qū)域的指針(步驟4730)。然后,該操作結(jié)束。
因此,通過在圖46和47中概述的機(jī)制的操作,可以修改高速緩沖存儲(chǔ)器中的指令/數(shù)據(jù)的存儲(chǔ),以避免假高速緩沖存儲(chǔ)器線共享,從而最小化在計(jì)算機(jī)程序執(zhí)行期間所執(zhí)行的高速緩沖存儲(chǔ)器線重載的數(shù)量。這樣,可以提高計(jì)算機(jī)程序的性能。
上面對(duì)本發(fā)明各個(gè)實(shí)施例的描述集中于使用性能指示符、計(jì)數(shù)器、標(biāo)志等,以提供有關(guān)執(zhí)行指令、訪問數(shù)據(jù)區(qū)域等的方式的信息。可以使用有關(guān)計(jì)數(shù)器值、根據(jù)計(jì)數(shù)器值和標(biāo)志值所作的確定等來注解在計(jì)算機(jī)程序執(zhí)行的跟蹤期間由性能監(jiān)測應(yīng)用程序獲得的性能概略(簡檔)數(shù)據(jù)。該帶注解的性能概略數(shù)據(jù)在下面簡稱作性能概略數(shù)據(jù),它可以被存儲(chǔ)到性能概略數(shù)據(jù)存儲(chǔ)區(qū)域,以用于分析計(jì)算機(jī)程序的性能。
在本發(fā)明的另外實(shí)施例中,編譯器可以隨同計(jì)算機(jī)程序的指令/數(shù)據(jù)一起獲得該性能概略數(shù)據(jù),并且使用該信息來優(yōu)化執(zhí)行計(jì)算機(jī)程序、存儲(chǔ)指令/數(shù)據(jù)等的方式。也就是,編譯器可以優(yōu)化應(yīng)用程序和指令/數(shù)據(jù)存儲(chǔ),以便優(yōu)化應(yīng)用程序的運(yùn)行時(shí)間組件。
編譯器優(yōu)化計(jì)算機(jī)程序的運(yùn)行時(shí)間方面的方式可以根據(jù)所獲得的特定性能概略數(shù)據(jù)而不同,其中特定性能概略數(shù)據(jù)通過使用前述性能指示符、計(jì)數(shù)器、標(biāo)志等而獲得的輸出來注解。該優(yōu)化可以是優(yōu)化指令路徑、優(yōu)化在初始應(yīng)用程序裝載中所花的時(shí)間、利用高速緩沖存儲(chǔ)器和存儲(chǔ)器的方式等。下面只是可以根據(jù)通過性能指示符、計(jì)數(shù)器、標(biāo)志等而獲得的信息優(yōu)化計(jì)算機(jī)程序的運(yùn)行時(shí)間方面的示例方式,并且并不旨在以任何方式限制本發(fā)明的應(yīng)用。
作為編譯器可以根據(jù)性能概略數(shù)據(jù)而優(yōu)化計(jì)算機(jī)程序的運(yùn)行時(shí)間組件的方式的第一例子,首先將描述對(duì)高速緩沖存儲(chǔ)器中的指令/數(shù)據(jù)存儲(chǔ)的優(yōu)化。例如,本發(fā)明的機(jī)制已被描述為包括可以檢測假高速緩沖存儲(chǔ)器線共享的實(shí)施例。如上所述,可以識(shí)別該假高速緩沖存儲(chǔ)器線共享,并且可以輸出假高速緩沖存儲(chǔ)器線共享的指示以作以后的分析。可以輸出該指示并將其存儲(chǔ)在性能概略數(shù)據(jù)中,并且該指示可以由編譯器用來確定是否需要在高速緩沖存儲(chǔ)器中存儲(chǔ)數(shù)據(jù)/指令的可替換方案。
也就是,在一個(gè)示例性實(shí)施例中,編譯器可以根據(jù)性能概略數(shù)據(jù)確定在計(jì)算機(jī)程序的執(zhí)行中存在假高速緩沖存儲(chǔ)器線共享的問題,因此應(yīng)當(dāng)以最少化高速緩沖存儲(chǔ)器線共享的方式在存儲(chǔ)器中安排指令/數(shù)據(jù)。例如,編譯器可以確定相互隔開64字節(jié)寫入指令/數(shù)據(jù)塊。這樣,向每個(gè)指令/數(shù)據(jù)塊分配64字節(jié)的高速緩沖存儲(chǔ)器區(qū)域,并且保證指令/數(shù)據(jù)塊位于64字節(jié)高速緩沖存儲(chǔ)器中的獨(dú)立高速緩沖存儲(chǔ)器線上。因此,每條高速緩沖存儲(chǔ)器線僅被系統(tǒng)的一個(gè)處理器訪問,并且消除了假高速緩沖存儲(chǔ)器線共享。
在編譯器可以如何優(yōu)化計(jì)算機(jī)程序的運(yùn)行時(shí)間組件的另外例子中,性能概略數(shù)據(jù)可能指示與其它執(zhí)行路徑相比更頻繁地遵循特定執(zhí)行路徑。也就是,在分支指令處,采取相同的執(zhí)行路徑往往大于50%的時(shí)間。這可以例如根據(jù)如前所述的熱點(diǎn)檢測等來確定。根據(jù)所獲得的性能概略數(shù)據(jù),編譯器可以在將計(jì)算機(jī)程序代碼編譯成可執(zhí)行代碼時(shí),確定以使更頻繁地被執(zhí)行的路徑處于與分支指令鄰接的分支處。也就是,分支檢查可被重新排序,使得它們更連續(xù)。
或者,可以向編程人員提供關(guān)于可以如何優(yōu)化代碼的信息,使得編程人員可以離線執(zhí)行這些優(yōu)化。因此,不是實(shí)際上修改代碼或者數(shù)據(jù)或指令在高速緩沖存儲(chǔ)器中的存儲(chǔ),而是可以向編程人員提供關(guān)于可以優(yōu)化計(jì)算機(jī)程序的運(yùn)行時(shí)間組件的方式的建議,以用于修改代碼或者計(jì)算系統(tǒng)的操作。然后,編程人員可以決定是否實(shí)現(xiàn)所建議的優(yōu)化。
在根據(jù)性能概略數(shù)據(jù)檢測出可能的優(yōu)化時(shí),可以自動(dòng)完成可由編譯器執(zhí)行或者由編譯器建議的優(yōu)化?;蛘?,編譯器可以向編程人員提供表示識(shí)別出的可執(zhí)行的優(yōu)化的告警,并且允許編程人員選擇要執(zhí)行的優(yōu)化。例如,可以提供圖形用戶界面,其包括采用復(fù)選框和虛擬按鈕的優(yōu)化列表,通過這些復(fù)選框和虛擬按鈕允許編程人員選擇要執(zhí)行的特定優(yōu)化,然后通過編譯器啟動(dòng)這些優(yōu)化?;蛘?,優(yōu)化可以完全取決于編程人員,這樣,本發(fā)明僅向編程人員提供可能優(yōu)化的告警,并且將其留給編程人員來決定是否實(shí)際上實(shí)現(xiàn)這些優(yōu)化。
圖48是概述當(dāng)優(yōu)化應(yīng)用程序執(zhí)行時(shí)本發(fā)明示例性實(shí)施例的示例性操作的流程圖。如圖48所示,該操作以獲得應(yīng)用程序的帶注解性能概略數(shù)據(jù)(步驟4800)開始。該性能概略數(shù)據(jù)使用本發(fā)明的性能指示符、計(jì)數(shù)器、標(biāo)志等從計(jì)算機(jī)程序執(zhí)行的跟蹤中獲得。
然后,獲得計(jì)算機(jī)程序的代碼(步驟4810),并且確定可以根據(jù)性能概略數(shù)據(jù)執(zhí)行代碼編譯以優(yōu)化計(jì)算機(jī)程序執(zhí)行的方式(步驟4820)。然后,可以通過一個(gè)或多個(gè)圖形用戶界面向編程人員呈現(xiàn)這些優(yōu)化(步驟4830)。然后,接收由系統(tǒng)編程人員選擇的優(yōu)化(步驟4840),并且使用所選優(yōu)化來編譯代碼(步驟4850)。然后,該操作結(jié)束。當(dāng)然,如上所述,可以自動(dòng)執(zhí)行優(yōu)化而無需聯(lián)系編程人員。
雖然上述實(shí)施例是按照單個(gè)性能概略數(shù)據(jù)源來描述的,但是本發(fā)明不限于此。相反,可以將來自多個(gè)源的性能概略數(shù)據(jù)編譯成可用來優(yōu)化計(jì)算機(jī)程序編譯的單個(gè)性能概略數(shù)據(jù)集。例如,可以將來自多個(gè)客戶的計(jì)算機(jī)程序執(zhí)行的各個(gè)跟蹤編譯成單個(gè)性能概略數(shù)據(jù)集,以便在一次計(jì)算機(jī)程序編譯優(yōu)化中就解決在不同客戶平臺(tái)上執(zhí)行計(jì)算機(jī)程序的各種問題。
因此,利用本發(fā)明的機(jī)制,使用本發(fā)明各個(gè)實(shí)施例的性能指示符、計(jì)數(shù)器、標(biāo)志等的結(jié)果可以用來優(yōu)化計(jì)算機(jī)程序的編譯,以便獲得計(jì)算機(jī)程序的最佳運(yùn)行時(shí)間執(zhí)行。
本發(fā)明的上述實(shí)施例是按照性能指示符存儲(chǔ)在指令本身、性能指示符影象高速緩沖存儲(chǔ)器中等來描述的。而且,上述實(shí)施例是按照計(jì)數(shù)器是硬件計(jì)數(shù)器來描述的。本發(fā)明不限于這些實(shí)施例。在本發(fā)明的另外實(shí)施例中,可以使用頁表元素來存儲(chǔ)性能指示符和/或事件計(jì)數(shù)。
頁表是存儲(chǔ)器中的數(shù)據(jù)結(jié)構(gòu),其提供將虛擬存儲(chǔ)器地址映射到物理存儲(chǔ)器地址、從而允許程序存儲(chǔ)器的虛擬化的手段。頁是可以將屬性(例如,只讀、讀/寫,可高速緩存)與其相關(guān)聯(lián)的存儲(chǔ)器塊。當(dāng)要從存儲(chǔ)器檢索指令或數(shù)據(jù)時(shí),處理器使用存儲(chǔ)在頁表中的值,以將由程序指定的地址(例如,由裝載指令算出的地址或下一順序指令的地址)轉(zhuǎn)換成物理存儲(chǔ)器中期望位置的物理地址。由于必須參考頁表來將每個(gè)程序地址轉(zhuǎn)換成物理地址,因此頁表是存儲(chǔ)性能指示符和/或事件計(jì)數(shù)的理想地方。
圖49示出根據(jù)本發(fā)明示例性實(shí)施例的、使用頁表將由程序指定的存儲(chǔ)器地址轉(zhuǎn)換成物理地址的數(shù)據(jù)流的示例性方框圖。如圖49所示,使用指定活動(dòng)地址空間的各種手段之一,通過地址空間寄存器4920將(數(shù)據(jù)或指令的)程序地址4910轉(zhuǎn)換成虛擬地址。處理器使用所得到的虛擬地址在頁表4930中搜索頁表4930中匹配虛擬地址的頁描述符。匹配頁描述符的內(nèi)容共同包含與虛擬頁相關(guān)聯(lián)的物理地址和屬性。這些內(nèi)容用來將虛擬地址轉(zhuǎn)換成物理地址,并且確定頁的屬性(例如,訪問權(quán)限)。
在本發(fā)明的另外實(shí)施例中,擴(kuò)展頁表以包括每個(gè)條目的附加字段,用于存儲(chǔ)性能監(jiān)測結(jié)構(gòu),如性能指示符、事件計(jì)數(shù)、閾值、對(duì)應(yīng)感興趣頁內(nèi)的地址范圍等。當(dāng)進(jìn)程訪問頁表以執(zhí)行虛擬到物理頁地址映射時(shí),可以查詢這些附加字段,檢索來自這些字段的值,并且根據(jù)導(dǎo)致訪問頁表的特定事件更新這些字段中的值。
或者,為了避免任何性能下降,可以在類似于轉(zhuǎn)換后備緩沖器(TLB)或有效到真實(shí)地址轉(zhuǎn)換緩沖器(ERAT)的處理器資源中,高速緩存這些字段中的性能指示符信息。例如,可以提供性能指示符后備緩沖器(PILAB),其中可以高速緩存在頁表的上面字段中提供的虛擬到真實(shí)地址轉(zhuǎn)換信息和性能指示符信息。當(dāng)接收到指令或數(shù)據(jù)地址訪問請(qǐng)求時(shí),可以在PILAB中執(zhí)行程序或虛擬地址的查找,以獲得地址轉(zhuǎn)換信息和性能指示符信息。如果在PILAB中不存在程序或虛擬地址,則可參考頁表,以獲得該信息。
圖50示出根據(jù)本發(fā)明示例性實(shí)施例的示例性頁表?xiàng)l目。如圖50所示,頁表?xiàng)l目5000包括用于存儲(chǔ)虛擬頁地址的字段5010,用于存儲(chǔ)物理頁地址的字段5020、以及用于存儲(chǔ)性能監(jiān)測結(jié)構(gòu)的附加字段5030-5060。這些性能監(jiān)測結(jié)構(gòu)是由性能監(jiān)測應(yīng)用程序用于確定跟蹤下的計(jì)算機(jī)應(yīng)用的性能的結(jié)構(gòu)。這些性能監(jiān)測結(jié)構(gòu)可以包括例如性能指示符、事件計(jì)數(shù)器、閾值、感興趣頁內(nèi)的地址范圍等。這些附加字段5030-5060的值可以根據(jù)由性能監(jiān)測應(yīng)用程序提供給性能監(jiān)測單元的信息、由性能監(jiān)測單元設(shè)置。
例如,以如上所述性能指示符與指令和/或部分?jǐn)?shù)據(jù)相關(guān)聯(lián)的類似方式,性能指示符可以與頁表內(nèi)的這些指令和/或數(shù)據(jù)部分相關(guān)聯(lián)。因此,當(dāng)確定指令或數(shù)據(jù)部分是否具有關(guān)聯(lián)性能指示符時(shí),可以使用指令或數(shù)據(jù)部分的虛擬地址來識(shí)別頁表中的條目,并且可以檢查存儲(chǔ)在附加字段5030和5040中的值,以查看性能指示符是否與物理頁或物理頁的一部分相關(guān)聯(lián)。也就是,如果與虛擬地址相關(guān)聯(lián)的偏移落在字段5040中標(biāo)識(shí)的偏移范圍內(nèi),并且字段5030中存儲(chǔ)有性能指示符,則與虛擬地址相對(duì)應(yīng)的指令具有關(guān)聯(lián)性能指示符。
類似于上述硬件計(jì)數(shù)器,字段5050可以用來存儲(chǔ)事件計(jì)數(shù),并且當(dāng)發(fā)生特定事件時(shí)可被遞增。例如,在高速緩沖存儲(chǔ)器未中導(dǎo)致計(jì)數(shù)器遞增的上述實(shí)施例中,作為物理計(jì)數(shù)器的替代或補(bǔ)充,計(jì)數(shù)字段5050可以用來存儲(chǔ)該計(jì)數(shù)。因此,例如,當(dāng)必須從物理存儲(chǔ)中檢索指令或數(shù)據(jù)的部分時(shí),參考頁表以識(shí)別指令或數(shù)據(jù)的部分的物理存儲(chǔ)位置。同時(shí),可以查詢字段5030-5060,并且可以遞增字段5050中的計(jì)數(shù)器值,其表示必須從物理存儲(chǔ)中提取頁、并且將其裝載到存儲(chǔ)器或高速緩沖存儲(chǔ)器中的次數(shù)。
字段5060可以用來存儲(chǔ)用于確定何時(shí)發(fā)送中斷到性能監(jiān)測應(yīng)用程序的中斷處理程序的閾值信息。如上所述,當(dāng)發(fā)生導(dǎo)致在頁表中被訪問字段5030-5060的事件時(shí),可以將計(jì)數(shù)字段5050或多個(gè)計(jì)數(shù)字段5050中的值與存儲(chǔ)在字段5060中的閾值進(jìn)行比較,以確定是否滿足或超過閾值。如果是,則可產(chǎn)生中斷,并且將其發(fā)送到性能監(jiān)測應(yīng)用程序的中斷處理程序。
應(yīng)當(dāng)理解,雖然圖50僅示出單個(gè)用于存儲(chǔ)性能指示符的字段、單個(gè)用于存儲(chǔ)計(jì)數(shù)的字段、單個(gè)用于存儲(chǔ)閾值的字段、以及單個(gè)用于將偏移范圍存儲(chǔ)到頁內(nèi)的字段,但是本發(fā)明不限于此。相反,可以使用任何數(shù)目的、與物理頁相關(guān)聯(lián)的、用于存儲(chǔ)多個(gè)性能指示符、閾值、事件計(jì)數(shù)、偏移范圍等的字段,而不脫離本發(fā)明的精神和范圍。
圖51是概述當(dāng)使用擴(kuò)增式頁表來存儲(chǔ)性能監(jiān)測結(jié)構(gòu)時(shí)本發(fā)明的示例性操作的流程圖。如圖51所示,該操作以通過對(duì)與性能監(jiān)測應(yīng)用程序感興趣的指令/數(shù)據(jù)相對(duì)應(yīng)的條目設(shè)置頁表的性能指示符字段中的值,來初始化頁表(步驟5110)開始。另外,可以初始化與頁表?xiàng)l目的各個(gè)字段中的閾值和計(jì)數(shù)器值相關(guān)聯(lián)的閾值、偏移范圍(步驟5120)。然后,開始計(jì)算機(jī)程序的執(zhí)行和執(zhí)行的監(jiān)測(步驟5130)。
確定是否發(fā)生需要訪問物理存儲(chǔ)的事件(步驟5140)。如果是,則確定是否設(shè)置了用于虛擬地址的頁表?xiàng)l目中的性能指示符字段(步驟5150)。如果是,則對(duì)于虛擬地址偏移落在其內(nèi)的偏移范圍,遞增一個(gè)或多個(gè)計(jì)數(shù)器字段值(步驟5160)。
然后,可以將該一個(gè)或多個(gè)計(jì)數(shù)器字段值與頁表?xiàng)l目的閾值字段中的對(duì)應(yīng)閾值進(jìn)行比較(步驟5170)。然后,可以確定該一個(gè)或多個(gè)計(jì)數(shù)器字段值是否滿足或超過閾值(步驟5180)。如果滿足或超過任一個(gè)閾值,則可產(chǎn)生中斷,并且將其發(fā)送到性能監(jiān)測應(yīng)用程序的中斷處理程序(步驟5190)。
當(dāng)然,與此操作并行,執(zhí)行從物理存儲(chǔ)地址位置檢索指令/數(shù)據(jù)。然后,確定是否要終止該操作(步驟5195)。如果否,則該操作返回到步驟5140;否則,該操作終止。
因此,在本發(fā)明的此另外實(shí)施例中,不是需要獨(dú)立的數(shù)據(jù)結(jié)構(gòu)或硬件裝置,而是本實(shí)施例允許擴(kuò)展已經(jīng)存在的頁表,以包括用于存儲(chǔ)性能監(jiān)測結(jié)構(gòu)的附加字段。由于要由性能監(jiān)測應(yīng)用程序監(jiān)測的很多事件與物理存儲(chǔ)的訪問有緊密的聯(lián)系,因此使用頁表存儲(chǔ)這些性能監(jiān)測結(jié)構(gòu)提供了侵入性更小的解決方案,以幫助性能監(jiān)測應(yīng)用程序確定計(jì)算機(jī)程序的執(zhí)行性能。
因此,本發(fā)明提供了一種用于在監(jiān)測程序執(zhí)行并使用通過監(jiān)測程序的執(zhí)行而獲得的信息來優(yōu)化程序執(zhí)行時(shí)提供協(xié)助的改進(jìn)方法、設(shè)備和計(jì)算機(jī)指令。本發(fā)明的機(jī)制包括采用由處理器識(shí)別以使得能夠?qū)εc指示符關(guān)聯(lián)的指令的執(zhí)行進(jìn)行計(jì)數(shù)的指示符。通過該機(jī)制使得能夠進(jìn)行如上所述的各種計(jì)數(shù)。此外,采用通過利用指示符與特定指令的關(guān)聯(lián)而提供的信息,本發(fā)明的機(jī)制還提供在監(jiān)測和分析程序性能中對(duì)程序的各種調(diào)整。此外,如上所述,可以自動(dòng)調(diào)整程序,以允許監(jiān)測選定指令乃至例程和模塊,而不必修改程序。
值得注意的是,雖然本發(fā)明是在全功能數(shù)據(jù)處理系統(tǒng)的上下文中描述的,但是本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解,本發(fā)明的過程能夠以指令的計(jì)算機(jī)可讀介質(zhì)的形式和各種形式來分發(fā),并且本發(fā)明與實(shí)際上用來執(zhí)行分發(fā)的信號(hào)承載介質(zhì)的具體類型無關(guān)地同等適用。計(jì)算機(jī)可讀介質(zhì)的例子包括諸如軟盤、硬盤驅(qū)動(dòng)器、RAM、CD-ROM、DVD-ROM的可記錄型介質(zhì),和諸如數(shù)字和模擬通信鏈路、采用各種傳輸形式例如射頻和光波傳輸?shù)挠芯€或無線通信鏈路的傳輸型介質(zhì)。計(jì)算機(jī)可讀介質(zhì)可以采取為在特定數(shù)據(jù)處理系統(tǒng)中實(shí)際使用而譯碼的編碼格式的形式。
本發(fā)明的描述是為了示例和描述的目的而提供的,而不旨在窮盡或者將本發(fā)明限定于所公開的形式。對(duì)于本領(lǐng)域的普通技術(shù)人員而言,很多修改和變動(dòng)將是顯然的。例如,代替使用指令中或指令包中的字段,可以使用新指令或操作碼來指示后續(xù)的指令,或后續(xù)的指令集是被標(biāo)記指令。此外,在希望在指令的字段內(nèi)包括性能指示符的情況下,如果用于性能指示符的空閑字段不可用,則可以改變處理器的架構(gòu)來包括附加位。此外,雖然給出了諸如指令執(zhí)行的事件、諸如時(shí)鐘或處理器周期的執(zhí)行指令所需的時(shí)間、訪問數(shù)據(jù)、進(jìn)入到代碼部分中的時(shí)間的例子,但是這些例子并不旨在將本發(fā)明限定于可被計(jì)數(shù)的事件的類型??梢允褂帽景l(fā)明的機(jī)制對(duì)任何與指令的執(zhí)行或?qū)Υ鎯?chǔ)器位置的訪問有關(guān)的事件進(jìn)行計(jì)數(shù)。
選擇和描述這些所示實(shí)施例是為了最佳地說明本發(fā)明的原理、實(shí)際應(yīng)用,并使得本領(lǐng)域的其它普通技術(shù)人員能夠理解本發(fā)明,從而設(shè)計(jì)出適于具體應(yīng)用的帶有各種修改的各種實(shí)施例。
權(quán)利要求
1.一種用于在數(shù)據(jù)處理系統(tǒng)中執(zhí)行指令的方法,包括將計(jì)算機(jī)程序的一條或多條指令與一個(gè)或多個(gè)性能指示符相關(guān)聯(lián);在頁表的一個(gè)或多個(gè)性能指示符字段中存儲(chǔ)所述一個(gè)或多個(gè)性能指示符;與所述一個(gè)或多個(gè)性能指示符中的對(duì)應(yīng)性能指示符相關(guān)聯(lián)地為所述一條或多條指令啟動(dòng)所述頁表中的一個(gè)或多個(gè)計(jì)數(shù)器字段;以及根據(jù)在頁表的性能指示符字段中指令是否具有關(guān)聯(lián)性能指示符,在計(jì)算機(jī)程序指令執(zhí)行期間遞增所述一個(gè)或多個(gè)計(jì)數(shù)器字段中的值。
2.如權(quán)利要求1所述的方法,其中在指令執(zhí)行期間遞增所述一個(gè)或多個(gè)計(jì)數(shù)器字段中的值包括確定是否發(fā)生了與存儲(chǔ)在所述一個(gè)或多個(gè)性能指示符字段中的性能指示符相關(guān)聯(lián)的事件;以及如果發(fā)生了所述事件,則遞增所述一個(gè)或多個(gè)計(jì)數(shù)器字段中對(duì)應(yīng)計(jì)數(shù)器字段中的值。
3.如權(quán)利要求1所述的方法,其中所述事件是高速緩沖存儲(chǔ)器未中。
4.如權(quán)利要求1所述的方法,還包括與所述一個(gè)或多個(gè)性能指示符字段和所述一個(gè)或多個(gè)計(jì)數(shù)器字段相關(guān)聯(lián)地在頁表的一個(gè)或多個(gè)閾值字段中存儲(chǔ)一個(gè)或多個(gè)閾值。
5.如權(quán)利要求4所述的方法,還包括當(dāng)發(fā)生事件時(shí),將所述一個(gè)或多個(gè)計(jì)數(shù)器字段中的一個(gè)或多個(gè)值與所述一個(gè)或多個(gè)閾值字段中的閾值進(jìn)行比較;以及如果存在所述一個(gè)或多個(gè)計(jì)數(shù)器字段中的所述一個(gè)或多個(gè)值與所述閾值之間的預(yù)定關(guān)系,則產(chǎn)生中斷。
6.如權(quán)利要求1所述的方法,還包括接收對(duì)代碼部分或數(shù)據(jù)部分的訪問請(qǐng)求,其中所述訪問請(qǐng)求包括代碼部分或數(shù)據(jù)部分的虛擬地址的標(biāo)識(shí)符;將所述虛擬地址轉(zhuǎn)換成代碼部分或數(shù)據(jù)部分在存儲(chǔ)裝置中的存儲(chǔ)位置的真實(shí)地址;通過使用所述真實(shí)地址訪問代碼部分或數(shù)據(jù)部分;以及在訪問代碼部分或數(shù)據(jù)部分期間確定是否發(fā)生了事件,其中響應(yīng)于確定在訪問代碼部分或數(shù)據(jù)部分期間發(fā)生了事件,執(zhí)行所述一個(gè)或多個(gè)計(jì)數(shù)器字段中的值的遞增。
7.如權(quán)利要求1所述的方法,其中將計(jì)算機(jī)程序的一條或多條指令與一個(gè)或多個(gè)性能指示符相關(guān)聯(lián)包括將所述一個(gè)或多個(gè)性能指示符與頁表中所述一條或多條指令的虛擬和真實(shí)地址相關(guān)聯(lián)。
8.一種計(jì)算機(jī)可讀介質(zhì)中的計(jì)算機(jī)程序產(chǎn)品,用于在數(shù)據(jù)處理系統(tǒng)中執(zhí)行指令,包括第一指令,用于將計(jì)算機(jī)程序的一條或多條指令與一個(gè)或多個(gè)性能指示符相關(guān)聯(lián);第二指令,用于在頁表的一個(gè)或多個(gè)性能指示符字段中存儲(chǔ)所述一個(gè)或多個(gè)性能指示符;第三指令,用于與所述一個(gè)或多個(gè)性能指示符中的對(duì)應(yīng)性能指示符相關(guān)聯(lián)地為所述一條或多條指令啟動(dòng)所述頁表中的一個(gè)或多個(gè)計(jì)數(shù)器字段;以及第四指令,用于根據(jù)在頁表的性能指示符字段中指令是否具有關(guān)聯(lián)性能指示符,在計(jì)算機(jī)程序指令執(zhí)行期間遞增所述一個(gè)或多個(gè)計(jì)數(shù)器字段中的值。
9.如權(quán)利要求8所述的計(jì)算機(jī)程序產(chǎn)品,其中用于在指令執(zhí)行期間遞增所述一個(gè)或多個(gè)計(jì)數(shù)器字段中的值的第四指令包括用于確定是否發(fā)生了與存儲(chǔ)在所述一個(gè)或多個(gè)性能指示符字段中的性能指示符相關(guān)聯(lián)的事件的指令;以及用于如果發(fā)生了所述事件、則遞增所述一個(gè)或多個(gè)計(jì)數(shù)器字段中對(duì)應(yīng)計(jì)數(shù)器字段中的值的指令。
10.如權(quán)利要求8所述的計(jì)算機(jī)程序產(chǎn)品,其中所述事件是高速緩沖存儲(chǔ)器未中。
11.如權(quán)利要求8所述的計(jì)算機(jī)程序產(chǎn)品,還包括第五指令,用于與所述一個(gè)或多個(gè)性能指示符字段和所述一個(gè)或多個(gè)計(jì)數(shù)器字段相關(guān)聯(lián)地在頁表的一個(gè)或多個(gè)閾值字段中存儲(chǔ)一個(gè)或多個(gè)閾值。
12.如權(quán)利要求11所述的計(jì)算機(jī)程序產(chǎn)品,還包括第六指令,用于當(dāng)發(fā)生事件時(shí),將所述一個(gè)或多個(gè)計(jì)數(shù)器字段中的一個(gè)或多個(gè)值與所述一個(gè)或多個(gè)閾值字段中的閾值進(jìn)行比較;以及第七指令,用于如果存在所述一個(gè)或多個(gè)計(jì)數(shù)器字段中的所述一個(gè)或多個(gè)值與所述閾值之間的預(yù)定關(guān)系,則產(chǎn)生中斷。
13.如權(quán)利要求8所述的計(jì)算機(jī)程序產(chǎn)品,還包括第五指令,用于接收對(duì)代碼部分或數(shù)據(jù)部分的訪問請(qǐng)求,其中所述訪問請(qǐng)求包括代碼部分或數(shù)據(jù)部分的虛擬地址的標(biāo)識(shí)符;第六指令,用于將所述虛擬地址轉(zhuǎn)換成代碼部分或數(shù)據(jù)部分在存儲(chǔ)裝置中的存儲(chǔ)位置的真實(shí)地址;第七指令,用于通過使用所述真實(shí)地址訪問代碼部分或數(shù)據(jù)部分;以及第八指令,用于在訪問代碼部分或數(shù)據(jù)部分的期間確定是否發(fā)生了事件,其中響應(yīng)于確定在訪問代碼部分或數(shù)據(jù)部分期間發(fā)生了事件,執(zhí)行所述一個(gè)或多個(gè)計(jì)數(shù)器字段中的值的遞增。
14.如權(quán)利要求8所述的計(jì)算機(jī)程序產(chǎn)品,其中用于將計(jì)算機(jī)程序的一條或多條指令與一個(gè)或多個(gè)性能指示符相關(guān)聯(lián)的第一指令包括將所述一個(gè)或多個(gè)性能指示符與頁表中所述一條或多條指令的虛擬和真實(shí)地址相關(guān)聯(lián)。
15.一種用于在數(shù)據(jù)處理系統(tǒng)中執(zhí)行指令的設(shè)備,包括用于將計(jì)算機(jī)程序的一條或多條指令與一個(gè)或多個(gè)性能指示符相關(guān)聯(lián)的裝置;用于在頁表的一個(gè)或多個(gè)性能指示符字段中存儲(chǔ)所述一個(gè)或多個(gè)性能指示符的裝置;用于與所述一個(gè)或多個(gè)性能指示符中的對(duì)應(yīng)性能指示符相關(guān)聯(lián)地為所述一條或多條指令啟動(dòng)所述頁表中的一個(gè)或多個(gè)計(jì)數(shù)器字段的裝置;以及用于根據(jù)在頁表的性能指示符字段中指令是否具有關(guān)聯(lián)性能指示符,在計(jì)算機(jī)程序指令執(zhí)行期間遞增所述一個(gè)或多個(gè)計(jì)數(shù)器字段中的值的裝置。
16.如權(quán)利要求15所述的設(shè)備,其中用于在指令執(zhí)行期間遞增所述一個(gè)或多個(gè)計(jì)數(shù)器字段中的值的裝置包括用于確定是否發(fā)生了與存儲(chǔ)在所述一個(gè)或多個(gè)性能指示符字段中的性能指示符相關(guān)聯(lián)的事件的裝置;以及用于如果發(fā)生了所述事件則遞增所述一個(gè)或多個(gè)計(jì)數(shù)器字段中對(duì)應(yīng)計(jì)數(shù)器字段中的值的裝置。
17.如權(quán)利要求15所述的設(shè)備,其中所述事件是高速緩沖存儲(chǔ)器未中。
18.如權(quán)利要求15所述的設(shè)備,還包括用于與所述一個(gè)或多個(gè)性能指示符字段和所述一個(gè)或多個(gè)計(jì)數(shù)器字段相關(guān)聯(lián)地在頁表的一個(gè)或多個(gè)閾值字段中存儲(chǔ)一個(gè)或多個(gè)閾值的裝置。
19.如權(quán)利要求18所述的設(shè)備,還包括用于當(dāng)發(fā)生事件時(shí)將所述一個(gè)或多個(gè)計(jì)數(shù)器字段中的一個(gè)或多個(gè)值與所述一個(gè)或多個(gè)閾值字段中的閾值進(jìn)行比較的裝置;以及用于如果存在所述一個(gè)或多個(gè)計(jì)數(shù)器字段中的所述一個(gè)或多個(gè)值與所述閾值之間的預(yù)定關(guān)系則產(chǎn)生中斷的裝置。
20.如權(quán)利要求15所述的設(shè)備,還包括用于接收對(duì)代碼部分或數(shù)據(jù)部分的訪問請(qǐng)求的裝置,其中所述訪問請(qǐng)求包括代碼部分或數(shù)據(jù)部分的虛擬地址的標(biāo)識(shí)符;用于將所述虛擬地址轉(zhuǎn)換成代碼部分或數(shù)據(jù)部分在存儲(chǔ)裝置中的存儲(chǔ)位置的真實(shí)地址的裝置;用于通過使用所述真實(shí)地址訪問代碼部分或數(shù)據(jù)部分的裝置;以及用于在訪問代碼部分或數(shù)據(jù)部分的期間確定是否發(fā)生了事件的裝置,其中響應(yīng)于確定在訪問代碼部分或數(shù)據(jù)部分期間發(fā)生了事件,執(zhí)行所述一個(gè)或多個(gè)計(jì)數(shù)器字段中的值的遞增。
全文摘要
提供了一種用于測量與指令執(zhí)行相關(guān)聯(lián)的事件的數(shù)據(jù)處理系統(tǒng)中的方法和設(shè)備。在數(shù)據(jù)處理系統(tǒng)中的處理器處接收指令。如果選定指示符與該指令相關(guān)聯(lián),則使得能夠?qū)εc該指令的執(zhí)行相關(guān)聯(lián)的每個(gè)事件進(jìn)行計(jì)數(shù)。在一些實(shí)施例中,性能指示符、計(jì)數(shù)器、閾值和其它性能監(jiān)測結(jié)構(gòu)可以存儲(chǔ)在用來將虛擬地址轉(zhuǎn)換成物理存儲(chǔ)地址的頁表中。標(biāo)準(zhǔn)頁表以用于存儲(chǔ)性能監(jiān)測結(jié)構(gòu)的附加字段擴(kuò)增。當(dāng)發(fā)生需要訪問物理存儲(chǔ)的事件時(shí),可以由性能監(jiān)測應(yīng)用程序設(shè)置這些結(jié)構(gòu),并且可以對(duì)其進(jìn)行查詢和修改。
文檔編號(hào)G06F12/10GK1641607SQ200510004619
公開日2005年7月20日 申請(qǐng)日期2005年1月14日 優(yōu)先權(quán)日2004年1月14日
發(fā)明者弗蘭克·E·萊文, 克里斯托弗·M·理查森, 愛德華·J·西爾哈 申請(qǐng)人:國際商業(yè)機(jī)器公司