本發(fā)明涉及針對(duì)并發(fā)(concurrent)軟件環(huán)境記錄活動(dòng)。特別地,本發(fā)明涉及記錄關(guān)于并發(fā)軟件環(huán)境中的線程的同步狀態(tài)的信息。
背景技術(shù):在計(jì)算機(jī)系統(tǒng)中執(zhí)行軟件線程的并發(fā)軟件環(huán)境采用一個(gè)或多個(gè)同步機(jī)制,來(lái)確保對(duì)共享資源的受控訪問(wèn)以及避免共享資源的同時(shí)使用。例如,在并發(fā)軟件環(huán)境中執(zhí)行的軟件方法可以使用相互排斥(互斥體)算法、軟件鎖、同步監(jiān)視器、信號(hào)機(jī)(semaphore)或本領(lǐng)域已知的其它同步機(jī)制來(lái)同步。在并發(fā)軟件環(huán)境(諸如Java,Java是Oracle公司的商標(biāo))中運(yùn)行的多線程應(yīng)用的高可擴(kuò)展性(scalability)取決于好的工具,以通過(guò)緩解或解決表現(xiàn)為訪問(wèn)同步共享資源的競(jìng)爭(zhēng)的問(wèn)題來(lái)找到軟件代碼中呈現(xiàn)改善可擴(kuò)展性的機(jī)會(huì)的區(qū)域。通過(guò)用于測(cè)量同步事件(諸如共享共享資源的軟件線程之間的競(jìng)爭(zhēng))的發(fā)生的工具輔助這種軟件代碼區(qū)域的識(shí)別。然而,為了測(cè)量同步事件的軟件代碼的手段(instrumentation)呈現(xiàn)困難。競(jìng)爭(zhēng)對(duì)工具開(kāi)銷(xiāo)(overhead)非常敏感,這是因?yàn)楸O(jiān)視和測(cè)量工具的恰好(very)執(zhí)行導(dǎo)致在并發(fā)軟件環(huán)境中運(yùn)行的軟件的同步動(dòng)態(tài)(dynamics)。諸如Java鎖定監(jiān)視器(JavaLockMonitor)(JLM)(見(jiàn)perfinsp.sourceforge.net/jlm.html)或“用于Java的IBM監(jiān)視和診斷工具–健康中心(IBMMonitoringandDiagnosticToolsforJava-HealthCentre)”(見(jiàn)publib.boulder.ibm.com/infocenter/hctool/v1r0/index.jsp)的現(xiàn)行工具提供基于同步資源的Java環(huán)境中的競(jìng)爭(zhēng)的發(fā)生的監(jiān)視和報(bào)告。然而,這些工具不能在競(jìng)爭(zhēng)的時(shí)刻提供關(guān)于軟件線程狀態(tài)的信息,諸如特定軟件方法經(jīng)歷競(jìng)爭(zhēng)。因而,使用這種工具,不能簡(jiǎn)單直接地確定在應(yīng)用中的哪些軟件方法對(duì)競(jìng)爭(zhēng)的發(fā)生負(fù)責(zé)。此外,測(cè)量軟件線程中執(zhí)行的軟件方法處于特定同步狀態(tài)(諸如特定的競(jìng)爭(zhēng)狀態(tài))中的時(shí)間長(zhǎng)度的工具難以開(kāi)發(fā)和維護(hù)。由于并發(fā)軟件環(huán)境的性質(zhì),作為同步機(jī)制的部分的、針對(duì)要被中斷和恢復(fù)的軟件線程的傾向需要復(fù)雜的測(cè)量邏輯來(lái)確定將時(shí)間段分配到特定同步狀態(tài)、特定軟件方法和特定軟件線程的適當(dāng)分配。因此,在并發(fā)軟件環(huán)境中記錄線程的活動(dòng),以協(xié)助同步行為的分析,從而改善并發(fā)軟件的可擴(kuò)展性,將是有利的。
技術(shù)實(shí)現(xiàn)要素:因此,在第一個(gè)方面中,本發(fā)明提供用于在計(jì)算機(jī)系統(tǒng)中執(zhí)行軟件線程的并發(fā)軟件環(huán)境的活動(dòng)記錄系統(tǒng),所述活動(dòng)記錄系統(tǒng)包括:線程狀態(tài)指示器,用于記錄軟件線程的同步狀態(tài)的指示,在所述同步狀態(tài)中所述軟件線程停止在所述計(jì)算機(jī)系統(tǒng)的處理器中執(zhí)行,所述指示與所述軟件線程的標(biāo)識(shí)(identification)相關(guān)聯(lián);時(shí)間簡(jiǎn)檔器,用于識(shí)別所述計(jì)算機(jī)系統(tǒng)的空閑處理器,并記錄所述處理器為空閑的指示;調(diào)度監(jiān)視器,用于識(shí)別所述軟件線程到所述處理器的調(diào)度,并且響應(yīng)于所述處理器為空閑的指示和所述軟件線程的同步狀態(tài)的指示,而生成將所述處理器的空閑狀態(tài)歸因于所述軟件線程以及所指示的同步狀態(tài)的記錄。優(yōu)選地,所述時(shí)間簡(jiǎn)檔器還可操作來(lái)識(shí)別所述處理器的空閑期,作為所述處理器連續(xù)空閑的時(shí)段,并且其中歸因所述空閑狀態(tài)的記錄將所述處理器的空閑期歸因于所述軟件線程和所指示的同步狀態(tài)。優(yōu)選地,通過(guò)確定所述處理器沒(méi)有軟件線程被調(diào)度到其中執(zhí)行,確定所述處理器為空閑。優(yōu)選地,所述活動(dòng)記錄系統(tǒng)還包括:用于計(jì)算所述線程在指示狀態(tài)下的時(shí)間比例的計(jì)算組件。優(yōu)選地,所述線程狀態(tài)指示器可操作來(lái)記錄:所述軟件線程的“阻止”狀態(tài)的指示,由此所述軟件線程被阻止獲取用于在所述并發(fā)軟件環(huán)境中實(shí)現(xiàn)同步的排斥結(jié)構(gòu);所述軟件線程的“等待”狀態(tài)的指示,由此所述軟件線程等待要由不同的軟件線程進(jìn)行的處理;所述軟件線程的“可運(yùn)行”狀態(tài)的指示,由此所述軟件線程準(zhǔn)備好在所述計(jì)算機(jī)系統(tǒng)的處理器中執(zhí)行;以及軟件線程的非同步狀態(tài)的指示。優(yōu)選地,所述軟件線程的同步狀態(tài)的指示還包括所述軟件線程尋求訪問(wèn)的共享資源的標(biāo)識(shí)符。優(yōu)選地,所述活動(dòng)記錄系統(tǒng)還包括:用于確定與所述共享資源的標(biāo)識(shí)符相關(guān)聯(lián)的符號(hào)名稱的解析器。優(yōu)選地,所述時(shí)間簡(jiǎn)檔器還適配于確定所述軟件例程包括在所述軟件環(huán)境的例程服務(wù)庫(kù)中,并且響應(yīng)于所述確定,識(shí)別用于所述軟件例程的調(diào)用例程。優(yōu)選地,所述時(shí)間簡(jiǎn)檔器使用所述解析器和軟件調(diào)用棧中的一個(gè)或多個(gè)來(lái)識(shí)別所述調(diào)用例程。優(yōu)選地,所述軟件線程的同步狀態(tài)由所述軟件線程本身和所述并發(fā)軟件環(huán)境中的一個(gè)或多個(gè)來(lái)確定。優(yōu)選地,所述排斥結(jié)構(gòu)是鎖和監(jiān)視器之一。優(yōu)選地,所述共享資源是軟件對(duì)象。優(yōu)選地,所述時(shí)間簡(jiǎn)檔器還可操作來(lái)以規(guī)則時(shí)間間隔輪詢用于所述計(jì)算機(jī)系統(tǒng)的處理器的程序計(jì)數(shù)器的值,并且所述時(shí)間簡(jiǎn)檔器通過(guò)計(jì)數(shù)所述處理器為空閑的期間的規(guī)則時(shí)間間隔的數(shù)目來(lái)識(shí)別所述空閑期。優(yōu)選地,所述處理器為空閑的指示包括所述處理器為空閑的期間的規(guī)則時(shí)間間隔的數(shù)目的計(jì)數(shù)。相應(yīng)地,在第二個(gè)方面中,本發(fā)明提供用于在計(jì)算機(jī)系統(tǒng)中執(zhí)行軟件線程的并發(fā)軟件環(huán)境的記錄活動(dòng)的方法,所述方法包括下列步驟:線程狀態(tài)指示器記錄軟件線程的同步狀態(tài)的指示,在所述同步狀態(tài)中所述軟件線程停止在所述計(jì)算機(jī)系統(tǒng)的處理器中執(zhí)行,所述指示與所述軟件線程的標(biāo)識(shí)相關(guān)聯(lián);時(shí)間簡(jiǎn)檔器識(shí)別所述計(jì)算機(jī)系統(tǒng)的空閑處理器,并記錄所述處理器為空閑的指示,調(diào)度監(jiān)視器識(shí)別所述軟件線程到所述處理器的調(diào)度;以及響應(yīng)于所述處理器為空閑的指示和所述軟件線程的同步狀態(tài)的指示,所述調(diào)度監(jiān)視器生成將所述處理器的空閑狀態(tài)歸因于所述軟件線程和所指示的同步狀態(tài)的記錄。相應(yīng)地,在第三個(gè)方面中,本發(fā)明提供一種裝置,包括:中央處理單元;存儲(chǔ)器子系統(tǒng);輸入/輸出子系統(tǒng);以及互聯(lián)所述中央處理器、存儲(chǔ)器子系統(tǒng)、輸入/輸出子系統(tǒng)的總線子系統(tǒng);以及如上所述的裝置。相應(yīng)地,在第四個(gè)方面中,本發(fā)明提供計(jì)算機(jī)程序元件,包括計(jì)算機(jī)程序代碼,當(dāng)所述計(jì)算機(jī)程序代碼被加載到計(jì)算機(jī)系統(tǒng)并在其上執(zhí)行時(shí),使得所述計(jì)算機(jī)執(zhí)行如上所述的方法的步驟。附圖說(shuō)明下面將參考附圖僅通過(guò)示例的方式更詳細(xì)地描述本發(fā)明的優(yōu)選實(shí)施例,附圖中:圖1是適合于本發(fā)明實(shí)施例的操作的計(jì)算機(jī)系統(tǒng)的框圖;圖2示出根據(jù)本發(fā)明優(yōu)選實(shí)施例的在計(jì)算機(jī)系統(tǒng)中實(shí)施的活動(dòng)記錄系統(tǒng)的布置(arrangement);圖3是根據(jù)本發(fā)明優(yōu)選實(shí)施例的、用于針對(duì)在計(jì)算機(jī)系統(tǒng)中執(zhí)行軟件線程的并發(fā)軟件環(huán)境記錄活動(dòng)的方法的流程圖;圖4示出根據(jù)本發(fā)明優(yōu)選實(shí)施例的在計(jì)算機(jī)系統(tǒng)中實(shí)施的活動(dòng)記錄系統(tǒng)的增強(qiáng)布置;圖5是根據(jù)本發(fā)明優(yōu)選實(shí)施例的、用于針對(duì)在計(jì)算機(jī)系統(tǒng)中執(zhí)行軟件線程的并發(fā)軟件環(huán)境記錄活動(dòng)的增強(qiáng)方法的流程圖。具體實(shí)施方式圖1是適合于本發(fā)明實(shí)施例的操作的計(jì)算機(jī)系統(tǒng)的框圖。中央處理單元(CPU)102經(jīng)由數(shù)據(jù)總線108通信地連接到存儲(chǔ)器104和輸入/輸出(I/O)接口106。存儲(chǔ)器104可以是任何讀取/寫(xiě)入存儲(chǔ)裝置,諸如隨機(jī)存取存儲(chǔ)器(RAM)或非易失性存儲(chǔ)裝置。非易失性存儲(chǔ)裝置的示例包括盤(pán)或帶存儲(chǔ)裝置。I/O接口106是到用于數(shù)據(jù)的輸入或輸出、或用于數(shù)據(jù)的輸入和輸出兩者的裝置的接口。可連接到I/O接口106的I/O裝置的示例包括鍵盤(pán)、鼠標(biāo)、顯示器(諸如監(jiān)視器)以及網(wǎng)絡(luò)連接。圖2示出根據(jù)本發(fā)明優(yōu)選實(shí)施例的在計(jì)算機(jī)系統(tǒng)200中實(shí)施的活動(dòng)記錄系統(tǒng)的布置。計(jì)算機(jī)系統(tǒng)200包括用于指令的執(zhí)行的一個(gè)或多個(gè)處理器102。計(jì)算機(jī)系統(tǒng)200中的每個(gè)處理器102包括作為寄存器的程序計(jì)數(shù)器206或其它適合的存儲(chǔ)器,用于存儲(chǔ)指示由處理器102執(zhí)行的指令序列中的當(dāng)前位置的值。程序計(jì)數(shù)器也已知為指令指針、指令地址寄存器或指令序列器(sequencer)。取決于處理器102的特定布置,程序計(jì)數(shù)器206可以保存當(dāng)前正被執(zhí)行的指令的地址,或者替代地,保存要被執(zhí)行的下一個(gè)指令的地址。優(yōu)選地,處理器102是多處理器計(jì)算機(jī)系統(tǒng)中的多個(gè)獨(dú)立處理器。替代地,處理器102可以構(gòu)建為協(xié)同操作計(jì)算機(jī)系統(tǒng)的網(wǎng)絡(luò)(諸如計(jì)算機(jī)系統(tǒng)的陣列)中組織的獨(dú)立計(jì)算機(jī)系統(tǒng)。這樣的陣列中的每個(gè)系統(tǒng)可以獨(dú)立地包含如上關(guān)于圖1所述的計(jì)算機(jī)系統(tǒng)的基本特征。例如,可以在機(jī)架計(jì)算機(jī)布置(rackcomputerarrangement)、刀片服務(wù)器或其它適合的計(jì)算機(jī)系統(tǒng)陣列中構(gòu)建處理器102。在另一替代中,服務(wù)器102可以構(gòu)建為單一處理器的獨(dú)立處理元件(諸如處理器單元的獨(dú)立處理核)。這里構(gòu)想的這種處理器布置的組合也適合于一個(gè)或多個(gè)處理器102的實(shí)施例。計(jì)算機(jī)系統(tǒng)200還包括諸如易失性存儲(chǔ)器的存儲(chǔ)器104。存儲(chǔ)器104存儲(chǔ)時(shí)間簡(jiǎn)檔器(timeprofiler)218。時(shí)間簡(jiǎn)檔器218是用于記錄用于計(jì)算機(jī)系統(tǒng)200中的處理器102的程序計(jì)數(shù)器206的值的組件。程序計(jì)數(shù)器206的值被作為簡(jiǎn)檔器記錄222而記錄在存儲(chǔ)器104、替代存儲(chǔ)器、或其它與計(jì)算機(jī)系統(tǒng)200相關(guān)聯(lián)的存儲(chǔ)器中。在操作中,時(shí)間簡(jiǎn)檔器218周期性地中斷處理器102的執(zhí)行(已知為簡(jiǎn)檔器“tick(滴答)”),以在恢復(fù)中斷的指令的執(zhí)行之前記錄程序計(jì)數(shù)器206的值。程序計(jì)數(shù)器206的值對(duì)應(yīng)于在簡(jiǎn)檔器中斷(該tick)的時(shí)刻在處理器102上執(zhí)行的軟件線程210的指令序列中的指令在存儲(chǔ)器104中的地址。中斷以規(guī)則(regular)時(shí)間間隔發(fā)生,使得時(shí)間簡(jiǎn)檔器218以規(guī)則時(shí)間間隔輪詢(poll)程序計(jì)數(shù)器206的值。時(shí)間簡(jiǎn)檔器218還可以操作來(lái)記錄用于計(jì)算機(jī)系統(tǒng)200中的多個(gè)處理器的程序計(jì)數(shù)器的值,包括創(chuàng)建對(duì)應(yīng)于程序計(jì)數(shù)器206的每個(gè)值的處理器的標(biāo)識(shí)符的記錄。如對(duì)于本領(lǐng)域技術(shù)人員將明顯的,時(shí)間簡(jiǎn)檔器218可以完全以存儲(chǔ)器104中存儲(chǔ)的軟件實(shí)施。例如,時(shí)間簡(jiǎn)檔器218可以基于諸如由IBM開(kāi)發(fā)的“TProf”時(shí)間簡(jiǎn)檔器工具的應(yīng)用工具,詳見(jiàn)perfinsp.sourceforge.net/tprof.html(IBM是國(guó)際商業(yè)機(jī)器公司的注冊(cè)商標(biāo))。替代地,時(shí)間簡(jiǎn)檔器218可以在存儲(chǔ)器104外部完全以硬件實(shí)施,或者以軟件和硬件二者的結(jié)合實(shí)施。例如,時(shí)間簡(jiǎn)檔器218可以是計(jì)算機(jī)系統(tǒng)200上執(zhí)行的軟件例程,諸如與計(jì)算機(jī)系統(tǒng)200的一個(gè)或多個(gè)處理器102密切合作的內(nèi)核功能(kernelfunction)或操作系統(tǒng)。替代地,時(shí)間簡(jiǎn)檔器218可以采用特定導(dǎo)向存儲(chǔ)程序計(jì)數(shù)器206的值的處理器指令。在另一個(gè)替代中,時(shí)間簡(jiǎn)檔器218可以是用于并發(fā)軟件環(huán)境208的JustInTime(JIT)編譯器的功能,已知為“采樣線程(samplingthread)”。存儲(chǔ)器104還存儲(chǔ)并發(fā)軟件環(huán)境208。并發(fā)軟件環(huán)境208是如下的環(huán)境:其中軟件被設(shè)計(jì)為適合于同時(shí)并行執(zhí)行的一個(gè)或多個(gè)計(jì)算過(guò)程(process)的集合。值得注意的,這種并行同時(shí)執(zhí)行的適用性不一定需要并發(fā)軟件被實(shí)際并行執(zhí)行。并發(fā)軟件環(huán)境可以使用單個(gè)處理器102模擬并行執(zhí)行,或者可以使用多個(gè)處理器102實(shí)現(xiàn)真實(shí)的并行執(zhí)行,該多個(gè)處理器102例如在上述處理器102的任何一個(gè)布置中。并發(fā)程序可以通過(guò)交錯(cuò)每個(gè)計(jì)算過(guò)程的執(zhí)行步驟而在單個(gè)處理器上順序地執(zhí)行,或者通過(guò)將每個(gè)計(jì)算過(guò)程分配到一組處理器102中的一個(gè)而并行地執(zhí)行,所述一組處理器102可以是接近的或通過(guò)網(wǎng)絡(luò)分散的。這種并發(fā)軟件環(huán)境的示例是Java運(yùn)行時(shí)環(huán)境(JavaRuntimeEnvironment)。計(jì)算機(jī)系統(tǒng)200中的多個(gè)軟件線程210在并發(fā)軟件環(huán)境208中并發(fā)地執(zhí)行為并發(fā)計(jì)算過(guò)程。例如,軟件線程210是包括針對(duì)實(shí)例化的Java對(duì)象執(zhí)行的軟件方法的Java程序中的執(zhí)行線程。軟件線程210各自可操作來(lái)訪問(wèn)共享資源216。共享資源216可以是適合于由并發(fā)軟件環(huán)境208中的線程訪問(wèn)的任何資源,諸如硬件或軟件資源、共享存儲(chǔ)區(qū)或其它存儲(chǔ)器、裝置、處理器或任何其它資源。例如,共享資源216可以是Java對(duì)象,諸如包括Java環(huán)境中的同步軟件方法的Java對(duì)象。并發(fā)軟件環(huán)境208采用一個(gè)或多個(gè)同步機(jī)制來(lái)確保對(duì)共享資源216的受控訪問(wèn)、并且避免多個(gè)軟件線程210同時(shí)使用共享資源216。例如,并發(fā)軟件環(huán)境208可以使用相互排斥(互斥體)算法、軟件鎖、同步監(jiān)視器、信號(hào)機(jī)或本領(lǐng)域已知的其它同步機(jī)制來(lái)同步軟件線程210。這種同步機(jī)制可以采用排斥結(jié)構(gòu)(exclusionaryconstruct)來(lái)避免共享資源216的同時(shí)使用。在這種同步機(jī)制中使用的排斥結(jié)構(gòu)可以包括鎖、監(jiān)視器和信號(hào)機(jī)。例如,可以通過(guò)軟件監(jiān)視器的使用而同步訪問(wèn)作為共享資源216的具有同步軟件方法的軟件對(duì)象的軟件線程210,以在任意一個(gè)時(shí)間點(diǎn)將對(duì)軟件對(duì)象的訪問(wèn)限制到單個(gè)線程。不同的操作狀態(tài)可以用于描述由排斥結(jié)構(gòu)同步的環(huán)境中操作的線程。尋求獲得對(duì)共享資源216的訪問(wèn)的、在計(jì)算機(jī)系統(tǒng)200中執(zhí)行的軟件線程210可以說(shuō)是尋求“獲取”與共享資源216相關(guān)聯(lián)的排斥結(jié)構(gòu)。類似地,當(dāng)前享有對(duì)共享資源216的同步訪問(wèn)的線程210可以說(shuō)是“持有”與共享資源216相關(guān)聯(lián)的排斥結(jié)構(gòu),也已知為軟件線程210的“持有(held)”狀態(tài)。用于實(shí)現(xiàn)共享資源216的共享的同步機(jī)制涉及進(jìn)入其它操作狀態(tài)的線程。同步機(jī)制可以要求尋求獲取排斥結(jié)構(gòu)的線程210在其可以持有排斥結(jié)構(gòu)之前進(jìn)入“旋轉(zhuǎn)(spin)”狀態(tài)。在“旋轉(zhuǎn)”狀態(tài)下的線程在處理器102上活動(dòng)地(actively)執(zhí)行、但不能訪問(wèn)與排斥結(jié)構(gòu)相關(guān)聯(lián)的共享資源216。通常,在“旋轉(zhuǎn)”狀態(tài)下的線程在其尋求獲取排斥結(jié)構(gòu)時(shí)不能執(zhí)行有用的工作,因而這種線程當(dāng)在“旋轉(zhuǎn)”狀態(tài)下時(shí)通常不執(zhí)行其它軟件例程或方法。同步機(jī)制可以導(dǎo)致線程210未能獲取針對(duì)共享資源216的排斥結(jié)構(gòu),而使線程在“阻止(blocked)”狀態(tài)下,從而不能訪問(wèn)共享資源216。在“阻止”狀態(tài)下的線程當(dāng)在“阻止”狀態(tài)下時(shí)不能執(zhí)行和停止經(jīng)受由計(jì)算機(jī)系統(tǒng)200中的任何處理器102進(jìn)行的處理。這種阻止可以是暫時(shí)的,其中排斥結(jié)構(gòu)隨后變?yōu)榭梢员痪€程210獲取。在線程210等待要由其它線程進(jìn)行的處理時(shí),持有排斥結(jié)構(gòu)的線程210可以進(jìn)入“等待”狀態(tài)。這種“等待”狀態(tài)通常由通知的接收而退出,或者在“定時(shí)等待”狀態(tài)下由預(yù)定時(shí)間段的終止而退出。在“等待”和“定時(shí)等待”狀態(tài)下的線程210不能執(zhí)行和停止經(jīng)受由計(jì)算機(jī)系統(tǒng)200中的任何處理器102進(jìn)行的處理,直到線程210接收到通知或者時(shí)間段終止為止。進(jìn)入“等待”狀態(tài)的線程通常釋放排斥結(jié)構(gòu),并在其退出“等待”狀態(tài)時(shí)重新獲取它。此外,線程210可以在“可運(yùn)行”狀態(tài)下,“可運(yùn)行”狀態(tài)為線程210能夠并準(zhǔn)備好在計(jì)算機(jī)系統(tǒng)200的處理器102上執(zhí)行、但當(dāng)前沒(méi)有分配處理器102給線程210執(zhí)行的狀態(tài)。每個(gè)軟件線程210包括線程狀態(tài)指示器212,用于為線程210記錄當(dāng)前同步狀態(tài)的指示214。指示214與特定線程210相關(guān)聯(lián),并且可以指示下列狀態(tài)中的任何或全部狀態(tài):“持有”;“旋轉(zhuǎn)”;“阻止”;“等待”(“等待”或“定時(shí)等待”);“可運(yùn)行”;以及軟件線程210的非同步狀態(tài)的指示。在一個(gè)實(shí)施例中,指示214由軟件線程自身設(shè)置。在替代實(shí)施例中,指示214由并發(fā)軟件環(huán)境208(諸如由Java運(yùn)行時(shí)環(huán)境中的虛擬機(jī))設(shè)置。現(xiàn)在將描述使用中的圖2的布置,以說(shuō)明本發(fā)明的實(shí)施例的優(yōu)點(diǎn)。在使用中,在軟件線程210的同步狀態(tài)改變前不久(shortly)或改變后不久設(shè)置指示214。例如,即將獲取用于訪問(wèn)共享資源216的排斥結(jié)構(gòu)的軟件線程210更新指示214,以反映“持有”狀態(tài)。類似地,即將進(jìn)入“旋轉(zhuǎn)”狀態(tài)的軟件線程210更新指示214,以反映“旋轉(zhuǎn)”狀態(tài)。在使用中,時(shí)間簡(jiǎn)檔器218對(duì)于一個(gè)或多個(gè)處理器102中的每一個(gè),輪詢和記錄程序計(jì)數(shù)器206的定期值到簡(jiǎn)檔器記錄222。時(shí)間簡(jiǎn)檔器218適配于針對(duì)在輪詢的處理器102上執(zhí)行的軟件線程210而記錄同步狀態(tài)到簡(jiǎn)檔器記錄222。同步狀態(tài)基于哪個(gè)線程210在所輪詢的處理器102上執(zhí)行的標(biāo)識(shí)以及由線程210存儲(chǔ)的同步狀態(tài)214的指示??梢砸赃@種方式確定和記錄涉及在一個(gè)或多個(gè)處理器102中的一個(gè)上執(zhí)行的狀態(tài)中的線程的狀態(tài)信息。這包括“旋轉(zhuǎn)”、“持有”狀態(tài),以及非同步執(zhí)行狀態(tài)。因而,在使用中,圖2的布置可操作來(lái)通過(guò)時(shí)間簡(jiǎn)檔器218的輪詢,以規(guī)則時(shí)間間隔記錄在并發(fā)軟件環(huán)境208中執(zhí)行的線程210的同步“持有”和“旋轉(zhuǎn)”狀態(tài)信息。這種輪詢可以是對(duì)于計(jì)算機(jī)系統(tǒng)200呈現(xiàn)極低的處理開(kāi)銷(xiāo)的精細(xì)粒度或原子過(guò)程,并且因而對(duì)并發(fā)軟件環(huán)境208的同步動(dòng)態(tài)產(chǎn)生基本可以忽略的影響。并且,關(guān)于并發(fā)軟件環(huán)境208,只要程序計(jì)數(shù)器206的值的輪詢以及同步狀態(tài)指示214的獲得不要求并發(fā)軟件環(huán)境208的主動(dòng)參與,則時(shí)間簡(jiǎn)檔器218的處理是被動(dòng)的。此外,用于多個(gè)軟件線程210的定期定時(shí)同步“持有”和“旋轉(zhuǎn)”狀態(tài)信息可以告知分析軟件線程210的同步行為的過(guò)程,以改善并發(fā)軟件環(huán)境208的效率、可操作性和可擴(kuò)展性。在一個(gè)實(shí)施例中,程序計(jì)數(shù)器206的每個(gè)值被解析為在處理器102上執(zhí)行的線程的執(zhí)行軟件方法的標(biāo)識(shí)。例如,對(duì)于由時(shí)間簡(jiǎn)檔器218記錄的程序計(jì)數(shù)器206的每個(gè)地址值,時(shí)間簡(jiǎn)檔器218可以使用解析器(resolver)來(lái)確定包括存儲(chǔ)在該地址中的指令的軟件線程210的軟件代碼的符號(hào)名稱。因而,對(duì)于由時(shí)間簡(jiǎn)檔器218記錄的每個(gè)地址,解析器檢索線程210中的符號(hào)名稱,包括函數(shù)、過(guò)程、子程序或方法名稱。解析器可以是時(shí)間簡(jiǎn)檔器218的功能,或者可以是存儲(chǔ)在存儲(chǔ)器204中的補(bǔ)充功能或工具。圖2的布置還可以包括計(jì)算組件,用于計(jì)算由時(shí)間簡(jiǎn)檔器218簡(jiǎn)檔化的、線程210在特定同步狀態(tài)下的規(guī)則時(shí)間間隔的比例。例如,可以計(jì)算線程210在“持有”狀態(tài)下的總時(shí)間的百分比。這種計(jì)算組件可以被包括為時(shí)間簡(jiǎn)檔器218的部分。替代地,這種計(jì)算組件可以是與由簡(jiǎn)檔器組件218生成的簡(jiǎn)檔器記錄222相互作用的獨(dú)立或附加的軟件或硬件組件。在優(yōu)選實(shí)施例中,線程狀態(tài)指示器212還記錄由軟件線程210尋求訪問(wèn)的共享資源216的標(biāo)識(shí)。例如,線程狀態(tài)指示器212可以將該標(biāo)識(shí)與同步狀態(tài)信息214一起記錄。這種標(biāo)識(shí)例如可以包括同步軟件方法、例程、裝置、數(shù)據(jù)項(xiàng)或其它共享資源的標(biāo)識(shí)符或?qū)ο蟮念惷4送?,在?yōu)選實(shí)施例中,解析器可操作來(lái)確定與由線程狀態(tài)指示器212記錄的共享資源216的標(biāo)識(shí)符相關(guān)聯(lián)的符號(hào)名稱。例如,將諸如軟件方法或函數(shù)的軟件例程的名稱與同步狀態(tài)指示214一起記錄。在共享資源216包括包括具有同步例程的對(duì)象的軟件對(duì)象(諸如同步軟件方法)時(shí),共享資源216可能對(duì)應(yīng)于由調(diào)用軟件例程調(diào)用的服務(wù)庫(kù)(servicelibrary)中的例程,所述服務(wù)庫(kù)諸如類庫(kù)、標(biāo)準(zhǔn)庫(kù)、服務(wù)例程或原(primitive)方法或函數(shù)。在這種情況下,記錄例程本身的指示可能是無(wú)益的(因?yàn)檫@種例程可被許多方法頻繁地調(diào)用),但是,可以附加地或替代地確定和記錄“調(diào)用”例程的標(biāo)識(shí)符??梢詮恼{(diào)用棧和/或解析器來(lái)識(shí)別這種“調(diào)用”例程。圖3是根據(jù)本發(fā)明優(yōu)選實(shí)施例的、針對(duì)在計(jì)算機(jī)系統(tǒng)200中執(zhí)行軟件線程210的并發(fā)軟件環(huán)境208記錄活動(dòng)的方法的流程圖。在步驟302,線程狀態(tài)指示器212記錄軟件線程210的同步狀態(tài)214的指示,所述指示與軟件線程210的標(biāo)識(shí)相關(guān)聯(lián)。在步驟304,時(shí)間簡(jiǎn)檔器218以規(guī)則時(shí)間間隔輪詢用于一個(gè)或多個(gè)處理器102的程序計(jì)數(shù)器206的值。在步驟306,時(shí)間簡(jiǎn)檔器218基于所輪詢的程序計(jì)數(shù)器值206和所記錄的狀態(tài)指示214來(lái)識(shí)別并記錄軟件線程210的一個(gè)或多個(gè)同步狀態(tài)。上述實(shí)施例適合于為在一個(gè)或多個(gè)處理器102上活動(dòng)地執(zhí)行的軟件線程210記錄同步“持有”和“旋轉(zhuǎn)”狀態(tài)信息。上述實(shí)施例依賴于輪詢程序計(jì)數(shù)器206和線程同步狀態(tài)指示214,并且因而僅提供用于在處理器102上活動(dòng)地執(zhí)行的線程的有用信息。未在處理器102上活動(dòng)地執(zhí)行的線程(諸如在“阻止”、“等待”(“等待”或“定時(shí)等待”)或“可運(yùn)行”狀態(tài)下的線程)將不會(huì)被上述時(shí)間簡(jiǎn)檔器218的輪詢所識(shí)別。因此,需要額外的方法來(lái)記錄這些狀態(tài)下的線程的活動(dòng)。圖4示出根據(jù)本發(fā)明優(yōu)選實(shí)施例的、在計(jì)算機(jī)系統(tǒng)200中實(shí)施的活動(dòng)記錄系統(tǒng)的增強(qiáng)布置。圖4的許多特征與如上關(guān)于圖2所述的特征相同,并且這里不會(huì)重復(fù)描述。圖4的布置關(guān)于圖2的增強(qiáng)之處在于:圖4的布置適合于在軟件線程410未在計(jì)算機(jī)系統(tǒng)400的處理器102中活動(dòng)地執(zhí)行的情況下,記錄在并發(fā)軟件環(huán)境408中的軟件線程410的同步狀態(tài)信息。圖4中描繪的布置可以補(bǔ)充圖2的布置,使得在特定實(shí)施例中,除關(guān)于圖4如下描述的特征之外,還可以實(shí)施關(guān)于圖2描述的特征。圖4的線程狀態(tài)指示器412可操作來(lái)記錄軟件線程410的同步狀態(tài)的指示,其中所述軟件線程停止在計(jì)算機(jī)系統(tǒng)400的處理器102中執(zhí)行。因而,在圖4的布置中,線程狀態(tài)指示器412記錄“阻止”、“等待”(“等待”或“定時(shí)等待”)和“可運(yùn)行”狀態(tài)的指示到同步狀態(tài)指示414。除此之外,圖4的線程狀態(tài)指示器412與如上關(guān)于圖2所述的基本相同。圖4的時(shí)間簡(jiǎn)檔器418可操作來(lái)識(shí)別空閑的一個(gè)或多個(gè)處理器102。如果沒(méi)有軟件線程410被調(diào)度到處理器102上執(zhí)行,則處理器102被認(rèn)為是空閑的。時(shí)間簡(jiǎn)檔器418諸如通過(guò)存儲(chǔ)處理器102在特定時(shí)間點(diǎn)是空閑的指示,來(lái)記錄這種空閑狀態(tài)(idleness)。在替代實(shí)施例中,時(shí)間簡(jiǎn)檔器418還可以操作來(lái)識(shí)別處理器102連續(xù)空閑的時(shí)間段,作為處理器102的空閑期。圖4的存儲(chǔ)器104還存儲(chǔ)調(diào)度監(jiān)視器424。調(diào)度監(jiān)視器424可操作來(lái)識(shí)別軟件線程410何時(shí)被調(diào)度到處理器102上執(zhí)行。調(diào)度監(jiān)視器424可被實(shí)施為與并發(fā)軟件環(huán)境和時(shí)間簡(jiǎn)檔器418共存的軟件例程。替代地,調(diào)度監(jiān)視器424可以在計(jì)算機(jī)系統(tǒng)400的操作系統(tǒng)或內(nèi)核中實(shí)施。可以想到,調(diào)度監(jiān)視器424可以完全或部分以硬件實(shí)施。在使用中,調(diào)度監(jiān)視器424識(shí)別軟件線程410到處理器102的調(diào)度。響應(yīng)于這種識(shí)別,調(diào)度監(jiān)視器424通過(guò)參考時(shí)間簡(jiǎn)檔器418而確定線程所調(diào)度到的處理器102緊挨在調(diào)度之前是否為空閑。如果處理器102空閑,則調(diào)度監(jiān)視器424獲得所調(diào)度的線程410的同步狀態(tài),以確定所調(diào)度的線程410是否在可以解釋(accountfor)處理器102的空閑狀態(tài)的同步狀態(tài)下。例如,如果用于所調(diào)度的線程410的同步狀態(tài)指示414指示線程410被阻止(“阻止”狀態(tài))直到調(diào)度點(diǎn),則所述阻止可以解釋處理器102的空閑狀態(tài)??梢詫?duì)軟件線程410的“阻止”、“等待”(“等待”和“定時(shí)等待”)以及“可運(yùn)行”狀態(tài)得出這種結(jié)論。在替代實(shí)施例中,當(dāng)對(duì)于處理器102記錄了連續(xù)的空閑期時(shí),同步狀態(tài)可以解釋該空閑期并可以歸因于該空閑期。在調(diào)度監(jiān)視器識(shí)別解釋處理器102的空閑狀態(tài)的所調(diào)度的線程410的同步狀態(tài)時(shí),調(diào)度監(jiān)視器諸如在簡(jiǎn)檔器記錄422中生成線程的同步狀態(tài)的記錄,并將空閑狀態(tài)歸因于所調(diào)度的線程和所調(diào)度的線程410的指示的同步狀態(tài)。以這種方式,可能是由線程410的特定同步狀態(tài)所導(dǎo)致的處理器102的空閑狀態(tài)歸因于這些狀態(tài)和線程。因而,圖4的布置可操作來(lái)為在并發(fā)軟件環(huán)境408中執(zhí)行的線程410記錄同步“阻止”、“等待”和“可運(yùn)行”狀態(tài)信息,并將這些狀態(tài)歸因于由時(shí)間簡(jiǎn)檔器418所識(shí)別的處理器102的空閑狀態(tài)。由時(shí)間簡(jiǎn)檔器418和調(diào)度監(jiān)視器424所進(jìn)行的檢查和輪詢可以是對(duì)于計(jì)算機(jī)系統(tǒng)400呈現(xiàn)極低的處理開(kāi)銷(xiāo)的精細(xì)粒度或原子過(guò)程,并且因而對(duì)并發(fā)軟件環(huán)境408的同步動(dòng)態(tài)產(chǎn)生基本可以忽略的影響。并且,關(guān)于并發(fā)軟件環(huán)境408,只要對(duì)處理器102空閑狀態(tài)的檢查和同步狀態(tài)信息414的輪詢不需要并發(fā)軟件環(huán)境408的主動(dòng)參與,則時(shí)間簡(jiǎn)檔器418和調(diào)度監(jiān)視器424的處理是被動(dòng)的。此外,對(duì)于多個(gè)軟件線程410的“阻止”、“等待”和“可運(yùn)行”狀態(tài)信息的記錄可以告知分析軟件線程410的同步行為的過(guò)程,以改善并發(fā)軟件環(huán)境408的效率、可操作性和可擴(kuò)展性。圖5是根據(jù)本發(fā)明優(yōu)選實(shí)施例的、針對(duì)在計(jì)算機(jī)系統(tǒng)400中執(zhí)行軟件線程410的并發(fā)軟件環(huán)境408記錄活動(dòng)的方法的流程圖。在步驟502,線程狀態(tài)指示器412記錄軟件線程410的同步狀態(tài)414的指示,在同步狀態(tài)414中軟件線程410停止在計(jì)算機(jī)系統(tǒng)400的處理器102中執(zhí)行。指示414與軟件線程410的標(biāo)識(shí)相關(guān)聯(lián)。在步驟504,時(shí)間簡(jiǎn)檔器418識(shí)別計(jì)算機(jī)系統(tǒng)400的空閑處理器102,并記錄處理器為空閑的指示。在步驟506,時(shí)間簡(jiǎn)檔器418識(shí)別處理器102的空閑狀態(tài)。在優(yōu)選實(shí)施例中,該空閑狀態(tài)被識(shí)別為其中處理器連續(xù)空閑的空閑期。在步驟508,調(diào)度監(jiān)視器424識(shí)別軟件線程410到處理器102的調(diào)度。在步驟510,該方法確定處理器是否空閑。在步驟512,該方法確定所調(diào)度的方法410的同步狀態(tài)是否可以解釋該空閑狀態(tài)(例如“阻止”、“等待”或“可運(yùn)行”狀態(tài))。在步驟514,調(diào)度監(jiān)視器424生成簡(jiǎn)檔器記錄422中的記錄,該記錄將處理器102的空閑狀態(tài)歸因于軟件線程410和軟件線程410的所指示的同步狀態(tài)。優(yōu)選地,時(shí)間簡(jiǎn)檔器418還可操作來(lái)響應(yīng)于識(shí)別線程到處理器102的調(diào)度的調(diào)度監(jiān)視器424而重置(reset)處理器102為空閑的指示。圖4的布置還可以包括用于計(jì)算由時(shí)間簡(jiǎn)檔器418和調(diào)度監(jiān)視器424所簡(jiǎn)檔化的、線程410在特定同步狀態(tài)下的時(shí)間比例的計(jì)算組件。例如,處理器102是空閑的總時(shí)間百分比的計(jì)算歸因于線程410在“阻止”狀態(tài)中??砂ㄟ@種計(jì)算組件作為時(shí)間簡(jiǎn)檔器418的部分或作為調(diào)度監(jiān)視器424的部分。替代地,這種計(jì)算組件可以是獨(dú)立或附加的軟件或硬件組件。在優(yōu)選實(shí)施例中,圖4的時(shí)間簡(jiǎn)檔器418還可以包括圖2的時(shí)間簡(jiǎn)檔器的定期(regular)程序計(jì)數(shù)器輪詢特征??梢圆捎糜蛇@種時(shí)間簡(jiǎn)檔器418進(jìn)行的程序計(jì)數(shù)器輪詢,以通過(guò)計(jì)數(shù)處理器102空閑期間的規(guī)則時(shí)間間隔的數(shù)目來(lái)測(cè)量空閑處理器102的空閑期。此外,時(shí)間簡(jiǎn)檔器418可以將空閑期記錄為規(guī)則時(shí)間間隔的計(jì)數(shù)與處理器102空閑的指示一起。在優(yōu)選實(shí)施例中,線程狀態(tài)指示器412還記錄軟件線程410尋求訪問(wèn)的共享資源416的標(biāo)識(shí),如上參考圖2所述。圖4的布置還可以包括用于執(zhí)行符號(hào)名稱的解析的解析器,如上參考圖2所述。只要所述本發(fā)明的實(shí)施例至少可以部分地使用軟件控制的可編程處理器件(諸如微處理器、數(shù)字信號(hào)處理器或其它處理期間)、數(shù)據(jù)處理裝置或系統(tǒng))實(shí)施,則將認(rèn)識(shí)到,用于配置可編程器件、裝置或系統(tǒng)以實(shí)施前述方法的計(jì)算機(jī)程序被認(rèn)為是本發(fā)明的方面。計(jì)算機(jī)程序例如可以被實(shí)施為源代碼,或者經(jīng)過(guò)編譯用于在處理器件、裝置或系統(tǒng)上實(shí)施,或者實(shí)施為目標(biāo)代碼。合適地,計(jì)算機(jī)程序以機(jī)器或器件可讀的形式存儲(chǔ)在載體介質(zhì)上,例如固態(tài)存儲(chǔ)器、磁存儲(chǔ)器(諸如磁盤(pán)或磁帶)、光學(xué)或磁光可讀存儲(chǔ)器(諸如壓縮光盤(pán)或數(shù)字通用光盤(pán)等),并且處理器件使用該程序或其一部分來(lái)配置它用以操作。計(jì)算機(jī)程序可以從以通信介質(zhì)實(shí)施的遠(yuǎn)程源提供,所述通信介質(zhì)諸如為電子信號(hào)、無(wú)線電頻率載波或光載波。這種載體介質(zhì)也被認(rèn)為是本發(fā)明的方面。本領(lǐng)域技術(shù)人員將理解,盡管已經(jīng)關(guān)于上述示例實(shí)施例描述了本發(fā)明,但本發(fā)明不限于此,并且存在落入本發(fā)明范圍內(nèi)的許多可能的變化和修改。本發(fā)明的范圍包括任何新穎的特征或其中公開(kāi)的特征的組合。申請(qǐng)人特此發(fā)出通知,在本申請(qǐng)或源于其的任何其它申請(qǐng)的審查期間,可以為這種特征或特征的組合制定新的權(quán)利要求。特別地,參考所附權(quán)利要求,獨(dú)立權(quán)利要求的特征可以與其從屬權(quán)利要求的特征組合,并且各個(gè)從屬權(quán)利要求的特征可以以任何適當(dāng)?shù)姆绞?、而不止以?quán)利要求中列舉的具體組合方式而組合。