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

多重處理環(huán)境中透明動態(tài)優(yōu)化的方法和系統(tǒng)的制作方法

文檔序號:6379097閱讀:314來源:國知局

專利名稱::多重處理環(huán)境中透明動態(tài)優(yōu)化的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域
:本發(fā)明一般而言涉及軟件系統(tǒng),具體地涉及用于改進(jìn)對此種系統(tǒng)的調(diào)整(tuning)以提高其性能的方法。
背景技術(shù)
:建造一個典型的軟件系統(tǒng)包括若干步驟,并最終產(chǎn)生一個綁定模塊(或“可執(zhí)行的二進(jìn)制程序”,executablebinary),該模塊已被調(diào)整(調(diào)優(yōu)),從而在一個特定的硬件和軟件配置上執(zhí)行。這個稱為“靜態(tài)優(yōu)化”的處理過程可能包括以下步驟帶優(yōu)化地編譯程序,插入插截(instrumentation),與預(yù)先建造的運行時程序庫(runtimelibrary)進(jìn)行靜態(tài)或動態(tài)綁定,在某種預(yù)期用戶配置的樣本上使用一定范圍的預(yù)期用戶輸入進(jìn)行測試,以及基于測試過程中收集的數(shù)據(jù)帶優(yōu)化地再次編譯(這稱為“通過剖面法(profile)指導(dǎo)的反饋進(jìn)行的優(yōu)化”)。人們期望,由此產(chǎn)生的程序在預(yù)期的用戶配置和輸入數(shù)據(jù)的范圍內(nèi)既是健壯的,也是最優(yōu)化的。然而,在現(xiàn)實中,用戶環(huán)境的范圍是如此寬廣,以至于這樣的程序無法在所有情況下都獲得最佳性能。人們很早就認(rèn)識到,靜態(tài)技術(shù)(即在操作環(huán)境之外搜集關(guān)于代碼執(zhí)行的信息,以便為隨后的執(zhí)行微調(diào)代碼)不適于產(chǎn)生有效的代碼,因為要生成代表所有可能的最終用戶數(shù)據(jù)和硬件配置的測試數(shù)據(jù)是很困難的,如果不是不可能的話。此外,隨著指令級別上的并行性增加以及流水線加深,這種不適合就變得逾加令人煩惱了。與靜態(tài)優(yōu)化技術(shù)不同的另一種方法是“動態(tài)優(yōu)化”。動態(tài)優(yōu)化與帶有剖面法指導(dǎo)的反饋(profile-directedfeedback)的靜態(tài)優(yōu)化的相似之處在于,它也包括在將被優(yōu)化的代碼中插入插截、編譯它,并將其與運行時程序庫靜態(tài)或動態(tài)的綁定起來。然而,動態(tài)優(yōu)化與靜態(tài)優(yōu)化的不同之處在于,被插截的代碼(instrumentedcode)是在使用實際用戶數(shù)據(jù)、實際執(zhí)行程序時被觀察的,而執(zhí)行代碼是被當(dāng)場再優(yōu)化的(即如此搜集的關(guān)于程序運行的信息被用于在同一運行中對代碼進(jìn)行再優(yōu)化,用于隨后的(同一次運行中)的執(zhí)行)。動態(tài)優(yōu)化所產(chǎn)生的優(yōu)化代碼常常比靜態(tài)優(yōu)化技術(shù)所能取得的效率更高,因為能夠集中關(guān)注于例如代碼的那些被頻繁使用的部分,這些部分的效率的提高可以影響到如實際的程序使用所表現(xiàn)的整體性能。此外,使用動態(tài)優(yōu)化時,不需要客戶執(zhí)行繁重的生成假設(shè)數(shù)據(jù)集的任務(wù)。然而,在上述動態(tài)優(yōu)化系統(tǒng)中,動態(tài)優(yōu)化的缺點是必須進(jìn)行的信息的收集和編譯工作是相繼散布在應(yīng)用代碼的執(zhí)行中的,這樣就增加了應(yīng)用的執(zhí)行時間。應(yīng)用的運行時間方面因優(yōu)化得到的改善必須超過此附加成本,才能從動態(tài)優(yōu)化中獲得任何益處。動態(tài)優(yōu)化的例子包括人們提出的通過對Java字節(jié)代碼進(jìn)行動態(tài)編譯和優(yōu)化來優(yōu)化Java應(yīng)用的執(zhí)行的技術(shù)。此項技術(shù)的關(guān)鍵是,由于典型的字節(jié)代碼執(zhí)行顯著慢于大多數(shù)編譯的應(yīng)用,運行時優(yōu)化處理的開銷可以由執(zhí)行過程中的不大的改善而吸收。而這樣的機(jī)會在已高度優(yōu)化的非Java(二進(jìn)制代碼)應(yīng)用中是很少存在的。此外,該方法所采用的很多技術(shù),如優(yōu)化方法調(diào)用,并不是普遍適用的。其它項目,如V.Bala等人的“TransparentDynamicOptimizationthedesignandimplementationofDynamo”(HPL1999-1978990621)中所描述的技術(shù),通過重新安排代碼布局來改善指令緩存局部性,來解決動態(tài)改善運行時性能的問題,它所基于的假設(shè)是,開銷可以由所產(chǎn)生的執(zhí)行時間方面的改善來補(bǔ)償。然而,Dynamo技術(shù)沒有利用插截信息(instrumentationinformation),而且由于它是為單處理器系統(tǒng)設(shè)計的,也沒有考慮多處理器應(yīng)用。然而,今天的計算機(jī)系統(tǒng)通常包含不止一個處理器。即使在低端,單片多處理器也正在變得普遍起來。常見的情況是,在許多這些配置中,至少其中的一個處理器被利用不足。利用多處理器能力以改善程序執(zhí)行的早期努力集中于諸如應(yīng)用的自動并行化的技術(shù)。這些技術(shù)只取得有限的成功,這是由于多種原因,其中最顯著的一點是自動并行化最適用于數(shù)值計算密集的應(yīng)用,特別是哪些使用Fortran編寫的應(yīng)用;而通常以C語言編寫的商業(yè)事務(wù)處理應(yīng)用,事實證明不那么適于這種方法;而且,即使對于較常規(guī)類型的代碼,自動并行化也已證明在實踐中難以實施。因此,顯然需要一種優(yōu)化處理過程,它可以利用多處理器系統(tǒng)的獨有特性,并面向更廣泛類別的代碼。
發(fā)明內(nèi)容鑒于傳統(tǒng)方法和結(jié)構(gòu)的上述和其它問題、障礙和缺點,本發(fā)明的一個目的是,通過抓住時機(jī)地利用一個或多個空閑的或利用不足的處理器,而提高多處理器系統(tǒng)中的程序執(zhí)行效率。本發(fā)明的另一個目的是通過了解軟件系統(tǒng)的執(zhí)行特征,并應(yīng)用此種知識,以對系統(tǒng)的用戶透明的方式,來調(diào)整和提高在當(dāng)前主機(jī)系統(tǒng)上的執(zhí)行行為,而改善該軟件系統(tǒng)的性能。具體而言,本發(fā)明試圖通過利用對稱或分布式多處理器系統(tǒng)中的可用周期,實現(xiàn)此性能提高,而不妨礙被優(yōu)化應(yīng)用的執(zhí)行,從而對傳統(tǒng)方法和系統(tǒng)進(jìn)行改進(jìn)。在本發(fā)明的第一個方面中,一種在多重處理環(huán)境中進(jìn)行透明動態(tài)優(yōu)化的方法(和系統(tǒng)),包括使用運行于系統(tǒng)的另一個處理器上的執(zhí)行監(jiān)視器,來監(jiān)視一個第一處理器上的應(yīng)用的執(zhí)行,并使用運行于系統(tǒng)的該另一個處理器上的運行時優(yōu)化器,來透明地優(yōu)化原始應(yīng)用的一個或多個片段。在本發(fā)明的第二個方面中,一種用于多處理器計算環(huán)境對應(yīng)用進(jìn)行相對于其執(zhí)行環(huán)境的同時的、動態(tài)的優(yōu)化的方法,包括在系統(tǒng)的一個第一處理器上執(zhí)行該應(yīng)用的被插截的(instrumented,被加入檢測代碼的)復(fù)本;使用運行于該系統(tǒng)的另一個處理器上的執(zhí)行監(jiān)視器監(jiān)視該應(yīng)用的執(zhí)行,該監(jiān)視是參照執(zhí)行特征而進(jìn)行的,該執(zhí)行特征是通過執(zhí)行包含于該應(yīng)用的被插截的復(fù)本中的插截代碼而產(chǎn)生的;使用執(zhí)行于該系統(tǒng)的另一個處理器上的運行時優(yōu)化器對原始應(yīng)用的一個或多個片段進(jìn)行優(yōu)化,該優(yōu)化是參照該執(zhí)行監(jiān)視器所收集的執(zhí)行特征而進(jìn)行的,并且不會影響并行執(zhí)行的應(yīng)用的性能;通過使用新近優(yōu)化的片段代替一個或多個片段而修改原始執(zhí)行應(yīng)用,該修改是以對該應(yīng)用的用戶透明的方式進(jìn)行的。在本發(fā)明的第三個方面中,一種用于在多處理器系統(tǒng)中對應(yīng)用進(jìn)行相對于其執(zhí)行環(huán)境的同時的、動態(tài)的優(yōu)化的方法,包括使用運行于一個單獨的處理器上、或作為單獨的處理過程運行于多個處理器上的執(zhí)行監(jiān)視器,監(jiān)視運行于一個第一處理器上的一個程序或應(yīng)用的每次執(zhí)行;由二進(jìn)制代碼在其執(zhí)行時,創(chuàng)建二進(jìn)制代碼的執(zhí)行特征的簡表數(shù)據(jù)(profiledata),該二進(jìn)制代碼包含用于監(jiān)視性能的插截代碼;執(zhí)行監(jiān)視器不斷地評估該簡表數(shù)據(jù);并當(dāng)一個給定閾值條件滿足時,調(diào)用動態(tài)優(yōu)化器,來優(yōu)化頻繁執(zhí)行的代碼片段,優(yōu)化后的代碼片段被插入執(zhí)行的指令流中,用于其后續(xù)的執(zhí)行。在本發(fā)明的第四個方面中,一種在共享多重處理(sharedmultiprocessing,SMP)系統(tǒng)中進(jìn)行透明動態(tài)優(yōu)化的方法,包括在一個第一處理器上執(zhí)行應(yīng)用二進(jìn)制程序;在該系統(tǒng)的另一個處理器上監(jiān)視該執(zhí)行的行為,并在應(yīng)用二進(jìn)制程序執(zhí)行的同時,對應(yīng)用二進(jìn)制程序的執(zhí)行進(jìn)行優(yōu)化。在本發(fā)明的第五個方面中,一種在多重處理系統(tǒng)中進(jìn)行透明動態(tài)優(yōu)化的系統(tǒng),包括一個執(zhí)行監(jiān)視器,用于監(jiān)視在一個第一處理器上一個應(yīng)用二進(jìn)制程序的執(zhí)行,該執(zhí)行監(jiān)視器運行于該系統(tǒng)的另一個處理器上,該執(zhí)行監(jiān)視器包括一個動態(tài)優(yōu)化器,用于與監(jiān)視同時地優(yōu)化該原始應(yīng)用二進(jìn)制程序的一個或多個片段,該優(yōu)化器執(zhí)行于該系統(tǒng)的該另一個處理器上。在本發(fā)明的第六個方面中,一種信號承載介質(zhì),以有形的方式體現(xiàn)了機(jī)器可讀的指令的程序,該程序可由數(shù)字處理裝置執(zhí)行,以在多重處理系統(tǒng)中執(zhí)行透明動態(tài)優(yōu)化的方法,該方法包括使用運行于該系統(tǒng)的另一個處理器上的執(zhí)行監(jiān)視器監(jiān)視一個第一處理器上的應(yīng)用二進(jìn)制程序的執(zhí)行,并使用執(zhí)行于該系統(tǒng)的該另一個處理器上的運行時優(yōu)化器透明地優(yōu)化原始應(yīng)用二進(jìn)制程序的一個或多個段。因而,使用本發(fā)明時,優(yōu)選地使用多重處理系統(tǒng)中多余的處理周期來觀察執(zhí)行中的應(yīng)用的執(zhí)行特征,并透明地修改此運行的系統(tǒng),以顯著提高其性能。優(yōu)選地,程序或應(yīng)用的每次執(zhí)行由一個執(zhí)行監(jiān)視器“跟蹤”(shadow),該監(jiān)視器運行于另一個處理器上,或作為一個單獨的進(jìn)程運行于多個處理器上。當(dāng)它執(zhí)行時,包含被設(shè)計用來監(jiān)視性能的插截代碼的該二進(jìn)制代碼創(chuàng)建其執(zhí)行特征的簡表。執(zhí)行監(jiān)視器不斷地評估此簡表數(shù)據(jù),并當(dāng)滿足給定閾值條件時,調(diào)用本發(fā)明的動態(tài)優(yōu)化器,以優(yōu)化(或再優(yōu)化)頻繁執(zhí)行的代碼片段,然后將其插入該執(zhí)行指令流中,這里它們被用于隨后的執(zhí)行。新插入的代碼片段或者不包含插截,或者被再次插截以便檢測該應(yīng)用的執(zhí)行特征中的進(jìn)一步變化。本發(fā)明把上述技術(shù)應(yīng)用于二進(jìn)制可執(zhí)行(文件),而不是Java的字節(jié)代碼,后者由于是被解釋的,因而執(zhí)行得足夠慢,以至于可逐步補(bǔ)償優(yōu)化的成本(但是,同樣的技術(shù)對于字節(jié)代碼應(yīng)用也是有效的)。就是說,二進(jìn)制程序(代碼)是以如此方式被插截的,以至于當(dāng)它運行時,能夠在共享多處理器(SMP)系統(tǒng)的另一個處理器上監(jiān)視其執(zhí)行行為,并在其執(zhí)行過程中,該此另一個處理器上,對它進(jìn)行優(yōu)化。從參照附圖對本發(fā)明的優(yōu)選實施例所作的如下詳細(xì)說明,可以更好地理解本發(fā)明的上述及其它目的、方面和優(yōu)點,在附圖中圖1示出了用于運行本發(fā)明的一個多重處理系統(tǒng)100的系統(tǒng)視圖;圖2所示增強(qiáng)視圖200示出了根據(jù)本發(fā)明的用于運行被插截的二進(jìn)制(程序)201a的處理器201,以及用于運行動態(tài)優(yōu)化器207的處理器203。圖3的流程圖示出了根據(jù)本發(fā)明的動態(tài)優(yōu)化處理過程300;圖4的流程圖是本發(fā)明的動態(tài)優(yōu)化器的處理過程400的另一個實施例400,它適用于利用在靜態(tài)優(yōu)化處理過程中收集的信息,具體而言,其中編譯時收集的數(shù)據(jù)被保存在可執(zhí)行程序中,以便由執(zhí)行監(jiān)視器的動態(tài)優(yōu)化器組件在運行時使用。圖5A-5C示出了在圖4所示方法400中創(chuàng)建的注釋文件,具體而言,圖5A示出了一種稱為控制流圖(ControlFlowGraph)的編譯時數(shù)據(jù)結(jié)構(gòu)的可視表示,圖5B示出了該流圖的編碼表示,它可以形成該注釋的二進(jìn)制(程序)的一部分,而圖5C代表可能被包含在圖5B的例子的注釋文件中的實際數(shù)據(jù);圖6示出了本發(fā)明的一個進(jìn)一步的實施例,它允許對那些在靜態(tài)優(yōu)化時未被插截的二進(jìn)制應(yīng)用進(jìn)行動態(tài)優(yōu)化;圖7示出了本發(fā)明的一個實施例,它用于如前述具有IBM檔案編號(IBMDocketNo.)YOR920010532US1的美國專利申請?zhí)?0/_,_所描述的仿真器(emulator);以及圖8示出一種信號承載介質(zhì)800(如存儲介質(zhì)),用于根據(jù)本發(fā)明的方法的程序的存儲步驟。具體實施例方式現(xiàn)在請參照附圖,更具體地說,參照圖1-8,其中示出了根據(jù)本發(fā)明的方法和結(jié)構(gòu)的優(yōu)選實施例。大體上說,本發(fā)明以新的方式利用了多重處理能力,以獲得在多處理器系統(tǒng)上執(zhí)行程序時顯著的性能改善。純粹靜態(tài)編譯器一般假設(shè)程序中的所有路徑都同等地可能被采用,因而通常對所有可能路徑進(jìn)行同等程度的優(yōu)化。然而,由于在實際上可能更經(jīng)常采用某些路徑,因而如果選擇關(guān)鍵的路徑進(jìn)行優(yōu)化,甚至付出減慢不常采取的路徑的代價,優(yōu)化可能會更有利。另一方面,純粹動態(tài)編譯器(如Java字節(jié)代碼程序的大多數(shù)及時(just-in-time,JIT)編譯器),盡管擁有程序當(dāng)前執(zhí)行的詳細(xì)信息,卻由于需要在很窄的時間窗(temporalwindow)內(nèi)使用此信息的苛求而被嚴(yán)重阻礙。正如下面將說明的,本發(fā)明相對于已知的動態(tài)編譯器有兩個優(yōu)點。首先,由于其多處理器設(shè)計,它實際上不需要運行在如此受限制的時間范圍中。其次,在進(jìn)行優(yōu)化操作時,它可以利用靜態(tài)優(yōu)化輸出,以便減少執(zhí)行過程中程序分析的需要。此外,在不太遙遠(yuǎn)的未來,預(yù)期幾乎所有系統(tǒng)都將用單片多處理器建造,因而使得本發(fā)明的方法格外意義重大。在即將在這里描述的本發(fā)明的一個實施例中,我們假定動態(tài)運行時優(yōu)化系統(tǒng)(或“動態(tài)優(yōu)化器”)-該系統(tǒng)包含的那些方法來監(jiān)視代碼執(zhí)行,基于收集到的執(zhí)行信息對代碼進(jìn)行優(yōu)化,并將被優(yōu)化的代碼重新插入程序-可以作為子線程或進(jìn)程而處于持續(xù)運行的執(zhí)行監(jiān)視器控制之下,在一個處理器(或一組處理器)中執(zhí)行,該處理器獨立于執(zhí)行被監(jiān)視程序的一個處理器(或一組處理器)。進(jìn)一步地,將被優(yōu)化的執(zhí)行代碼被使用諸如Ball等人的“EfficientPathProfiling”(ProceedingsofMICRO1996,Dec.1996)中所描述的技術(shù)編譯以納入插截代碼。因而,本發(fā)明假定執(zhí)行的二進(jìn)制代碼已經(jīng)被插截(例如靜態(tài)地或動態(tài)地),正如在本領(lǐng)域中廣為人知的。本發(fā)明的一個重點是以新的方式利用該插截代碼所產(chǎn)生的信息。應(yīng)當(dāng)注意的是,盡管上述描述假定使用SMP環(huán)境,但本發(fā)明也適用于這樣的計算機(jī)系統(tǒng),它由一個或多個處理器的一個群集所構(gòu)成,這些處理器通過分布式共享存儲器進(jìn)行通信。在這樣的配置中,動態(tài)優(yōu)化系統(tǒng)既可以在群集中的一個(或多個)節(jié)點上執(zhí)行,也可以在群集中的一個節(jié)點的一個(或多個)處理器上運行,只要它們與執(zhí)行待優(yōu)化代碼的節(jié)點或處理器不同。下面,我們將參照圖1,詳細(xì)描述本發(fā)明,該圖示出了運行于多重處理硬件系統(tǒng)100之上的動態(tài)優(yōu)化器。多重處理系統(tǒng)100可以包括大于1的任意數(shù)量處理器101a、101b等,在圖1中每個處理器分別被標(biāo)以1至n+1。每個處理器可以具有自己的局部存儲器(圖1中未示出),而所有處理器都可以通過一個共享的主存儲器102進(jìn)行通信。該系統(tǒng)被一個操作系統(tǒng)103控制,該操作系統(tǒng)包含或支持一個線程調(diào)度軟件包。對于每一個被插截的、且在本發(fā)明的動態(tài)優(yōu)化處理過程中執(zhí)行的程序(如執(zhí)行的二進(jìn)制程序),在一個執(zhí)行監(jiān)視器104中將繁育(spawn)一個同時性的執(zhí)行監(jiān)視器線程,下面將詳細(xì)描述。執(zhí)行監(jiān)視器線程的目的是分析給定執(zhí)行中的被插截的二進(jìn)制代碼(程序)的執(zhí)行行為,并進(jìn)一步根據(jù)此種分析,進(jìn)行更改(優(yōu)化),它將保持該應(yīng)用的期望輸出,但減少產(chǎn)生這些輸出的時間。此(監(jiān)視器)線程只當(dāng)它監(jiān)視的應(yīng)用執(zhí)行時才執(zhí)行。因此,圖1示出了有1至n個處理器執(zhí)行真正的應(yīng)用,其中每個都可能與所有其他的不同,并至少有一個另外的處理器n+1(例如,可能有多個其它處理器,如n+2等,但簡便起見只示出一個)。有一個執(zhí)行監(jiān)視器104與運行在處理器1至n上的每一個被插截的二進(jìn)制(程序)相關(guān)聯(lián)。它們不需要都只運行在處理器n+1上。根據(jù)這樣的執(zhí)行監(jiān)視器104耗用多少資源,它們也可以運行在其它一個或多個不同的處理器上。然而,在執(zhí)行監(jiān)視器的數(shù)量和在處理器1至n上運行的被插截的二進(jìn)制(程序)的數(shù)量之間存在著一對一的關(guān)系。應(yīng)當(dāng)注意的是在一個SMP的多于一個的處理器上可能有多于一個被插截的二進(jìn)制(程序)在執(zhí)行。這里描述的關(guān)系只是在這樣的被插截的二進(jìn)制(程序)和它自己的“影子”(跟蹤)進(jìn)程之間(如下面描述并如圖2中的標(biāo)號201a和205所示的)。正是這種一對一關(guān)系,是本發(fā)明所關(guān)注、并有利地加以利用的,而本發(fā)明只要求一個給定的被插截的二進(jìn)制程序的影子進(jìn)程執(zhí)行在一個分離的處理器上。這樣,當(dāng)處理器1(101a)執(zhí)行其二進(jìn)制(程序)時,處理器1的執(zhí)行特征由一個專用的執(zhí)行監(jiān)視器104觀察。圖2是一個概念性視圖200,它表現(xiàn)了在一個第一處理器201上執(zhí)行的、將被優(yōu)化的被插截的二進(jìn)制應(yīng)用201a,和監(jiān)視此被插截的二進(jìn)制應(yīng)用201a的執(zhí)行的執(zhí)行監(jiān)視器線程205之間的交互,該執(zhí)行監(jiān)視器在與處理器201不同的處理器203上被執(zhí)行。在圖2中,執(zhí)行的被插截的二進(jìn)制(程序)可能由一個相當(dāng)大的系統(tǒng)構(gòu)成,并執(zhí)行很長時間。在這里,執(zhí)行的被插截的二進(jìn)制(程序)在執(zhí)行過程中被監(jiān)視和修改的方法稱為一個“影子”進(jìn)程。該影子進(jìn)程包括使用一個執(zhí)行監(jiān)視器、一個動態(tài)優(yōu)化器和一個片段表(或高速緩存)管理器。在被插截的二進(jìn)制(程序)的啟動時,該“影子”即被派生(fork),并在被插截的二進(jìn)制(程序)或應(yīng)用的執(zhí)行過程中繼續(xù)執(zhí)行。影子進(jìn)程205也包括一個片段高速緩存(fragmentcache)201b。應(yīng)當(dāng)注意的是,片段高速緩存201b是影子進(jìn)程的一種軟件產(chǎn)物,用于在向執(zhí)行的代碼流重新插入它們之間保存優(yōu)化后的代碼片段。該數(shù)據(jù)結(jié)構(gòu)很大,并由“片段高速緩存管理器”管理,以便動態(tài)存儲被插截的應(yīng)用201a的被再優(yōu)化的片段。這些“片段”是被頻繁執(zhí)行的指令序列(由執(zhí)行監(jiān)視器線程基于它對插截代碼所產(chǎn)生的插截信息的分析而確定),這些指令序列可能隨后由處理器201作為該應(yīng)用的一部分而執(zhí)行,它們是當(dāng)“影子”進(jìn)程確定該片段的優(yōu)化可以導(dǎo)致程序執(zhí)行得更有效率時,在影子進(jìn)程的執(zhí)行或簡表監(jiān)視步驟(204)中被選擇的。應(yīng)當(dāng)注意的是,只有執(zhí)行的二進(jìn)制程序的被選擇部分才被存儲在片段高速緩存201b中。這些部分是基于插截(代碼)的輸出而選擇的?;旧?,它們包括被頻繁執(zhí)行的指令的序列,以及優(yōu)化功能認(rèn)為必要和可接受的某些添加或刪除。執(zhí)行或簡表監(jiān)視器204可能監(jiān)視各種特征,包括程序中某一特定路徑被執(zhí)行的次數(shù)。因此,如果一個路徑被執(zhí)行了很多次(如1000次或更多),則它將觸發(fā)片段管理器202,開始對此路徑進(jìn)行某種處理,并開始針對此特定代碼片段的優(yōu)化處理過程(使用下面將討論的動態(tài)優(yōu)化器207)。因而,處理器203也運行動態(tài)優(yōu)化器線程207,作為影子進(jìn)程線程205的一部分,用于優(yōu)化來自被插截的二進(jìn)制應(yīng)用的所選擇片段,并通過片段管理器202,將優(yōu)化后的片段傳回片段高速緩存201b。在上例關(guān)于監(jiān)視程序中的路徑被執(zhí)行了多少次、以及是否此種執(zhí)行發(fā)生的次數(shù)已超過一個閾值(臨界)次數(shù)(如多于1000次)的情境中,片段管理器202采取行動,從片段高速緩存201b中提取該路徑(例如,執(zhí)行的二進(jìn)制程序的一部分或一個“片段”,它是一個較小的代碼塊)或該路徑的一部分,以便由動態(tài)優(yōu)化器207進(jìn)行優(yōu)化(或再優(yōu)化)。因此,這些片段被取出、優(yōu)化然后再放回到運行的二進(jìn)制程序中。片段管理器202確定應(yīng)當(dāng)優(yōu)化該路徑的哪個部分。很可能這不是整個路徑。片段管理器202通過制作該指令的復(fù)本而“抽取”(提取)該部分路徑,并存儲這些指令,以便優(yōu)化器207可以察看復(fù)本,并對復(fù)本進(jìn)行更改。就是說,片段管理器202“告訴”優(yōu)化器207執(zhí)行這種優(yōu)化,并向它提供片段管理器202認(rèn)為與該片段有關(guān)的簡表信息。然后,優(yōu)化器將對該片段進(jìn)行優(yōu)化(如重排代碼的順序等,以便使其更快和更有效),并在完成后,通知片段管理器202。然后,片段管理器202,使用存儲在它自己的內(nèi)部表中的數(shù)據(jù),確定在處理器1(201)上的原始執(zhí)行的二進(jìn)制程序中重新插入被優(yōu)化的代碼的正確的邏輯位置。然后,被優(yōu)化的代碼被放入處理器1(201)的片段高速緩存201b中,而片段管理器202將修改執(zhí)行的程序,從而下次在執(zhí)行的二進(jìn)制程序中同樣的路徑(指令)(或者路徑的一部分,如在可能的情況下)需要執(zhí)行時,片段高速緩存201b中的代碼片段將被挑選執(zhí)行,代替原始執(zhí)行二進(jìn)制程序中的代碼。應(yīng)當(dāng)注意的是,片段管理器202在第一次會直接從被插截的執(zhí)行的二進(jìn)制程序201a中提取一段路徑,而在以后的階段(例如,路徑再優(yōu)化),片段管理器202將從片段高速緩存201b中提取它,而不是直接從被插截的執(zhí)行的二進(jìn)制程序201a中提取。因此,片段可以以兩種形式出現(xiàn)作為原始二進(jìn)制程序(或后來的動態(tài)優(yōu)化后的二進(jìn)制程序)中的真實代碼序列,以及作為動態(tài)優(yōu)化器產(chǎn)生的重新插入的被優(yōu)化的代碼序列。后者出現(xiàn)在片段高速緩存201b中,而前者(除了上述括號中的情況之外)出現(xiàn)在原始應(yīng)用中。對于每一個執(zhí)行的被插截的二進(jìn)制應(yīng)用,將有一個執(zhí)行監(jiān)視器線程(影子進(jìn)程線程)205的實例,在這里,一個給定的被插截的二進(jìn)制應(yīng)用的執(zhí)行監(jiān)視器被稱為它的“監(jiān)視線程”。執(zhí)行監(jiān)視器(或影子進(jìn)程)線程205的操作是與應(yīng)用平行進(jìn)行的,但不為應(yīng)用所知,應(yīng)用的執(zhí)行過程,除了產(chǎn)生表現(xiàn)它自己的執(zhí)行特征的簡表流之外,沒有變化。應(yīng)當(dāng)注意的是,“執(zhí)行特征”代表由被插截的二進(jìn)制程序作為執(zhí)行的副作用而產(chǎn)生的簡檔數(shù)據(jù)。此外,應(yīng)當(dāng)注意的是,片段高速緩存201b只是一個數(shù)據(jù)結(jié)構(gòu)或表,它存在于(駐留在)共享存儲器中,由執(zhí)行監(jiān)視器線程205的片段管理器202分配和控制。如上所述,片段是這樣的指令序列,其執(zhí)行特征使它成為潛在的(再)優(yōu)化對象;該指令序列將由執(zhí)行監(jiān)視器(影子進(jìn)程)205從執(zhí)行的二進(jìn)制程序中提取,優(yōu)化后保存在片段高速緩存中,以便隨后重新插入到二進(jìn)制程序中。還應(yīng)當(dāng)注意的是,由于目的是優(yōu)化這些片段,并重新把它們插入執(zhí)行的二進(jìn)制程序,因此它們在片段高速緩存201b中的駐存是暫時的(transient),并使用標(biāo)準(zhǔn)技術(shù)管理和收回其存儲(空間)。本發(fā)明的方法圖3的流程圖示出了與本發(fā)明的動態(tài)優(yōu)化處理過程有關(guān)的圖2所示的系統(tǒng)所進(jìn)行的方法300的步驟。在方法300中,當(dāng)把被插截的二進(jìn)制程序裝入處理器201之時,即執(zhí)行一次派生,以在圖2所示的處理器203(n+1)中啟動執(zhí)行監(jiān)視器線程(步驟300A)。進(jìn)一步講,當(dāng)裝入被插截的二進(jìn)制應(yīng)用時,即在步驟301繁育(派生)一個執(zhí)行監(jiān)視器線程,用于在圖2所示處理器203(n+1)上與處理器201上被插截的二進(jìn)制應(yīng)用的執(zhí)行并行地執(zhí)行。如上所述,執(zhí)行監(jiān)視器線程也稱為“影子線程”,因為它觀察或監(jiān)視被插截的二進(jìn)制程序的執(zhí)行。影子進(jìn)程(執(zhí)行監(jiān)視)線程的繁育是通過執(zhí)行諸如FORK或其它某種操作系統(tǒng)(OS)原語實現(xiàn)的。再次強(qiáng)調(diào),應(yīng)當(dāng)注意此種活動的并行性質(zhì)。這種并行性很重要,因為它允許使用更主動的技術(shù),并允許定時的誤差(錯誤),這是由于在處理器201上運行的被插截的二進(jìn)制應(yīng)用不知道分析和優(yōu)化處理過程,因而從來不需要等待(不象上述Dynamo或JavaJIT的情況)。盡管被插截的二進(jìn)制應(yīng)用可以是被設(shè)計用來進(jìn)行基準(zhǔn)檢測(benchmarking)的程序,當(dāng)該系統(tǒng)與實際的用戶應(yīng)用一起使用并執(zhí)行實際的用戶數(shù)據(jù)時,該系統(tǒng)的真正益處才得以實現(xiàn)。作為執(zhí)行被插截的二進(jìn)制程序的一部分,在步驟302中,產(chǎn)生執(zhí)行簡表。執(zhí)行簡表描述執(zhí)行的二進(jìn)制程序(或正在運行的程序)的執(zhí)行特征。這些特征是由插入到該二進(jìn)制應(yīng)用的特定的插截代碼(instrumentationcode)確定的。插截代碼可能被設(shè)計用來監(jiān)視的特征的例子包括該應(yīng)用中一個特定循環(huán)執(zhí)行的次數(shù),或更特別地,一個特定路徑或代碼塊序列被執(zhí)行的次數(shù)。應(yīng)當(dāng)注意的是,簡表數(shù)據(jù)是由被插截的應(yīng)用在共享存儲器中產(chǎn)生的,而影子進(jìn)程(執(zhí)行監(jiān)視器)線程從同一個共享存儲器位置讀取它。監(jiān)視器線程并不非常嚴(yán)格地依賴于任何一個簡表計數(shù)器的絕對值(例如,一個循環(huán)的10,000次執(zhí)行和10,0001次執(zhí)行甚至11,000次執(zhí)行并沒有顯著不同),因而不需要在應(yīng)用線程和監(jiān)視器線程之間鎖定或其它同步方法。如下所述,該信息是在產(chǎn)生的過程中連續(xù)提供的。因而,這是一個動態(tài)處理過程,并且因為此種信息是連續(xù)地被提供的,執(zhí)行代碼可以在執(zhí)行發(fā)生時實際地被修改。因此,在步驟302,圖2所示運行于處理器203之上的執(zhí)行監(jiān)視線程205持續(xù)地監(jiān)視所產(chǎn)生的簡表信息(例如,也稱為“執(zhí)行特征”),而監(jiān)視線程205唯一地與當(dāng)前接受檢驗的被插截的二進(jìn)制應(yīng)用相關(guān)聯(lián)。為了描述當(dāng)前實施例,我們假設(shè)監(jiān)視線程運行于一個單獨的處理器之上,此處理器與執(zhí)行正在接受檢驗的、被插截的二進(jìn)制應(yīng)用的處理器不同。然而,本發(fā)明的意圖是,監(jiān)視線程也可以在多個處理器上運行,只要這些處理器與正在執(zhí)行被插截的二進(jìn)制應(yīng)用的處理器不同。在步驟304,影子進(jìn)程(執(zhí)行監(jiān)視器)205檢驗所產(chǎn)生的簡表數(shù)據(jù),以確定臨界(閾值)條件是否滿足。就本示例性實施例而言,可以采用一個計數(shù)據(jù)器或增數(shù)/減數(shù)器(incrementer/decrementer)。可替代地,在不同的實施例中,可以使用不同的結(jié)構(gòu)。例如,根據(jù)正在檢測的閾值是什么、或者條件或正在檢測的閾值的復(fù)雜性,可以使用計數(shù)器和某種其它裝置的組合(或者多個計數(shù)器的組合,其中各計數(shù)器的總和達(dá)到某個值時,其依次指示某種條件)。通常,采用的閾值是在插截時設(shè)置的,而且在執(zhí)行時它們被逐步減少,因而達(dá)到零值即觸發(fā)調(diào)用優(yōu)化器207。進(jìn)一步地,通常“閾值”是與某種計數(shù)或數(shù)量相聯(lián)系的(例如,相同的代碼被執(zhí)行的次數(shù)),這與被檢測的某其它類型的值是不同的。優(yōu)選地,優(yōu)化器207是一種通用編譯器優(yōu)化器。已經(jīng)意識道,它是在運行時執(zhí)行的,并且這樣與典型的編譯時優(yōu)化器相比必須用較少時間執(zhí)行,但除此之外,它在任何方面都不是專門適應(yīng)于它正在優(yōu)化的二進(jìn)制應(yīng)用。動態(tài)優(yōu)化器207通常分析包含它被調(diào)用來處理的“片段”的特定指令序列,并通過例如對指令序列重新組合以便補(bǔ)償當(dāng)基礎(chǔ)硬件不是代碼為之編譯的特定型號時可能發(fā)生的延遲,來改善其性能。動態(tài)優(yōu)化器270通常與動態(tài)編譯系統(tǒng)預(yù)封裝在一起。例如,它可能作為計算機(jī)的操作系統(tǒng)(OS)的一部分而分發(fā)。只要閾值還沒有達(dá)到,監(jiān)視線程205就將繼續(xù)檢驗插截(代碼)的輸出。如果達(dá)到閾值,則在步驟306,造成閾值到達(dá)的二進(jìn)制應(yīng)用的那部分就被從被插截的二進(jìn)制程序中抽取出來(如由片段管理器207復(fù)制),并發(fā)送給動態(tài)優(yōu)化器207進(jìn)行優(yōu)化,并在優(yōu)化后存儲在片段高速緩存201b中,以便此后當(dāng)本來要執(zhí)行原始的(未進(jìn)行再優(yōu)化的)片段時使用。接著,在步驟308中,該片段被優(yōu)化器207優(yōu)化。如上所述,所采用的優(yōu)化處理過程是可用于在運行時優(yōu)化代碼的許多標(biāo)準(zhǔn)優(yōu)化技術(shù)之一。優(yōu)選的優(yōu)化類型是那些利用在靜態(tài)編譯時尚不知道的信息(例如,一個給定變量在運行時具有一個恒定值)的類型。此外,可以進(jìn)行這樣的優(yōu)化,根據(jù)存在大量證據(jù)表明一個給定變量確實具有一個恒定值,推測該變量具有該設(shè)想的值。當(dāng)然,在這種情況下,必須為這種猜測不正確的情況作好準(zhǔn)備。我們注意到,這樣的考慮在本領(lǐng)域是為人所知的,但是在這里,本發(fā)明將它應(yīng)用在新的情境中。例如,優(yōu)化可以包括從頻繁執(zhí)行的代碼路徑中取消不必要的分支,或者使應(yīng)用專用于充分利用它正在其上運行的特定網(wǎng)絡(luò)節(jié)點的體系結(jié)構(gòu)能力。大體上說,如果應(yīng)用已被編譯以運行于一種機(jī)器的早期型號(或更便宜的型號)上,并在當(dāng)前情況下運行于較晚的機(jī)器(或更昂貴和高端的機(jī)器)上,則會存在進(jìn)一優(yōu)化的機(jī)會。例如,可能有新的和更強(qiáng)大的指令,或者與應(yīng)用原來為之編譯的機(jī)器相比,當(dāng)前機(jī)器有更多指令級并行性(如更多的功能單元)。這些可能的情況(在網(wǎng)絡(luò)化的世界里,它們正變得越來越可能了)將導(dǎo)致動態(tài)再優(yōu)化的顯著機(jī)會。因而,這呈現(xiàn)了應(yīng)用這些技術(shù)的另一個理由。就是說,在網(wǎng)絡(luò)化世界里,人們有強(qiáng)烈的動機(jī)為特定體系結(jié)構(gòu)的“最小公分母”型號進(jìn)行編譯,因為這樣應(yīng)用可以運行于網(wǎng)絡(luò)中更多比例的計算機(jī)上。然而,這也提供了降低優(yōu)化水平(因而降低性能)的動機(jī),本發(fā)明的技術(shù)對于改善這樣的應(yīng)用的運行次數(shù)特別有用。可選地,圖3中的方法300允許在被優(yōu)化的片段中插入插截代碼,以允許隨后的監(jiān)視。這種在片段中自動插入插截代碼的做法,相信是人所熟知的,因而簡略起見,這里就不進(jìn)一步描述了。上述Bala等人的文章(及其它文章)講授了如何插入插截(代碼)。當(dāng)在步驟308由動態(tài)優(yōu)化器207進(jìn)行優(yōu)化之后,在步驟310,優(yōu)化后的片段被保存于片段高速緩存201b中。然后,在步驟312中,已優(yōu)化的片段被插入被插截的二進(jìn)制程序中,代替未優(yōu)化的版本,這樣在將來,在被插截的二進(jìn)制的隨后的執(zhí)行時,它將作為被插截的二進(jìn)制程序的一部分而被執(zhí)行。作為示例,這種插入操作可以通過這樣的方法完成,即對原二進(jìn)制程序進(jìn)行修補(bǔ)(patch),使其分支到新優(yōu)化的片段,而該優(yōu)化的片段當(dāng)然也必須分支回原來的(被提取的)的片段之后的指令。也可以使用其它技術(shù),正如當(dāng)本領(lǐng)域普通技術(shù)人員從整體上理解了本發(fā)明之后,所能清楚地理解的。可選地,在插入二進(jìn)制應(yīng)用之前,該插截代碼也可以被從片段中刪除。在這種情況下,并非插截代碼本身被刪除了,因為它實際上沒有重新插入。插截(代碼)是相當(dāng)程式化的并且容易被識別,因此應(yīng)用代碼可以很容易地與插截區(qū)分開來,因而避免并不困難。即使情況不是這樣,使插截的位置由插截代理(instrumentingagent)記錄在已知的(或可發(fā)現(xiàn)的)位置,也不困難。當(dāng)在步驟312中優(yōu)化后的片段插入執(zhí)行的二進(jìn)制程序之后,在步驟313中,將確定被插截的二進(jìn)制程序是否仍在執(zhí)行。如果被插截的二進(jìn)制程序仍在執(zhí)行(如步驟313中的“是”),則本處理過程循環(huán)回到步驟302。如果被插截的二進(jìn)制程序并非仍在執(zhí)行(如步驟313中的“否”),則本處理過程進(jìn)行到步驟314。在步驟314中,被插截的二進(jìn)制程序和執(zhí)行監(jiān)視器(影子線程)的執(zhí)行終止。因而,二進(jìn)制程序和影子線程的執(zhí)行是同時終止的。確實,本發(fā)明的一個關(guān)鍵特征就是所有步驟都是在執(zhí)行時發(fā)生的。應(yīng)當(dāng)注意的是,如上所述,圖3所示的兩個垂直流程是并行操作。第二個實施例現(xiàn)在參照圖4討論本發(fā)明的另一個實施例,它是對圖3所示處理過程的改進(jìn),具體而言可用于圖3中的步驟308。就是說,在圖3的步驟308中,動態(tài)優(yōu)化器207檢驗一個片段,并分析該片段,以確定可以執(zhí)行何種優(yōu)化,而優(yōu)化該片段。這種優(yōu)化決定只是基于動態(tài)優(yōu)化器此時能夠觀察到的東西。在圖4的方法400中,采取了一些附加步驟以使動態(tài)優(yōu)化器207進(jìn)行更好的優(yōu)化。在這方面,在步聚308中為動態(tài)優(yōu)化器207提供了附加信息,以便該優(yōu)化器可以更快地運行,而不需要優(yōu)化器自己計算此種信息。此外,還可以為優(yōu)化器提供它在其它情況下可能很難自己提取的信息。具體而言,圖4示出了一種動態(tài)優(yōu)化方法400,該方法利用了一個應(yīng)用程序的靜態(tài)編譯時所收集的信息。按照本發(fā)明的這一實施例,動態(tài)優(yōu)化器207可以利用編譯時所收集的關(guān)于該被插截的二進(jìn)制程序的信息,該編譯在這里稱為動態(tài)優(yōu)化處理過程的“靜態(tài)編譯階段”。應(yīng)當(dāng)注意的是,由靜態(tài)編譯器所產(chǎn)生的數(shù)據(jù)/信息一般保存在一個注釋的二進(jìn)制程序中,其可以是被插截的二進(jìn)制程序,該程序具有一個擴(kuò)展(例如附加其上的一個注釋)以包含額外信息。在靜態(tài)優(yōu)化時能夠收集的、并有助于動態(tài)優(yōu)化的信息可以包括流圖信息,特別是那些標(biāo)簽是一個給定分支的目標(biāo),以及靜態(tài)的數(shù)據(jù)依賴性,在運行時,由于消除了這種依賴的模糊性,而可以使得編譯時受到抑制的優(yōu)化可以進(jìn)行。本實施例可能特別有利地利用了編譯時更容易檢測的詳細(xì)信息,從而排除了代價高昂的運行時的分析。方法400開始于圖4的步驟400A,其中以上面參照圖3所描述的方式將插截代碼插入已編譯的程序。上述注釋是在編譯時通過收集靜態(tài)程序信息(不是通過使用一組特定的樣本數(shù)據(jù)執(zhí)行程序而收集的簡表數(shù)據(jù))而產(chǎn)生的。在步驟402,編譯進(jìn)行,并且信息在編譯的各種階段,如前端處理(FrontEnd)、優(yōu)化(Optimizeton)、寄存器分配(RegisterAllocation)和最終匯編(FinalAssembly)階段被收集。步驟404描述在收集到有用信息的各種位置(peint)上編譯器的中間語言(IntermediateLanguage,IL)的注釋。在步驟406中,由靜態(tài)編譯階段產(chǎn)生的二進(jìn)制程序不僅包括自本說明書開始至此一直提及的插截,而且也包括編譯時產(chǎn)生的注釋。這些注釋采取的形式是附加于二進(jìn)制模塊的編碼的數(shù)據(jù)串。步驟410-414按圖3所述的方式進(jìn)行,但不同之處在于包含在已注釋二進(jìn)制程序中的信息被執(zhí)行監(jiān)視器(影子進(jìn)程)系統(tǒng)的動態(tài)優(yōu)化組件展開(deploy)。應(yīng)當(dāng)注意的是,修改只是針對二進(jìn)制程序的,并與二進(jìn)制程序的執(zhí)行并行地進(jìn)行。如果不需要進(jìn)一步的靜態(tài)優(yōu)化,則在步驟402收集的信息被用于創(chuàng)建一個注釋文件,該文件將在步驟408中被附加到該被插截的二進(jìn)制程序上。這種文件的一個例子如圖5A-5C所示。具體而言,圖5A示出了一個稱為控制流圖(ControlFlowGraph)的編譯時數(shù)據(jù)結(jié)構(gòu)的可視表示500。該圖中的每個節(jié)點(即1-12)代表一個基本塊,而有向線代表連接節(jié)點的后繼邊(successoredge)。這里代表的程序包括一個計算的轉(zhuǎn)移表(branchtable,分支表)。圖5B示出可能構(gòu)成已注釋的二進(jìn)制程序的一部分的流圖的編碼表示。圖5C代表此例的可能包含在注釋文件中的實際數(shù)據(jù)540。動態(tài)優(yōu)化器207有可能會在運行時使用此數(shù)據(jù)快速重建此圖。然后,已注釋的、被插截的二進(jìn)制程序就準(zhǔn)備好,可以在裝備了根據(jù)本發(fā)明的動態(tài)優(yōu)化工具207的多處理器系統(tǒng)中運行。在步驟408中,該程序被使用實際的用戶數(shù)據(jù)在一個第一處理器或第一組處理器上運行,該程序在步驟410中,在與執(zhí)行該二進(jìn)制應(yīng)用本身的處理器不同的一個或一組處理器上,為被插截的二進(jìn)制應(yīng)用繁育執(zhí)行監(jiān)視器線程。在步驟412,動態(tài)優(yōu)化器使用靜態(tài)優(yōu)化時產(chǎn)生的注釋,以及由包含在執(zhí)行的二進(jìn)制程序中的插截(代碼)產(chǎn)生的信息,來生成改進(jìn)的優(yōu)化二進(jìn)制程序;如同上面參照圖3的步驟302-312所描述的,但經(jīng)過了修改以利用注釋。第三個實施例轉(zhuǎn)向圖6中處理過程600的流程圖,該圖顯示,根據(jù)本發(fā)明的動態(tài)優(yōu)化系統(tǒng)的另一個實施例,包括在將被優(yōu)化的二進(jìn)制應(yīng)用的執(zhí)行過程中,檢測該二進(jìn)制應(yīng)用的某些已經(jīng)被頻繁執(zhí)行的、未被插截的(non-instrumented)模塊的能力。如果檢測到這樣的模塊(步驟610),本發(fā)明規(guī)定了自動插入插截代碼,以用于隨后的監(jiān)視和優(yōu)化。應(yīng)當(dāng)注意的是,圖6的內(nèi)容可以被視為優(yōu)化的一個特例,從邏輯上講,圖6的步驟與圖3中的框306和框312之間一致。為了避免修改有可能會與其它應(yīng)用“共享”的代碼,在步驟620中,系統(tǒng)制作了原始模塊(未被提取簡表的(unprofiled)二進(jìn)制程序)的復(fù)本,并維護(hù)一個如此更改的任意模塊的列表。然后,步驟630調(diào)用該方法,以對二進(jìn)制模塊中進(jìn)行插截。在將來調(diào)用該模塊時,監(jiān)視器可以立即切換到被插截的版本,并執(zhí)行它以產(chǎn)生將由執(zhí)行監(jiān)視器(步驟640)讀取的簡表。就是說,步驟640修改“熱的”(hot)片段,從而在下次調(diào)用時調(diào)用被插截的版本。然后,本方法進(jìn)行到圖3中的步驟310,并繼續(xù)進(jìn)行直到該執(zhí)行在步驟314終止,此時,在步驟650中,復(fù)制的二進(jìn)制程序列表被刪除。本技術(shù)允許在例如由于無法得到源代碼而無法編譯的組件中進(jìn)行插截。二進(jìn)制運行時程序庫是可以用這種方式優(yōu)化的這種組件的一個例子。本發(fā)明的這個方面的進(jìn)一步應(yīng)用允許遺留(即未被插截的)的二進(jìn)制程序通過應(yīng)用所描述的自動重編譯技術(shù),而享受處理器組織的結(jié)構(gòu)化增強(qiáng)或提高的益處。第四個實施例在如圖7所示本發(fā)明的另一個實施例中,在動態(tài)轉(zhuǎn)換一個目標(biāo)應(yīng)用的指令流用于在如上述Nair等人的、具有IBM檔案編號YOR920010532US1的美國專利申請No.10/_,_所描述的宿主系統(tǒng)上運行的處理過程中,產(chǎn)生被插截的二進(jìn)制程序。圖7示出了系統(tǒng)700,它包括由用于宿主處理器750的線程調(diào)度器740調(diào)度的仿真(emulation)線程710、轉(zhuǎn)換線程720和服務(wù)線程730。在如圖7所示的本實施例中,仿真系統(tǒng)700具有執(zhí)行監(jiān)視器線程,它是仿真系統(tǒng)700的一個不可少的部分,即轉(zhuǎn)換線程720之一。一個或多個轉(zhuǎn)換線程被用來動態(tài)地優(yōu)化由執(zhí)行監(jiān)視器選擇的代碼片段。在圖7所示系統(tǒng)700中,頻繁執(zhí)行的代碼序列被動態(tài)優(yōu)化,以提高性能。這些序列是由解釋器轉(zhuǎn)換線程插入的插截代碼識別的,其采用計數(shù)器來跟蹤被緩存的代碼的執(zhí)行頻率。監(jiān)視器線程不斷追蹤這些計數(shù)器的值,并在其達(dá)到某個閾值時,發(fā)信號通知優(yōu)化器線程對一個給定代碼序列進(jìn)行(更多)優(yōu)化是有益的,并且指明引入該將被優(yōu)化的代碼序列的(被仿真的)賓客(guest)指令的真實地址。除了上述硬件/軟件環(huán)境以外,本發(fā)明的一個不同方面包括一個用于執(zhí)行上述各方法的計算機(jī)實施的方法。作為例子,該方法可以在上述特定環(huán)境中實施。例如,這樣一樣方法可以通過操作由數(shù)字?jǐn)?shù)據(jù)處理設(shè)備所體現(xiàn)的一個計算機(jī),來執(zhí)行機(jī)器可讀指令序列而被實施。這些指令可以駐留在各種信號承載介質(zhì)中。作為例子,這種信號承載介質(zhì)可以包括CPU中包含的RAM,如由快速訪問存儲技術(shù)所代表的??商娲?,該指令也可以被包含在其它信號存儲介質(zhì)中,例如可以由CPU直接或間接訪問的磁性數(shù)據(jù)存儲盤800(圖8)中。不管是包含在磁盤800、計算機(jī)/CPU中,還是包含在其它地方,該指令可以被存儲在各種機(jī)器可讀的數(shù)據(jù)存儲介質(zhì)中,如DASD存儲(如傳統(tǒng)的“硬盤驅(qū)動器”或RAID陣列)、磁帶、電子只讀存儲器(如ROM、EPROM或EEPROM)、光存儲設(shè)備(如CD-ROM、WORM、DVD、數(shù)字光帶等)、紙質(zhì)“穿孔”卡或其它適當(dāng)?shù)男盘柍休d介質(zhì),包括傳輸介質(zhì),如數(shù)字和模擬通信鏈路和無線鏈路。在本發(fā)明的一個說明性實施例中,該機(jī)器可讀的指令可以包括軟件目標(biāo)代碼,該目標(biāo)代碼是從諸如C等語言編譯而成的。盡管本發(fā)明是按照幾個優(yōu)選實施例進(jìn)行說明的,但本領(lǐng)域的技術(shù)人員能夠認(rèn)識到,實施本發(fā)明時,可以在附后的權(quán)利要求書的精神和范圍內(nèi)進(jìn)行修改。例如,如上所述,本發(fā)明不僅局限于共享多處理器系統(tǒng)(SMP),也可以有利地用于分布式多處理器系統(tǒng)。此外,應(yīng)當(dāng)注意的是,申請人的意圖是涵蓋所有權(quán)利要求元素的等同物,即使在以后的獲得權(quán)力的過程中有修改。權(quán)利要求1.一種多重處理系統(tǒng)中透明動態(tài)優(yōu)化的方法,包括使用運行于該系統(tǒng)的另一個處理器上的執(zhí)行監(jiān)視器,監(jiān)視在一個第一處理器上的應(yīng)用二進(jìn)制程序的執(zhí)行。使用在該系統(tǒng)的所述另一個處理器上執(zhí)行的運行時優(yōu)化器,透明地優(yōu)化原始的應(yīng)用二進(jìn)制程序的一個或多個段。2.如權(quán)利要求1所述的方法,進(jìn)一步包括在該系統(tǒng)的所述第一處理器上執(zhí)行該應(yīng)用二進(jìn)制程序的一個被插截的復(fù)本。3.如權(quán)利要求1所述的方法,其中所述監(jiān)視是參照執(zhí)行特征進(jìn)行的,該執(zhí)行特征是通過執(zhí)行在該應(yīng)用二進(jìn)制程序的被插截的復(fù)本中包含的被插截的代碼而產(chǎn)生的。4.如權(quán)利要求1所述的方法,其中所述優(yōu)化是參照由該執(zhí)行監(jiān)視器收集的執(zhí)行特征而進(jìn)行的,并且不影響并行執(zhí)行的應(yīng)用二進(jìn)制程序的性能。5.如權(quán)利要求1所述的方法,進(jìn)一步包括通過用新近優(yōu)化的段代替一個或多個段,同時地修改原始執(zhí)行應(yīng)用二進(jìn)制程序。6.如權(quán)利要求5所述的方法,其中所述修改是以對該應(yīng)用二進(jìn)制程序的用戶透明的方式進(jìn)行的。7.如權(quán)利要求1所述的方法,進(jìn)一步包括在插入執(zhí)行的應(yīng)用二進(jìn)制程序之前,從已優(yōu)化的部分中刪除插截代碼。8.如權(quán)利要求1所述的方法,進(jìn)一步包括,通過插截,確定已經(jīng)被頻繁執(zhí)行的一個或多個段。9.如權(quán)利要求1所述的方法,進(jìn)一步包括向一個被優(yōu)化的部分插入新的插截,來繼續(xù)監(jiān)視該新近優(yōu)化的應(yīng)用二進(jìn)制程序的執(zhí)行特征。10.如權(quán)利要求1所述的方法,其中所述優(yōu)化包括從被頻繁執(zhí)行的代碼路徑中刪除不必要的分支。11.如權(quán)利要求1所述的方法,其中所述優(yōu)化包括使一個應(yīng)用二進(jìn)制程序?qū)iT化于充分利用它正運行于其上的一個特定網(wǎng)絡(luò)節(jié)點的結(jié)構(gòu)能力。12.如權(quán)利要求1所述的方法,其中該應(yīng)用二進(jìn)制程序包括編譯時收集的并存儲在該二進(jìn)制程序中以供所述運行時優(yōu)化器使用的簡表指令和程序數(shù)據(jù)。13.如權(quán)利要求1所述的方法,其中執(zhí)行的應(yīng)用二進(jìn)制程序的至少多個部分沒有被預(yù)先插截。14.如權(quán)利要求13所述的方法,其中所述至少多個部分包括沒有源代碼的遺留二進(jìn)制程序和共享的運行時程序庫的至少一個,所述方法進(jìn)一步包括監(jiān)視頻繁執(zhí)行的多個二進(jìn)制程序;分析所述多個二進(jìn)制程序,并制作一個復(fù)本,其中插入適當(dāng)?shù)牟褰卮a;以及在將來調(diào)用所述二進(jìn)制程序時,切換到一個被插截的復(fù)本,并繼續(xù)其執(zhí)行。15.如權(quán)利要求14所述的方法,其中在沒有被執(zhí)行時,所述多個二進(jìn)制程序被分析。16.如權(quán)利要求1所述的方法,其中所述系統(tǒng)包括通過分布式共享存儲器進(jìn)行通信的一簇節(jié)點。17.如權(quán)利要求1所述的方法,其中所述系統(tǒng)包括一個共享多處理器系統(tǒng)(SMP)。18.如權(quán)利要求2所述的方法,其中該被插截的應(yīng)用二進(jìn)制程序是在動態(tài)轉(zhuǎn)換一個目標(biāo)應(yīng)用的指令流、用于在一個宿主系統(tǒng)上執(zhí)行的處理過程中產(chǎn)生的。19.一種用于多處理器計算環(huán)境對一個應(yīng)用針對其執(zhí)行環(huán)境進(jìn)行同時的、動態(tài)的優(yōu)化的方法,包括在該系統(tǒng)中一個第一處理器上執(zhí)行該應(yīng)用的一個被插截的復(fù)本;使用運行于該系統(tǒng)的另一個處理器上的一個執(zhí)行監(jiān)視器,監(jiān)視該應(yīng)用的執(zhí)行,所述監(jiān)視是參照執(zhí)行特征進(jìn)行的,該執(zhí)行特征是通過執(zhí)行包含在該應(yīng)用的被插截的復(fù)本中的插截代碼產(chǎn)生的;使用該系統(tǒng)的另一個處理器上執(zhí)行的一個運行時優(yōu)化器,優(yōu)化該原始應(yīng)用的一個或多個段,所述優(yōu)化是參照由所述執(zhí)行監(jiān)視器所收集的執(zhí)行特征進(jìn)行的,并且對該并行執(zhí)行的應(yīng)用的性能沒有影響;通過用新近優(yōu)化的段代替一個或多個段,修改該原始執(zhí)行應(yīng)用,所述修改是以對該應(yīng)用的用戶透明的方式進(jìn)行的。20.一種用于在多處理器系統(tǒng)中對一個應(yīng)用針對其執(zhí)行環(huán)境進(jìn)行同時的、動態(tài)優(yōu)化的方法,包括由運行于一個單獨的處理器或作為單獨的進(jìn)程運行于多個處理器上的一個執(zhí)行監(jiān)視器,監(jiān)視運行于一個第一處理器上的一個程序或應(yīng)用的每次執(zhí)行;由二進(jìn)制代碼在其執(zhí)行時,創(chuàng)建所述二進(jìn)制代碼的執(zhí)行特征的簡表數(shù)據(jù),所述二進(jìn)制代碼包含用于監(jiān)視性能的插截代碼;由所述執(zhí)行監(jiān)視器持續(xù)地評估該簡表數(shù)據(jù);以及當(dāng)一個給定臨界條件滿足時,調(diào)用一個動態(tài)優(yōu)化器來優(yōu)化頻繁執(zhí)行的代碼片段;所述被優(yōu)化的代碼片段被插入執(zhí)行的指令流,用于隨后其執(zhí)行。21.如權(quán)利要求20所述的方法,其中該多處理器系統(tǒng)中的多余處理周期被用來觀察該執(zhí)行的應(yīng)用的執(zhí)行特征,并透明地修改該執(zhí)行的應(yīng)用,以改進(jìn)其性能。22.如權(quán)利要求20所述的方法,其中新插入的代碼片段不包含插截。23.如權(quán)利要求20所述的方法,其中新插入的代碼片段包含再插截代碼,以檢測該應(yīng)用的執(zhí)行特征中的進(jìn)一步變化。24.一種共享多重處理(SMP)系統(tǒng)中透明動態(tài)優(yōu)化的方法,包括在一個第一處理器上執(zhí)行一個應(yīng)用二進(jìn)制程序;在該系統(tǒng)的另一個處理器上,監(jiān)視該執(zhí)行的行為;以及當(dāng)該應(yīng)用二進(jìn)制程序正在執(zhí)行時,優(yōu)化該應(yīng)用二進(jìn)制程序的執(zhí)行。25.如權(quán)利要求24所述的方法,其中所述應(yīng)用二進(jìn)制程序是被插截的。26.如權(quán)利要求24所述的方法,其中該應(yīng)用二進(jìn)制程序的至少一些沒有先前被插截。27.一種用于在多重處理系統(tǒng)中進(jìn)行透明動態(tài)優(yōu)化的系統(tǒng),包括一個執(zhí)行監(jiān)視器,用于監(jiān)視在一個第一處理器上的一個應(yīng)用二進(jìn)制程序的執(zhí)行,所述執(zhí)行監(jiān)視器運行在該系統(tǒng)的另一個處理器上;所述執(zhí)行監(jiān)視器包括一個動態(tài)優(yōu)化器,用于與所述監(jiān)視同時地優(yōu)化該原始應(yīng)用二進(jìn)制程序的一個或多個段,所述優(yōu)化器在該系統(tǒng)的所述另一個處理器上執(zhí)行。28.如權(quán)利要求27所述的系統(tǒng),其中所述執(zhí)行監(jiān)視器包括一個片段高速緩存,用于動態(tài)存儲該被插截的二進(jìn)制應(yīng)用的多個再優(yōu)化的片段。29.如權(quán)利要求27所述的系統(tǒng),其中所述執(zhí)行監(jiān)視器參照執(zhí)行特征進(jìn)行該監(jiān)視,該執(zhí)行特征是通過執(zhí)行包含在該應(yīng)用二進(jìn)制程序的一個被插截的復(fù)本中的插截代碼而產(chǎn)生的。30.如權(quán)利要求27所述的系統(tǒng),其中所述動態(tài)優(yōu)化器參照執(zhí)行監(jiān)視器所收集的執(zhí)行特征進(jìn)行該優(yōu)化,并且不影響該并行執(zhí)行的應(yīng)用二進(jìn)制程序的性能。31.如權(quán)利要求27所述的系統(tǒng),其中所述執(zhí)行監(jiān)視器通過用新近優(yōu)化的段取代一個或多個段,來同時地修改該原始執(zhí)行應(yīng)用二進(jìn)制程序。32.如權(quán)利要求31所述的系統(tǒng),其中所述修改是以對該應(yīng)用二進(jìn)制程序的用戶透明的方式進(jìn)行的。33.如權(quán)利要求27所述的系統(tǒng),其中所述執(zhí)行監(jiān)視器在將一個優(yōu)化后的部分插入該執(zhí)行的應(yīng)用二進(jìn)制程序之前,從該優(yōu)化后的部分中刪除插截代碼。34.如權(quán)利要求27所述的系統(tǒng),其中所述執(zhí)行監(jiān)視器向一個優(yōu)化后的部分中插入新的插截,從而繼續(xù)監(jiān)視該新近優(yōu)化的應(yīng)用二進(jìn)制程序的執(zhí)行特征。35.如權(quán)利要求27所述的系統(tǒng),其中該動態(tài)優(yōu)化器從一個被頻繁執(zhí)行的代碼路徑中刪除不必要的分支。36.如權(quán)利要求27所述的系統(tǒng),其中該動態(tài)優(yōu)化器使一個應(yīng)用二進(jìn)制程序?qū)iT化于利用它正在其上運行的一個特定網(wǎng)絡(luò)節(jié)點的全部結(jié)構(gòu)能力。37.如權(quán)利要求27所述的系統(tǒng),其中該應(yīng)用二進(jìn)制包含在編譯時收集、并存儲在該二進(jìn)制程序中以便所述動態(tài)優(yōu)化器使用的簡表指令和一些程序數(shù)據(jù)。38.如權(quán)利要求27所述的系統(tǒng),其中該執(zhí)行的應(yīng)用二進(jìn)制程序的至少多個部分沒有先前被插截。39.如權(quán)利要求38所述的系統(tǒng),其中所述至少一些部分包括沒有源代碼的遺留二進(jìn)制程序和共享的運行時程序庫的至少一個,所述系統(tǒng)進(jìn)一步包括用于監(jiān)視頻繁執(zhí)行的多個二進(jìn)制程序的裝置;用于分析所述多個二進(jìn)制程序、并制作一個復(fù)本,在其中插入適當(dāng)?shù)牟褰卮a的裝置;以及當(dāng)將來調(diào)用所述二進(jìn)制程序時,用于切換到一個被插截的復(fù)本,并繼續(xù)其執(zhí)行的裝置。40.如權(quán)利要求39所述的系統(tǒng),其中所述多個二進(jìn)制程序是在沒有執(zhí)行時被分析的。41.如權(quán)利要求27所述的系統(tǒng),進(jìn)一步包括通過分布式共享存儲器進(jìn)行通信的一簇節(jié)點。42.如權(quán)利要求27所述的系統(tǒng),其中所述系統(tǒng)包括一個共享多處理器系統(tǒng)(SMP)。43.如權(quán)利要求28所述的系統(tǒng),其中在動態(tài)轉(zhuǎn)換一個目標(biāo)應(yīng)用的指令流、用于在一個宿主系統(tǒng)上執(zhí)行的處理過程中,產(chǎn)生一個被插截的應(yīng)用二進(jìn)制程序。44.如權(quán)利要求27所述的系統(tǒng),其中所述執(zhí)行監(jiān)視器專用于所述第一處理器。45.如權(quán)利要求28所述的系統(tǒng),其中所述執(zhí)行監(jiān)視器進(jìn)一步包括片段管理器,用于管理所述片段高速緩存中的多個片段;以及簡表監(jiān)視器,它由該執(zhí)行的應(yīng)用二進(jìn)制程序當(dāng)預(yù)定條件滿足時觸發(fā),來為該片段管理器提供一個輸入;其中,該動態(tài)優(yōu)化器將優(yōu)化后的片段通過該片段管理器傳回片段高速緩存;其中,該執(zhí)行監(jiān)視器決定提取該應(yīng)用二進(jìn)制程序的哪個部分進(jìn)行優(yōu)化,并通過制作那些指令的一個復(fù)本提取該應(yīng)用二進(jìn)制程序的所述部分,并存儲該指令,以便該動態(tài)優(yōu)化器可以引用并修改該復(fù)本,其中,所述執(zhí)行監(jiān)視器向該動態(tài)優(yōu)化器提供與優(yōu)化一個特定片段有關(guān)的簡表信息。46.一種有形地體現(xiàn)了由機(jī)器可讀的指令的程序的信號承載介質(zhì),該程序由數(shù)字處理裝置執(zhí)行來實現(xiàn)一種在多重處理系統(tǒng)中透明動態(tài)優(yōu)化的方法,包括使用運行于該系統(tǒng)的另一個處理器上的一個執(zhí)行監(jiān)視器,監(jiān)視在一個第一處理器上的一個應(yīng)用二進(jìn)制程序的執(zhí)行;以及使用在該系統(tǒng)的所述另一個處理器上執(zhí)行的運行時優(yōu)化器,透明地優(yōu)化該原始應(yīng)用二進(jìn)制程序的一個或多個段。47.一種用于具有多個宿主處理器的多處理器系統(tǒng)的仿真系統(tǒng),包括執(zhí)行監(jiān)視器,用于當(dāng)動態(tài)地轉(zhuǎn)換一個目標(biāo)應(yīng)用的一個指令流、用于在一個宿主系統(tǒng)上執(zhí)行時,產(chǎn)生被插截的二進(jìn)制程序;其中所述執(zhí)行監(jiān)視器線程包括多個轉(zhuǎn)換線程中的一個;以及其中該多個轉(zhuǎn)換線程的至少一個被用于動態(tài)優(yōu)化由該執(zhí)行監(jiān)視器選擇的多個代碼片段。48.如權(quán)利要求47所述的仿真系統(tǒng),其中所述多個轉(zhuǎn)換線程的一個包括一個優(yōu)化器線程;其中,頻繁執(zhí)行的多個代碼序列被動態(tài)地優(yōu)化,以提高性能;其中,所述多個序列是由被解釋器轉(zhuǎn)換線程插入的、監(jiān)視被緩存的代碼的執(zhí)行頻率的插截代碼識別的;以及其中多個監(jiān)視器線程不斷地跟蹤所述頻率,從而當(dāng)其達(dá)到一個預(yù)定的閾值時,通知該優(yōu)化器線程,一個給定代碼序列是優(yōu)化的候選,并向該優(yōu)化器線程提供引入該將被優(yōu)化的代碼序列的一個賓客指令的一個被仿真的真實地址。49.一個用于多處理器系統(tǒng)的仿真系統(tǒng),包括多個線程,其中該多個轉(zhuǎn)換線程的一個包括一個執(zhí)行監(jiān)視器,并且其中所述多個轉(zhuǎn)換線程的至少一個包括一個動態(tài)優(yōu)化器。全文摘要一種在多重處理環(huán)境中透明動態(tài)優(yōu)化的方法(和系統(tǒng)),包括使用運行于該系統(tǒng)的另一個處理器上的執(zhí)行監(jiān)視器,監(jiān)視在一個第一處理器上的一個應(yīng)用的執(zhí)行;以及使用在該系統(tǒng)的該另一個處理器上執(zhí)行的運行時優(yōu)化器,透明地優(yōu)化該原始應(yīng)用的一個或多個段。文檔編號G06F9/45GK1490718SQ0315716公開日2004年4月21日申請日期2003年9月16日優(yōu)先權(quán)日2002年9月17日發(fā)明者R·奈爾,J·K·奧布賴恩,K·M·奧布賴恩,P·H·奧登,D·A·普萊納,R奈爾,奧布賴恩,奧登,普萊納申請人:國際商業(yè)機(jī)器公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1