用于多處理器和多核平臺的二進(jìn)制翻譯的制作方法
【專利摘要】用于多核平臺上的部分二進(jìn)制翻譯的技術(shù)包括用于每個(gè)處理器內(nèi)核的共享翻譯緩存、二進(jìn)制翻譯線程調(diào)度器、全局安裝線程以及本地翻譯線程和分析線程。在檢測到熱點(diǎn)時(shí),如果被掛起,則線程調(diào)度器首先再繼續(xù)全局線程,接著如果翻譯緩存操作是待決的,則激活全局線程,以及最后調(diào)度本地翻譯或分析線程以用于執(zhí)行。翻譯緩存操作集中于全局線程中并且與分析和翻譯解耦合。線程調(diào)度器可以在非搶先核心中執(zhí)行,并且翻譯和分析線程可以在搶先運(yùn)行時(shí)間中執(zhí)行。全局線程可以主要是搶先的,其中小的非搶先核心用以將更新提交給共享的翻譯緩存。全局線程可以遷移到處理器內(nèi)核中的任何內(nèi)核。保證了正向前進(jìn)。描述和請求保護(hù)其他實(shí)施例。
【專利說明】
用于多處理器和多核平臺的二進(jìn)制翻譯
【背景技術(shù)】
[0001]計(jì)算機(jī)處理器通常執(zhí)行以特定指令集編碼的二進(jìn)制代碼。二進(jìn)制翻譯將以特定指令集為目標(biāo)的二進(jìn)制代碼翻譯為通常以另一指令集為目標(biāo)的翻譯的二進(jìn)制代碼。二進(jìn)制翻譯可以用于使能對于軟件應(yīng)用程序的向后或向前兼容,或者提高處理效率。例如,以諸如PowerPC的減少的指令集計(jì)算(RISC)體系結(jié)構(gòu)為目標(biāo)的二進(jìn)制代碼可以被翻譯為以諸如IA-32的復(fù)雜指令集計(jì)算(CISC)體系結(jié)構(gòu)為目標(biāo)的二進(jìn)制代碼,從而允許遺贈(zèng)應(yīng)用程序在較新的硬件上運(yùn)行。作為另一示例,二進(jìn)制翻譯可以生成以相同計(jì)算機(jī)體系結(jié)構(gòu)為目標(biāo),但通過使用諸如較廣的指令、改進(jìn)的向量指令等的較新特征進(jìn)行優(yōu)化的翻譯的二進(jìn)制代碼。二進(jìn)制翻譯可以是動(dòng)態(tài)的,即代碼可以隨著其被執(zhí)行而被翻譯。對于一些系統(tǒng),二進(jìn)制翻譯軟件可以接近于硬件、對于任何操作系統(tǒng)或虛擬機(jī)監(jiān)視器(VMM)透明地執(zhí)行。
[0002]—些二進(jìn)制翻譯系統(tǒng)提供部分翻譯。在這樣的系統(tǒng)中,處理器可以原生地執(zhí)行二進(jìn)制代碼,直到檢測到代碼“熱點(diǎn)”為止。熱點(diǎn)可以是可以受益于通過二進(jìn)制翻譯的優(yōu)化的任何代碼片段。一旦檢測到熱點(diǎn),系統(tǒng)分析原生代碼,將原生代碼翻譯為翻譯后的代碼,并且將翻譯后的代碼安裝在翻譯緩存(T緩存)中。在翻譯之后,無論何時(shí)遭遇到熱點(diǎn),處理器執(zhí)行翻譯后的代碼而不是原生代碼。二進(jìn)制翻譯系統(tǒng)還可以計(jì)及自修改代碼;即,在運(yùn)行時(shí)間中修改自身的可執(zhí)行代碼。受到自修改代碼影響的翻譯后的代碼通常是無效的。
【附圖說明】
[0003]在此描述的概念作為示例并且不作為在附圖中的限制來說明。為了說明的簡單和清楚,在附圖中示出的元件不必按比例繪制。在合適考慮的情況下,參考標(biāo)記已經(jīng)在附圖當(dāng)中重復(fù)以指示對應(yīng)或類似元件。
[0004]圖1是用于多核或多處理器平臺中的二進(jìn)制翻譯的計(jì)算裝置的至少一個(gè)實(shí)施例的簡化方框圖;
圖2是圖1的計(jì)算裝置的環(huán)境的至少一個(gè)實(shí)施例的簡化方框圖;
圖3是圖1和2的計(jì)算裝置的處理器內(nèi)核的至少一個(gè)實(shí)施例的簡化狀態(tài)轉(zhuǎn)變圖;
圖4是可以由圖1和2的計(jì)算裝置執(zhí)行的用于二進(jìn)制翻譯線程調(diào)度的方法的至少一個(gè)實(shí)施例的簡化流程圖;以及
圖5是可以由圖1和2的計(jì)算裝置執(zhí)行的用于全局線程的方法的至少一個(gè)實(shí)施例的簡化流程圖。
【具體實(shí)施方式】
[0005]雖然本公開的概念易受到各種修改和替換形式的影響,但是其具體實(shí)施例已經(jīng)作為附圖中的示例示出并且將在此詳細(xì)描述。然而,應(yīng)理解,不存在將本公開的概念限制于所公開的特定形式的意圖,而是相反,意圖是覆蓋與本公開和所附權(quán)利要求一致的所有修改、等同物和替換物。
[0006]在說明書中對“一個(gè)實(shí)施例”、“實(shí)施例”、“說明性實(shí)施例”等的引用指示所描述的實(shí)施例可以包括特定特征、結(jié)構(gòu)或特性,但每個(gè)實(shí)施例可以或者可以不必然包括該特定特征、結(jié)構(gòu)或特性。此外,這樣的短語并不必然正提及相同實(shí)施例。此外,在特定特征、結(jié)構(gòu)或特性結(jié)合實(shí)施例描述時(shí),應(yīng)認(rèn)為,無論是否明確描述,結(jié)合其他實(shí)施例實(shí)現(xiàn)這樣的特征、結(jié)構(gòu)或特性在本領(lǐng)域技術(shù)人員的知識內(nèi)。
[0007]所公開的實(shí)施例在一些情況下可以以硬件、固件、軟件或其任何組合來實(shí)施。所公開的實(shí)施例還可以作為由瞬態(tài)或非瞬態(tài)機(jī)器可讀(例如計(jì)算機(jī)可讀)存儲(chǔ)介質(zhì)攜帶或存儲(chǔ)在其上的指令來實(shí)施,其可以由一個(gè)或多個(gè)處理器讀取并且執(zhí)行。機(jī)器可讀存儲(chǔ)介質(zhì)可以體現(xiàn)為用于存儲(chǔ)或傳輸機(jī)器可讀形式的信息的任何存儲(chǔ)裝置、機(jī)構(gòu)或其他物理結(jié)構(gòu)(例如,易失或非易失存儲(chǔ)器、媒體盤或其他介質(zhì)裝置)。
[0008]在附圖中,一些結(jié)構(gòu)或方法特征可以以特定布置和/或排序示出。然而,應(yīng)理解,可以不需要這樣特定的布置和/或排序。相反,在一些實(shí)施例中,這樣的特征可以以不同于說明性附圖中所示的方式和/或次序來布置。附加地,在特定附圖中包括結(jié)構(gòu)或方法特征并不意味著暗示這樣的特征在全部實(shí)施例中是需要的,并且在一些實(shí)施例中,可以不包括其他特征或者可以與其他特征組合。
[0009]現(xiàn)參照圖1,用于二進(jìn)制翻譯的說明性計(jì)算裝置100包括多核處理器120、1/0子系統(tǒng)128以及存儲(chǔ)器130。處理器120支持熱點(diǎn)驅(qū)動(dòng)部分二進(jìn)制翻譯;S卩,處理器120的每個(gè)內(nèi)核可以原生地執(zhí)行代碼或者可以生成并且執(zhí)行優(yōu)化的翻譯后的代碼。存儲(chǔ)器130包括在處理器120的全部內(nèi)核之間共享的全局翻譯緩存。全局翻譯緩存上的全部更新操作集中在單個(gè)全局線程內(nèi);安裝因此與翻譯和分析隔離。更新操作總是使用短的非搶先提交階段和非阻擋鎖定來使能二進(jìn)制翻譯系統(tǒng)的正向前進(jìn)。附加地,全局線程可以在處理器內(nèi)核之間迀移以允許執(zhí)行翻譯緩存更新的關(guān)鍵任務(wù)的搶先完成。二進(jìn)制翻譯系統(tǒng)調(diào)度器以以下次序?qū)⒍M(jìn)制翻譯任務(wù)列入優(yōu)先,其中最高優(yōu)先級任務(wù)首先:本地翻譯卸載、全局線程再繼續(xù)、全局線程激活以安裝或刪除翻譯、本地線程調(diào)度(其中翻譯優(yōu)先于分析)以及最后,翻譯的本地安裝。
[0010]與每內(nèi)核生成一個(gè)私有翻譯緩存相反,在內(nèi)核當(dāng)中共享翻譯緩存減少資源消耗并且防止加倍的二進(jìn)制翻譯。附加地,計(jì)算裝置100在內(nèi)核當(dāng)中協(xié)調(diào)二進(jìn)制翻譯活動(dòng)以避免死鎖并且確保二進(jìn)制翻譯的正向前進(jìn)。因此,由計(jì)算裝置100支持的二進(jìn)制翻譯對于包括大量處理器內(nèi)核的處理器120是實(shí)用的。
[0011]計(jì)算裝置100可以體現(xiàn)為能夠執(zhí)行在此描述的功能的任何類型的計(jì)算裝置。例如,計(jì)算裝置100可以體現(xiàn)為(不限于)計(jì)算機(jī)、智能電話、平板計(jì)算機(jī)、膝上型計(jì)算機(jī)、筆記本計(jì)算機(jī)、臺式計(jì)算機(jī)、工作站、移動(dòng)計(jì)算裝置、蜂窩電話、手機(jī)、短信收發(fā)裝置、車載遠(yuǎn)程信息處理裝置、網(wǎng)絡(luò)設(shè)備、環(huán)球網(wǎng)設(shè)備、分布式計(jì)算系統(tǒng)、多處理器系統(tǒng)、基于處理器的系統(tǒng)、消費(fèi)電子裝置、數(shù)字電視裝置和/或配置為處理系統(tǒng)管理中斷的任何其他計(jì)算裝置。如圖1所示,說明性計(jì)算裝置100包括處理器120、1/0子系統(tǒng)128、存儲(chǔ)器130以及數(shù)據(jù)存儲(chǔ)設(shè)備136。當(dāng)然,在其他實(shí)施例中,計(jì)算裝置100可以包括其他或附加組件,諸如臺式計(jì)算機(jī)中通常具有的那些組件(例如,各種輸入/輸出裝置)。附加地,在一些實(shí)施例中,說明性組件中的一個(gè)或多個(gè)可以并入在另一組件中或者以其它方式來自另一組件的一部分。例如,在一些實(shí)施例中,存儲(chǔ)器130或其部分可以并入在處理器120中。
[0012]處理器120可以體現(xiàn)為能夠執(zhí)行在此描述的功能的任何類型的多核處理器。例如,處理器120可以體現(xiàn)為微處理器、數(shù)字信號處理器、微控制器或其他處理器或處理/控制電路。處理器120包括處理器內(nèi)核122;處理器內(nèi)核122中的每一個(gè)是能夠執(zhí)行編程指令的獨(dú)立處理單元。說明性處理器120包括兩個(gè)處理器內(nèi)核122;然而,在其他實(shí)施例中,處理器120可以包括一個(gè)或多個(gè)處理器內(nèi)核122。雖然所示為包括多個(gè)處理器內(nèi)核122的包括的單個(gè)處理器120,但在其他實(shí)施例中,計(jì)算裝置100可以包括多個(gè)處理器120,其中的每一個(gè)可以是單或多核的。
[0013]處理器120包括分析器(pr0filer)124。分析器124簡要描述通過處理器內(nèi)核122的原生代碼的執(zhí)行并且檢測熱點(diǎn)。如上所述,熱點(diǎn)是可以適合于通過二進(jìn)制翻譯進(jìn)行優(yōu)化的原生代碼片段。剛一檢測到熱點(diǎn),分析器124就生成用于特定處理器內(nèi)核122的中斷,通常已知為熱點(diǎn)事件(HSE)。分析器124可以以硬件、微代碼或固件實(shí)施。
[0014]處理器120還包括二進(jìn)制翻譯支持模塊126。二進(jìn)制翻譯支持模塊126截取由分析器124生成的熱點(diǎn)事件并且將執(zhí)行切換到受影響的處理器內(nèi)核122上的合適二進(jìn)制翻譯軟件。二進(jìn)制翻譯支持模塊126還檢測翻譯后的代碼內(nèi)的自修改代碼并且在翻譯后的代碼內(nèi)標(biāo)識自修改代碼以用于刪除。二進(jìn)制翻譯支持模塊126還可以包括翻譯條目(entry)機(jī)制以允許處理器內(nèi)核122執(zhí)行翻譯后的代碼。在一些實(shí)施例中,翻譯條目機(jī)制可以包括映象表以將虛擬地址映射到翻譯后的代碼。例如,二進(jìn)制翻譯支持模塊126可以在用于每個(gè)處理器內(nèi)核122的頁面表中設(shè)定條目,其提及翻譯上下文中的翻譯后的代碼。二進(jìn)制翻譯支持模塊126可以以硬件、微代碼或固件實(shí)施。
[0015]處理器120可通信地耦合至I/O子系統(tǒng)128,其可以體現(xiàn)為電路和/或組件以便于與處理器120、存儲(chǔ)器130和計(jì)算裝置100的其他組件的輸入/輸出操作。例如,I/O子系統(tǒng)128可以體現(xiàn)為,或以其它方式包括存儲(chǔ)器控制器集線器、平臺控制器集線器、輸入/輸出控制集線器、固件裝置、通信鏈路(即,點(diǎn)到點(diǎn)鏈路、總線鏈路、導(dǎo)線、電纜、光導(dǎo)、印刷電路板跡線等)和/或其他組件和子系統(tǒng)以便于輸入/輸出操作。在一些實(shí)施例中,I/O子系統(tǒng)128可以形成芯片上系統(tǒng)(SoC)的一部分并且與處理器120、存儲(chǔ)器130和計(jì)算裝置100的其他組件一起并入在單個(gè)集成電路芯片上。
[0016]存儲(chǔ)器130可以體現(xiàn)為能夠執(zhí)行在此描述的功能的任何類型的易失或非易失存儲(chǔ)器或數(shù)據(jù)存儲(chǔ)裝置。在操作中,存儲(chǔ)器130可以存儲(chǔ)在計(jì)算裝置100的操作期間使用的各種數(shù)據(jù)和軟件,諸如操作系統(tǒng)、應(yīng)用程序、程序、庫和驅(qū)動(dòng)器。如上所述,存儲(chǔ)器130可以經(jīng)由I/O子系統(tǒng)128可通信地耦合至處理器120,或者在一些實(shí)施例中可以直接耦合至處理器120。存儲(chǔ)器130包括原生代碼區(qū)域132和翻譯緩存134。如上所述,每個(gè)處理器內(nèi)核122執(zhí)行存儲(chǔ)在原生代碼區(qū)域132中的代碼。附加地,每個(gè)處理器內(nèi)核122可以翻譯存儲(chǔ)在原生代碼區(qū)域132中的代碼并且將翻譯后的代碼存儲(chǔ)在翻譯緩存134中。如上所述,翻譯緩存134在全部處理器內(nèi)核122當(dāng)中共享。在一些實(shí)施例中,翻譯緩存134可以是從計(jì)算裝置100的操作系統(tǒng)或VMM不可訪問的,或以其它方式被保護(hù)免受計(jì)算裝置100的操作系統(tǒng)或VMM。存儲(chǔ)器130還可以同時(shí)包括用于翻譯緩存134的控制機(jī)制,包括非阻擋多讀取者/單寫入者鎖定。在其他實(shí)施例(未圖示)中,存儲(chǔ)器130可以包括多于一個(gè)的混合共享/私有翻譯緩存134,并且這些混合翻譯緩存134中的每一個(gè)可以在包括處理器內(nèi)核122的不相交子集的域當(dāng)中共享。換言之,存儲(chǔ)器130可以包括用于每個(gè)域的一個(gè)翻譯緩存134,其中每個(gè)域設(shè)法滿足在處理器內(nèi)核122的子集當(dāng)中共享資源的需求。
[0017]數(shù)據(jù)存儲(chǔ)設(shè)備136可以體現(xiàn)為配置為用于數(shù)據(jù)的短期或長期存儲(chǔ)的任何類型的一個(gè)或多個(gè)裝置,諸如例如存儲(chǔ)器裝置和電路、存儲(chǔ)器卡、硬盤驅(qū)動(dòng)、固態(tài)驅(qū)動(dòng)或其他數(shù)據(jù)存儲(chǔ)裝置。數(shù)據(jù)存儲(chǔ)設(shè)備136可以存儲(chǔ)用于二進(jìn)制翻譯的軟件和/或固件,以及原生代碼圖像。
[0018]現(xiàn)參照圖2,在一個(gè)實(shí)施例中,計(jì)算裝置100建立操作期間的環(huán)境200。說明性實(shí)施例200包括原生應(yīng)用程序202、翻譯后的應(yīng)用程序204以及二進(jìn)制翻譯模塊206。環(huán)境200的各種模塊可以體現(xiàn)為硬件、固件、軟件或其組合。
[0019]原生應(yīng)用程序202可以體現(xiàn)為位于原生代碼區(qū)域132中的任何原生可執(zhí)行的。翻譯后的應(yīng)用程序204可以體現(xiàn)為與原生應(yīng)用程序202相對應(yīng)的翻譯后的二進(jìn)制代碼。因此,原生應(yīng)用程序202是二進(jìn)制翻譯的輸入而翻譯后的應(yīng)用程序204是二進(jìn)制翻譯的輸出。雖然所示為應(yīng)用程序,原生應(yīng)用程序202和翻譯后的應(yīng)用程序204兩者都可以包括任何可執(zhí)行代碼或可執(zhí)行代碼片段,諸如操作系統(tǒng)、公用程序、代碼庫或其他可執(zhí)行代碼。
[0020]二進(jìn)制翻譯模塊206配置為將原生應(yīng)用程序202的原生二進(jìn)制代碼翻譯為翻譯后的應(yīng)用程序204的二進(jìn)制代碼。為了執(zhí)行二進(jìn)制翻譯,二進(jìn)制翻譯模塊206執(zhí)行三個(gè)階段:分析、翻譯和安裝。在分析階段,二進(jìn)制翻譯模塊206識別由分析器124識別的原生代碼區(qū)域132中的區(qū)域一一“熱點(diǎn)”一一用于翻譯。在翻譯階段,熱點(diǎn)處的原生代碼被翻譯并且排隊(duì)以用于安裝。在安裝階段,翻譯后的代碼被安裝到翻譯緩存134中,允許計(jì)算裝置100執(zhí)行翻譯后的應(yīng)用程序204。在一些實(shí)施例中,這些階段中的每一個(gè)可以由子模塊執(zhí)行,例如由二進(jìn)制翻譯線程調(diào)度器212、全局線程核心214、全局線程運(yùn)行時(shí)間216、翻譯模塊220、熱點(diǎn)分析模塊224或安裝隊(duì)列228執(zhí)行。
[0021]二進(jìn)制翻譯模塊206還包含二進(jìn)制翻譯核心208和二進(jìn)制翻譯運(yùn)行時(shí)間210。二進(jìn)制翻譯核心的功能在處理器內(nèi)核122上在非搶先狀態(tài)下執(zhí)行;S卩,二進(jìn)制翻譯核心208的功能不可以被計(jì)算裝置100的其他進(jìn)程或者外部中斷中斷。因此,為了實(shí)現(xiàn)可接受的等待時(shí)間和保存交互性,二進(jìn)制翻譯核心208內(nèi)的操作可以是非阻擋的并且可以具有相對短的執(zhí)行時(shí)間。二進(jìn)制翻譯線程調(diào)度器212和全局線程核心214可以被包含在二進(jìn)制翻譯核心208內(nèi)。相比之下,二進(jìn)制翻譯運(yùn)行時(shí)間210的功能在處理器內(nèi)核122上以搶先狀態(tài)執(zhí)行;S卩,二進(jìn)制翻譯運(yùn)行時(shí)間210的功能可以由計(jì)算裝置100的其他進(jìn)程或者外部中斷中斷。當(dāng)中斷時(shí),二進(jìn)制翻譯運(yùn)行時(shí)間210的功能可以被掛起并且能夠在隨后的時(shí)間再繼續(xù)。全局線程運(yùn)行時(shí)間216、翻譯模塊220以及熱點(diǎn)分析模塊224可以被包含在二進(jìn)制翻譯運(yùn)行時(shí)間210內(nèi)。
[0022]二進(jìn)制翻譯模塊206的各種階段可以通過由二進(jìn)制翻譯線程調(diào)度器212管理的一個(gè)或多個(gè)線程來執(zhí)行。安裝階段可以由單個(gè)全局線程218執(zhí)行。全局線程218在處理器內(nèi)核122之間是可迀移的并且可以以搶先和非搶先模式兩者執(zhí)行,并且因此被圖示為包含在二進(jìn)制翻譯核心208和二進(jìn)制翻譯運(yùn)行時(shí)間210兩者內(nèi)。雖然圖示為包括單個(gè)全局線程218,但是在一些處理器內(nèi)核122被劃分為包括在域中的子集的實(shí)施例中,二進(jìn)制翻譯模塊206可以包括用于每個(gè)域的一個(gè)全局線程218。翻譯階段可以由包含在二進(jìn)制翻譯運(yùn)行時(shí)間210內(nèi)的一個(gè)或多個(gè)翻譯線程222執(zhí)行。翻譯線程222中的每一個(gè)可以僅在單個(gè)處理器內(nèi)核122上執(zhí)行,并且二進(jìn)制翻譯模塊206可以包括用于每個(gè)處理器內(nèi)核122的一個(gè)翻譯線程222。類似地,分析階段可以由包含在二進(jìn)制翻譯運(yùn)行時(shí)間210內(nèi)的一個(gè)或多個(gè)分析線程226執(zhí)行。分析線程226中的每一個(gè)可以僅在單個(gè)處理器內(nèi)核122上執(zhí)行,并且二進(jìn)制翻譯模塊206可以包括用于每個(gè)處理器內(nèi)核122的一個(gè)分析線程226。線程218、222、226中的每一個(gè)可以體現(xiàn)為硬件線程、操作系統(tǒng)線程、輕量進(jìn)程、光纖或任何其他能夠在處理器內(nèi)核122之一上執(zhí)行的獨(dú)立指令流。
[0023](多個(gè))安裝隊(duì)列228緩沖將要安裝在翻譯緩存134中的由翻譯線程222產(chǎn)生的翻譯數(shù)據(jù)。因此,(多個(gè))安裝隊(duì)列228解耦翻譯,其可以從安裝在多個(gè)線程222、226上同時(shí)執(zhí)行,所述安裝由單個(gè)全局線程218連續(xù)地執(zhí)行。因此,(多個(gè))安裝隊(duì)列228可以由二進(jìn)制翻譯核心208和二進(jìn)制翻譯運(yùn)行時(shí)間210兩者訪問。(多個(gè))安裝隊(duì)列228可以包括用于處理器內(nèi)核122中的每一個(gè)的分開的安裝隊(duì)列。在一些實(shí)施例中,(多個(gè))安裝隊(duì)列228可以包括在全部處理器內(nèi)核122當(dāng)中共享的單個(gè)安裝隊(duì)列,其包括并發(fā)控制機(jī)制。
[0024]現(xiàn)參照圖3,在使用中,計(jì)算裝置100的每個(gè)處理器內(nèi)核122可以以由狀態(tài)轉(zhuǎn)變圖300示出的多個(gè)狀態(tài)執(zhí)行。處理器內(nèi)核122以NATIVE狀態(tài)302開始。在NATIVE狀態(tài)302中,處理器內(nèi)核122原生地執(zhí)行代碼;S卩,處理器內(nèi)核122執(zhí)行來自原生代碼區(qū)域132的代碼而不施加任何二進(jìn)制翻譯。處理器內(nèi)核122可以從NATIVE狀態(tài)302來回轉(zhuǎn)變至TREX狀態(tài)304。在TREX狀態(tài)304下,處理器內(nèi)核122執(zhí)行來自翻譯緩存134的翻譯后的代碼。在處于NATIVE狀態(tài)302中的同時(shí),當(dāng)熱點(diǎn)事件(HSE )被檢測到時(shí),處理器內(nèi)核122轉(zhuǎn)變到TRANS核心狀態(tài)306。
[0025]TRANS核心狀態(tài)306是非搶先狀態(tài)。即,處理器內(nèi)核122不可以被中斷;如由帶回到TRANS核心狀態(tài)306的INT狀態(tài)轉(zhuǎn)變所示的。在TRANS核心狀態(tài)306中,處理器內(nèi)核122執(zhí)行二進(jìn)制翻譯線程調(diào)度器。如下所述,二進(jìn)制翻譯線程調(diào)度器管理分析、翻譯以及安裝線程的執(zhí)行以及建立它們之間的優(yōu)先級。這些線程中的每一個(gè)可以在各個(gè)點(diǎn)處搶先,并且線程調(diào)度器必須識別哪個(gè)任務(wù)開始或再繼續(xù)。剛一確定開始分析或翻譯線程,或者再繼續(xù)被掛起的分析或翻譯線程,處理器內(nèi)核122就轉(zhuǎn)變到TRANS運(yùn)行時(shí)間狀態(tài)308。
[0026]TRANS運(yùn)行時(shí)間狀態(tài)308是搶先狀態(tài)。即,剛一接收到中斷INT,處理器內(nèi)核122就轉(zhuǎn)變到SUSPEND狀態(tài)310。在SUSPEND狀態(tài)310中,當(dāng)前執(zhí)行的線程被掛起以便能夠在隨后的時(shí)間再繼續(xù)。例如,處理器內(nèi)核122可以存儲(chǔ)當(dāng)前線程上下文,當(dāng)前體系結(jié)構(gòu)狀態(tài)的拷貝等等。在掛起之后,處理器內(nèi)核122轉(zhuǎn)變回到NATIVE狀態(tài)302。因此,掛起的線程僅在隨后檢測到HSE事件時(shí)再繼續(xù)。
[0027]回到參照TRANS運(yùn)行時(shí)間狀態(tài)308,在完成熱點(diǎn)分析和翻譯之后,處理器內(nèi)核122轉(zhuǎn)變回到TRANS核心狀態(tài)306以發(fā)起翻譯后的代碼的安裝。在TRANS核心狀態(tài)306中,處理器內(nèi)核122確定是否開始或再繼續(xù)全局線程以處理安裝任務(wù)。為了執(zhí)行安裝,處理器內(nèi)核122轉(zhuǎn)變到全局線程運(yùn)行時(shí)間狀態(tài)312。
[0028]全局線程運(yùn)行時(shí)間狀態(tài)312是搶先狀態(tài)。剛一接收到中斷INT,處理器內(nèi)核122就轉(zhuǎn)變到SUSPEND狀態(tài)310,并且如上所述,全局線程被掛起。在處于全局線程運(yùn)行時(shí)間狀態(tài)312中的同時(shí),處理器內(nèi)核122將翻譯后的代碼安裝到全局翻譯緩存134中。當(dāng)寫入全局翻譯緩存134時(shí),處理器內(nèi)核122轉(zhuǎn)變到全局線程核心狀態(tài)314。
[0029]全局線程核心狀態(tài)314是非搶先狀態(tài)。即,任何中斷INT不使處理器內(nèi)核122轉(zhuǎn)變狀態(tài)。因此,到翻譯緩存134的寫入是原子性的并且可以使用相當(dāng)簡單和無錯(cuò)非阻擋多讀取者/單寫入者鎖定來保護(hù)。為了減少輸入等待時(shí)間,全部寫入應(yīng)該相對快速地提交,以使得處理器內(nèi)核122可以快速地轉(zhuǎn)變到全局線程核心狀態(tài)314外。在完成寫入之后,如果另外的安裝任務(wù)保留,則處理器內(nèi)核122轉(zhuǎn)變到全局線程運(yùn)行時(shí)間狀態(tài)312。如果沒有另外的安裝任務(wù)保留,則處理器內(nèi)核122轉(zhuǎn)變到DEACTIVATE狀態(tài)316。在DEACTIVE狀態(tài)316中,全局線程被解激活。不同于在SUSPEND狀態(tài)310中,當(dāng)解激活時(shí),全局線程不可以被再繼續(xù)而是必須在需要時(shí)被重新開始。在解激活全局線程之后,處理器內(nèi)核122轉(zhuǎn)變回到NATIVE狀態(tài)302。
[0030]現(xiàn)參照圖4,在使用中,計(jì)算裝置100可以執(zhí)行用于二進(jìn)制翻譯線程調(diào)度的方法400。方法開始于方框402中的調(diào)度器條目。如上所述,在檢測到由分析器124生成的熱點(diǎn)事件(HSE)之后,可以進(jìn)入二進(jìn)制翻譯線程調(diào)度器。如圖示的,在二進(jìn)制翻譯核心208中進(jìn)入線程調(diào)度器。如上所述,雖然在二進(jìn)制翻譯核心208中,但方法400是非搶先的。方法400的非搶先進(jìn)程在圖4中以雙線框示出;搶先進(jìn)程以單線框示出。
[0031]在線程條目之后,在方框404中,計(jì)算裝置100確定本地卸載對于當(dāng)前處理器內(nèi)核122是否是待決的。當(dāng)翻譯后的代碼的一部分已經(jīng)由全局線程218標(biāo)記以用于刪除時(shí),本地卸載是待決的。為了確定本地卸載是否是待決的,計(jì)算裝置100可以檢查特定于當(dāng)前處理器內(nèi)核122的刪除待決事件標(biāo)記或其他數(shù)據(jù)結(jié)構(gòu)。計(jì)算裝置100在再繼續(xù)或開始二進(jìn)制翻譯線程之前檢查本地卸載,以確保當(dāng)前處理器內(nèi)核122與翻譯緩存134之間的一致性。如果本地卸載不是待決的,則方法400分出來向前到方框408。如果本地卸載是待決的,則方法400前進(jìn)到方框406。
[0032]在方框406中,計(jì)算裝置100執(zhí)行用于當(dāng)前處理器內(nèi)核122的任何待決本地卸載。計(jì)算裝置100可以調(diào)用二進(jìn)制翻譯支持模塊126以從特定于當(dāng)前處理器內(nèi)核122的數(shù)據(jù)結(jié)構(gòu)去除針對本地卸載調(diào)度的翻譯后的代碼片段。例如,計(jì)算裝置100可以從當(dāng)前處理器內(nèi)核122的頁面表去除對翻譯后的代碼片段的虛擬地址的引用。
[0033]在方框408中,計(jì)算裝置100確定全局線程218是否被掛起。如上所述,全局線程218可以在執(zhí)行期間被搶先和掛起。如果全局線程218未被掛起,方法400分出來向前到方框412。如果全局線程218被掛起,則方法400前進(jìn)到方框410。在方框410中,計(jì)算裝置100將全局線程218迀移到當(dāng)前處理器內(nèi)核122并且再繼續(xù)全局線程218。線程迀移可以使用微代碼或處理器內(nèi)核122的其他低級別特征來使能。在這樣做的情況下,計(jì)算裝置100轉(zhuǎn)變到二進(jìn)制翻譯運(yùn)行時(shí)間210,從而允許搶先。在再繼續(xù)全局線程218之后,方法400將執(zhí)行轉(zhuǎn)移到全局線程218先前被掛起的點(diǎn),如以下關(guān)于圖5描述的。因此,計(jì)算裝置100通過在開始或再繼續(xù)任何其他二進(jìn)制翻譯線程222、226之前再繼續(xù)全局線程218來使全局線程218優(yōu)先于其他二進(jìn)制翻譯線程222、226。
[0034]返回參照方框408,如果全局線程218未被掛起,則方法400分出來向前到方框412。在方框412中,計(jì)算裝置100確定翻譯緩存操作是否是待決的。翻譯緩存操作可以包括來自翻譯緩存134的請求的安裝或請求的刪除。如下所述,在完成翻譯之后,翻譯線程通過全局線程218將用于安裝的翻譯后的代碼排隊(duì)到(多個(gè))安裝隊(duì)列228中。附加地,由于檢測到自修改代碼,二進(jìn)制翻譯支持模塊126可以標(biāo)記用于刪除的翻譯后的代碼。如果沒有翻譯緩存是待決的,則方法400分出來向前到方框418。如果翻譯緩存操作是待決的,則方法400前進(jìn)到方框414。在方框414中,計(jì)算裝置100激活當(dāng)前處理器內(nèi)核122上的全局線程218。如上所述,全局線程218在二進(jìn)制翻譯運(yùn)行時(shí)間210中被激活,從而允許搶先。在激活之后,方法400前進(jìn)到方框416中的全局線程條目點(diǎn),如以下關(guān)于圖5描述的。
[0035]返回參照方框412,如果沒有翻譯緩存操作是待決的,則方法400分出來向前到方框418。在方框418中,計(jì)算裝置100確定與當(dāng)前處理器內(nèi)核122相關(guān)聯(lián)的翻譯線程222是否被掛起。不同于全局線程218,若干翻譯線程222可以在計(jì)算裝置100上同時(shí)存在。因此,翻譯線程222不在處理器內(nèi)核122之間迀移。如果沒有用于處理器內(nèi)核122的翻譯線程222被掛起,則方法400分出來向前到方框426。如果翻譯線程222已經(jīng)被掛起,則方法400前進(jìn)到方框420。
[0036]在方框420中,計(jì)算裝置100再繼續(xù)翻譯線程222。翻譯線程222被再繼續(xù)并且在二進(jìn)制翻譯運(yùn)行時(shí)間210中執(zhí)行并且因此是可搶先的。因此,計(jì)算裝置100通過在開始分析線程226之前再繼續(xù)翻譯線程222而使翻譯優(yōu)先于分析。在方框422中,執(zhí)行翻譯線程222的計(jì)算裝置100生成用于熱點(diǎn)的翻譯后的代碼。翻譯后的代碼在安裝隊(duì)列228中排隊(duì)以由全局線程218安裝。如上所述,每個(gè)處理器內(nèi)核122可以具有專用的安裝隊(duì)列228,或者單個(gè)安裝隊(duì)列228可以由處理器內(nèi)核122共享,易受諸如鎖定的同時(shí)控制機(jī)制。在使翻譯后的代碼排隊(duì)之后,方法400跳回到方框424中的調(diào)度器條目。因此,計(jì)算裝置100在方框402處重新進(jìn)入二進(jìn)制翻譯調(diào)度器,如上所述。
[0037]返回參照方框418,如果沒有用于處理器內(nèi)核122的翻譯線程222被掛起,則方法400分出來向前到方框426。在方框426中,計(jì)算裝置100確定當(dāng)前檢測到的熱點(diǎn)事件(HSE)是否已經(jīng)完全被處理。即,計(jì)算裝置100確定翻譯線程222是否已經(jīng)完成生成用于當(dāng)前檢測到的HSE(與例如針對其翻譯被搶先的較早的HSE相反)的翻譯后的代碼。如果代碼生成已經(jīng)完成,則計(jì)算裝置100退出二進(jìn)制線程調(diào)度器并且返回到方框428中的原生代碼執(zhí)行。如上所述,在原生代碼執(zhí)行期間,計(jì)算裝置100在其被遭遇時(shí)可以執(zhí)行來自翻譯緩存134的翻譯后的代碼。如果代碼生成還未完成,則方法400分出來到方框430。
[0038]在方框430中,計(jì)算裝置100開始分析線程226以分析當(dāng)前熱點(diǎn)事件。分析線程226在二進(jìn)制翻譯運(yùn)行時(shí)間210中執(zhí)行并且因此是可搶先的。如圖示的,分析線程226具有其他線程的最低優(yōu)先級并且將僅在沒有掛起的全局線程218、沒有待決翻譯緩存操作以及沒有掛起的翻譯線程222時(shí)執(zhí)行。在分析線程226的執(zhí)行期間,計(jì)算裝置100識別對應(yīng)于要被翻譯的原生代碼的原生代碼區(qū)域132內(nèi)的目標(biāo)位置。所識別的熱點(diǎn)可以是頻繁執(zhí)行的代碼區(qū)域、循環(huán)、嵌套循環(huán)、基本塊或可以受益于二進(jìn)制翻譯的任何其他代碼區(qū)域。在分析線程226的完成之后,方法400前進(jìn)到方框432。
[0039]在方框432中,計(jì)算裝置100確定在翻譯緩存134中是否存在用于由分析線程226識別的熱點(diǎn)的翻譯后的代碼。方框432在二進(jìn)制翻譯核心208中執(zhí)行并且因此是非可搶先的。如果不存在翻譯,則方法400前進(jìn)到方框434。在方框434中,計(jì)算裝置100開始翻譯線程222以翻譯熱點(diǎn)。翻譯線程222在二進(jìn)制翻譯運(yùn)行時(shí)間210中執(zhí)行并且因此是可搶先的。在開始翻譯線程222之后,方法400進(jìn)行到方框422以生成翻譯和使用于安裝的翻譯后的代碼排隊(duì),如上所述。
[0040]返回參照方框432,如果確實(shí)存在用于熱點(diǎn)的翻譯,方法400分出來向前到方框436。在方框436中,計(jì)算裝置100執(zhí)行用于當(dāng)前處理器內(nèi)核122的翻譯后的代碼的本地安裝。本地安裝使翻譯后的代碼對于當(dāng)前處理器內(nèi)核122是可視的并且可執(zhí)行的。在本地安裝期間,計(jì)算裝置100可以對當(dāng)前處理器內(nèi)核122的翻譯條目機(jī)制編程。例如,計(jì)算裝置100可以使用二進(jìn)制翻譯支持模塊126以在用于處理器內(nèi)核122的頁面表中安裝對翻譯后的代碼的引用,以用于翻譯上下文。本地安裝在二進(jìn)制翻譯核心208中執(zhí)行并且因此是非可搶先的。附加地,在本地安裝期間,計(jì)算裝置100可以在翻譯緩存134上取出非阻擋多讀取者/單寫入者鎖定,以確保在本地安裝期間翻譯緩存134不被全局線程218更新并且因此確保數(shù)據(jù)一致性。在一個(gè)實(shí)施例中,這樣的非阻擋鎖定可以通過確定該鎖定是否由寫入者采取并且如果該鎖定由作為寫入者的另一線程采取則產(chǎn)出執(zhí)行來實(shí)施。因此,保證了二進(jìn)制翻譯的正向前進(jìn)。在執(zhí)行本地安裝之后,方法400前進(jìn)到方框428以返回到原生代碼執(zhí)行,如上所述。[0041 ]總而言之,在遭遇到熱點(diǎn)事件時(shí),方法400可以在處理器內(nèi)核122的每一個(gè)上被調(diào)用。方法400的每次調(diào)用使調(diào)度全局線程218優(yōu)先于任何本地翻譯線程222或分析線程226。因此,連同在本地處理器內(nèi)核122上調(diào)度線程222、226的一個(gè)或多個(gè)本地調(diào)度器一起,方法400有效地實(shí)施單個(gè)全局調(diào)度器,其將全局線程218列入優(yōu)先。因此,全局線程218與翻譯線程222和分析線程226的執(zhí)行解耦合。
[0042]現(xiàn)參照圖5,在使用中,計(jì)算裝置100可以執(zhí)行用于全局線程218的方法500。方法500開始于方框502中的全局線程條目點(diǎn)并且前進(jìn)到方框504。在方框504中,計(jì)算裝置100確定刪除事件是否對于翻譯緩存134是待決的。方法500的非搶先進(jìn)程在圖5中以雙線框示出;搶先進(jìn)程以單線框示出。因此,方框504的確定在二進(jìn)制翻譯運(yùn)行時(shí)間210中做出,意味著該確定是可搶先的。例如在翻譯后的代碼不再有效時(shí),刪除事件指示翻譯緩存134內(nèi)的翻譯后的代碼應(yīng)該被刪除。刪除事件可以通過二進(jìn)制翻譯支持模塊126在檢測到自修改代碼時(shí)生成。計(jì)算裝置100可以確定刪除事件待決標(biāo)識是否已經(jīng)由二進(jìn)制翻譯支持模塊126設(shè)定。如果沒有刪除事件是待決的,則方法500分出來向前到方框510。如果刪除事件是待決的,方法500前進(jìn)到方框506。
[0043]在方框506中,計(jì)算裝置100對于從翻譯緩存134的刪除準(zhǔn)備受影響的翻譯。為了準(zhǔn)備刪除,計(jì)算裝置100確定所有要更新的受影響的存儲(chǔ)器位置。然而,計(jì)算裝置100不提交對于存儲(chǔ)器的任何寫入。準(zhǔn)備在二進(jìn)制翻譯運(yùn)行時(shí)間210中做出并且因此是可搶先的。
[0044]在方框508中,計(jì)算裝置100從翻譯緩存134刪除受影響的代碼并且調(diào)度任何受影響的處理器內(nèi)核122以用于本地卸載。對于翻譯緩存134的刪除被在二進(jìn)制翻譯核心208中寫入并且因此是非可搶先的。因?yàn)閮H單個(gè)全局線程218任何時(shí)候可以是激活的,將不存在對于翻譯緩存134的并發(fā)安裝。因此,全局線程218可以在對翻譯緩存134的寫入之前獲得非阻擋多讀取者/單寫入者鎖定。因此,對于翻譯緩存134的更新相對于彼此是有效原子性的,并且翻譯緩存134可以總是在一致狀態(tài)中。計(jì)算裝置100可以通過設(shè)定刪除待決事件標(biāo)識或以其它方式更新的特定于受影響的處理器內(nèi)核122的數(shù)據(jù)結(jié)構(gòu)來調(diào)度本地卸載。調(diào)度二進(jìn)制翻譯核心208中的本地卸載確保所刪除的翻譯將對于受影響的處理器內(nèi)核122不再是可視的,如上所述。
[0045]返回參照方框504,如果沒有刪除事件是待決的,則方法500分出來向前至方框510。在方框510中,計(jì)算裝置100確定翻譯卸載是否是待決的。計(jì)算裝置100可以引用用于由翻譯線程222排隊(duì)的任何待決翻譯的安裝隊(duì)列228。全局線程218可以實(shí)施工作調(diào)度邏輯以選擇翻譯后的代碼用于安裝以將特定翻譯列入優(yōu)先,確保公平性,或以其它方式控制安裝的次序。該確定發(fā)生在二進(jìn)制翻譯核心208中并且因此是非可搶先的。如果沒有安裝是待決的,則方法500前進(jìn)到方框512。在方框512中,計(jì)算裝置100解激活全局線程218,并且在方框514中計(jì)算裝置100返回到原生代碼執(zhí)行。計(jì)算裝置100留下二進(jìn)制翻譯核心208并且因此是可搶先的。如上所述,一旦在原生代碼執(zhí)行中,計(jì)算裝置100可以執(zhí)行原生代碼以及所遭遇的翻譯緩存134內(nèi)的任何翻譯后的代碼。此外,如上所述,一旦解激活,全局線程218可以在需要時(shí)通過二進(jìn)制線程調(diào)度器來重新開始。
[0046]返回參照方框510,如果安裝是待決的,方法500分出來向前到方框516。方框516在二進(jìn)制翻譯運(yùn)行時(shí)間210中執(zhí)行并且因此是可搶先的,除非另外指明。在方框516中,計(jì)算裝置100將由翻譯線程222生成的翻譯后的代碼安裝到全局翻譯緩存134中。在方框518中,計(jì)算裝置100在翻譯緩存134內(nèi)分配用于翻譯后的代碼的存儲(chǔ)器。在方框520中,計(jì)算裝置100確定是否充足的存儲(chǔ)器被分配。如果是,則方法500分出來向前到方框526,以下所述的。如果否,則方法500前進(jìn)到方框522。
[0047]在方框522中,計(jì)算裝置100執(zhí)行無用單元收集以回收翻譯緩存134內(nèi)的存儲(chǔ)器。計(jì)算裝置100可以使用任何算法以識別翻譯緩存134內(nèi)可以被刪除的翻譯后的代碼。例如,計(jì)算裝置100可以刪除最近已經(jīng)不使用的翻譯后的代碼。作為另一示例,計(jì)算裝置100可以刪除從其他翻譯后的代碼不可到達(dá)的翻譯后的代碼。在無用單元收集期間,計(jì)算裝置100識別用于刪除的翻譯后的代碼,但不提交對于存儲(chǔ)器的任何更新。
[0048]在方框524中,計(jì)算裝置100從翻譯緩存134刪除回收的存儲(chǔ)器并且設(shè)定用于任何受影響的處理器內(nèi)核122的本地卸載。對于翻譯緩存134的更新和設(shè)定本地卸載發(fā)生在二進(jìn)制翻譯核心208內(nèi)并且因此是非可搶先的。如上所述,在更新期間,全局線程218可以取出翻譯緩存134上的非阻擋多讀取者/單寫入者鎖定以確保數(shù)據(jù)一致性。如以上結(jié)合方框508描述的,本地卸載通過更新刪除待決事件標(biāo)識或特定于受影響的處理器內(nèi)核122的其他數(shù)據(jù)結(jié)構(gòu)來設(shè)定。在調(diào)度本地卸載之后,方法500返回到方框518以再次嘗試分配存儲(chǔ)器。
[0049]返回參照方框520,如果充足的存儲(chǔ)器被分配,則方法500分出來向前到方框526。在方框526中,計(jì)算裝置100將翻譯后的數(shù)據(jù)寫入翻譯緩存134中。全局線程218可以在寫入期間通過在翻譯緩存134上采取非阻擋多讀取者/單寫入者鎖定來保護(hù)數(shù)據(jù)一致性。在翻譯緩存134中的安裝之后,翻譯后的代碼對于全部處理器內(nèi)核122是可訪問的,但可能是不執(zhí)行的。在本地安裝之后,翻譯后的代碼可以在每個(gè)處理器內(nèi)核122上執(zhí)行,如以上結(jié)合圖4的方框436描述的。
[0050]在執(zhí)行安裝之后,在方框528中,計(jì)算裝置100確定附加的翻譯是否留待安裝。如果是,則方法500返回到方框518以繼續(xù)安裝。如果否,則方法500完成方框516。在方框516中完成全局安裝之后,方法500返回到方框504以確定附加的翻譯緩存操作是否是待決的。
[0051 ] 示例
以下提供在此公開的裝置、系統(tǒng)和方法的說明性示例。裝置、系統(tǒng)和方法的實(shí)施例可以包括以下描述的示例中的任何一個(gè)或多個(gè)以及示例的任何組合。
[0052]示例I包括一種用于多核二進(jìn)制翻譯的計(jì)算裝置,所述計(jì)算裝置包括:全局翻譯緩存;包括多個(gè)處理器內(nèi)核的多核處理器,所述多核處理器用以執(zhí)行全局線程和本地二進(jìn)制翻譯線程,所述全局線程用以將二進(jìn)制翻譯安裝在所述全局翻譯緩存中;以及包括二進(jìn)制翻譯線程調(diào)度器的二進(jìn)制翻譯模塊,用以:在所述多個(gè)處理器內(nèi)核中的處理器內(nèi)核的非搶先模式中并且響應(yīng)于進(jìn)入所述二進(jìn)制翻譯調(diào)度器,確定所述全局線程是否被掛起;響應(yīng)于確定所述全局線程被掛起,將所述全局線程迀移到所述處理器內(nèi)核并且再繼續(xù)所述全局線程;在所述非搶先模式中并且響應(yīng)于確定所述全局線程未被掛起,確定全局翻譯緩存操作是否是待決的;響應(yīng)于確定所述全局翻譯緩存操作是待決的,激活所述處理器內(nèi)核上的所述全局線程;以及在所述處理器內(nèi)核上的搶先模式中并且響應(yīng)于確定所述全局翻譯緩存操作不是待決的,開始所述本地二進(jìn)制翻譯線程以生成待決全局翻譯緩存操作;其中,所述處理器用以在所述多個(gè)處理器內(nèi)核中的處理器內(nèi)核上,響應(yīng)于識別原生代碼熱點(diǎn)的熱點(diǎn)事件而進(jìn)入所述二進(jìn)制翻譯調(diào)度器。
[0053]示例2包括示例I的主題,并且其中所述本地二進(jìn)制翻譯線程包括翻譯線程;所述二進(jìn)制翻譯線程調(diào)度器還用以在所述二進(jìn)制翻譯調(diào)度器中的所述非搶先模式中確定所述全局翻譯緩存中是否存在用于所述熱點(diǎn)的二進(jìn)制翻譯;以及在所述處理器內(nèi)核上的所述搶先模式中并且響應(yīng)于確定不存在用于所述熱點(diǎn)的所述二進(jìn)制翻譯,開始所述翻譯線程以:
(i)生成用于所述熱點(diǎn)的所述二進(jìn)制翻譯以及(ii)在完成時(shí)使所述二進(jìn)制翻譯排隊(duì)以用于安裝,其中使所述二進(jìn)制翻譯排隊(duì)以用于安裝包括生成所述待決全局翻譯緩存操作;以及其中,所述全局線程還用以在所述非搶先模式中,確定所述二進(jìn)制翻譯是否已經(jīng)排隊(duì)以用于安裝;以及在所述搶先模式中,響應(yīng)于確定所述二進(jìn)制翻譯已經(jīng)排隊(duì)以用于安裝而將所述二進(jìn)制翻譯安裝到所述全局翻譯緩存中。
[0054]示例3包括示例I和2中的任何一個(gè)所述的主題,并且其中,確定所述全局翻譯緩存中是否存在用于所述熱點(diǎn)的所述二進(jìn)制翻譯包括在所述全局翻譯緩存上采取非阻擋讀取鎖定。
[0055]示例4包括示例1-3中的任何一個(gè)所述的主題,并且其中,將所述二進(jìn)制翻譯安裝到所述全局翻譯緩存中包括在所述全局翻譯緩存上采取非阻擋寫入鎖定。
[0056]示例5包括示例1-4中的任何一個(gè)所述的主題,并且其中,所述全局線程還用以:在所述搶先模式中,在確定所述二進(jìn)制翻譯是否已經(jīng)排隊(duì)以用于安裝之前確定全局翻譯緩存刪除事件是否是待決的;以及在所述非搶先模式中,響應(yīng)于確定所述全局翻譯緩存刪除事件是待決的而調(diào)度用于所述多核處理器中的每個(gè)受影響的處理器內(nèi)核的本地卸載;以及所述二進(jìn)制翻譯線程調(diào)度器還用以:在所述非搶先模式中,在確定所述全局線程是否被掛起之前確定本地卸載對于所述處理器內(nèi)核是否是待決的;以及在所述非搶先模式中,響應(yīng)于確定所述本地卸載是待決的而執(zhí)行所述待決的本地卸載。
[0057]示例6包括示例1-5中的任何一個(gè)所述的主題,并且其中,響應(yīng)于確定所述全局翻譯緩存刪除事件是待決的而調(diào)度用于每個(gè)受影響的處理器內(nèi)核的本地卸載包括在所述全局翻譯緩存上采取非阻擋寫入鎖定。
[0058]示例7包括示例1-6中的任何一個(gè)所述的主題,并且其中,所述全局線程還用以:在所述搶先模式中執(zhí)行無用單元收集以恢復(fù)全局翻譯緩存存儲(chǔ)器;以及在所述非搶先模式中,響應(yīng)于所述無用單元收集而調(diào)度用于所述多核處理器中的每個(gè)受影響的處理器內(nèi)核的本地卸載。
[0059]示例8包括示例1-7中的任何一個(gè)所述的主題,并且其中,響應(yīng)于所述無用單元收集而調(diào)度用于每個(gè)受影響的處理器內(nèi)核的本地卸載包括在所述全局翻譯緩存上采取非阻擋寫入鎖定。
[0060]示例9包括示例1-8中的任何一個(gè)所述的主題,并且其中,所述二進(jìn)制翻譯線程調(diào)度器還用以:在所述非搶先模式中并且在確定是否存在用于所述熱點(diǎn)的所述二進(jìn)制翻譯之前,確定所述翻譯線程是否被掛起;在所述搶先模式中,響應(yīng)于確定所述翻譯線程被掛起而再繼續(xù)所述翻譯線程;在所述非搶先模式中,響應(yīng)于確定所述翻譯線程未被掛起而確定所述熱點(diǎn)是否已經(jīng)被分析;以及在所述搶先模式中,響應(yīng)于確定所述熱點(diǎn)還未被分析而開始熱點(diǎn)分析線程以識別用于所述熱點(diǎn)的原生代碼位置。
[0061]示例10包括示例1-9中的任何一個(gè)所述的主題,并且其中,所述二進(jìn)制翻譯線程調(diào)度器還用以:在所述非搶先模式中,響應(yīng)于確定用于所述熱點(diǎn)的所述二進(jìn)制翻譯存在而將來自所述全局翻譯緩存的所述二進(jìn)制翻譯在本地安裝在所述處理器內(nèi)核上。
[0062]示例11包括示例1-10中的任何一個(gè)所述的主題,并且其中,在本地安裝在所述處理器內(nèi)核上還包括在所述全局翻譯緩存上采取非阻擋讀取鎖定。
[0063]示例12包括一種用于部分二進(jìn)制翻譯的計(jì)算裝置,所述計(jì)算裝置包括:全局翻譯緩存;以及包括多個(gè)處理器內(nèi)核的多核處理器,所述多核處理器用以在所述多核處理器的處理器內(nèi)核的原生狀態(tài)中執(zhí)行原生代碼;響應(yīng)于檢測到由所述多核處理器的分析器生成的熱點(diǎn)事件而從所述原生狀態(tài)轉(zhuǎn)變到所述處理器內(nèi)核的非搶先翻譯核心狀態(tài);響應(yīng)于開始本地翻譯線程或本地分析線程而從所述翻譯核心狀態(tài)轉(zhuǎn)變到所述處理器內(nèi)核的搶先翻譯運(yùn)行時(shí)間狀態(tài),以生成用于安裝的翻譯后的代碼;響應(yīng)于開始全局線程而從所述翻譯核心狀態(tài)轉(zhuǎn)變到所述處理器內(nèi)核的搶先全局線程運(yùn)行時(shí)間狀態(tài),以將所生成的翻譯后的代碼安裝在所述全局翻譯緩存中;以及響應(yīng)于將數(shù)據(jù)寫入所述全局翻譯緩存中而從所述全局線程運(yùn)行時(shí)間狀態(tài)轉(zhuǎn)變到所述處理器內(nèi)核的非搶先全局線程核心狀態(tài)。
[0064]示例13包括示例12所述的主題,并且其中,所述多核處理器還用以響應(yīng)于在處于所述全局線程運(yùn)行時(shí)間狀態(tài)中的同時(shí)檢測到中斷而使所述全局線程掛起;以及響應(yīng)于所述全局線程的再繼續(xù)而從所述翻譯核心狀態(tài)轉(zhuǎn)變到所述全局線程運(yùn)行時(shí)間狀態(tài)。
[0065]示例14包括示例12和13中的任何一個(gè)所述的主題,其中從所述翻譯核心狀態(tài)轉(zhuǎn)變到所述全局線程運(yùn)行時(shí)間狀態(tài)具有比從所述翻譯核心狀態(tài)轉(zhuǎn)變到所述搶先翻譯運(yùn)行時(shí)間狀態(tài)更高的優(yōu)先級。
[0066]示例15包括示例12-14中的任何一個(gè)所述的主題,并且其中,從所述翻譯核心狀態(tài)轉(zhuǎn)變到所述全局線程運(yùn)行時(shí)間狀態(tài)包括將所述全局線程迀移到所述處理器內(nèi)核。
[0067]示例16包括示例12-15中的任何一個(gè)所述的主題,并且其中,所述多核處理器還用以響應(yīng)于在處于所述翻譯運(yùn)行時(shí)間狀態(tài)中的同時(shí)檢測到中斷而使所述本地翻譯線程掛起;以及響應(yīng)于所述本地翻譯線程的再繼續(xù)而從所述翻譯核心狀態(tài)轉(zhuǎn)變到所述翻譯運(yùn)行時(shí)間狀態(tài)。
[0068]示例17包括示例12-16中的任何一個(gè)所述的主題,并且其中,響應(yīng)于所述本地翻譯線程的再繼續(xù)而從所述翻譯核心狀態(tài)轉(zhuǎn)變到所述翻譯運(yùn)行時(shí)間狀態(tài)具有比響應(yīng)于開始所述本地翻譯線程或所述本地分析線程而從所述翻譯核心狀態(tài)轉(zhuǎn)變到所述搶先翻譯運(yùn)行時(shí)間狀態(tài)更高的優(yōu)先級。
[0069]示例18包括示例12-17中的任何一個(gè)所述的主題,并且其中,多核處理器還用以響應(yīng)于在處于所述翻譯運(yùn)行時(shí)間狀態(tài)中的同時(shí)檢測到中斷而終止所述本地分析線程。
[0070]示例19包括示例12-18中的任何一個(gè)所述的主題,并且其中,多核處理器還用以響應(yīng)于翻譯后的代碼安裝到翻譯緩存中的完成而從全局線程核心狀態(tài)轉(zhuǎn)變到原生狀態(tài)。
[0071]示例20包括示例12-19中的任何一個(gè)所述的主題,并且其中多核處理器還用以響應(yīng)于翻譯后的代碼的本地安裝的完成而從翻譯核心狀態(tài)轉(zhuǎn)變到原生狀態(tài)。
[0072]示例21包括一種用于多核二進(jìn)制翻譯的方法,所述方法包括響應(yīng)于識別原生代碼熱點(diǎn)的熱點(diǎn)事件而在多核處理器的處理器內(nèi)核上進(jìn)入二進(jìn)制翻譯調(diào)度器;響應(yīng)于進(jìn)入所述二進(jìn)制翻譯調(diào)度器而在非搶先模式中確定全局線程是否被掛起;響應(yīng)于確定所述全局線程被掛起而將所述全局線程迀移到所述處理器內(nèi)核并且再繼續(xù)所述全局線程;在所述非搶先模式中并且響應(yīng)于確定所述全局線程未被掛起,確定全局翻譯緩存操作是否是待決的;響應(yīng)于確定所述全局翻譯緩存操作是待決的而激活所述處理器內(nèi)核上的所述全局線程;以及在所述處理器內(nèi)核上的搶先模式中并且響應(yīng)于確定所述全局翻譯緩存操作不是待決的,開始本地二進(jìn)制翻譯線程以生成待決全局翻譯緩存操作。
[0073]示例22包括示例21的主題,并且其中,開始所述本地翻譯線程包括:在所述二進(jìn)制翻譯調(diào)度器中的所述非搶先模式中,確定全局翻譯緩存中是否存在用于所述熱點(diǎn)的二進(jìn)制翻譯;以及在所述處理器內(nèi)核上的搶先模式中并且響應(yīng)于確定不存在用于所述熱點(diǎn)的所述二進(jìn)制翻譯,開始翻譯線程以:(i)生成用于所述熱點(diǎn)的所述二進(jìn)制翻譯以及(ii)在完成時(shí)使所述二進(jìn)制翻譯排隊(duì)以用于安裝,其中使所述二進(jìn)制翻譯排隊(duì)以用于安裝包括生成所述待決全局翻譯緩存操作;所述方法還包括在所述非搶先模式中并且在所述全局線程中,確定所述二進(jìn)制翻譯是否已經(jīng)排隊(duì)以用于安裝;以及在所述搶先模式中并且在所述全局線程中,響應(yīng)于確定所述二進(jìn)制翻譯已經(jīng)排隊(duì)以用于安裝而將所述二進(jìn)制翻譯安裝到所述全局翻譯緩存中。
[0074]示例23包括示例21和22中的任何一個(gè)所述的主題,其中,確定全局翻譯緩存中是否存在用于熱點(diǎn)的二進(jìn)制翻譯包括在全局翻譯緩存上采取非阻擋讀取鎖定。
[0075]示例24包括示例21-23中的任何一個(gè)所述的主題,并且其中,將二進(jìn)制翻譯安裝到全局翻譯緩存中包括在全局翻譯緩存上采取非阻擋寫入鎖定。
[0076]示例25包括示例21-24中的任何一個(gè)所述的主題,并且還包括在所述全局線程中的所述搶先模式中,在確定所述二進(jìn)制翻譯已經(jīng)排隊(duì)以用于安裝之前確定全局翻譯緩存刪除事件是否是待決的;在所述全局線程中的所述非搶先模式中,響應(yīng)于確定所述全局翻譯緩存刪除事件是待決的而調(diào)度用于所述多核處理器中的每個(gè)受影響的處理器內(nèi)核的本地卸載;在所述二進(jìn)制翻譯調(diào)度器中的所述非搶先模式中,在確定所述全局線程是否被掛起之前確定本地卸載對于所述處理器內(nèi)核是否是待決的;以及在所述二進(jìn)制翻譯調(diào)度器中的所述非搶先模式中,響應(yīng)于確定所述本地卸載是待決的而執(zhí)行所述待決的本地卸載。
[0077]示例26包括示例21-25中的任何一個(gè)所述的主題,并且其中,響應(yīng)于確定所述全局翻譯緩存刪除事件是待決的而調(diào)度用于每個(gè)受影響的處理器內(nèi)核的本地卸載包括在全局翻譯緩存上采取非阻擋寫入鎖定。
[0078]示例27包括示例21-26中的任何一個(gè)所述的主題,并且其中,將所述二進(jìn)制翻譯安裝到所述全局翻譯緩存中包括:在所述全局線程中的所述搶先模式中執(zhí)行無用單元收集以恢復(fù)全局翻譯緩存存儲(chǔ)器;以及在所述全局線程中的所述非搶先模式中,響應(yīng)于執(zhí)行所述無用單元收集而調(diào)度用于所述多核處理器中的每個(gè)受影響的處理器內(nèi)核的本地卸載。
[0079]示例28包括示例21-27中的任何一個(gè)所述的主題,并且其中,響應(yīng)于執(zhí)行所述無用單元收集而調(diào)度用于所述多核處理器中的每個(gè)受影響的處理器內(nèi)核的本地卸載包括在全局翻譯緩存上采取非阻擋寫入鎖定。
[0080]示例29包括示例21-28中的任何一個(gè)所述的主題,并且其中,開始所述本地翻譯線程還包括:在所述二進(jìn)制翻譯調(diào)度器中的所述非搶先模式中并且在確定是否存在用于所述熱點(diǎn)的所述二進(jìn)制翻譯之前,確定所述翻譯線程是否被掛起;在所述處理器內(nèi)核上的所述搶先模式中,響應(yīng)于確定所述翻譯線程被掛起而再繼續(xù)所述翻譯線程;在所述二進(jìn)制翻譯調(diào)度器中的所述非搶先模式中,響應(yīng)于確定所述翻譯線程未被掛起而確定所述熱點(diǎn)是否已經(jīng)被分析;以及在所述處理器內(nèi)核上的所述搶先模式中,響應(yīng)于確定所述熱點(diǎn)還未被分析而開始熱點(diǎn)分析線程以識別用于所述熱點(diǎn)的原生代碼位置。
[0081]示例30包括示例21-29中的任何一個(gè)所述的主題,并且還包括在所述二進(jìn)制翻譯調(diào)度器中的所述非搶先模式中,響應(yīng)于確定存在用于所述熱點(diǎn)的所述二進(jìn)制翻譯而將來自所述全局翻譯緩存的所述二進(jìn)制翻譯在本地安裝在所述處理器內(nèi)核上。
[0082]示例31包括示例21-30中的任何一個(gè)所述的主題,并且其中在本地安裝在所述處理器內(nèi)核上還包括在全局翻譯緩存上采取非阻擋讀取鎖定。
[0083]示例32包括一種用于多核處理器上的部分二進(jìn)制翻譯的方法,所述方法包括在所述多核處理器中的處理器內(nèi)核的原生狀態(tài)中執(zhí)行原生代碼;響應(yīng)于檢測到由所述多核處理器的分析器生成的熱點(diǎn)事件而從所述原生狀態(tài)轉(zhuǎn)變到所述處理器內(nèi)核的非搶先翻譯核心狀態(tài);響應(yīng)于開始本地翻譯線程或本地分析線程而從所述翻譯核心狀態(tài)轉(zhuǎn)變到所述處理器內(nèi)核的搶先翻譯運(yùn)行時(shí)間狀態(tài),以生成用于安裝的翻譯后的代碼;響應(yīng)于開始全局線程而從所述翻譯核心狀態(tài)轉(zhuǎn)變到所述處理器內(nèi)核的搶先全局線程運(yùn)行時(shí)間狀態(tài),以將所生成的翻譯后的代碼安裝在全局翻譯緩存中;以及響應(yīng)于將數(shù)據(jù)寫入所述全局翻譯緩存中而從所述全局線程運(yùn)行時(shí)間狀態(tài)轉(zhuǎn)變到所述處理器內(nèi)核的非搶先全局線程核心狀態(tài)。
[0084]示例33包括示例32所述的主題,并且還包括響應(yīng)于在處于所述全局線程運(yùn)行時(shí)間狀態(tài)中的同時(shí)檢測到中斷而使所述全局線程掛起;以及響應(yīng)于再繼續(xù)所述全局線程而從所述翻譯核心狀態(tài)轉(zhuǎn)變到所述全局線程運(yùn)行時(shí)間狀態(tài)。
[0085]示例34包括示例32和33中的任何一個(gè)所述的主題,并且其中從所述翻譯核心狀態(tài)轉(zhuǎn)變到所述全局線程運(yùn)行時(shí)間狀態(tài)具有比從所述翻譯核心狀態(tài)轉(zhuǎn)變到所述搶先翻譯運(yùn)行時(shí)間狀態(tài)更高的優(yōu)先級。
[0086]示例35包括示例32-34中的任何一個(gè)所述的主題,并且其中從所述翻譯核心狀態(tài)轉(zhuǎn)變到所述全局線程運(yùn)行時(shí)間狀態(tài)包括將所述全局線程迀移到所述處理器內(nèi)核。
[0087]示例36包括示例32-35中的任何一個(gè)所述的主題,并且還包括響應(yīng)于在處于翻譯運(yùn)行時(shí)間狀態(tài)中的同時(shí)檢測到中斷而掛起本地翻譯線程;以及響應(yīng)于再繼續(xù)本地翻譯線程而從翻譯核心狀態(tài)轉(zhuǎn)變到翻譯運(yùn)行時(shí)間狀態(tài)。
[0088]示例37包括示例32-36中的任何一個(gè)所述的主題,并且其中響應(yīng)于再繼續(xù)本地翻譯線程而從所述翻譯核心狀態(tài)轉(zhuǎn)變到所述翻譯運(yùn)行時(shí)間狀態(tài)具有比響應(yīng)于開始本地翻譯線程或本地分析線程而從所述翻譯核心狀態(tài)轉(zhuǎn)變到所述搶先翻譯運(yùn)行時(shí)間狀態(tài)更高的優(yōu)先級。
[0089]示例38包括示例32-37中的任何一個(gè)所述的主題,并且還包括響應(yīng)于在處于翻譯運(yùn)行時(shí)間狀態(tài)中的同時(shí)檢測到中斷而終止本地分析線程。
[0090]示例39包括示例32-38中的任何一個(gè)所述的主題,并且還包括響應(yīng)于翻譯后的代碼到翻譯緩存中的安裝的完成而從全局線程核心狀態(tài)轉(zhuǎn)變到原生狀態(tài)。
[0091]示例40包括示例32-39中的任何一個(gè)所述的主題,并且還包括響應(yīng)于完成翻譯后的代碼的本地安裝而從翻譯核心狀態(tài)轉(zhuǎn)變到原生狀態(tài)。
[0092]示例41包括一種計(jì)算裝置,其包括:處理器;以及具有存儲(chǔ)在其中的多個(gè)指令的存儲(chǔ)器,所述多個(gè)指令在由所述處理器執(zhí)行時(shí)使所述計(jì)算裝置執(zhí)行示例21-40中的任何一個(gè)所述的方法。
[0093]示例42包括一個(gè)或多個(gè)機(jī)器可讀存儲(chǔ)介質(zhì),包括存儲(chǔ)在其上的多個(gè)指令,所述多個(gè)指令響應(yīng)于被執(zhí)行而導(dǎo)致計(jì)算裝置執(zhí)行示例21-40中的任何一個(gè)所述的方法。
[0094]示例43包括一種計(jì)算裝置,其包括用于執(zhí)行示例21-40中的任何一個(gè)所述的方法的裝置。
【主權(quán)項(xiàng)】
1.一種用于多核二進(jìn)制翻譯的計(jì)算裝置,所述計(jì)算裝置包括: 全局翻譯緩存; 包括多個(gè)處理器內(nèi)核的多核處理器,所述多核處理器用以執(zhí)行全局線程和本地二進(jìn)制翻譯線程,所述全局線程用以將二進(jìn)制翻譯安裝在所述全局翻譯緩存中;以及包括二進(jìn)制翻譯線程調(diào)度器的二進(jìn)制翻譯模塊,用以: 在所述多個(gè)處理器內(nèi)核中的處理器內(nèi)核的非搶先模式中并且響應(yīng)于進(jìn)入所述二進(jìn)制翻譯調(diào)度器,確定所述全局線程是否掛起; 響應(yīng)于確定所述全局線程被掛起,將所述全局線程迀移到所述處理器內(nèi)核并且再繼續(xù)所述全局線程; 在所述非搶先模式中并且響應(yīng)于確定所述全局線程未被掛起,確定全局翻譯緩存操作是否是待決的; 響應(yīng)于確定所述全局翻譯緩存操作是待決的,激活所述處理器內(nèi)核上的所述全局線程;以及 在所述處理器內(nèi)核上的搶先模式中并且響應(yīng)于確定所述全局翻譯緩存操作不是待決的,開始所述本地二進(jìn)制翻譯線程以生成待決全局翻譯緩存操作; 其中,所述處理器用以在所述多個(gè)處理器內(nèi)核中的處理器內(nèi)核上,響應(yīng)于識別原生代碼熱點(diǎn)的熱點(diǎn)事件而進(jìn)入所述二進(jìn)制翻譯調(diào)度器。2.根據(jù)權(quán)利要求1所述的計(jì)算裝置,其中: 所述本地二進(jìn)制翻譯線程包括翻譯線程; 所述二進(jìn)制翻譯線程調(diào)度器還用以: 在所述二進(jìn)制翻譯調(diào)度器中的所述非搶先模式中,確定在所述全局翻譯緩存中是否存在用于所述熱點(diǎn)的二進(jìn)制翻譯;以及 在所述處理器內(nèi)核上的所述搶先模式中并且響應(yīng)于確定不存在用于所述熱點(diǎn)的所述二進(jìn)制翻譯,開始所述翻譯線程以: (i)生成用于所述熱點(diǎn)的所述二進(jìn)制翻譯以及(ii)在完成時(shí)使所述二進(jìn)制翻譯排隊(duì)以用于安裝,其中使所述二進(jìn)制翻譯排隊(duì)以用于安裝包括生成所述待決全局翻譯緩存操作;以及 其中,所述全局線程還用以: 在所述非搶先模式中,確定所述二進(jìn)制翻譯是否已經(jīng)排隊(duì)以用于安裝;以及在所述搶先模式中,響應(yīng)于確定所述二進(jìn)制翻譯已經(jīng)排隊(duì)以用于安裝而將所述二進(jìn)制翻譯安裝到所述全局翻譯緩存中。3.根據(jù)權(quán)利要求2所述的計(jì)算裝置,其中,確定在所述全局翻譯緩存中是否存在用于所述熱點(diǎn)的所述二進(jìn)制翻譯包括在所述全局翻譯緩存上采取非阻擋讀取鎖定。4.根據(jù)權(quán)利要求2所述的計(jì)算裝置,其中,將所述二進(jìn)制翻譯安裝到所述全局翻譯緩存中包括在所述全局翻譯緩存上采取非阻擋寫入鎖定。5.根據(jù)權(quán)利要求2所述的計(jì)算裝置,其中: 所述全局線程還用以: 在所述搶先模式中,在確定所述二進(jìn)制翻譯是否已經(jīng)排隊(duì)以用于安裝之前確定全局翻譯緩存刪除事件是否是待決的;以及 在所述非搶先模式中,響應(yīng)于確定所述全局翻譯緩存刪除事件是待決的而調(diào)度用于所述多核處理器中的每個(gè)受影響的處理器內(nèi)核的本地卸載;以及所述二進(jìn)制翻譯線程調(diào)度器還用以: 在所述非搶先模式中,在確定所述全局線程是否被掛起之前確定本地卸載對于所述處理器內(nèi)核是否是待決的;以及 在所述非搶先模式中,響應(yīng)于確定所述本地卸載是待決的而執(zhí)行所述待決的本地卸載。6.根據(jù)權(quán)利要求5所述的計(jì)算裝置,其中,響應(yīng)于確定所述全局翻譯緩存刪除事件是待決的而調(diào)度用于每個(gè)受影響的處理器內(nèi)核的本地卸載包括在所述全局翻譯緩存上采取非阻擋寫入鎖定。7.根據(jù)權(quán)利要求5所述的計(jì)算裝置,其中,所述全局線程還用以: 在所述搶先模式中執(zhí)行無用單元收集以恢復(fù)全局翻譯緩存存儲(chǔ)器;以及在所述非搶先模式中,響應(yīng)于所述無用單元收集而調(diào)度用于所述多核處理器中的每個(gè)受影響的處理器內(nèi)核的本地卸載。8.根據(jù)權(quán)利要求7所述的計(jì)算裝置,其中,響應(yīng)于所述無用單元收集而調(diào)度用于每個(gè)受影響的處理器內(nèi)核的本地卸載包括在所述全局翻譯緩存上采取非阻擋寫入鎖定。9.根據(jù)權(quán)利要求2所述的計(jì)算裝置,其中,所述二進(jìn)制翻譯線程調(diào)度器還用以: 在所述非搶先模式中并且在確定是否存在用于所述熱點(diǎn)的所述二進(jìn)制翻譯之前,確定所述翻譯線程是否被掛起; 在所述搶先模式中,響應(yīng)于確定所述翻譯線程被掛起而再繼續(xù)所述翻譯線程; 在所述非搶先模式中,響應(yīng)于確定所述翻譯線程未被掛起而確定所述熱點(diǎn)是否已經(jīng)被分析;以及 在所述搶先模式中,響應(yīng)于確定所述熱點(diǎn)還未被分析而開始熱點(diǎn)分析線程以識別用于所述熱點(diǎn)的原生代碼位置。10.根據(jù)權(quán)利要求2所述的計(jì)算裝置,其中,所述二進(jìn)制翻譯線程調(diào)度器還用以:在所述非搶先模式中,響應(yīng)于確定存在用于所述熱點(diǎn)的所述二進(jìn)制翻譯而將來自所述全局翻譯緩存的所述二進(jìn)制翻譯在本地安裝在所述處理器內(nèi)核上。11.根據(jù)權(quán)利要求10所述的計(jì)算裝置,其中,在本地安裝在所述處理器內(nèi)核上還包括在所述全局翻譯緩存上采取非阻擋讀取鎖定。12.—種用于部分二進(jìn)制翻譯的計(jì)算裝置,所述計(jì)算裝置包括: 全局翻譯緩存;以及 包括多個(gè)處理器內(nèi)核的多核處理器,所述多核處理器用以: 在所述多核處理器的處理器內(nèi)核的原生狀態(tài)中執(zhí)行原生代碼; 響應(yīng)于檢測到由所述多核處理器的分析器生成的熱點(diǎn)事件,從所述原生狀態(tài)轉(zhuǎn)變到所述處理器內(nèi)核的非搶先翻譯核心狀態(tài); 響應(yīng)于開始本地翻譯線程或本地分析線程,從所述翻譯核心狀態(tài)轉(zhuǎn)變到所述處理器內(nèi)核的搶先翻譯運(yùn)行時(shí)間狀態(tài),以生成用于安裝的翻譯后的代碼; 響應(yīng)于開始全局線程,從所述翻譯核心狀態(tài)轉(zhuǎn)變到所述處理器內(nèi)核的搶先全局線程運(yùn)行時(shí)間狀態(tài),以將所生成的翻譯后的代碼安裝在所述全局翻譯緩存中;以及 響應(yīng)于將數(shù)據(jù)寫入所述全局翻譯緩存中,從所述全局線程運(yùn)行時(shí)間狀態(tài)轉(zhuǎn)變到所述處理器內(nèi)核的非搶先全局線程核心狀態(tài)。13.根據(jù)權(quán)利要求12所述的計(jì)算裝置,其中,所述多核處理器還用以: 響應(yīng)于在處于所述全局線程運(yùn)行時(shí)間狀態(tài)中的同時(shí)檢測到中斷,使所述全局線程掛起;以及 響應(yīng)于所述全局線程的再繼續(xù),從所述翻譯核心狀態(tài)轉(zhuǎn)變到所述全局線程運(yùn)行時(shí)間狀態(tài),其中從所述翻譯核心狀態(tài)轉(zhuǎn)變到所述全局線程運(yùn)行時(shí)間狀態(tài)具有比從所述翻譯核心狀態(tài)轉(zhuǎn)變到所述搶先翻譯運(yùn)行時(shí)間狀態(tài)更高的優(yōu)先級。14.根據(jù)權(quán)利要求13所述的計(jì)算裝置,其中,從所述翻譯核心狀態(tài)轉(zhuǎn)變到所述全局線程運(yùn)行時(shí)間狀態(tài)包括將所述全局線程迀移到所述處理器內(nèi)核。15.根據(jù)權(quán)利要求12所述的計(jì)算裝置,其中,所述多核處理器還用以: 響應(yīng)于在處于所述翻譯運(yùn)行時(shí)間狀態(tài)中的同時(shí)檢測到中斷,使所述本地翻譯線程掛起; 響應(yīng)于在處于所述翻譯運(yùn)行時(shí)間狀態(tài)中的同時(shí)檢測到中斷,終止所述本地分析線程;以及 響應(yīng)于再繼續(xù)所述本地翻譯線程,從所述翻譯核心狀態(tài)轉(zhuǎn)變到所述翻譯運(yùn)行時(shí)間狀態(tài),其中響應(yīng)于再繼續(xù)所述本地翻譯線程而從所述翻譯核心狀態(tài)轉(zhuǎn)變到所述翻譯運(yùn)行時(shí)間狀態(tài)具有比響應(yīng)于開始所述本地翻譯線程或所述本地分析線程而從所述翻譯核心狀態(tài)轉(zhuǎn)變到所述搶先翻譯運(yùn)行時(shí)間狀態(tài)更高的優(yōu)先級。16.—種用于多核二進(jìn)制翻譯的方法,所述方法包括: 響應(yīng)于識別原生代碼熱點(diǎn)的熱點(diǎn)事件,在多核處理器的處理器內(nèi)核上進(jìn)入二進(jìn)制翻譯調(diào)度器; 響應(yīng)于進(jìn)入所述二進(jìn)制翻譯調(diào)度器,在非搶先模式中確定全局線程是否被掛起; 響應(yīng)于確定所述全局線程被掛起,將所述全局線程迀移到所述處理器內(nèi)核并且再繼續(xù)所述全局線程; 在所述非搶先模式中并且響應(yīng)于確定所述全局線程未被掛起,確定全局翻譯緩存操作是否是待決的; 響應(yīng)于確定所述全局翻譯緩存操作是待決的,激活所述處理器內(nèi)核上的所述全局線程;以及 在所述處理器內(nèi)核上的搶先模式中并且響應(yīng)于確定所述全局翻譯緩存操作不是待決的,開始本地二進(jìn)制翻譯線程以生成待決全局翻譯緩存操作。17.根據(jù)權(quán)利要求16所述的方法,其中: 開始所述本地二進(jìn)制翻譯線程包括: 在所述二進(jìn)制翻譯調(diào)度器中的所述非搶先模式中,確定在全局翻譯緩存中是否存在用于所述熱點(diǎn)的二進(jìn)制翻譯;以及 在所述處理器內(nèi)核上的搶先模式中并且響應(yīng)于確定不存在用于所述熱點(diǎn)的所述二進(jìn)制翻譯,開始翻譯線程以:(i)生成用于所述熱點(diǎn)的所述二進(jìn)制翻譯以及(ii)在完成時(shí)使所述二進(jìn)制翻譯排隊(duì)以用于安裝,其中使所述二進(jìn)制翻譯排隊(duì)以用于安裝包括生成所述待決全局翻譯緩存操作; 所述方法還包括: 在所述非搶先模式中并且在所述全局線程中,確定所述二進(jìn)制翻譯是否已經(jīng)排隊(duì)以用于安裝;以及 在所述搶先模式中并且在所述全局線程中,響應(yīng)于確定所述二進(jìn)制翻譯已經(jīng)排隊(duì)以用于安裝而將所述二進(jìn)制翻譯安裝到所述全局翻譯緩存中。18.根據(jù)權(quán)利要求17所述的方法,還包括: 在所述全局線程中的所述搶先模式中,在確定所述二進(jìn)制翻譯已經(jīng)排隊(duì)以用于安裝之前確定全局翻譯緩存刪除事件是否是待決的; 在所述全局線程中的所述非搶先模式中,響應(yīng)于確定所述全局翻譯緩存刪除事件是待決的而調(diào)度用于所述多核處理器中的每個(gè)受影響的處理器內(nèi)核的本地卸載; 在所述二進(jìn)制翻譯調(diào)度器中的所述非搶先模式中,在確定所述全局線程是否被掛起之前確定本地卸載對于所述處理器內(nèi)核是否是待決的;以及 在所述二進(jìn)制翻譯調(diào)度器中的所述非搶先模式中,響應(yīng)于確定所述本地卸載是待決的而執(zhí)行所述待決的本地卸載。19.根據(jù)權(quán)利要求18所述的方法,其中,將所述二進(jìn)制翻譯安裝到所述全局翻譯緩存中包括: 在所述全局線程中的所述搶先模式中,執(zhí)行無用單元收集以恢復(fù)全局翻譯緩存存儲(chǔ)器;以及 在所述全局線程中的所述非搶先模式中,響應(yīng)于執(zhí)行所述無用單元收集而調(diào)度用于所述多核處理器中的每個(gè)受影響的處理器內(nèi)核的本地卸載。20.根據(jù)權(quán)利要求17所述的方法,其中,開始所述本地翻譯線程還包括: 在所述二進(jìn)制翻譯調(diào)度器中的所述非搶先模式中并且在確定是否存在用于所述熱點(diǎn)的所述二進(jìn)制翻譯之前,確定所述翻譯線程是否被掛起; 在所述處理器內(nèi)核上的所述搶先模式中,響應(yīng)于確定所述翻譯線程被掛起而再繼續(xù)所述翻譯線程; 在所述二進(jìn)制翻譯調(diào)度器中的所述非搶先模式中,響應(yīng)于確定所述翻譯線程未被掛起而確定所述熱點(diǎn)是否已經(jīng)被分析;以及 在所述處理器內(nèi)核上的所述搶先模式中,響應(yīng)于確定所述熱點(diǎn)還未被分析而開始熱點(diǎn)分析線程以識別用于所述熱點(diǎn)的原生代碼位置。21.根據(jù)權(quán)利要求17所述的方法,還包括在所述二進(jìn)制翻譯調(diào)度器中的所述非搶先模式中,響應(yīng)于確定存在用于所述熱點(diǎn)的所述二進(jìn)制翻譯而將來自所述全局翻譯緩存的所述二進(jìn)制翻譯在本地安裝在所述處理器內(nèi)核上。22.—種用于多核處理器上的部分二進(jìn)制翻譯的方法,所述方法包括: 在所述多核處理器中的處理器內(nèi)核的原生狀態(tài)中執(zhí)行原生代碼; 響應(yīng)于檢測到由所述多核處理器的分析器生成的熱點(diǎn)事件,從所述原生狀態(tài)轉(zhuǎn)變到所述處理器內(nèi)核的非搶先翻譯核心狀態(tài); 響應(yīng)于開始本地翻譯線程或本地分析線程,從所述翻譯核心狀態(tài)轉(zhuǎn)變到所述處理器內(nèi)核的搶先翻譯運(yùn)行時(shí)間狀態(tài),以生成用于安裝的翻譯后的代碼; 響應(yīng)于開始全局線程,從所述翻譯核心狀態(tài)轉(zhuǎn)變到所述處理器內(nèi)核的搶先全局線程運(yùn)行時(shí)間狀態(tài),以將所生成的翻譯后的代碼安裝在全局翻譯緩存中;以及 響應(yīng)于將數(shù)據(jù)寫入所述全局翻譯緩存中,從所述全局線程運(yùn)行時(shí)間狀態(tài)轉(zhuǎn)變到所述處理器內(nèi)核的非搶先全局線程核心狀態(tài)。23.根據(jù)權(quán)利要求22所述的方法,還包括: 響應(yīng)于在處于所述全局線程運(yùn)行時(shí)間狀態(tài)中的同時(shí)檢測到中斷,使所述全局線程掛起;以及 響應(yīng)于再繼續(xù)所述全局線程,從所述翻譯核心狀態(tài)轉(zhuǎn)變到所述全局線程運(yùn)行時(shí)間狀態(tài),其中(i )從所述翻譯核心狀態(tài)轉(zhuǎn)變到所述全局線程運(yùn)行時(shí)間狀態(tài)具有比從所述翻譯核心狀態(tài)轉(zhuǎn)變到所述搶先翻譯運(yùn)行時(shí)間狀態(tài)更高的優(yōu)先級以及(ii)從所述翻譯核心狀態(tài)轉(zhuǎn)變到所述全局線程運(yùn)行時(shí)間狀態(tài)包括將所述全局線程迀移到所述處理器內(nèi)核。24.—種計(jì)算裝置,包括: 處理器;以及 具有存儲(chǔ)在其中的多個(gè)指令的存儲(chǔ)器,所述多個(gè)指令在由所述處理器執(zhí)行時(shí)使所述計(jì)算裝置執(zhí)行權(quán)利要求16-23中的任一項(xiàng)所述的方法。25.—個(gè)或多個(gè)機(jī)器可讀存儲(chǔ)介質(zhì),包括存儲(chǔ)在其上的多個(gè)指令,所述多個(gè)指令響應(yīng)于被執(zhí)行而導(dǎo)致計(jì)算裝置執(zhí)行權(quán)利要求16-23中的任一項(xiàng)所述的方法。
【文檔編號】G06F9/30GK106030515SQ201380076992
【公開日】2016年10月12日
【申請日】2013年6月28日
【發(fā)明人】A·薩拉卡拉, J·陸, P·R·山姆加維拉尤瑟牧, J·M·阿格龍, K·雅瑪答
【申請人】英特爾公司