亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

用于自主硬件輔助的線程棧跟蹤的裝置與方法

文檔序號(hào):6426087閱讀:125來(lái)源:國(guó)知局
專利名稱:用于自主硬件輔助的線程棧跟蹤的裝置與方法
技術(shù)領(lǐng)域
本發(fā)明總的涉及一種改進(jìn)的數(shù)據(jù)處理系統(tǒng)。具體地講,本發(fā)明提供了一種用于獲取數(shù)據(jù)處理系統(tǒng)中性能數(shù)據(jù)的方法與裝置。更具體地講,本發(fā)明提供了一種在獲取關(guān)于線程棧的性能數(shù)據(jù)的過(guò)程中用于軟件工具的硬件輔助的方法與裝置。
背景技術(shù)
在分析和提高數(shù)據(jù)處理系統(tǒng)和執(zhí)行于該數(shù)據(jù)處理系統(tǒng)中的應(yīng)用的性能的過(guò)程中,了解數(shù)據(jù)處理系統(tǒng)中哪些軟件模塊正在使用系統(tǒng)資源將是有益的。數(shù)據(jù)處理系統(tǒng)的有效的管理和提高,需要了解各種系統(tǒng)資源是如何被使用的以及何時(shí)被使用的。性能工具用于監(jiān)視和檢查數(shù)據(jù)處理系統(tǒng),以確定各種軟件應(yīng)用正執(zhí)行于數(shù)據(jù)處理系統(tǒng)中時(shí)資源的消耗情況。例如,性能工具可以識(shí)別數(shù)據(jù)處理系統(tǒng)中最頻繁執(zhí)行的模塊和指令,或可以識(shí)別那些分配了最大量存儲(chǔ)器或進(jìn)行了最多I/O(輸入/輸出)請(qǐng)求的模塊??梢园延布阅芄ぞ呓ㄔ煊谠撓到y(tǒng)中,或者晚些時(shí)候?qū)⑵涮砑拥皆撓到y(tǒng)中。
一種已知的軟件性能工具是追蹤工具。追蹤工具可以使用一種以上的技術(shù),以提供指示一個(gè)正在執(zhí)行程序的執(zhí)行流程的追蹤信息。一種技術(shù),即所謂的基于事件的特征測(cè)試(profiling)技術(shù),通過(guò)在某些事件發(fā)生時(shí)對(duì)它們加以登記,以保持對(duì)指令的特定序列的跟蹤。例如,追蹤工具可以登記每次進(jìn)入到模塊、子程序、方法、功能、或系統(tǒng)部件,或者每次從它們之中退出。或者,追蹤工具也可以針對(duì)每一存儲(chǔ)器分配請(qǐng)求來(lái)登記請(qǐng)求者和所分配的存儲(chǔ)器的數(shù)量。通常,為每一這樣的事件制作一個(gè)加有時(shí)間標(biāo)記的記錄。也把類似于進(jìn)入-退出記錄的相應(yīng)的記錄對(duì)用于追蹤任意代碼段的執(zhí)行、啟動(dòng)和完成I/O或數(shù)據(jù)傳輸、以及許多其它所關(guān)注的事件。
為了改進(jìn)不同系列計(jì)算機(jī)所生成的代碼的性能,常常需要判斷在執(zhí)行代碼的過(guò)程中,處理器正在把時(shí)間花費(fèi)在什么地方,在計(jì)算機(jī)處理技術(shù)領(lǐng)域,這樣的努力通常作為定位“熱點(diǎn)”而被人所知。理想的情況是,人們希望在代碼級(jí)的指令與/或源行上孤立這樣的熱點(diǎn),以把注意力集中在從對(duì)代碼的改進(jìn)中可能受益最大的區(qū)域。
另一種追蹤技術(shù)涉及對(duì)程序的執(zhí)行流程周期性地取樣,以識(shí)別程序中的某些位置,即在這些位置,程序似乎要花費(fèi)大量的時(shí)間。這一技術(shù)基于這樣的概念按有規(guī)律的間隔周期性地中斷應(yīng)用或數(shù)據(jù)處理系統(tǒng)的執(zhí)行,即所謂的基于樣本的特征測(cè)試。在每一個(gè)中斷處,在預(yù)先確定的時(shí)間長(zhǎng)度,或按預(yù)先確定的所關(guān)注事件的數(shù)目,記錄信息。例如,在間隔期間,可以記錄當(dāng)前正在執(zhí)行的線程的程序計(jì)數(shù)器,其中線程是正在進(jìn)行特征測(cè)試的較大程序的可執(zhí)行部分。可以在后期處理期間針對(duì)數(shù)據(jù)處理系統(tǒng)的加載映射和符號(hào)表信息解析這些值,而且根據(jù)這一分析,可以獲得“時(shí)間花于何處”的特征。
創(chuàng)建工具,如那些用于發(fā)現(xiàn)與特定情況或問(wèn)題相關(guān)的答案的工具,由于軟件工具本身對(duì)所測(cè)系統(tǒng)的影響,可能需要付出很大的努力,而且很難加以校準(zhǔn)。本發(fā)明認(rèn)識(shí)到,用于工具開(kāi)發(fā)和問(wèn)題分析的硬件輔助,可以顯著緩解開(kāi)發(fā)軟件性能工具所需的努力。另外,隨著處理器密度的增大,硬件輔助可以被包括在內(nèi),以提供另外的調(diào)試和分析特性。
因此,提供一種用于向分析數(shù)據(jù)處理系統(tǒng)的性能的性能工具提供硬件輔助的改進(jìn)的方法、裝置、以及計(jì)算機(jī)指令,將是有益的。

發(fā)明內(nèi)容
本發(fā)明提供了一種用于在追蹤計(jì)算機(jī)程序期間提供一種用于跟蹤線程棧的自主機(jī)制的方法與裝置。本發(fā)明包括允許處理器自主地為每一存儲(chǔ)了調(diào)用棧的線程保持工作區(qū)的硬件輔助機(jī)制。
根據(jù)本發(fā)明,當(dāng)將對(duì)計(jì)算機(jī)程序進(jìn)行追蹤時(shí),追蹤軟件,即性能監(jiān)視應(yīng)用,通知該計(jì)算機(jī)系統(tǒng)的處理器開(kāi)始在線程工作區(qū)中保持線程調(diào)用棧信息。例如,可以這樣實(shí)現(xiàn)這一點(diǎn)通過(guò)在該處理器的控制位寄存器中設(shè)置控制位,以指示將進(jìn)行線程跟蹤。
操作系統(tǒng)或追蹤應(yīng)用的一部分,分配數(shù)據(jù)區(qū),以用作存儲(chǔ)線程調(diào)用棧信息的線程工作區(qū),其中追蹤應(yīng)用為操作系統(tǒng)的核心擴(kuò)展或設(shè)備驅(qū)動(dòng)器,以下將其簡(jiǎn)稱為該計(jì)算設(shè)備的操作系統(tǒng)。處理器為計(jì)算機(jī)程序執(zhí)行過(guò)程中的每一個(gè)線程保持工作區(qū),該工作區(qū)的大小是基于核心擴(kuò)展操作系統(tǒng)所通知的大小加以確定和加以分配的。工作區(qū)由存儲(chǔ)在處理器的控制寄存器中的地址和長(zhǎng)度信息加以指定。從而,第一控制寄存器存儲(chǔ)開(kāi)始存儲(chǔ)器地址作為線程的線程工作區(qū)的開(kāi)始,第二控制寄存器存儲(chǔ)該工作區(qū)的長(zhǎng)度或大小,以及第三控制寄存器指示該棧的頂。
根據(jù)需要,例如操作系統(tǒng)的指令,通過(guò)針對(duì)線程擴(kuò)展線程工作區(qū)和重新在線程控制寄存器中設(shè)置其長(zhǎng)度,可以增加線程的工作區(qū)的大小。當(dāng)存儲(chǔ)在線程工作區(qū)中的線程跟蹤信息的數(shù)量將超過(guò)線程工作區(qū)時(shí),處理器可以向操作系統(tǒng)發(fā)送中斷以擴(kuò)展線程工作區(qū)。然后,操作系統(tǒng)可以分配更大范圍的存儲(chǔ)器地址,來(lái)存儲(chǔ)線程跟蹤信息、重新設(shè)置存儲(chǔ)在控制寄存器中的存儲(chǔ)器地址和長(zhǎng)度、并把已存儲(chǔ)的線程跟蹤信息拷貝到新的線程工作區(qū)。
處理器包含微代碼,當(dāng)設(shè)置了控制位時(shí),這一微代碼用于使處理器自動(dòng)地把線程跟蹤信息存儲(chǔ)在由該處理器的控制寄存器所指定的工作區(qū)中。當(dāng)處理器執(zhí)行調(diào)用指令時(shí),自動(dòng)地把與所調(diào)用的方法/例程相關(guān)的信息存儲(chǔ)在適當(dāng)?shù)木€程工作區(qū)中,即把方法/例程信息推入調(diào)用棧,并指示具體方法/例程的入口。當(dāng)處理器執(zhí)行返回指令時(shí),處理器自動(dòng)地從線程工作區(qū)中的調(diào)用棧刪除該方法/例程信息,即通過(guò)調(diào)整指向棧頂?shù)目刂萍拇嫫鳎瑥脑撜{(diào)用棧中彈出該方法/例程調(diào)用棧入口。
然而,在替代的實(shí)施例中,不是從調(diào)用棧中彈出方法/例程入口,而是調(diào)用棧中的各入口可以或者指示方法/例程的入口,也可以或者指示方法/例程的出口。在這樣的替代的實(shí)施例中,由于進(jìn)入方法/例程的入口或退出該方法/例程的出口具有多個(gè)單個(gè)的入口,而且這些單個(gè)的入口指示了它們是否與一個(gè)入口或一個(gè)出口相關(guān),所以無(wú)論是否要添加該入口,都要添加該調(diào)用棧的入口。
按照這一方式,線程工作區(qū)包括一些硬件生成的線程跟蹤信息,軟件應(yīng)用可以使用這些線程跟蹤信息以獲得用于分析計(jì)算機(jī)程序的執(zhí)行的追蹤數(shù)據(jù)。例如,一個(gè)追蹤應(yīng)用可以周期性地“醒來(lái)”,并通過(guò)觀察線程工作區(qū)來(lái)獲取追蹤數(shù)據(jù)的快照,以獲取關(guān)于計(jì)算機(jī)程序的執(zhí)行的當(dāng)前狀態(tài)的信息。追蹤應(yīng)用可以觀察所有的當(dāng)前的線程工作區(qū)、僅針對(duì)當(dāng)前執(zhí)行的線程的工作區(qū)、處于掛起(suspended)狀態(tài)的線程的工作區(qū)等。
本發(fā)明利用了這樣一個(gè)事實(shí)根據(jù)處理器所執(zhí)行的指令,該處理器知道其何時(shí)進(jìn)入和退出方法/例程。因此,不是讓軟件程序監(jiān)視計(jì)算機(jī)程序的執(zhí)行,來(lái)確定何時(shí)進(jìn)入/退出方法/例程,以及向軟件保持的調(diào)用棧寫(xiě)入信息,而是本發(fā)明能夠使處理器硬件自動(dòng)地把必要的信息寫(xiě)入線程工作區(qū)。在這一方式下,獨(dú)立于軟件追蹤算法進(jìn)行線程棧的保持。結(jié)果,用于跟蹤計(jì)算機(jī)程序的執(zhí)行的軟件中的變化,不影響用于保持該線程調(diào)用棧的機(jī)制。
在以下對(duì)優(yōu)選實(shí)施例的詳細(xì)描述中,將描述本發(fā)明的這些和其它特性及優(yōu)點(diǎn),通過(guò)這一描述,這一技術(shù)領(lǐng)域中的普通熟練技術(shù)人員將會(huì)明顯體會(huì)到本發(fā)明這些和其它特性及優(yōu)點(diǎn)。


所述權(quán)利要求中闡述了被視為本發(fā)明特征的新穎特性。然而,參照以下對(duì)一個(gè)說(shuō)明性實(shí)施例的詳細(xì)描述并結(jié)合附圖閱讀時(shí),將可最全面地了解這一發(fā)明本身、使用本發(fā)明的優(yōu)選模式、以及本發(fā)明的進(jìn)一步的目的和優(yōu)點(diǎn),在這些附圖中圖1是其中可以實(shí)施本發(fā)明的分布式數(shù)據(jù)處理系統(tǒng)的示例性圖示表示;圖2A是其中可以實(shí)施本發(fā)明的一些方面的服務(wù)器數(shù)據(jù)處理系統(tǒng)的示例性框圖;圖2B是其中可以實(shí)施本發(fā)明的一些方面的獨(dú)立的或客戶機(jī)數(shù)據(jù)處理系統(tǒng)的示例性框圖;圖3是示例性框圖,描述了用于對(duì)數(shù)據(jù)處理系統(tǒng)中的處理過(guò)程進(jìn)行性能追蹤的部件;圖4是一個(gè)示例圖,描述了對(duì)運(yùn)行在系統(tǒng)上的工作負(fù)載進(jìn)行性能追蹤的各個(gè)階段;圖5說(shuō)明了根據(jù)本發(fā)明的一個(gè)示例性實(shí)施例的主要操作部件;圖6說(shuō)明了根據(jù)本發(fā)明的一個(gè)示例性實(shí)施例,處理器中控制寄存器的使用;圖7說(shuō)明了根據(jù)本發(fā)明的一個(gè)示例性實(shí)施例的數(shù)據(jù)流程;圖8是流程圖,描述了根據(jù)本發(fā)明的示例性實(shí)施例,用于啟動(dòng)硬件線程跟蹤的示例性操作;圖9是流程圖,描述了根據(jù)本發(fā)明的示例性實(shí)施例,用于向線程工作區(qū)寫(xiě)線程跟蹤信息的示例性操作;以及圖10是流程圖,描述了根據(jù)本發(fā)明的示例性實(shí)施例,用于處理存儲(chǔ)在線程工作區(qū)中的線程跟蹤信息的示例性操作。
優(yōu)選實(shí)施例本發(fā)明提供了一種硬件輔助機(jī)制,用于自動(dòng)地并且獨(dú)立于用于追蹤計(jì)算機(jī)程序的執(zhí)行的追蹤算法地保持線程跟蹤信息??梢栽讵?dú)立的計(jì)算設(shè)備中或在基于網(wǎng)絡(luò)的計(jì)算設(shè)備中實(shí)施本發(fā)明。例如,本發(fā)明可以實(shí)施于個(gè)人計(jì)算機(jī)、網(wǎng)絡(luò)計(jì)算機(jī)、服務(wù)器等。因此,下面圖1~2B中的圖是為了向以下所描述的操作提供環(huán)境。
現(xiàn)在,參照這些圖,特別是參照?qǐng)D1,圖1描述的是其中可以實(shí)施本發(fā)明的分布式數(shù)據(jù)處理系統(tǒng)的圖形表示。分布式數(shù)據(jù)處理系統(tǒng)100是其中可以實(shí)施本發(fā)明的計(jì)算機(jī)網(wǎng)絡(luò)。分布式數(shù)據(jù)處理系統(tǒng)100包括網(wǎng)絡(luò)102,在分布式數(shù)據(jù)處理系統(tǒng)100中,網(wǎng)絡(luò)102是用于在連接在一起的各種設(shè)備和計(jì)算機(jī)之間提供通信鏈路的媒介。網(wǎng)絡(luò)102可以包括永久性連接,例如電線或光纖纜線,或者通過(guò)電話連接所實(shí)現(xiàn)的臨時(shí)連接。
在所描述的例子中,服務(wù)器104以及存儲(chǔ)器單元106連接于網(wǎng)絡(luò)102。另外,也把客戶機(jī)108、110以及112連接于網(wǎng)絡(luò)102。例如,這些客戶機(jī)108、110以及112可以是個(gè)人計(jì)算機(jī)或網(wǎng)絡(luò)計(jì)算機(jī)。出于這種應(yīng)用的目的,網(wǎng)絡(luò)計(jì)算機(jī)可以是任何耦合于網(wǎng)絡(luò)的計(jì)算機(jī),其從耦合于該網(wǎng)絡(luò)的另一計(jì)算機(jī)接收程序或其它應(yīng)用。在所描述的這一例子中,服務(wù)器104向客戶機(jī)108~112提供數(shù)據(jù),例如引導(dǎo)文件、操作系統(tǒng)映像(image)以及應(yīng)用程序。客戶機(jī)108、110以及112是針對(duì)服務(wù)器104的客戶機(jī)。分布式數(shù)據(jù)處理系統(tǒng)100可以包括另外的服務(wù)器、客戶機(jī)、以及其它未示出的設(shè)備。在所描述的這一例子中,分布式數(shù)據(jù)處理系統(tǒng)100是具有網(wǎng)絡(luò)的102的因特網(wǎng),代表了世界范圍網(wǎng)絡(luò)與網(wǎng)關(guān)的集合,這些網(wǎng)絡(luò)與網(wǎng)關(guān)使用TCP/IP協(xié)議組相互通信。因特網(wǎng)的核心處是主節(jié)點(diǎn)或主計(jì)算機(jī)之間的高速數(shù)據(jù)通信線路的主干網(wǎng)(backbone),由成千上萬(wàn)的路由數(shù)據(jù)和消息的商業(yè)、政府、教育和其它計(jì)算機(jī)系統(tǒng)組成。當(dāng)然,分布式數(shù)據(jù)處理系統(tǒng)100也可以被實(shí)施為許多不同類型的網(wǎng)絡(luò),例如內(nèi)聯(lián)網(wǎng)(Intranet)或局域網(wǎng)。
圖1作為示例,并不是對(duì)于本發(fā)明各處理過(guò)程的體系結(jié)構(gòu)的限制。這一技術(shù)領(lǐng)域中的普通熟練技術(shù)人員將很容易意識(shí)到可以使用所描述的這一分布式數(shù)據(jù)處理系統(tǒng)或其修改形式實(shí)施本發(fā)明。
現(xiàn)在,參照?qǐng)D2A,根據(jù)本發(fā)明,描述了數(shù)據(jù)處理系統(tǒng)的示例性框圖,該數(shù)據(jù)處理系統(tǒng)可以被實(shí)施為服務(wù)器,例如圖1中的服務(wù)器104。數(shù)據(jù)處理系統(tǒng)200可以是包括多個(gè)連接于系統(tǒng)總線206的處理器202和204的對(duì)稱多處理器(SMP)系統(tǒng)?;蛘?,也可以使用單處理器系統(tǒng)。連接于系統(tǒng)總線206的還有存儲(chǔ)器控制器/高速緩沖存儲(chǔ)器208,存儲(chǔ)器控制器/高速緩沖存儲(chǔ)器208向本地存儲(chǔ)器209提供接口。I/O總線橋210連接于系統(tǒng)總線206,并向I/O總線212提供接口??梢园此枋龅陌汛鎯?chǔ)器控制器/高速緩沖存儲(chǔ)器208與總線橋210集成在一起。
連接于I/O總線212的外圍部件互連(PCI)總線橋214向PCI局部總線216提供接口??梢园颜{(diào)制解調(diào)器218連接于PCI局部總線216。典型的PCI總線的實(shí)施將支持4個(gè)PCI擴(kuò)展槽或添加連接器??梢酝ㄟ^(guò)經(jīng)由添加板連接于PCI局部總線216的調(diào)制解調(diào)器218和網(wǎng)絡(luò)適配器220,向圖1中的網(wǎng)絡(luò)計(jì)算機(jī)108~112提供通信鏈路。
附加的PCI總線橋222和224為附加的PCI總線226和228提供了接口,通過(guò)這些接口,可以支持附加的調(diào)制解調(diào)器或網(wǎng)絡(luò)適配器。在這一方式下,服務(wù)器200允許與多個(gè)網(wǎng)絡(luò)計(jì)算機(jī)的連接。也可以把存儲(chǔ)器映射的圖形適配器230和硬盤(pán)232直接或間接地連接于所描述的I/O總線212。
這一技術(shù)領(lǐng)域中的普通熟練技術(shù)人員將會(huì)意識(shí)到圖2A中所描述的硬件是可變的。例如,其它的外圍設(shè)備,例如光盤(pán)驅(qū)動(dòng)器等,也可用于向所描述硬件添加或取代所描述硬件。所描述的這一例子,不意味著對(duì)本發(fā)明體系結(jié)構(gòu)上的限制。
例如,如圖2A中所描述的數(shù)據(jù)處理系統(tǒng)可以是IBM RISC/System 6000(國(guó)際商用機(jī)器公司 精簡(jiǎn)指令集計(jì)算機(jī)/系統(tǒng)6000)系統(tǒng),這是位于紐約Armonk(阿爾蒙克)的國(guó)際商用機(jī)器公司(International Business Machines公司)的產(chǎn)品,運(yùn)行在Advanced Interactive Executive(AIX,高級(jí)交互執(zhí)行體)操作系統(tǒng)上。
現(xiàn)在參照?qǐng)D2B,圖2B是框圖,說(shuō)明了其中可以實(shí)現(xiàn)本發(fā)明的數(shù)據(jù)處理系統(tǒng)。數(shù)據(jù)處理系統(tǒng)250可以是獨(dú)立的計(jì)算設(shè)備,或者也可以是客戶計(jì)算機(jī)的一個(gè)例子,例如圖1中所示的客戶計(jì)算機(jī)。數(shù)據(jù)處理系統(tǒng)250使用了一個(gè)外圍部件互連(PCI)局部總線體系結(jié)構(gòu)。盡管所描述的例子使用PCI總線,然而也可以使用其它的總線體系結(jié)構(gòu),例如Micro Channel(微通道)和ISA(工業(yè)標(biāo)準(zhǔn)結(jié)構(gòu))。通過(guò)PCI橋258把處理器252和主存儲(chǔ)器254連接于PCI局部總線256。PCI橋258也可以包括用于處理器252的集成的存儲(chǔ)器控制器和高速緩沖存儲(chǔ)器。也可以通過(guò)直接部件互連或通過(guò)添加板,向PCI局部總線256進(jìn)行另外的連接。在所描述的這一例子中,通過(guò)直接部件連接把局域網(wǎng)(LAN)適配器260、SCSI(小型計(jì)算機(jī)系統(tǒng)接口)主機(jī)總線適配器262、以及擴(kuò)展總線接口264連接于PCI局部總線256。相比之下,通過(guò)插入擴(kuò)展槽中的添加板,把音頻適配器266、圖形適配器268、以及音頻/視頻適配器(A/V)269連接于PCI局部總線266。擴(kuò)展總線接口264為鍵盤(pán)和鼠標(biāo)器適配器270、調(diào)制解調(diào)器272以及附加存儲(chǔ)器274提供了連接。在所描述的這一例子中,SCSI主機(jī)總線適配器262為硬盤(pán)驅(qū)動(dòng)器276、磁帶驅(qū)動(dòng)器278、以及CD-ROM(光盤(pán)-只讀存儲(chǔ)器)280提供了連接。典型的PCI局部總線的實(shí)施將支持3或4個(gè)PCI擴(kuò)展槽或添加連接器。
在圖2B中,操作系統(tǒng)運(yùn)行在處理器252上,并用于協(xié)調(diào)數(shù)據(jù)處理系統(tǒng)250中的各個(gè)部件,以及提供對(duì)這些部件的控制。這一操作系統(tǒng)可以是市場(chǎng)上可見(jiàn)的操作系統(tǒng),例如JavaOS For BusinessTM(用于商務(wù)的Java操作系統(tǒng))或OS/2TM(操作系統(tǒng)/2),可以從國(guó)際商用機(jī)器公司獲得這兩種操作系統(tǒng)。從網(wǎng)絡(luò)上的服務(wù)器把JavaOS加載到網(wǎng)絡(luò)客戶機(jī)上,而且JavaOS還支持Java程序和小應(yīng)用程序。如下文所描述的,幾個(gè)有利于通過(guò)棧展開(kāi)(unwind)進(jìn)行追蹤的JavaOS特點(diǎn)是,JavaOS不支持分頁(yè)(paging)或虛擬存儲(chǔ)器。面向?qū)ο蟮木幊滔到y(tǒng),例如Java,可以與該操作系統(tǒng)相結(jié)合而運(yùn)行,并且可以從在數(shù)據(jù)處理系統(tǒng)250上執(zhí)行的Java程序或應(yīng)用提供對(duì)該操作系統(tǒng)的調(diào)用??梢园言摬僮飨到y(tǒng)、面向?qū)ο蟮牟僮飨到y(tǒng)、以及應(yīng)用或程序的指令加載到存儲(chǔ)器設(shè)備中,例如硬盤(pán)驅(qū)動(dòng)器276中,也可以將它們加載到主存儲(chǔ)器254中,以由處理器252加以執(zhí)行。當(dāng)把數(shù)據(jù)處理系統(tǒng)250用作網(wǎng)絡(luò)客戶機(jī)時(shí),通常不具有硬盤(pán)驅(qū)動(dòng)器,而且存儲(chǔ)器也受到限制。
這一技術(shù)領(lǐng)域中的普通熟練技術(shù)人員將會(huì)意識(shí)到,圖2B中的硬件可以隨具體實(shí)施而加以改變。例如,其它外圍設(shè)備,如光盤(pán)驅(qū)動(dòng)器等,可以用于增加到或代替圖2B中所描述的硬件。所描述的這一例子,并不意味著對(duì)本發(fā)明體系結(jié)構(gòu)的限制。例如,本發(fā)明的各處理過(guò)程,也可應(yīng)用于多處理器數(shù)據(jù)處理系統(tǒng)。
本發(fā)明提供了一種自動(dòng)存儲(chǔ)硬件生成的線程跟蹤信息以供其后由追蹤應(yīng)用和后處理器應(yīng)用使用的方法和裝置,其中自動(dòng)存儲(chǔ)硬件生成的線程跟蹤信息指的是不需要跟蹤軟件應(yīng)用的干預(yù)來(lái)指令線程跟蹤信息的存儲(chǔ)。在一個(gè)示例性實(shí)施例中,操作系統(tǒng)為線程跟蹤信息分配工作區(qū)??梢愿鶕?jù)追蹤應(yīng)用提供工作區(qū)的大小??梢园炎粉檻?yīng)用設(shè)置在與處理器所在計(jì)算設(shè)備相同的計(jì)算設(shè)備上,或者可以設(shè)置為遠(yuǎn)離處理器所在的計(jì)算設(shè)備,所述處理器將自動(dòng)生成線程跟蹤信息。
將把本發(fā)明的硬件輔助機(jī)制用于保持跟蹤應(yīng)用或后處理應(yīng)用所使用的信息,以獲得追蹤計(jì)算機(jī)程序的執(zhí)行的性能信息。因此,將給出對(duì)追蹤應(yīng)用和后處理應(yīng)用的簡(jiǎn)要的描述。
現(xiàn)在參照?qǐng)D3。圖3是框圖,描述了用于對(duì)數(shù)據(jù)處理系統(tǒng)中的處理過(guò)程進(jìn)行性能追蹤的部件。把追蹤程序300用于特征測(cè)試處理過(guò)程302。追蹤程序300可以用于根據(jù)在異常分支(hook)執(zhí)行時(shí)記錄數(shù)據(jù),其中異常分支是例程或程序中其它例程可以被連接的特定位置上的一段特殊的代碼。為了進(jìn)行調(diào)試、性能分析、或改善功能,通常插入追蹤異常分支。使用這些追蹤異常分支把追蹤數(shù)據(jù)發(fā)送至追蹤程序300,追蹤程序300把追蹤數(shù)據(jù)存儲(chǔ)在緩沖器304中。接下來(lái),可以把緩沖器304中的追蹤數(shù)據(jù)存儲(chǔ)在一個(gè)文件中用于后處理,或者也可以實(shí)時(shí)地處理該追蹤數(shù)據(jù)。然后,如以下更全面加以描述的,由后處理器306處理緩沖器304或追蹤文件中的追蹤數(shù)據(jù),以生成針對(duì)所加載的模塊的符號(hào)數(shù)據(jù)的索引數(shù)據(jù)庫(kù)。
在非Java環(huán)境中,可以把追蹤異常分支用于輔助對(duì)這樣的模塊的識(shí)別,即這些模塊在被追蹤的應(yīng)用中使用。若使用Java操作系統(tǒng),則可以把追蹤異常分支用于輔助對(duì)所加載的類和方法的識(shí)別。
另外,由于可以加載和卸載類和模塊,所以也可以通過(guò)使用追蹤數(shù)據(jù)識(shí)別這些變化。這特別涉及“網(wǎng)絡(luò)客戶機(jī)”數(shù)據(jù)處理系統(tǒng),例如那些可以在JavaOS操作系統(tǒng)下操作的數(shù)據(jù)處理系統(tǒng),因?yàn)轭惡瓦\(yùn)行時(shí)編譯執(zhí)行的(jitted)方法可能因有限的存儲(chǔ)器并因作為網(wǎng)絡(luò)客戶機(jī)而被更頻繁地加載和卸載。注意,在嵌入式應(yīng)用環(huán)境中也涉及類或模塊的加載和卸載信息,在嵌入式應(yīng)用環(huán)境中,通常存儲(chǔ)器會(huì)受到限制。
現(xiàn)在參照?qǐng)D4,圖4描述了對(duì)運(yùn)行在一個(gè)系統(tǒng)上的工作負(fù)載進(jìn)行性能追蹤的各個(gè)階段。由于受到存儲(chǔ)器的限制,所以為了對(duì)具體程序進(jìn)行特征測(cè)試,所生成的追蹤輸出的長(zhǎng)度及詳細(xì)度,可以僅與分析者所要求長(zhǎng)度和詳細(xì)度一樣。
初始化階段400用于捕獲追蹤啟始時(shí)的客戶機(jī)的狀態(tài)。這一追蹤初始化數(shù)據(jù)包括識(shí)別所有現(xiàn)存線程的追蹤記錄、所有所加載的類(模塊)、以及所有針對(duì)所加載的類(模塊)的方法(段(section))。寫(xiě)入來(lái)自于從異常分支所捕獲的追蹤數(shù)據(jù)的記錄,以指示線程轉(zhuǎn)換、中斷、以及類(模塊)和“運(yùn)行時(shí)編譯執(zhí)行”方法(段)的加載與卸載。
任何被加載的類(模塊)都擁有指示類(模塊)及其方法(段)的名字的追蹤記錄。在所描述的這一例子中,把4個(gè)字節(jié)的ID(識(shí)別)用作線程、類、以及方法的標(biāo)識(shí)符。把這些ID與已經(jīng)輸出于追蹤記錄中的名字相關(guān)聯(lián)。寫(xiě)追蹤記錄,以指示何時(shí)已經(jīng)寫(xiě)完所有的啟動(dòng)信息。
接下來(lái),在特征測(cè)試階段402期間,把追蹤記錄寫(xiě)入追蹤緩沖器或追蹤文件。在本發(fā)明中,追蹤緩沖器可以具有多種類型的記錄的組合,例如,那些可能因響應(yīng)特定類型的事件,例如方法進(jìn)入或方法退出,而執(zhí)行的追蹤異常分支所產(chǎn)生的記錄,以及那些可能因響應(yīng)計(jì)時(shí)器中斷,例如棧展開(kāi),而執(zhí)行的棧查看(walking)功能所產(chǎn)生的記錄,也叫做調(diào)用棧記錄。
例如,如果特征測(cè)試工具的用戶已請(qǐng)求了基于樣本的特征測(cè)試信息,則在特征測(cè)試階段期間可能出現(xiàn)下列操作。每當(dāng)一個(gè)特定類型的計(jì)時(shí)器中斷出現(xiàn)時(shí),寫(xiě)一個(gè)追蹤記錄,這一追蹤記錄指示系統(tǒng)程序計(jì)數(shù)器。這一系統(tǒng)程序計(jì)數(shù)器可用于識(shí)別被中斷的例程。在所描述的這一例子中,把計(jì)時(shí)器中斷用于啟動(dòng)對(duì)追蹤數(shù)據(jù)的采集。當(dāng)然,也可以采用除計(jì)時(shí)器中斷之外的其它類型的中斷。例如,可以使用基于編程性能監(jiān)視事件或其它類型周期性事件的中斷。
在后處理階段404中,對(duì)跟蹤緩沖器中所收集的數(shù)據(jù)進(jìn)行處理,并將它們發(fā)送到一個(gè)跟蹤文件,以進(jìn)行后處理。在一個(gè)配置中,可以將該文件發(fā)送到一個(gè)服務(wù)器,這一服務(wù)器為客戶機(jī)上的各個(gè)過(guò)程確定特征測(cè)試。當(dāng)然,根據(jù)可用資源的情況,也可以在客戶機(jī)上進(jìn)行后處理。
采用本發(fā)明,不必使用異常分支來(lái)把線程跟蹤信息寫(xiě)入追蹤緩沖器,本發(fā)明使用硬件輔助來(lái)自動(dòng)檢測(cè)計(jì)算機(jī)程序的執(zhí)行何時(shí)進(jìn)入和退出方法/例程,以及何時(shí)把線程跟蹤信息寫(xiě)入指定的線程工作區(qū)。因此,本發(fā)明不需要把正在執(zhí)行的計(jì)算機(jī)程序設(shè)置為能夠確保存儲(chǔ)線程跟蹤信息以備以后處理。而且,一旦啟動(dòng),本發(fā)明將獨(dú)立于追蹤應(yīng)用而操作。因此,可以把本發(fā)明隨多個(gè)不同的追蹤應(yīng)用一起使用。
現(xiàn)在參照?qǐng)D5。圖5說(shuō)明了根據(jù)本發(fā)明的一個(gè)示例性實(shí)施例的主要操作部件。采用本發(fā)明,在性能追蹤程序的初始化階段期間,例如在圖4中的初始化階段402中,追蹤程序代碼520可以指令操作系統(tǒng)540關(guān)于將分配給計(jì)算機(jī)程序的線程的工作區(qū)的大小,并且可以在處理器510中設(shè)置控制位,以指示將進(jìn)行的硬件線程跟蹤。然后,操作系統(tǒng)540可以分配一部分系統(tǒng)存儲(chǔ)器530,以用作線程跟蹤信息的工作區(qū)。然后,可以把工作區(qū)的開(kāi)始地址和長(zhǎng)度存儲(chǔ)在處理器510的控制寄存器514中。
當(dāng)在計(jì)算機(jī)程序的執(zhí)行期間啟動(dòng)線程時(shí),操作系統(tǒng)540可以分配其中將存儲(chǔ)線程的調(diào)用棧信息的工作區(qū)532~538,為計(jì)算機(jī)程序中的每一個(gè)現(xiàn)存的線程分配一個(gè)工作區(qū)??梢园汛鎯?chǔ)器的每一部分的開(kāi)始地址和長(zhǎng)度存儲(chǔ)在處理器510的相應(yīng)的控制寄存器514中。另外,也可以把控制寄存器用于識(shí)別被寫(xiě)入入口的最后的工作區(qū)。在這一方式下,可以識(shí)別當(dāng)前活躍的線程工作區(qū)??梢杂妹恳画h(huán)境轉(zhuǎn)換(context switch)來(lái)更新這一控制寄存器中的值。因此,本發(fā)明可以利用多個(gè)工作區(qū),對(duì)每一個(gè)現(xiàn)存的線程使用一個(gè)工作區(qū),來(lái)保持線程跟蹤信息。
使用指令對(duì)微代碼512進(jìn)行編程,以建立工作區(qū)和監(jiān)視指令的執(zhí)行,從而能夠確定如何更新工作區(qū)中的線程跟蹤信息。微代碼512為一個(gè)永久性存儲(chǔ)器,其中裝有計(jì)算機(jī)必須針對(duì)其指令集中的每一指令所執(zhí)行的基本電路操作。微代碼512用作計(jì)算機(jī)的指令和電子層之間的一個(gè)翻譯層。本發(fā)明改進(jìn)了人們所熟悉的微代碼,使其包括了此處的所討論的附加的功能與操作。
因此,操作系統(tǒng)540為每一現(xiàn)存的線程分配一部分存儲(chǔ)器530,用于存儲(chǔ)一或多個(gè)工作區(qū)。這一部分存儲(chǔ)器530的大小等于追蹤應(yīng)用代碼520向操作系統(tǒng)540通告的大小。然后,微代碼512開(kāi)始監(jiān)視處理器510所執(zhí)行的指令,以確定是否產(chǎn)生了新的線程、是否發(fā)生了存儲(chǔ)器溢出、是否執(zhí)行了方法/例程進(jìn)入指令、以及是否執(zhí)行了方法/例程退出指令。
如果產(chǎn)生了新的線程,則可以在系統(tǒng)存儲(chǔ)器530中創(chuàng)建新的工作區(qū),而且可以把環(huán)境轉(zhuǎn)換通知微代碼512,使得可以更新識(shí)別所訪問(wèn)的最后工作區(qū)的寄存器中的值。如果出現(xiàn)存儲(chǔ)器溢出,則可以擴(kuò)展相關(guān)線程的工作區(qū)。如果執(zhí)行了方法/例程進(jìn)入指令,則在適當(dāng)?shù)墓ぷ鲄^(qū)中創(chuàng)建針對(duì)該方法/例程的調(diào)用棧入口,表示方法/例程的進(jìn)入,即把調(diào)用棧入口壓入該調(diào)用棧中。如果執(zhí)行了方法/例程退出指令,則從適當(dāng)?shù)墓ぷ鲄^(qū)中刪除針對(duì)該方法/例程的調(diào)用棧入口,表示方法/例程的退出,即從棧中彈出相應(yīng)于該方法/例程的調(diào)用棧入口?;蛘撸部梢园厌槍?duì)方法/例程的退出的調(diào)用棧入口裝入工作區(qū)的調(diào)用棧,而不是從調(diào)用棧中彈出方法/例程。以下將逐一描述這些操作。
如果在被追蹤的計(jì)算機(jī)程序的執(zhí)行期間產(chǎn)生了一個(gè)新的線程,以及通過(guò)對(duì)處理器510中控制位的設(shè)置,在處理器510中使能了線程跟蹤,則需要一個(gè)新的工作區(qū)以跟蹤線程的執(zhí)行。操作系統(tǒng)540可以根據(jù)環(huán)境轉(zhuǎn)換的通告確定是否已產(chǎn)生了一個(gè)新的線程。與初始化期間工作區(qū)的分配相類似,通過(guò)對(duì)控制寄存器514進(jìn)行設(shè)置,使其指向工作區(qū)的開(kāi)始,并指定系統(tǒng)存儲(chǔ)器530中工作區(qū)的長(zhǎng)度,操作系統(tǒng)540可以為這一新的線程分配一個(gè)新的工作區(qū)。接下來(lái),當(dāng)該新的線程導(dǎo)致一個(gè)事件發(fā)生時(shí),例如導(dǎo)致方法/例程的進(jìn)入或退出時(shí),將把一個(gè)入口寫(xiě)入工作區(qū),或?qū)⑵鋸墓ぷ鲄^(qū)中刪除,用于擁有追蹤應(yīng)用/后處理器所使用的必要信息的新線程。
如果按照處理器510所執(zhí)行的指令是否為一條“調(diào)用”指令來(lái)確定處理器510執(zhí)行了方法/例程進(jìn)入指令,則微代碼512確定是否處理器510中使能了線程跟蹤。即微代碼512確定是否設(shè)置了識(shí)別線程跟蹤將被使能的控制位。如果設(shè)置了這一控制位,并且處理器510執(zhí)行了方法/例程進(jìn)入指令,則微代碼512確定已發(fā)生了要求為相關(guān)的線程在工作區(qū)中創(chuàng)建和存儲(chǔ)調(diào)用棧入口的調(diào)用棧事件。
微代碼512通過(guò)從控制寄存器514檢索地址信息,識(shí)別線程的工作區(qū)的開(kāi)始地址,并判斷工作區(qū)中是否有足夠的空間寫(xiě)入該事件的調(diào)用棧入口??梢酝ㄟ^(guò)把控制寄存器514中所指定的工作區(qū)的長(zhǎng)度與寫(xiě)入工作區(qū)的調(diào)用棧中的最后入口的位置進(jìn)行比較,實(shí)現(xiàn)這一判斷。如果工作區(qū)擁有足夠的剩余存儲(chǔ)空間,則生成該事件的調(diào)用棧入口,并將其存儲(chǔ)在該線程的工作區(qū)中,例如存儲(chǔ)在線程工作區(qū)532。例如,這一調(diào)用棧入口可以包括所調(diào)用的方法/例程的地址。
如果對(duì)于一個(gè)新的調(diào)用棧入口來(lái)說(shuō),線程的工作區(qū),例如線程工作區(qū)532,沒(méi)有足夠的存儲(chǔ)容量,則微代碼512把這一情況識(shí)別為工作區(qū)或存儲(chǔ)器溢出。因此,微代碼512經(jīng)由操作系統(tǒng)540向追蹤應(yīng)用代碼520發(fā)送指示工作區(qū)溢出的中斷。作為響應(yīng),追蹤應(yīng)用代碼520可以指令操作系統(tǒng)540把該線程的工作區(qū)擴(kuò)展一定量的存儲(chǔ)空間。
響應(yīng)于擴(kuò)展該線程工作區(qū)的指令,操作系統(tǒng)540可以為工作區(qū)分配一個(gè)新的大于先前范圍的存儲(chǔ)器地址范圍。然后,可以對(duì)控制寄存器514進(jìn)行設(shè)置,使其指向存儲(chǔ)器地址的這一新范圍的開(kāi)始處。接下來(lái),可以指定這一存儲(chǔ)器地址范圍的新的大小,然后,把先前工作區(qū)中的調(diào)用棧入口信息拷貝到這一新工作區(qū)。
與以上關(guān)于方法/例程的進(jìn)入操作相類似,處理器510可以通過(guò)執(zhí)行計(jì)算機(jī)程序代碼中的“返回”指令檢測(cè)出退出了方法/例程。當(dāng)執(zhí)行了“返回”指令時(shí),處理器510可以首先判斷是否設(shè)置了用于硬件輔助的線程跟蹤的控制位。如果設(shè)置了硬件輔助的線程跟蹤的控制位,則處理器510可以調(diào)整指向棧的末尾的寄存器的值,并在相應(yīng)于正退出的方法/例程的調(diào)用棧的末尾處彈出一個(gè)入口。可以首先檢索指示當(dāng)前線程工作區(qū)的控制寄存器的值,以判斷對(duì)于相應(yīng)的方法/例程調(diào)用棧入口應(yīng)搜尋哪一工作區(qū)。下面,可以把該方法/例程調(diào)用棧入口彈出該調(diào)用棧。
或者,如以上所描述的,當(dāng)檢測(cè)到“返回”指令時(shí),取代從方法/例程的調(diào)用棧中彈出入口,本發(fā)明可以添加指定方法/例程的出口的附加的入口。在這一方式下,取代刪除被退出的方法/例程的入口,在線程的執(zhí)行期間該調(diào)用棧保持關(guān)于所進(jìn)入和所退出的每一方法/例程的信息。
于是,當(dāng)處理器510執(zhí)行正在被追蹤的計(jì)算機(jī)程序的指令時(shí),操作系統(tǒng)540自動(dòng)為新產(chǎn)生線程分配新的工作區(qū),響應(yīng)于對(duì)入口/出口方法/例程事件的檢測(cè),把調(diào)用棧入口寫(xiě)入線程工作區(qū),并且當(dāng)需要時(shí)擴(kuò)展工作區(qū)。因此,本發(fā)明的硬件機(jī)制有助于緩解完全以軟件執(zhí)行這些操作的一部分負(fù)擔(dān)。而且,由于可以獨(dú)立于追蹤應(yīng)用和正在被追蹤的計(jì)算機(jī)程序虛擬地操作該硬件,所以對(duì)于這些操作而言,可以不管正在執(zhí)行的具體的追蹤應(yīng)用或計(jì)算機(jī)程序而執(zhí)行這些操作。另外,不需要把正在被追蹤的計(jì)算機(jī)程序設(shè)置為獲取調(diào)用棧信息,因?yàn)橐坏┳粉檻?yīng)用指出線程跟蹤將被使能,則處理器可自動(dòng)獲得這一信息。
應(yīng)該認(rèn)識(shí)到,在追蹤計(jì)算機(jī)程序的過(guò)程中,可以在任何時(shí)刻啟動(dòng)本發(fā)明的以上所描述的操作。因此,可能出現(xiàn)這樣一種情況已經(jīng)啟動(dòng)了本發(fā)明的機(jī)制,而方法調(diào)用當(dāng)前尚未完成,即已進(jìn)行了方法調(diào)用,而且在退出被調(diào)用的方法之前啟動(dòng)本發(fā)明。當(dāng)處于調(diào)用棧模式時(shí),可以在不進(jìn)行調(diào)用操作的情況下,執(zhí)行返回操作,同時(shí)本發(fā)明處于工作狀態(tài)。在這些情況下,就像處理空操作一樣,處理這樣的返回操作。
圖6說(shuō)明了根據(jù)本發(fā)明的一個(gè)示例性實(shí)施例,處理器中控制寄存器的使用情況。如圖6中所示,處理器610包括控制位寄存器612、控制寄存器614、以及控制寄存器616。存儲(chǔ)器620,例如其可以是系統(tǒng)存儲(chǔ)器,包括由操作系統(tǒng)所分配的線程工作區(qū)622。當(dāng)把一個(gè)入口寫(xiě)入線程工作區(qū)622將超過(guò)分配給工作區(qū)622的地址的范圍時(shí),可以擴(kuò)展這一線程的工作區(qū)。把工作區(qū)622的擴(kuò)展描述為擴(kuò)展624,雖然該擴(kuò)展可能導(dǎo)致完全不同的給由元素622和624組成的工作區(qū)分配的地址集合。
如圖6中所示,把控制位寄存器612用于識(shí)別處理器610中何時(shí)使能了線程跟蹤。即當(dāng)追蹤應(yīng)用初始化了對(duì)計(jì)算機(jī)程序的追蹤時(shí),則追蹤應(yīng)用可以對(duì)控制位寄存器612進(jìn)行設(shè)置,以指示處理器610的微代碼應(yīng)該開(kāi)始自動(dòng)跟蹤線程的執(zhí)行。
因此,操作系統(tǒng)在存儲(chǔ)器620中分配工作區(qū)622。這一工作區(qū)622包括存儲(chǔ)器地址的一個(gè)范圍,將把調(diào)用棧入口寫(xiě)入這些存儲(chǔ)器地址中。處理器610的微代碼對(duì)控制寄存器614和616進(jìn)行設(shè)置,以使其指向工作區(qū)622的開(kāi)始地址和長(zhǎng)度。于是,如果正在被追蹤的計(jì)算機(jī)程序產(chǎn)生了多個(gè)線程,而且將把工作區(qū)用于每一現(xiàn)存的線程,則將把多個(gè)控制寄存器組614和616用于存儲(chǔ)存儲(chǔ)器620中的多個(gè)工作區(qū)622的開(kāi)始地址和長(zhǎng)度。
當(dāng)執(zhí)行的線程涉及正在執(zhí)行要求在該線程的工作區(qū)622中創(chuàng)建并存儲(chǔ)調(diào)用棧入口的指令的處理器610時(shí),處理器610的微代碼根據(jù)存儲(chǔ)在控制寄存器614和616中的地址識(shí)別該工作區(qū)622,并試圖把入口寫(xiě)入工作區(qū)622。如果由于所分配的工作區(qū)622中沒(méi)有足夠的存儲(chǔ)空間而使入口的寫(xiě)入不能完成,即該寫(xiě)入是企圖向大于或超出與存儲(chǔ)在控制寄存器616中的長(zhǎng)度相關(guān)的地址范圍的地址所進(jìn)行的寫(xiě)入,則處理器610的微代碼識(shí)別存儲(chǔ)器或工作區(qū)溢出,并且可以向該追蹤應(yīng)用發(fā)送中斷。
響應(yīng)于對(duì)這一中斷的接收,與該追蹤應(yīng)用相關(guān)的中斷處理程序可以指令操作系統(tǒng)為該線程擴(kuò)展工作區(qū)。響應(yīng)于這一擴(kuò)展工作區(qū)的指令,操作系統(tǒng)可以重新分配工作區(qū)622,以包括擴(kuò)展區(qū)624。這樣的重新分配可能導(dǎo)致工作區(qū)有完全不同的地址范圍,或可能包括最初的地址范圍加上擴(kuò)展624的附加的地址集合。在每一種情況中,對(duì)控制寄存器614和616進(jìn)行更新,以使它們指向包括元素622和624的工作區(qū)的適當(dāng)?shù)拈_(kāi)始地址和長(zhǎng)度。在這一方式下,在計(jì)算機(jī)程序的追蹤期間,操作系統(tǒng)可以動(dòng)態(tài)地為線程跟蹤擴(kuò)展工作區(qū)。
如以上所提到的,處理器的微代碼繼續(xù)自動(dòng)地把調(diào)用棧入口寫(xiě)入存儲(chǔ)器的相應(yīng)的工作區(qū),直至完成對(duì)計(jì)算機(jī)程序的追蹤,或直至通過(guò)線程跟蹤控制位的重新設(shè)置被指令中止線程跟蹤。追蹤應(yīng)用與/或后處理器可以使用存儲(chǔ)在工作區(qū)中的信息,對(duì)正在被追蹤的計(jì)算機(jī)程序進(jìn)行性能評(píng)估。
例如,追蹤應(yīng)用可以周期性地“醒來(lái)”,并通過(guò)觀察線程工作區(qū)以獲取追蹤數(shù)據(jù)的快照,從而獲取關(guān)于計(jì)算機(jī)程序的執(zhí)行的當(dāng)前狀態(tài)的信息。追蹤應(yīng)用可以觀察所有當(dāng)前的線程工作區(qū)、僅針對(duì)當(dāng)前正在執(zhí)行的線程的工作區(qū)、那些處于掛起狀態(tài)的線程工作區(qū)等。
在一個(gè)示例性實(shí)施例中,追蹤應(yīng)用可以周期性地醒來(lái),例如每10毫秒醒來(lái)一次,并把某些所關(guān)注的線程工作區(qū)的內(nèi)容拷貝到追蹤緩沖器中。這將提供計(jì)算機(jī)程序執(zhí)行的快照。然后,后處理器對(duì)這些快照進(jìn)行分析,以確定計(jì)算機(jī)程序執(zhí)行的性能度量。
圖7說(shuō)明了根據(jù)本發(fā)明的一個(gè)示例性實(shí)施例的數(shù)據(jù)流程。如圖7中所示,操作以追蹤應(yīng)用710開(kāi)始,追蹤應(yīng)用710告知操作系統(tǒng)715用于存儲(chǔ)線程跟蹤信息,例如調(diào)用棧信息,的工作區(qū)的大小,并指令處理器720設(shè)置控制位寄存器中的線程跟蹤使能控制位??梢园言摯笮⌒畔⒋鎯?chǔ)在寄存器中,以備以后當(dāng)為所產(chǎn)生的線程分配新工作區(qū)時(shí)使用。
然后,操作系統(tǒng)715通過(guò)為每一線程分配存儲(chǔ)器730中的地址范圍,為計(jì)算機(jī)程序的現(xiàn)存的線程分配新的工作區(qū)。接下來(lái),處理器720對(duì)控制寄存器進(jìn)行設(shè)置,使它們指向每一工作區(qū)的開(kāi)始地址,并存儲(chǔ)每一工作區(qū)的長(zhǎng)度。此后,當(dāng)發(fā)生調(diào)用棧事件時(shí),把處理器720調(diào)用棧入口寫(xiě)入存儲(chǔ)器730中的適當(dāng)?shù)墓ぷ鲄^(qū)。
在此后的某一時(shí)刻,追蹤應(yīng)用710可能會(huì)醒來(lái),并且追蹤應(yīng)用可以向處理器720請(qǐng)求線程調(diào)用棧信息。然后,處理器720可以把線程工作區(qū)地址信息返回到追蹤應(yīng)用710。接著,追蹤應(yīng)用710可以經(jīng)由操作系統(tǒng)715從存儲(chǔ)器730檢索所關(guān)注的線程的調(diào)用棧信息。然后,所檢索的所關(guān)注的線程的調(diào)用棧信息可以由追蹤應(yīng)用710加以處理,或?qū)⑺鼈兇鎯?chǔ)在數(shù)據(jù)結(jié)構(gòu)中,以供后處理程序進(jìn)行分析。
圖8是流程圖,描述了根據(jù)本發(fā)明的示例性實(shí)施例的用于啟動(dòng)硬件線程跟蹤的示例性操作。圖9是流程圖,描述了根據(jù)本發(fā)明的示例性實(shí)施例,用于向線程工作區(qū)寫(xiě)線程跟蹤信息的示例性操作。圖10是流程圖,描述了根據(jù)本發(fā)明的示例性實(shí)施例,用于處理存儲(chǔ)在線程工作區(qū)中的線程跟蹤信息的示例性操作。
將認(rèn)識(shí)到,流程示中的每一個(gè)框,以及流程示中框的組合,可以通過(guò)計(jì)算機(jī)程序的指令加以實(shí)施。可以把這些計(jì)算機(jī)程序指令提供于處理器或其它可編程的數(shù)據(jù)處理裝置,以產(chǎn)生這樣一個(gè)機(jī)制執(zhí)行在處理器或其它可編程的數(shù)據(jù)處理裝置上的指令,可創(chuàng)建用于實(shí)施流程圖一個(gè)或多個(gè)框中所指出的功能的方法??梢园堰@些計(jì)算機(jī)程序指令存儲(chǔ)在計(jì)算機(jī)可讀的存儲(chǔ)器或存儲(chǔ)媒介中,這些計(jì)算機(jī)程序指令可指導(dǎo)處理器或其它可編程的數(shù)據(jù)處理裝置以特定的方式加以運(yùn)作,以致于存儲(chǔ)在計(jì)算機(jī)可讀的存儲(chǔ)器或存儲(chǔ)媒介中的指令可以制造出一件產(chǎn)品,包括實(shí)施流程圖一個(gè)或多個(gè)框中所指出的功能的指令方法。
因此,流程圖說(shuō)明的各個(gè)框支持用于執(zhí)行指定功能的方法的組合、用于執(zhí)行指定功能的步驟的組合、以及用于執(zhí)行指定的功能的程序指令方法。還將應(yīng)認(rèn)識(shí)到可以通過(guò)執(zhí)行指定功能或步驟的基于專用硬件的計(jì)算機(jī)系統(tǒng),或通過(guò)專用硬件和計(jì)算機(jī)指令的組合,實(shí)施流程圖說(shuō)明的每一個(gè)框,以及流程圖說(shuō)明的框的組合。
現(xiàn)在參照?qǐng)D8。通過(guò)啟動(dòng)對(duì)代碼執(zhí)行的追蹤,開(kāi)始用于啟動(dòng)硬件線程跟蹤的操作(步驟810)。然后,設(shè)置用于存儲(chǔ)線程跟蹤信息的控制位(步驟820),并告知操作系統(tǒng)線程的工作區(qū)的大小(步驟830)。接下來(lái),操作系統(tǒng)根據(jù)這一大小為現(xiàn)存的線程分配工作區(qū)(步驟840),并對(duì)控制寄存器進(jìn)行設(shè)置,以使它們指向開(kāi)始地址并存儲(chǔ)每一工作區(qū)的長(zhǎng)度(步驟850)。然后,終止操作。
現(xiàn)在參照?qǐng)D9,通過(guò)處理器微代碼檢測(cè)對(duì)調(diào)用/返回指令或操作的處理,開(kāi)始把線程跟蹤信息寫(xiě)入線程工作區(qū)的操作(步驟910)。判斷指令是否為調(diào)用指令(步驟915)。如果指令為調(diào)用指令,則判斷該調(diào)用是否來(lái)自新的線程(步驟920)。如果該調(diào)用不是來(lái)自新的線程,則判斷把入口寫(xiě)入現(xiàn)存線程的工作區(qū)是否導(dǎo)致工作區(qū)溢出(步驟930)。如果導(dǎo)致工作區(qū)溢出,則向操作系統(tǒng)或監(jiān)視應(yīng)用,例如跟蹤應(yīng)用,發(fā)送一個(gè)中斷,以擴(kuò)展工作區(qū)(步驟935)。然后,擴(kuò)展工作區(qū),并對(duì)控制寄存器重新加以設(shè)置,以使它們指向所擴(kuò)展的工作區(qū)的新的開(kāi)始地址和長(zhǎng)度(步驟940)。
如果調(diào)用來(lái)自新的線程,則在存儲(chǔ)器為新的線程分配新的工作區(qū),并對(duì)控制寄存器進(jìn)行設(shè)置,使其指向新線程的新工作區(qū)的開(kāi)始地址和長(zhǎng)度(步驟950)。接下來(lái),在擴(kuò)展了工作區(qū)之后(步驟940),或如果向現(xiàn)存工作區(qū)寫(xiě)入入口不導(dǎo)致工作區(qū)溢出(步驟930),則把針對(duì)該調(diào)用的入口寫(xiě)入該線程的工作區(qū)中的調(diào)用棧(步驟960)。
返回到步驟915,如果指令是返回指令,則根據(jù)控制寄存器識(shí)別當(dāng)前線程工作區(qū)(步驟965)。接下來(lái),把當(dāng)前線程工作區(qū)中的調(diào)用棧中的最后入口從調(diào)用棧中彈出(步驟970)。然后,終止操作。
現(xiàn)在參照?qǐng)D10,通過(guò)喚醒追蹤應(yīng)用,開(kāi)始處理存儲(chǔ)在線程工作區(qū)中的線程跟蹤信息的操作(步驟1010)。然后,識(shí)別所關(guān)注的線程(步驟1020)。所關(guān)注的線程是實(shí)施細(xì)節(jié),例如可以包括僅當(dāng)前正在執(zhí)行的線程、已處于掛起狀態(tài)的線程、所有線程而無(wú)論當(dāng)前是否正在執(zhí)行等。假設(shè)追蹤應(yīng)用將知道哪些線程是所關(guān)注。
根據(jù)存儲(chǔ)在控制寄存器中的信息,檢索所關(guān)注的線程的工作區(qū)中的地址信息(步驟1030)。接下來(lái),可以從存儲(chǔ)器中的工作區(qū)檢索這些工作區(qū)中的數(shù)據(jù)(步驟1040),并對(duì)這些數(shù)據(jù)進(jìn)行處理(步驟1050),然后,終止操作。
應(yīng)該加以注意的是,盡管上文中就處理器根據(jù)處理器所處理的指令的類型自動(dòng)檢測(cè)調(diào)用和返回指令的形式描述了本發(fā)明,但本發(fā)明并不局限于這一方式。相反,也可以具體實(shí)現(xiàn)指令,如通過(guò)編譯器,使其可包括對(duì)標(biāo)志位進(jìn)行設(shè)置,以把該指令識(shí)別為將作為調(diào)用或返回指令而加以對(duì)待的指令。例如,存在著這樣的一些情況如當(dāng)存在指向一個(gè)例程的分支指令時(shí),可以進(jìn)入或退出該例程而無(wú)需通過(guò)“調(diào)用”指令明示地“調(diào)用”該例程或通過(guò)“返回”指令明示地退出該例程。在這樣的情況下,本發(fā)明的機(jī)制可允許把該分支指令或其它類型的進(jìn)入或退出例程而無(wú)需執(zhí)行明示的“調(diào)用”或“返回”的指令標(biāo)記為一條將被作為調(diào)用或返回指令而對(duì)待的指令。
例如,當(dāng)處理器檢索用于執(zhí)行的指令時(shí),可以把指令元數(shù)據(jù)與處理器所讀的指令相關(guān)聯(lián)。處理器可以檢查調(diào)用標(biāo)志位或返回標(biāo)志位的設(shè)置,以判斷是否將把該特定指令作為調(diào)用或返回指令加以對(duì)待,即使該指令本身不是調(diào)用或返回指令。如果為該指令設(shè)置了調(diào)用標(biāo)志位,則上面描述的線程棧處理將以類似于好像該指令是明示“調(diào)用”指令的方式來(lái)執(zhí)行。如果為該指令設(shè)置了返回標(biāo)志位,則上面描述的線程棧處理將以類似于好像該指令是明示“返回”指令的方式來(lái)執(zhí)行。這樣,對(duì)于線程棧處理,這樣的指令,即有效執(zhí)行與調(diào)用或返回相類似的功能,但不是明示的調(diào)用或返回指令的指令,將仍然以與明示調(diào)用及返回指令相同的方式對(duì)待。
于是,本發(fā)明利用了這樣一個(gè)事實(shí)根據(jù)處理器正在執(zhí)行的指令,處理器知道何時(shí)進(jìn)入和退出方法/例程。采用本發(fā)明,可不必用軟件程序來(lái)監(jiān)視計(jì)算機(jī)程序的執(zhí)行,以確定何時(shí)進(jìn)入/退出方法/例程而且不必把信息寫(xiě)入軟件所保持的調(diào)用棧,而是本發(fā)明使能處理器硬件,使其自動(dòng)地把必要的信息寫(xiě)入線程工作區(qū)。以這種方式,對(duì)線程棧的保持將獨(dú)立于軟件追蹤算法來(lái)執(zhí)行。因此,在跟蹤計(jì)算機(jī)程序的執(zhí)行方面,軟件中的變化將不會(huì)影響用于保持線程調(diào)用棧的機(jī)制。而且,不需要將正在被追蹤的計(jì)算機(jī)程序設(shè)置為保持線程調(diào)用棧信息,因?yàn)樘幚砥鲗⑦@一信息自動(dòng)地存儲(chǔ)在為這些線程分配的工作區(qū)中。
需要加以注意的一個(gè)重要方面是,盡管已就全功能數(shù)據(jù)處理系統(tǒng)環(huán)境描述了本發(fā)明,然而,這一技術(shù)領(lǐng)域中的普通熟練技術(shù)人員將會(huì)意識(shí)到,能夠以指令的計(jì)算機(jī)可讀媒介的形式以及多種形式分配本發(fā)明的各個(gè)過(guò)程,而且不管實(shí)際用于執(zhí)行該分配的信號(hào)承載媒介的具體類型如何,本發(fā)明同等地適用。計(jì)算機(jī)可讀媒介的例子包括可記錄型媒介,例如軟盤(pán)、硬盤(pán)驅(qū)動(dòng)器、RAM(隨機(jī)存取存儲(chǔ)器)、CD-ROM、DVD-ROM(數(shù)字視頻光盤(pán)只讀存儲(chǔ)器);以及傳輸型媒介,例如使用如射頻和光波傳輸?shù)葌鬏斝问降臄?shù)字和模擬通信鏈路、有線或無(wú)線通信鏈路。計(jì)算機(jī)可讀媒介可以采用編碼格式的形式,為了在具體數(shù)據(jù)處理系統(tǒng)中實(shí)際加以應(yīng)用,將對(duì)這些格式進(jìn)行解碼。
已說(shuō)明性和描述性地對(duì)本發(fā)明進(jìn)行了描述,這一描述并不旨在以所公開(kāi)的這一形式窮盡或限制本發(fā)明。這一技術(shù)領(lǐng)域中的普通熟練技術(shù)人員將會(huì)明顯意識(shí)到,可以對(duì)本發(fā)明進(jìn)行多方面的變更與修改。例如,取代使用指令中或指令組(bundle)中的字段,可以把新的指令或操作代碼用于指示相繼的指令或相繼的指令集是標(biāo)記指令。另外,在希望把性能指示符包含于指令的字段中的情況下,如果無(wú)用于性能指示符的多余的字段,則也可以改變處理器的體系結(jié)構(gòu),使其包括附加的位。選擇和描述本實(shí)施例,是為了最好地解釋本發(fā)明的原理、實(shí)際的應(yīng)用,并且使這一技術(shù)領(lǐng)域中的更多普通熟練技術(shù)人員能夠針對(duì)不同的適合于所考慮的具體應(yīng)用而進(jìn)行了多方面修改的實(shí)施例理解本發(fā)明。
權(quán)利要求
1.一種在計(jì)算機(jī)程序的執(zhí)行期間在數(shù)據(jù)處理系統(tǒng)中用于存儲(chǔ)線程跟蹤信息的方法,包括為計(jì)算機(jī)程序的線程分配工作區(qū),其中,所述工作區(qū)用于為所述線程存儲(chǔ)線程跟蹤信息;在所述處理器的微代碼中,自動(dòng)地判斷是否已經(jīng)發(fā)生要求修改所述工作區(qū)中所述線程跟蹤信息的事件;以及修改所述工作區(qū)中的線程跟蹤信息,以響應(yīng)所述微代碼自動(dòng)地判斷已發(fā)生了需要修改所述工作區(qū)中線程跟蹤信息的事件。
2.根據(jù)權(quán)利要求1所述的方法,還包括通過(guò)對(duì)所述處理器中線程跟蹤控制位進(jìn)行設(shè)置,使能處理器線程跟蹤,其中,僅當(dāng)對(duì)所述線程跟蹤控制位進(jìn)行了設(shè)置,才執(zhí)行分配、自動(dòng)判斷、以及修改步驟。
3.根據(jù)權(quán)利要求1所述的方法,還包括通過(guò)對(duì)所述處理器中第一控制寄存器進(jìn)行設(shè)置,以使其指向所述工作區(qū)的開(kāi)始地址,以及通過(guò)對(duì)所述處理器中第二控制寄存器進(jìn)行設(shè)置,以使其識(shí)別所述工作區(qū)的長(zhǎng)度,來(lái)為線程分配該工作區(qū)。
4.根據(jù)權(quán)利要求1所述的方法,還包括在所述計(jì)算機(jī)程序的執(zhí)行期間,識(shí)別新線程的產(chǎn)生,其中,執(zhí)行為計(jì)算機(jī)程序的線程分配工作區(qū)以響應(yīng)正在產(chǎn)生的新線程。
5.根據(jù)權(quán)利要求1所述的方法,還包括從運(yùn)行在所述數(shù)據(jù)處理系統(tǒng)的追蹤應(yīng)用,接收對(duì)所述工作區(qū)的大小的識(shí)別。
6.根據(jù)權(quán)利要求1所述的方法,其中,在所述計(jì)算機(jī)程序的執(zhí)行期間,由運(yùn)行在所述數(shù)據(jù)處理系統(tǒng)上的操作系統(tǒng)分配所述工作區(qū)以響應(yīng)線程的產(chǎn)生。
7.根據(jù)權(quán)利要求1所述的方法,還包括判斷修改所述線程跟蹤信息是否會(huì)導(dǎo)致所述工作區(qū)的溢出;以及如果斷定修改所述線程跟蹤信息會(huì)導(dǎo)致所述工作區(qū)的溢出,則擴(kuò)展該工作區(qū)。
8.根據(jù)權(quán)利要求7所述的方法,其中,擴(kuò)展所述的工作區(qū)包括為存儲(chǔ)所述線程跟蹤信息而分配新的存儲(chǔ)器區(qū);把所述新區(qū)的開(kāi)始地址和長(zhǎng)度存儲(chǔ)在所述處理器的控制寄存器中;以及把現(xiàn)存的線程跟蹤信息從所述工作區(qū)拷貝到所述新的存儲(chǔ)器區(qū)中。
9.根據(jù)權(quán)利要求1所述的方法,其中,所述線程跟蹤信息是線程調(diào)用棧,而且,其中,修改所述線程跟蹤信息包括向所述線程調(diào)用棧添加入口,以及從所述線程調(diào)用棧彈出入口兩者中至少之一。
10.根據(jù)權(quán)利要求1所述的方法,其中,所述事件是進(jìn)入方法/例程和退出方法/例程之一。
11.一種在計(jì)算機(jī)程序的執(zhí)行期間用于存儲(chǔ)線程跟蹤信息的裝置,包括處理器,具有微代碼;以及存儲(chǔ)器,耦合于所述處理器,其中,所述處理器通過(guò)追蹤應(yīng)用執(zhí)行正在被追蹤的計(jì)算機(jī)程序的指令,并且在所述存儲(chǔ)器中為所述計(jì)算機(jī)程序的線程分配工作區(qū),所述工作區(qū)用于存儲(chǔ)該線程的線程跟蹤信息,而且,其中,所述處理器的微代碼自動(dòng)地判斷是否發(fā)生要求修改所述工作區(qū)中線程跟蹤信息的事件,并且,若斷定已發(fā)生了因此將修改所述工作區(qū)中線程跟蹤信息的事件,則修改所述工作區(qū)中的線程跟蹤信息以響應(yīng)該事件。
12.根據(jù)權(quán)利要求11所述的裝置,其中,所述處理器還包括線程跟蹤控制寄存器,其中,通過(guò)對(duì)所述線程跟蹤控制寄存器中的線程跟蹤控制位進(jìn)行設(shè)置,使能處理器線程跟蹤。
13.根據(jù)權(quán)利要求11所述的裝置,其中,所述處理器包括第一控制寄存器和第二控制寄存器,其中,對(duì)所述第一控制寄存器進(jìn)行設(shè)置以使其指向所述工作區(qū)的開(kāi)始地址,以及對(duì)所述第二控制寄存器進(jìn)行設(shè)置以使其識(shí)別所述工作區(qū)的長(zhǎng)度。
14.根據(jù)權(quán)利要求11所述的裝置,其中,所述處理器為所述線程分配工作區(qū)以響應(yīng)對(duì)正在產(chǎn)生的新線程的檢測(cè)。
15.根據(jù)權(quán)利要求11所述的裝置,其中,由所述追蹤應(yīng)用設(shè)置所述工作區(qū)的大小。
16.根據(jù)權(quán)利要求11所述的裝置,其中,在所述計(jì)算機(jī)程序的執(zhí)行期間,由運(yùn)行在所述處理器上的操作系統(tǒng)分配所述工作區(qū)以響應(yīng)線程的產(chǎn)生。
17.根據(jù)權(quán)利要求11所述的裝置,其中,所述處理器的微代碼判斷修改所述線程跟蹤信息是否會(huì)導(dǎo)致該工作區(qū)的溢出,如果修改該線程跟蹤信息會(huì)導(dǎo)致該工作區(qū)的溢出,則向追蹤應(yīng)用的中斷處理程序發(fā)送中斷,而且,其中,所述中斷處理程序擴(kuò)展該工作區(qū)以響應(yīng)對(duì)所述中斷的接收。
18.根據(jù)權(quán)利要求17所述的裝置,其中,所述中斷處理程序通過(guò)下列操作擴(kuò)展所述工作區(qū)分配新的存儲(chǔ)器區(qū)用于存儲(chǔ)所述線程跟蹤信息;把所述新區(qū)的開(kāi)始地址和長(zhǎng)度存儲(chǔ)在所述處理器的控制寄存器中;以及把現(xiàn)存的線程跟蹤信息從所述工作區(qū)拷貝到所述新的存儲(chǔ)器區(qū)中。
19.根據(jù)權(quán)利要求11所述的裝置,其中,所述線程跟蹤信息是線程調(diào)用棧,而且,其中,通過(guò)向所述線程調(diào)用棧添加入口以及從所述線程調(diào)用棧彈出入口兩者中至少之一,所述處理器的微代碼修改所述線程跟蹤信息。
20.根據(jù)權(quán)利要求11所述的裝置,其中,所述事件是進(jìn)入方法/例程和退出方法/例程之一。
21.一種在計(jì)算機(jī)程序的執(zhí)行期間用于存儲(chǔ)線程跟蹤信息的計(jì)算機(jī)可讀媒介中的計(jì)算機(jī)程序產(chǎn)品,包括第一指令,用于為所述計(jì)算機(jī)程序的線程分配工作區(qū),其中,所述工作區(qū)用于存儲(chǔ)所述線程的線程跟蹤信息;第二指令,用于在所述處理器的微代碼中自動(dòng)地判斷是否發(fā)生要求修改所述工作區(qū)中線程跟蹤信息的事件;以及第三指令,用于修改所述工作區(qū)中的線程跟蹤信息,以響應(yīng)該微代碼自動(dòng)斷定已發(fā)生了因此將修改所述工作區(qū)中的線程跟蹤信息的事件。
全文摘要
一種用于在追蹤計(jì)算機(jī)程序期間提供一種用于跟蹤線程棧的自動(dòng)機(jī)制的方法與裝置。這種方法與裝置包括硬件輔助機(jī)制,該機(jī)制允許處理器自主地為每一線程保持其中存儲(chǔ)了調(diào)用棧的工作區(qū)。使用這種裝置與方法,計(jì)算設(shè)備的操作系統(tǒng)把分配給具體線程工作區(qū)的數(shù)據(jù)區(qū)的大小告知操作系統(tǒng)。另外,當(dāng)將執(zhí)行對(duì)計(jì)算機(jī)程序的追蹤時(shí),追蹤軟件經(jīng)由操作系統(tǒng)通知處理器開(kāi)始在一個(gè)線程工作區(qū)中保持線程調(diào)用棧信息。對(duì)于計(jì)算機(jī)程序的執(zhí)行中的每一線程,處理器保持一工作區(qū),該工作區(qū)具有的大小根據(jù)操作系統(tǒng)所告知的大小確定。工作區(qū)由存儲(chǔ)在處理器的控制寄存器中的地址和長(zhǎng)度信息來(lái)指定。處理器包含微代碼,當(dāng)設(shè)置了控制位時(shí),這些微代碼用于使處理器自動(dòng)把線程跟蹤信息存儲(chǔ)在由處理器的控制寄存器所指定的工作區(qū)中。
文檔編號(hào)G06F9/06GK1614555SQ20041007511
公開(kāi)日2005年5月11日 申請(qǐng)日期2004年8月31日 優(yōu)先權(quán)日2003年11月6日
發(fā)明者小吉米·E·德威特, 弗蘭克·E·萊文, 克里斯托弗·M·理查森, 羅伯特·J·厄克特 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1