專利名稱:空閑轉換采樣的制作方法
技術領域:
本發(fā)明一般涉及計算環(huán)境。更具體地,本公開涉及采樣技術。
背景技術:
在應用特征分析(prof iling)工具中典型地使用基于時間的或基于硬件事件的采樣技術來確定資源的特定使用。當前的方法是周期性地產生中斷以獲取樣本。當采取中斷時,收集并記錄樣本數(shù)據(jù)。樣本數(shù)據(jù)的例子是中斷的進程/線程、正執(zhí)行的指令或可選地在樣本時間正被訪問的數(shù)據(jù)地址。此后聚集收集的數(shù)據(jù),并生成按照地址、符號、進程等顯示樣本分布的報告。多種工具是基于該技術的。樣本的完整執(zhí)行上下文典型地沒有被記錄,且不在報告中提供。已做出嘗試,通過在樣本時間獲得調用棧而改進該技術?,F(xiàn)有的工具集可試圖直 接遍歷(walk)調用?;蛘{用單獨的(采樣器)線程上的函數(shù)來獲得被中斷線程的調用棧。試圖在中斷級遍歷調用棧不理想,因為一些應用可具有已被頁調出(page out)的棧。此夕卜,棧遍歷代碼典型地執(zhí)行存儲器分配,這在中斷級是不允許的。結果,當被請求時,可利用用戶模式的采樣線程來遍歷調用棧。在多處理器系統(tǒng)上,請求單獨的線程收集被中斷線程的調用??稍试S被中斷線程遷移到不同的處理器并向前進展,即,繼續(xù)執(zhí)行,同時收集調用棧。收集的調用棧不會反應線程在其被中斷時的狀態(tài)。
發(fā)明內容
在本發(fā)明的一個方面,提供了一種計算機程序產品。該計算機程序產品包括具有計算機可讀程序的計算機可用介質。當在計算機上執(zhí)行時,該計算機可讀程序使得計算機基于事件生成樣本。而且,當在計算機上執(zhí)行時,該計算機可讀程序使得計算機使用調度監(jiān)視器識別在當前處理器上被調度的下一個調度的被監(jiān)視線程。此外,當在計算機上執(zhí)行時,該計算機可讀程序使得計算機設置下一個調度的被監(jiān)視線程的處理器親合性(affinity),使得下一個調度的被監(jiān)視線程僅在當前處理器上運行,而不能遷移到不同的處理器上。當在計算機上運行時,該計算機可讀程序也使得計算機在下一個調度的被監(jiān)視線程的處理器親合性已被設置到當前處理器上后,使用在當前處理器上運行的采樣器線程獲取下一個調度的被監(jiān)視線程調用棧。此外,當在計算機上執(zhí)行時,該計算機可讀程序使得計算機在已獲得下一個調度的被監(jiān)視線程調用棧后,恢復下一個調度的被監(jiān)視線程的處理器親合性。當在計算機上執(zhí)行時,計算機可讀程序使得計算機記錄用于下一個調度的被監(jiān)視線程的調用棧。在本發(fā)明的另一方面,提供了一種過程。該過程基于事件產生樣本。而且,該過程使用調度監(jiān)視器識別被當前處理器調度的下一個調度的被監(jiān)視線程。此外,該過程設置下一個調度的被監(jiān)視線程的處理器親合性,使得下一個調度的被監(jiān)視線程僅在當前處理器上運行,而不能遷移到不同的處理器。該過程也在下一個調度的被監(jiān)視線程的處理器親合性已被設置到當前處理器上后,使用在當前處理器上運行的采樣器線程獲取下一個調度的被監(jiān)視線程調用棧。此外,該過程在已獲得下一個調度的被監(jiān)視線程調用棧后,恢復下一個調度的被監(jiān)視線程的處理器親合性。該程也記錄用于下一個調度的被監(jiān)視線程的調用棧。在本發(fā)明的又一方面,提供了一種系統(tǒng)。該系統(tǒng)包括基于事件生成樣本的當前處理器。而且,該系統(tǒng)包括操作系統(tǒng),其(i )使用調度監(jiān)視器,識別由當前處理器調度的下一個調度的被監(jiān)視線程,以及( )設置下一個調度的被監(jiān)視線程的處理器親合性,使得下一個調度的被監(jiān)視線程僅在當前處理器上運行,而不能遷移到不同的處理器。此外,該系統(tǒng)包括特征分析器,其(i )在下一個調度的被監(jiān)視線程的處理器親合性已被設置到當前處理器上后,使用被配置為僅在當前處理器上運行的采樣器線程,獲取下一個調度的被監(jiān)視線程,(ii )在已獲得下一個調度的被監(jiān)視線程調用棧后,恢復下一個調度的被監(jiān)視線程的處理器親合性,以及(III)記錄用于下一個調度的被監(jiān)視線程的調用棧。在本發(fā)明的另一方面,提供了一種計算機程序產品。該計算機程序產品包括具有計算機可讀程序的計算機可用介質。當在計算機上執(zhí)行時,該計算機可讀程序使得計算機基于事件生成樣本。而且,當在計算機上執(zhí)行時,該計算機可讀程序使得計算機使用調度監(jiān)視器識別由當前處理器調度的最后調度的被監(jiān)視線程。此外,當在計算機上執(zhí)行時,該計算 機可讀程序使得計算機設置最后調度的被監(jiān)視線程的處理器親合性,使得最后調度的被監(jiān)視線程僅在當前處理器上運行,而不能遷移到不同的處理器。當在計算機上執(zhí)行時,該計算機可讀程序也使得計算機在最后調度的被監(jiān)視線程的處理器親合性已被設置到當前處理器后,使用在當前處理器上運行的采樣器線程獲取最后調度的被監(jiān)視線程。此外,當在計算機上執(zhí)行時,該計算機可讀程序使得計算機在已獲得最后調度的被監(jiān)視線程調用棧后,恢復最后調度的被監(jiān)視線程的處理器親合性。當在計算機上執(zhí)行時,計算機可讀程序使得計算機記錄用于最后調度的被監(jiān)視線程的調用棧。
現(xiàn)在將參考附圖、僅通過舉例的方式描述本發(fā)明的實施例,在附圖中圖I示出了根據(jù)本發(fā)明實施例采樣空閑轉換(idle transition)的采樣系統(tǒng)。圖2A示出了根據(jù)本發(fā)明實施例可被中斷處理器利用以用于到空閑線程(to_idle_thread)的過程。圖2B示出了根據(jù)本發(fā)明實施例的可被中斷處理器利用以用于來自空閑線程(from_idle_thread)的過程。圖3A示出了根據(jù)本發(fā)明實施例的可被調度器中的調度監(jiān)視代碼利用以用于到空閑線程的過程。圖3B示出了根據(jù)本發(fā)明實施例的可被調度器中的調度監(jiān)視代碼利用以用于來自空閑線程的過程。圖4示出了根據(jù)本發(fā)明實施例的用于通知特征分析器的過程。圖5示出了根據(jù)本發(fā)明實施例的用于在過程塊中排隊的中斷后端的過程。圖6示出了根據(jù)本發(fā)明實施例的在作為過程塊的結果而被喚醒后特征分析器執(zhí)行的過程。圖7示出了根據(jù)本發(fā)明實施例的用于特征分析器向操作系統(tǒng)通知樣本已完成的過程。
圖8A示出了根據(jù)本發(fā)明實施例的可被空閑轉換采樣利用以用于來自空閑線程的過程。圖SB示出了根據(jù)本發(fā)明實施例的可被空閑轉換采樣利用以用于到空閑線程的過程。圖9示出了根據(jù)本發(fā)明實施例的采樣空閑轉換的系統(tǒng)的框圖。
具體實施例方式一種方法和系統(tǒng)使用采樣技術來確定為什么一個或多個處理器沒有被完全利用。確定為什么在一個或多個處理器上運行的應用沒有伸縮(scale)可以是非常困難的。在某些環(huán)境中,特別是支持事務處理的那些環(huán)境中,重要的是確定最大事務率并驅使系統(tǒng)完全利用所有的處理資源。當達到最大事務率、但不是所有的處理器都被完全利用時,有某種類型的瓶頸阻止完全利用。通過確定用于在處理器變得空閑之前執(zhí)行的最后線程(即,到空閑·線程)的上下文,以及/或用于在處理器具有工作可做之后而執(zhí)行的第一個線程(即,來自空閑線程)的上下文,可獲得信息以幫助確定瓶頸的原因。一種方法是收集用于可對瓶頸有貢獻的那些線程的調用棧。即,例如,采樣代碼可簡單地獲得僅用于這些線程的調用棧,所述線程最近運行于在樣本時間空閑的處理器上。這涉及保持跟蹤哪個線程在哪個處理器上運行,以便收集用于正確線程的調用棧。但是,當正在收集調用棧時,這些線程可能遷移并在其他處理器上執(zhí)行。保持除了將收集在其上的調用棧的處理器之外的所有的處理器繁忙可阻止線程遷移。這可通過使得采樣器線程在這些處理器上自旋(spin)直到獲得用于感興趣的線程的調用棧而完成,但這會損害整體應用性能。反之,通過阻止感興趣的線程遷移到不同的處理器(這可在一個實施例中通過設置其處理器親合性以將其限制為僅在一個處理器上運行而完成),其他的處理器不需要被自旋,這樣其他的處理器能自由地繼續(xù)運行應用。因此,通過阻止線程遷移,存在最小的應用性能惡化。不是通過喚醒所有的采樣器線程(即,每個處理器一個線程)且使得采樣器線程自旋直到獲得調用棧而嚴重影響正被特征分析的應用的性能,一種方法、系統(tǒng)和計算機程序產品可設置處理器親合性以阻止線程遷移,這對被特征分析的應用具有最小的性能損害,并且也允許采樣空閑轉換。在一個實施例中,對于已被看到的調用棧,僅遞增發(fā)生計數(shù)??衫玫娇臻e(to_idle)處理和來自空閑(from_idle)處理中的任一個或二者來設置處理器親合性以防止線程遷移。利用了采樣方法。圖I示出了根據(jù)本發(fā)明實施例的采樣空閑轉換的采樣系統(tǒng)100。采樣系統(tǒng)100包括與對應用102進行特征分析的特征分析器104交互的應用102。特征分析器104與操作系統(tǒng)106交互。特征分析器104幫助確定為什么處理器未被充分利用,即,什么使得處理器處于空閑而不是執(zhí)行有用的工作。該處理基于采樣何時處理器空閑。由于調用棧在樣本時間被收集,可精確確定對空閑狀態(tài)潛在地具有貢獻的代碼。確定代碼的位置和導致代碼到該位置的調用序列。與采樣同時,調度器108通過調度監(jiān)視代碼監(jiān)視線程調度。該代碼是操作系統(tǒng)的一部分或通過設備驅動器(device driver)或內核擴展而被添加。關于到線程和/或來自線程的信息也可被存儲。彼此異步地發(fā)生一些事情。調度監(jiān)視代碼正在監(jiān)視線程調度。而且,處理器以恒定速度(即,基于時間或在事件的每η次發(fā)生時,即,基于事件)產生樣本。而且,采樣器線程偵聽命令以使得它們獲取感興趣的線程的調用棧,這由特征分析器104執(zhí)行。采樣器線程是特征分析器線程。可利用許多采樣器線程,因為可利用多個處理器。每個采樣器線程具有對單個處理器的親合性。采樣器線程可以是非常高優(yōu)先級的線程,這樣當被信號通知時它們立即運行以進行諸如獲取目標線程的調用棧的工作。目標線程是其調用棧將被獲得的線程。而且,目標處理器是這樣的處理器,其上運行有目標線程,且其上親合性被設置,這樣目標線程保持在該處理器上,直到獲得其調用棧。一旦因為采樣到空閑或來自空閑而做出決定,將獲得目標線程的調用棧。目標線程在該時間內被阻止進行任何向前進展,除非需要向前進展以便允許獲取調用棧。換句話說,目標線程被保持在其所在之處,直到收集到調用棧。之后,目標線程可恢復。由于調用棧由特征分析器采樣器線程收集,目標線程有可能開始運行在另一個可用的處理器上。在采樣器線程開始收集調用棧時,目標線程可能不再位于其被采樣的點上,且調用??赡懿粫_地反映在樣本時間目標線程在哪里。不是通過將目標線程“擋在”(box out)除了目標處理器以外的處理器(B卩,給所 有其他處理器無用的繁忙的工作以使它們自旋,這樣它們對于目標線程來說不是可用于在其上運行的)之外來顯著地阻礙應用性能,目標線程可在其上運行的處理器組被限定為目標處理器。換句話說,其余的處理器不會自旋,且可繼續(xù)執(zhí)行真正的工作。在目標線程的調用棧被獲取時,僅目標處理器受到影響。一旦目標的調用棧被獲取,目標線程被允許再次在任何可用的處理器上運行。設置處理器親合性,以使得目標線程僅可在其具有親合性的一個處理器上運行。米樣系統(tǒng)100可具有多個處理器。例如,米樣系統(tǒng)100可具有第一處理器112、第二處理器114…以及第η個處理器116。在給定的時間僅一個線程可在每個處理器上運行。但是,該線程有可能在不同的處理器和不同的時間運行。在采樣系統(tǒng)100中,一個或多個處理器基于時間或基于事件產生中斷。中斷可啟動樣本。因此,每個處理器可產生中斷,而不管每個其他處理器的狀態(tài),例如,空閑或不空閑。用于每個處理器的中斷由硬件產生,并由中斷處理器(interrupt handler) 110處理,其確定中斷發(fā)生所在的處理器是否空閑,即,是否沒有線程在特定處理器上運行,或不空閑。中斷處理器110啟動收集調用棧。而且,中斷處理器可通知或信號通知特征分析器采樣器線程。在一個實施例中,如果中斷處理器110確定特定處理器是空閑的,則中斷處理器110可發(fā)送諸如延遲處理標志的標志到調度器108,其隨后可以調度或不調度采樣器線程在該特定處理器上運行以采樣目標線程。為避免在采樣期間的線程遷移,可建立線程到特定處理器的處理器親合性。對于來自空閑線程,調度器108設置處理器親合性。對于到空閑線程,中斷處理器110或特征分析器104可設置處理器親合性。在來自空閑處理期間,可將通知從調度器108發(fā)送給特征分析器104。被喚醒并在處理器空閑后運行的第一感興趣的被監(jiān)視線程很可能是引起瓶頸的線程。隨著系統(tǒng)的運行,調度監(jiān)視代碼等著被告知保存下一個將運行的感興趣的線程,例如,觀察延遲處理標志的設置。在其上處理器是空閑的樣本之后,采樣代碼通過發(fā)送/設置延遲處理標志,告知調度監(jiān)視代碼這么做。調度監(jiān)視代碼將保存在處理器被檢測到在前一個樣本中是空閑的之后運行的第一感興趣的/被監(jiān)視的線程。同時,隨著樣本的發(fā)生,確定處理器是否空閑。如果處理器繁忙,什么也不做。如果處理器空閑,為調度監(jiān)視代碼設置延遲處理標志以開始監(jiān)視線程調度并保存將被調度在處理器上的下一個感興趣的/被監(jiān)視的線程。調度監(jiān)視代碼隨后清理延遲處理標志。樣本隨后完成。同樣的處理可一次發(fā)生在多于一個處理器上。例如,如果兩個處理器是空閑的,并碰巧在基本上相同的時間調度感興趣的線程,則兩個采樣器線程可同時獲取調用棧。而且,到空閑通知可從中斷處理器110被發(fā)送到特征分析器104。在處理器變得空閑之前在其上運行的最后感興趣的/被監(jiān)視的線程很可能被某種資源競爭影響。例如,該線程可能不會繼續(xù),因為它在等待某種被競爭的資源。在到空閑線程后其他線程不可用于運行。隨著系統(tǒng)運行,調度監(jiān)視代碼記住在每個處理器上運行的最后感興趣的線程。由于現(xiàn)在被記住的線程可能先前已在不同的處理器上被記住,將它從其他處理器的記住列表中移除。同時,發(fā)生基于時間或基于事件的周期性樣本。在每個樣本處,確定處理器是否空閑。如果處理器繁忙,不做任何事情。如果處理器空閑,確定感興趣的被監(jiān)視線程是否最后在該處理器上運行。如果感興趣的線程最后在該處理器上運行,則該線程的處理器親合性被設置到當前處理器。 在一個實施例中,僅利用來自空閑線程。在可替換的實施例中,僅利用到空閑線程。在又一個可替換的實施例中,利用來自空閑線程和到空閑線程二者。在另一個實施例中,可與調度器108結合利用諸如調度監(jiān)視器的組件。調度監(jiān)視器可以是操作系統(tǒng)106的一部分,或作為內核擴展或設備驅動器的一部分被添加。在另一個實施例中,諸如中斷后端工作器(interrupt back-end worker)、offlevel處理工作器、中斷后端工作器(interrupt backend worker)等組件可作為內核擴展或設備驅動器的一部分被添加。需要該組件,因為可在中斷層執(zhí)行的動作集是有限的,且在中斷處理器完成之后,一些工作必須被推遲到隨后的時間。特征分析器104可獲取調用棧,即,執(zhí)行上下文。而且,特征分析器104可恢復處
理器親合性。圖2A示出了根據(jù)本發(fā)明實施例的可由中斷處理器110利用的用于到空閑線程的過程200。在過程塊202,過程200確定被中斷進程id (“PID”)以及/或線程id (“TID”)。而且,在判定塊204,過程200確定微處理器是否空閑。如果微處理器不空閑,過程200前進到過程塊210以恢復被中斷的線程。或者,如果微處理器是空閑的,過程200前進到判定塊206以確定由調度監(jiān)視代碼保存的到空閑PID是否是感興趣的。如果保存的到空閑PID不是感興趣的,過程200前進到過程塊210以在被中斷線程中恢復。或者,如果保存的到空閑PID是感興趣的,過程200前進到過程塊208以通知特征分析器。過程200然后前進到過程塊210以恢復被中斷線程。圖2B示出了根據(jù)本發(fā)明實施例的可由中斷處理器110利用的用于來自空閑線程的過程250。在過程塊252,過程250確定被中斷的PID/TID。而且,在判定塊254,過程250確定微處理器是否空閑。如果微處理器不空閑,過程250前進到過程塊258以恢復被中斷線程。或者,如果微處理器是空閑的,過程250前進到判定塊255以確定延遲處理標志是否已被設置。如果已設置延遲處理標志,過程250前進到過程塊258以恢復被中斷線程。如果還未設置延遲處理標志,過程250前進到過程塊256以設置用于調度器108的延遲處理標志。過程250隨后前進到過程塊258以恢復被中斷線程。
圖3A示出了根據(jù)本發(fā)明實施例的可由調度器108利用的用于到空閑線程的過程300。在判定塊302,過程300確定是否有感興趣的離開(outgoing)線程。如果沒有感興趣的離開線程,過程300前進到過程塊306以繼續(xù)線程切換。如果有感興趣的離開線程,過程300繼續(xù)到過程塊304以保存離開PID和/或TID。過程300隨后前進到過程塊305以從其他處理器的保存的PID/TID列表移除離開PID/TID。過程300隨后前進到過程塊306以繼續(xù)線程切換。圖3B示出了根據(jù)本發(fā)明實施例的可由調度器108使用的用于來自空閑線程的過程350。在判定塊352,過程350確定是否已設置延遲處理標志。如果未設置延遲處理標志,過程350前進到過程塊360以繼續(xù)線程切換?;蛘?,如果已設置延遲處理標志,過程350前進到判定塊354以確定是否有感興趣的進來(incoming)線程。如果沒有感興趣的進來線程,過程350前進到過程塊360以繼續(xù)線程切換。或者,如果有感興趣的進來線程,過程350前進到過程塊356以重置延遲處理標志。過程350隨后前進到處理快358以通知特征分析器104。另外,過程350隨后前進到過程塊350以繼續(xù)線程切換。
圖4示出了根據(jù)本發(fā)明實施例的用于通知特征分析器104的過程400。在判定塊402,過程400確定是否有特征分析器要通知。如果沒有特征分析器要通知,過程前進到完成塊408。或者,如果有特征分析器要通知,過程400前進到過程塊404以鎖存和/或保存通知數(shù)據(jù)。過程400前進到過程塊406以排隊中斷后端。結果,由操作系統(tǒng)106來排隊工作項。當由操作系統(tǒng)106出隊該中斷后端時,該工作項中的一條信息是將運行的工作器功能的地址。過程400隨后前進到完成塊408。圖5示出了根據(jù)本發(fā)明實施例的用于在過程塊406中執(zhí)行中斷后端的過程500。在過程塊502,過程500指示未完成的樣本。而且,過程500隨后前進到過程塊504以將目標線程的處理器親合性設置到當前處理器。此外,過程500隨后前進到過程塊506以喚醒特征分析器。圖6示出了根據(jù)本發(fā)明實施例的在作為過程塊506的結果由中斷處理器或調度器中的任一個發(fā)送信號后由特征分析器執(zhí)行的過程600。在過程塊602,過程600使特征分析器等待事件或信號。如果線程是到空閑線程,事件或信號來自中斷處理器110。如果線程是來自空閑線程,事件或信號來自調度器108。而且,在過程塊604,過程600接收來自操作系統(tǒng)106的信號。此外,在過程塊606,過程600讀取包含關于目標線程的信息的樣本數(shù)據(jù)。在過程塊608,過程600請求用于目標線程的調用棧。而且,在過程塊610,過程600恢復目標線程的處理器親合性。在過程塊612,過程600處理返回的調用棧。在一個實施例中,返回的調用棧的處理可涉及將返回的調用棧遍歷到樹中。而且,可增加到空閑計數(shù)和/或來自空閑計數(shù)。到空閑計數(shù)或來自空閑計數(shù)指示調用棧(即調用序列)多少次被看到在葉節(jié)點結束。在過程塊614,過程600通知操作系統(tǒng)106樣本已完成。過程600隨后返回到過程塊602以等待事件或信號。圖7示出了根據(jù)本發(fā)明實施例的過程700,其通知操作系統(tǒng)106樣本已完成。在過程塊702,樣本已完成。而且,在過程塊704,過程700指示沒有未完成的樣本。在具有未完成的樣本的處理器上不啟動額外的樣本。此外,在過程塊706,過程700重新初始化中斷。在一個實施例中,用于在處理器變得空閑之前的最后監(jiān)視的線程的空閑轉換報告可通過在每個處理器的表中維護最后調度項而被支持。當發(fā)生基于時間的樣本且該樣本中斷空閑的處理器時,采樣器線程被喚醒并獲得最后監(jiān)視的線程的調用棧。它的調用棧被遍歷到樹中,且剛插入的調用棧的葉節(jié)點的基本到空閑計數(shù)被遞增。為了獲得來自空閑被監(jiān)視線程的反映在其變得空閑時其狀態(tài)的調用棧,調用棧必須在處理器空閑時或者在確定線程將被調度時并在其獲得機會執(zhí)行前被獲取。在任一種情況下,用于到空閑樣本被獲取后所調度的第一個被監(jiān)視線程的調用棧被遍歷到樹中,且剛插入的調用棧的葉節(jié)點的基本來自空閑十進制計數(shù)被遞增。可生成并查看報告。當獲取了樣本并確定處理器空閑時,采樣代碼向調度器監(jiān)視代碼指示在該處理器上的下一個調度的被監(jiān)視線程需要被采樣。該線程在每個處理器的控制塊中被識別,且直到下一個樣本被提取時才被更新。當調度器監(jiān)視代碼檢測到來自空閑線程調用棧應當被記錄且將被調度的線程是被監(jiān)視的線程,則它反而使得采樣器線程被調度。在一個實施例中,這可通過排隊中斷后端或第二級中斷處理器(其具有強制采樣線程處理用于被監(jiān)視線程的調用棧的指示)來完成。在另一個實施例中,調度監(jiān)視代碼可直接強制下一個調度采樣線程,其具有獲得用于被監(jiān)視的線程的調用棧所需的信息。該信息可簡單地通過更新映射的樣本數(shù)據(jù)區(qū)域中的來自空 閑被監(jiān)視線程標識而被傳遞。如果用于來自空閑線程的調用棧在其被調度前不能被獲取,則用于不是當前正被執(zhí)行的線程的調度??稍谔幚砥骺臻e時被獲取。這些??上抻谝蛔蛹?,諸如,僅是那些在空閑的處理器上最后調度的子集。也可能存在其他的標準,諸如,排除先前沒有返回棧的線程或被識別為是守護(daemon)線程的線程。如果來自空閑線程的棧在處理器空閑時被捕獲,則該先前被捕獲的調用??稍谝院?諸如,在下一個本樣時)被使用。線程的該子集可限于僅是在空閑的處理器上最后被調度的那些。不同的采樣器線程可同時獲取棧。一些量的邏輯可識別其調用棧正被獲取的線程列表,并確保它們不會作為不同處理器上的時間問題的結果而被復制。圖8A示出了根據(jù)本發(fā)明實施例的可為空閑轉換采樣利用的用于來自空閑線程的過程800。在過程塊802,過程800基于事件產生樣本。而且,在過程塊804,如果基于中斷確定一處理器空閑,過程800利用調度監(jiān)視器識別由該處理器調度的下一個調度的被監(jiān)視線程。此外,在過程塊806,過程800設置下一個調度的被監(jiān)視線程的處理器親合性,使得下一個調度的被監(jiān)視線程僅在該處理器上運行,而不能遷移到不同的處理器。在過程塊808,在下一個調度的被監(jiān)視線程的處理器親合性已被設置到該處理器后,過程800利用在該處理器上運行的被采樣線程,獲取下一個調度的被監(jiān)視線程調用棧。此外,在過程塊810,在已獲得下一個調度的被監(jiān)視線程調用棧后,過程800恢復下一個調度的被監(jiān)視線程的處理器親合性。在過程塊812,過程800記錄用于下一個調度的被監(jiān)視線程的調用棧。該記錄可以是報告的形式。圖SB示出了根據(jù)本發(fā)明實施例的可為空閑轉換采樣利用的用于到空閑線程的的過程850。在過程塊852,過程850基于事件產生樣本。而且,在過程塊854,如果基于中斷確定一處理器空閑,過程850利用調度監(jiān)視器識別由該處理器調度的最后調度的被監(jiān)視線程。此外,在過程塊806,過程850設置最后調度的被監(jiān)視線程的處理器親合性,使得最后調度的被監(jiān)視線程僅在該處理器上運行,而不能遷移到不同的處理器。而且,在處理器塊858,通過最后調度的被監(jiān)視線程調用棧,過程850獲得用于最后調度的被監(jiān)視線程的執(zhí)行上下文。此外,在過程塊860,在已獲得最后調度的被監(jiān)視線程調用棧后,過程850恢復最后調度的被監(jiān)視線程的處理器親合性。在過程塊864,過程850記錄用于最后調度的被監(jiān)視線程的調用棧。記錄可以是報告的形式。在此描述的過程可以在一個或多個通用的、多用的或專用的微處理器中實現(xiàn)。這樣的微處理器將執(zhí)行指令(不管是匯編、編譯或機器級的)以執(zhí)行所述過程。這些指令可由本領域普通技術人員根據(jù)對應于所述過程的圖的描述而編寫,并被存儲或傳遞在計算機可讀介質上。也可使用源代碼或任何其他已知的計算機輔助設計工具來創(chuàng)建這些指令。圖9示出了根據(jù)本發(fā)明實施例的采樣空閑轉換的系統(tǒng)900的框圖。在一個實施例中,系統(tǒng)900適于存儲和/或執(zhí)行程序代碼,并使用通用計算機或任何其他硬件等價物而被實施。由此,系統(tǒng)900包括處理器902 (其可被稱為“微處理器”)、存儲器912 (例如,隨機存取存儲器(“RAM”),以及/或只讀存儲器(“ROM”))、特征分析器104以及各種輸入/輸出設備904。
處理器902通過系統(tǒng)總線直接或間接耦合到存儲器912。存儲器912可包括在程序代碼的實際執(zhí)行期間使用的本地存儲器、大容量存儲器,以及/或高速緩存存儲器,其提供至少一部分程序代碼的臨時存儲,以便降低在執(zhí)行期間必須從大容量存儲器中獲取代碼的次數(shù)。輸入/輸出設備904可直接地或通過介于其間的輸入/暑促控制器耦合到系統(tǒng)900。而且,輸入/輸出設備904可包括鍵盤、小鍵盤、鼠標、用于捕獲語音命令的話筒、指點設備以及其他可被本領域普通技術人員識別的用戶輸入設備。而且,輸入/輸出設備904可包括接收器、發(fā)射器、揚聲器、顯示器、圖像捕獲傳感器、生物識別傳感器等。此外,輸入/輸出設備404可包括存儲設備,諸如磁帶驅動器、軟盤驅動器、硬盤驅動器、光盤(“CD”)驅動器、數(shù)字視頻盤(“DVD”)驅動器等。網(wǎng)絡適配器也可被耦合到系統(tǒng)900以使得系統(tǒng)900通過介于其間的私有或共有網(wǎng)絡變得耦合到其他系統(tǒng)、遠程打印機或存儲裝置。調制解調器、線纜調制解調器以及以太網(wǎng)卡僅是當前可獲得一些網(wǎng)絡適配器的類型。應當理解,在此描述的方法和系統(tǒng)可以采取完全硬件實施例、完全軟件實施例或包含硬件和軟件元件的實施例的形式。如果利用軟件來實施方法或系統(tǒng),軟件可包括但不限于固件、駐留軟件、微代碼等。盡管在圖9中圖示的實施例中僅清楚地示出一個微處理器,系統(tǒng)可具有多于一個的微處理器。在此描述的任何配置可與虛擬機一起使用。虛擬機可被配置為保持跟蹤調用狀態(tài)并返回該狀態(tài),該狀態(tài)引用虛擬機支持的接口以返回調用棧。例如,關于線程執(zhí)行的信息可通過蹤跡(trace)數(shù)據(jù)而獲得。該信息可包括從與感興趣的線程有關的調用棧獲得調用棧信息。可利用虛擬機來獲取調用棧信息。虛擬機可使用各種方法來獲得調用棧信息。例如,可利用進入/退出事件、應用計時器滴答、或采樣被被插裝值的插裝代碼。選擇的采樣線程可發(fā)送調用到虛擬機以獲得調用棧信息。選擇的采樣線程可通過虛擬機工具接口發(fā)送到虛擬機的調用。虛擬機工具接口可返回調用棧信息到采樣線程或可將調用棧信息存儲在某個工作區(qū)域。獲得信息可被放置于樹中以用于以后的分析。所屬技術領域的技術人員知道,本發(fā)明可以實現(xiàn)為系統(tǒng)、方法或計算機程序產品。因此,本公開可以具體實現(xiàn)為以下形式,即可以是完全的硬件、也可以是完全的軟件(包括固件、駐留軟件、微代碼等),還可以是硬件和軟件結合的形式,本文一般稱為“電路”、“模塊”或“系統(tǒng)”。此外,在一些實施例中,本發(fā)明還可以實現(xiàn)為在一個或多個計算機可讀介質中的計算機程序產品的形式,該計算機可讀介質中包含計算機可讀的程序代碼??梢圆捎靡粋€或多個計算機可讀的介質的任意組合。計算機可讀介質可以是計算機可讀信號介質或者計算機可讀存儲介質。計算機可讀存儲介質例如可以是一但不限于——電、磁、光、電磁、紅外線、或半導體的系統(tǒng)、裝置或器件,或者任意以上的組合。計算機可讀存儲介質的更具體的例子(非窮舉的列表)包括具有一個或多個導線的電連接、便攜式計算機磁盤、硬盤、隨機存取存儲器(RAM)、只讀存儲器(ROM)、可擦式可編程只讀存儲器(EPR0M或閃存)、光纖、便攜式緊湊磁盤只讀存儲器(CD-ROM)、光存儲器件、磁存儲器件、或者上述的任意合適的組合。在本文件中,計算機可讀存儲介質可以是任何包含或存儲程序的有形介質,該程序可以被指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結合使用。計算機可讀的信號介質可以包括在基帶中或者作為載波一部分傳播的數(shù)據(jù)信號,其中承載了計算機可讀的程序代碼。這種傳播的數(shù)據(jù)信號可以采用多種形式,包括——但 不限于——電磁信號、光信號或上述的任意合適的組合。計算機可讀的信號介質還可以是計算機可讀存儲介質以外的任何計算機可讀介質,該計算機可讀介質可以發(fā)送、傳播或者傳輸用于由指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結合使用的程序。計算機可讀介質上包含的程序代碼可以用任何適當?shù)慕橘|傳輸,包括一但不限于一無線、電線、光纜、RF等等,或者上述的任意合適的組合。可以以一種或多種程序設計語言或其組合來編寫用于執(zhí)行本發(fā)明操作的計算機程序代碼,所述程序設計語言包括面向對象的程序設計語言一諸如Java、Smalltalk、C++,還包括常規(guī)的過程式程序設計語言一諸如”C”語言或類似的程序設計語言。程序代碼可以完全地在用戶計算機上執(zhí)行、部分地在用戶計算機上執(zhí)行、作為一個獨立的軟件包執(zhí)行、部分在用戶計算機上部分在遠程計算機上執(zhí)行、或者完全在遠程計算機或服務器上執(zhí)行。在涉及遠程計算機的情形中,遠程計算機可以通過任意種類的網(wǎng)絡一包括局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)—連接到用戶計算機,或者,可以連接到外部計算機(例如利用因特網(wǎng)服務提供商來通過因特網(wǎng)連接)。下面參照本發(fā)明實施例的方法、裝置(系統(tǒng))和計算機程序產品的流程圖和/或框圖描述本發(fā)明。應當理解,流程圖和/或框圖的每個方框以及流程圖和/或框圖中各方框的組合,都可以由計算機程序指令實現(xiàn)。這些計算機程序指令可以提供給通用計算機、專用計算機或其它可編程數(shù)據(jù)處理裝置的處理器,從而生產出一種機器,這些計算機程序指令通過計算機或其它可編程數(shù)據(jù)處理裝置執(zhí)行,產生了實現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的裝置。也可以把這些計算機程序指令存儲在能使得計算機或其它可編程數(shù)據(jù)處理裝置以特定方式工作的計算機可讀介質中,這樣,存儲在計算機可讀介質中的指令就產生出一個包括實現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的指令裝置(instructionmeans)的制造品(manufacture)。也可以把計算機程序指令加載到計算機、其它可編程數(shù)據(jù)處理裝置、或其它設備上,使得在計算機、其它可編程數(shù)據(jù)處理裝置或其它設備上執(zhí)行一系列操作步驟,以產生計算機實現(xiàn)的過程,從而使得在計算機或其它可編程裝置上執(zhí)行的指令能夠提供實現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的過程。附圖中的流程圖和框圖顯示了根據(jù)本發(fā)明的多個實施例的系統(tǒng)、方法和計算機程序產品的可能實現(xiàn)的體系架構、功能和操作。在這點上,流程圖或框圖中的每個方框可以代表一個模塊、程序段或代碼的一部分,所述模塊、程序段或代碼的一部分包含一個或多個用于實現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。也應當注意,在有些作為替換的實現(xiàn)中,方框中所標注的功能也可以以不同于附圖中所標注的順序發(fā)生。例如,兩個連續(xù)的方框實際上可以基本并行地執(zhí)行,它們有時也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或操作的專用的基于硬件的系統(tǒng)來實現(xiàn),或者可以用專用硬件與計算機指令的組合來實現(xiàn)。在整篇說明書中提及“一個實施例”、“一實施例”或類似的語言意味著與該實施例結合描述的特定特征、結構或特點包含在本發(fā)明的至少一個實施例中。因此,在整篇說明書中出現(xiàn)的短語,“在一個實施例中”、“在一實施例中”以及類似的語言可以(但不必須)指同樣的實施例。而且,所描述的本發(fā)明的特征、結構或特點可以任何合適的方式組合在一個或多個實施例中。因此,即使特征初始地在特定組合中被要求保護,來自所要求保護的組合的·一個或多個特點在某些情況下可從該組合被刪除,且所要求保護的組合可指向子組合或子組合的變體。盡管以從當前被認為是最實用和優(yōu)選的實施例的角度描述了裝置和方法,將理解本公開不需要限于所公開的實施例。本公開旨在涵蓋包括在權利要求書的精神和范圍內的各種修改和類似的安排,權利要求書的范圍應給予最寬的解釋,以便包含所有這些修改和類似的結構。本公開包括所附權利要求書的任何和所有的實施例。
權利要求
1.一種計算機實施的方法,包括 基于事件生成樣本; 使用調度監(jiān)視器識別由當前處理器調度的下一個調度的被監(jiān)視線程; 設置下一個調度的被監(jiān)視線程的處理器親合性,使得下一個調度的被監(jiān)視線程僅在當前處理器上運行,而不能遷移到不同的處理器; 在下一個調度的被監(jiān)視線程的處理器親合性已被設置到該處理器后,利用在當前處理器上運行的被采樣線程獲取下一個調度的被監(jiān)視線程調用棧; 在已獲得下一個調度的被監(jiān)視線程調用棧后,恢復下一個調度的被監(jiān)視線程的處理器親合性;以及 記錄用于下一個調度的被監(jiān)視線程的下一個調度的被監(jiān)視線程調用棧。
2.如權利要求I所述的方法,其中所述事件基于預定事件。
3.如權利要求2所述的方法,其中預定事件是基于時間的。
4.如權利要求I所述的方法,其中所述事件基于中斷。
5.如前述任一項權利要求所述的方法,還包括通知選擇被采樣線程的特征分析器。
6.如權利要求5所述的方法,其中特征分析器分析應用。
7.如前述任一項權利要求所述的方法,還包括在記錄用于下一個調度的被監(jiān)視線程的下一個調度的被監(jiān)視線程調用棧后,向操作系統(tǒng)通知樣本已完成。
8.一種計算機實施的方法,包括 基于事件生產樣本; 使用調度監(jiān)視器識別由當前處理器調度的最后調度的被監(jiān)視線程; 設置最后調度的被監(jiān)視線程的處理器親合性,使得最后調度的被監(jiān)視線程僅在當前處理器上運行,而不能遷移到不同的處理器; 在最后調度的被監(jiān)視線程的處理器親合性已被設置到當前處理器上后,使用在當前處理器上運行的被采樣線程獲取最后調度的被監(jiān)視線程調用棧; 在已獲得最后調度的被監(jiān)視線程調用棧后,恢復最后調度的被監(jiān)視線程的處理器親合性;以及 記錄用于最后調度的被監(jiān)視線程的最后調度的被監(jiān)視線程調用棧。
9.一種計算機程序產品,其包括具有計算機可讀程序的計算機可用介質,其中當在計算機上執(zhí)行時,所述計算機可讀程序使得計算機執(zhí)行權利要求I到8中的任一項的所有步驟。
10.一種系統(tǒng),包括 處理器,其用于基于事件生成樣本; 操作系統(tǒng),其用于(i )使用調度監(jiān)視器識別由當前處理器調度的下一個調度的被監(jiān)視線程,以及(ii)設置下一個調度的被監(jiān)視線程的處理器親合性,使得下一個調度的被監(jiān)視線程僅在該處理器上運行,而不遷移到不同的處理器; 特征分析器,其用于(i )在下一個調度的被監(jiān)視線程的處理器親合性已被設置到該處理器上后,使用被配置為僅在當前處理器上運行的采樣器線程獲取下一個調度的被監(jiān)視線程調用棧,以及(ii)在已獲得下一個調度的被監(jiān)視線程調用棧后,恢復下一個調度的被監(jiān)視線程的處理器親合性;以及(iv)記錄用于下一個調度的被監(jiān)視線程的下一個調度的被監(jiān)視線程調用棧。
11.如權利要求10所述的系統(tǒng),其中所述事件基于預定事件。
12.如權利要求10所述的系統(tǒng),其中所述預定事件是基于時間的。
13.如權利要求10所述的系統(tǒng),其中所述事件基于中斷。
全文摘要
過程基于事件產生樣本。該過程使用調度監(jiān)視器識別由當前處理器調度的下一個調度的被監(jiān)視線程。該過程設置下一個調度的被監(jiān)視線程的處理器親合性,使得下一個調度的被監(jiān)視線程僅在當前處理器上運行,而不能遷移到不同的處理器。在下一個調度的被監(jiān)視線程的處理器親合性已被設置到處理器后,該過程還使用在當前處理器上運行的被采樣線程獲取下一個調度的被監(jiān)視線程調用棧。在獲得下一個調度的被監(jiān)視線程調用棧后,該過程恢復下一個調度的被監(jiān)視線程的處理器親合性。
文檔編號G06F9/50GK102893261SQ201180023759
公開日2013年1月23日 申請日期2011年5月11日 優(yōu)先權日2010年5月24日
發(fā)明者F·E·萊維恩, K·庫珀爾, E·M·皮內達 申請人:國際商業(yè)機器公司