本發(fā)明涉及虛擬機(jī)編譯調(diào)度技術(shù)領(lǐng)域,尤其涉及一種自適應(yīng)動態(tài)編譯調(diào)度方法及裝置。
背景技術(shù):
虛擬機(jī)(VM,Virtual Machine)主要通過軟件或者輔以少量硬件支持的方法虛擬出一臺計算機(jī),其依托于本地的物理機(jī),通過其執(zhí)行引擎對給定的虛擬機(jī)指令序列在本地機(jī)器上模擬執(zhí)行。虛擬機(jī)的執(zhí)行引擎可以由解釋器來實現(xiàn),解釋器以一條虛擬機(jī)指令為單位進(jìn)行取指令、譯碼和執(zhí)行。但單純的解釋執(zhí)行性能低下,因此虛擬機(jī)中引入動態(tài)編譯系統(tǒng)來提高其性能。編譯器是動態(tài)編譯系統(tǒng)的核心,以一組連續(xù)的虛擬機(jī)指令序列為單位整體編譯成本地CPU指令序列,稱為本地方法,然后由硬件直接執(zhí)行翻譯后的本地方法。編譯器由于消除了重復(fù)的取指令和譯碼的過程,同時又在翻譯時進(jìn)行大量優(yōu)化,因此其性能往往是解釋器的10倍以上。解釋執(zhí)行期間,虛擬機(jī)會偵測程序中執(zhí)行頻度較高的方法,稱為熱點方法,編譯器是在程序運(yùn)行過程中,對虛擬機(jī)所偵測到的熱點方法進(jìn)行動態(tài)編譯的,故又將其稱為即時(JIT,Just-in-time)編譯器。
因此,現(xiàn)代虛擬機(jī)中一般同時包含解釋器和即時編譯器,并采用混合的運(yùn)行模式來執(zhí)行應(yīng)用程序。對于程序中的任意一個方法m,均由解釋器開始執(zhí)行。若方法m的執(zhí)行頻度較高,則虛擬機(jī)調(diào)用即時編譯器將方法m編譯成本地方法,隨后將由硬件直接執(zhí)行編譯生成的本地方法。這種由解釋執(zhí)行和硬件直接執(zhí)行相混合的模式稱為混合運(yùn)行模式。
對于采用混合運(yùn)行模式的虛擬機(jī),程序中所有方法均由解釋器開始執(zhí)行。 解釋執(zhí)行期間,虛擬機(jī)會偵測程序中的熱點方法。當(dāng)某個熱點方法被虛擬機(jī)識別后,該熱點方法會被加入到編譯隊列中等待編譯。當(dāng)系統(tǒng)中的編譯隊列非空時,即時編譯器會按照熱點方法被加入編譯隊列的先后順序,優(yōu)先編譯先加入隊列的熱點方法。
在實現(xiàn)本發(fā)明的過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)中至少存在如下技術(shù)問題:
按照熱點方法被加入編譯隊列的先后順序進(jìn)行編譯調(diào)度,調(diào)度策略比較單一,在程序運(yùn)行過程中缺乏自適應(yīng)能力,虛擬機(jī)的動態(tài)編譯性能不高。
技術(shù)實現(xiàn)要素:
本發(fā)明提供的自適應(yīng)動態(tài)編譯調(diào)度方法及裝置,能夠提升虛擬機(jī)的動態(tài)編譯性能。
第一方面,本發(fā)明提供一種自適應(yīng)動態(tài)編譯調(diào)度方法,包括:
獲取當(dāng)前編譯隊列的長度,其中,所述當(dāng)前編譯隊列為熱點方法隊列;
若當(dāng)前編譯隊列的長度大于隊列長度閾值,則按照基于方法大小的動態(tài)編譯調(diào)度策略對所述當(dāng)前編譯隊列中的熱點方法進(jìn)行編譯調(diào)度;
若當(dāng)前編譯隊列的長度不大于隊列長度閾值,則按照基于方法運(yùn)行速度的動態(tài)編譯調(diào)度策略對所述當(dāng)前編譯隊列中的熱點方法進(jìn)行編譯調(diào)度;
將編譯調(diào)度時所選定的熱點方法從所述當(dāng)前編譯隊列中移除,并進(jìn)行編譯。
第二方面,本發(fā)明提供一種自適應(yīng)動態(tài)編譯調(diào)度裝置,包括:
第一獲取單元,用于獲取當(dāng)前編譯隊列的長度,其中,所述當(dāng)前編譯隊列為熱點方法隊列;
第一編譯調(diào)度單元,用于在當(dāng)前編譯隊列的長度大于隊列長度閾值時,按照基于方法大小的動態(tài)編譯調(diào)度策略對所述當(dāng)前編譯隊列中的熱點方法進(jìn)行編譯調(diào)度;
第二編譯調(diào)度單元,用于在當(dāng)前編譯隊列的長度不大于隊列長度閾值時,按照基于方法運(yùn)行速度的動態(tài)編譯調(diào)度策略對所述當(dāng)前編譯隊列中的熱點方法進(jìn)行編譯調(diào)度;
移除單元,用于將編譯調(diào)度時所選定的熱點方法從所述當(dāng)前編譯隊列中移除;
編譯單元,用于對所述移除單元所移除的熱點方法進(jìn)行編譯。
本發(fā)明實施例提供的自適應(yīng)動態(tài)編譯調(diào)度方法及裝置,在當(dāng)前編譯隊列的長度大于隊列長度閾值時,按照基于方法大小的動態(tài)編譯調(diào)度策略對當(dāng)前編譯隊列中的熱點方法進(jìn)行編譯調(diào)度,在當(dāng)前編譯隊列的長度不大于隊列長度閾值時,按照基于方法運(yùn)行速度的動態(tài)編譯調(diào)度策略對當(dāng)前編譯隊列中的熱點方法進(jìn)行編譯調(diào)度,并將編譯調(diào)度時所選定的熱點方法從當(dāng)前編譯隊列中移除后進(jìn)行編譯。與現(xiàn)有技術(shù)相比,本發(fā)明能夠根據(jù)編譯隊列的長度自適應(yīng)地選擇最佳的編譯調(diào)度策略對當(dāng)前編譯隊列中的所有熱點方法進(jìn)行編譯調(diào)度,從而可以提高虛擬機(jī)動態(tài)編譯的吞吐量,加快虛擬機(jī)的響應(yīng)速度,提升虛擬機(jī)的動態(tài)編譯性能。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作一簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明自適應(yīng)動態(tài)編譯調(diào)度方法實施例一的流程圖;
圖2為本發(fā)明自適應(yīng)動態(tài)編譯調(diào)度方法實施例二的流程圖;
圖3為本發(fā)明自適應(yīng)動態(tài)編譯調(diào)度裝置實施例一的結(jié)構(gòu)示意圖;
圖4為本發(fā)明自適應(yīng)動態(tài)編譯調(diào)度裝置實施例二的結(jié)構(gòu)示意圖。
具體實施方式
為使本發(fā)明實施例的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護(hù)的范圍。
本發(fā)明提供一種自適應(yīng)動態(tài)編譯調(diào)度方法,圖1為本發(fā)明自適應(yīng)動態(tài)編譯調(diào)度方法實施例一的流程圖,如圖1所示,本實施例的方法包括:
S11、獲取當(dāng)前編譯隊列的長度,其中,所述當(dāng)前編譯隊列為熱點方法隊列。
這里的方法指的是面向?qū)ο蟪绦蛟O(shè)計中的方法,本質(zhì)上是程序中的一個代碼片段,是虛擬機(jī)進(jìn)行編譯的最小單元。因此,本文中“方法”的概念可以擴(kuò)展為程序中能夠被編譯的最小代碼片段,例如,面向過程的編程語言中的函數(shù),以及Qemu等二進(jìn)制翻譯器中的基本塊等。
S12、若當(dāng)前編譯隊列的長度大于隊列長度閾值,則按照基于方法大小的動態(tài)編譯調(diào)度策略對所述當(dāng)前編譯隊列中的熱點方法進(jìn)行編譯調(diào)度。
S13、若當(dāng)前編譯隊列的長度不大于隊列長度閾值,則按照基于方法運(yùn)行速度的動態(tài)編譯調(diào)度策略對所述當(dāng)前編譯隊列中的熱點方法進(jìn)行編譯調(diào)度。
S14、將編譯調(diào)度時所選定的熱點方法從所述當(dāng)前編譯隊列中移除,并進(jìn)行編譯。
本發(fā)明實施例提供的自適應(yīng)動態(tài)編譯調(diào)度方法,在當(dāng)前編譯隊列的長度大于隊列長度閾值時,按照基于方法大小的動態(tài)編譯調(diào)度策略對當(dāng)前編譯隊列中的熱點方法進(jìn)行編譯調(diào)度,在當(dāng)前編譯隊列的長度不大于隊列長度閾值時,按 照基于方法運(yùn)行速度的動態(tài)編譯調(diào)度策略對當(dāng)前編譯隊列中的熱點方法進(jìn)行編譯調(diào)度,并將編譯調(diào)度時所選定的熱點方法從當(dāng)前編譯隊列中移除后進(jìn)行編譯。與現(xiàn)有技術(shù)相比,本發(fā)明能夠根據(jù)編譯隊列的長度自適應(yīng)地選擇最佳的編譯調(diào)度策略對當(dāng)前編譯隊列中的所有熱點方法進(jìn)行編譯調(diào)度,從而可以提高虛擬機(jī)動態(tài)編譯的吞吐量,加快虛擬機(jī)的響應(yīng)速度,提升虛擬機(jī)的動態(tài)編譯性能。
本發(fā)明實施例還提供一種自適應(yīng)動態(tài)編譯調(diào)度方法,圖2為本發(fā)明自適應(yīng)動態(tài)編譯調(diào)度方法實施例二的流程圖,如圖2所示,本實施例的方法包括:
S21、虛擬機(jī)啟動,完成對解釋器、編譯器的初始化。
S22、解釋器初始化完畢后,開始解釋執(zhí)行程序中的方法。
S23、編譯器初始化完畢后進(jìn)入等待編譯的狀態(tài)。
S24、解釋器在解釋執(zhí)行方法的同時,偵測方法是否屬于熱點方法,若該方法不屬于熱點方法,則繼續(xù)解釋執(zhí)行;若該方法屬于熱點方法,則執(zhí)行步驟S25。
具體地,解釋器偵測方法的執(zhí)行次數(shù)是否超過熱點閾值,若不超過熱點閾值,則判定該方法不屬于熱點方法;若超過熱點閾值,則判定該方法屬于熱點方法。
S25、解釋器將熱點方法加入編譯隊列中,同時喚醒編譯器,觸發(fā)編譯。
S26、編譯器獲取當(dāng)前編譯隊列的長度,其中,所述當(dāng)前編譯隊列為熱點方法隊列。
S27、編譯器判斷當(dāng)前編譯隊列的長度是否大于隊列長度閾值,若當(dāng)前編譯隊列的長度大于隊列長度閾值,則執(zhí)行步驟S28;若當(dāng)前編譯隊列的長度不大于隊列長度閾值,則執(zhí)行步驟S29。
其中,所述隊列長度閾值為所述編譯器預(yù)先設(shè)定的。
S28、編譯器按照基于方法大小的動態(tài)編譯調(diào)度策略對所述當(dāng)前編譯隊列中 的熱點方法進(jìn)行編譯調(diào)度。
具體地,編譯器從所述當(dāng)前編譯隊列中選取最小的熱點方法。其中,所述最小的熱點方法,指的是當(dāng)前編譯隊列中包含字節(jié)碼最少的熱點方法。
S29、編譯器按照基于方法運(yùn)行速度的動態(tài)編譯調(diào)度策略對所述當(dāng)前編譯隊列中的熱點方法進(jìn)行編譯調(diào)度;
具體地,編譯器從所述當(dāng)前編譯隊列中選取運(yùn)行速度最大的熱點方法。
在從所述當(dāng)前編譯隊列中選取運(yùn)行速度最大的熱點方法之前,編譯器獲取所述當(dāng)前編譯隊列中所有熱點方法的運(yùn)行速度。
可選地,編譯器可以按照如下公式計算獲得當(dāng)前編譯隊列中所有熱點方法的運(yùn)行速度:
其中,speed(m)為熱點方法m的運(yùn)行速度,Δt為預(yù)設(shè)常量,表示當(dāng)前時刻前的某一時間段長度,Δexecute(m)為當(dāng)前時刻前的Δt時間段內(nèi)熱點方法m的執(zhí)行次數(shù),Δexecute(m)=Δinvocation_count(m)+Δloop_count(m),Δinvocation_count(m)為當(dāng)前時刻前的Δt時間段內(nèi)熱點方法m被調(diào)用的次數(shù),Δloop_count(m)為當(dāng)前時刻前的Δt時間段內(nèi)熱點方法m內(nèi)部循環(huán)迭代的次數(shù)。
S30、編譯器將編譯調(diào)度時所選定的熱點方法從所述當(dāng)前編譯隊列中移除。
S31、編譯器對所移除的熱點方法進(jìn)行編譯。
S32、編譯器判斷當(dāng)前編譯隊列是否為空,若不為空,則返回執(zhí)行步驟S27;若為空,則返回步驟S23,編譯器進(jìn)入等待編譯的狀態(tài)。
本發(fā)明實施例提供的自適應(yīng)動態(tài)編譯調(diào)度方法,在當(dāng)前編譯隊列的長度大于隊列長度閾值時,從所述當(dāng)前編譯隊列中選取最小的熱點方法進(jìn)行編譯,在當(dāng)前編譯隊列的長度不大于隊列長度閾值時,從所述當(dāng)前編譯隊列中選取運(yùn)行 速度最大的熱點方法進(jìn)行編譯,并將編譯調(diào)度時所選定的熱點方法從當(dāng)前編譯隊列中移除后進(jìn)行編譯,直至編譯隊列為空。與現(xiàn)有技術(shù)相比,本發(fā)明能夠根據(jù)編譯隊列的長度優(yōu)先選擇最小的熱點方法或者運(yùn)行速度最大的熱點方法進(jìn)行編譯,從而可以提高虛擬機(jī)動態(tài)編譯的吞吐量,加快虛擬機(jī)的響應(yīng)速度,提升虛擬機(jī)的動態(tài)編譯性能。
本發(fā)明實施例提供一種自適應(yīng)動態(tài)編譯調(diào)度裝置,圖3為本發(fā)明自適應(yīng)動態(tài)編譯調(diào)度裝置實施例一的結(jié)構(gòu)示意圖,如圖3所示,本實施例的裝置包括:
第一獲取單元11,用于獲取當(dāng)前編譯隊列的長度,其中,所述當(dāng)前編譯隊列為熱點方法隊列。
這里的方法指的是面向?qū)ο蟪绦蛟O(shè)計中的方法,本質(zhì)上是程序中的一個代碼片段,是虛擬機(jī)進(jìn)行編譯的最小單元。因此,本文中“方法”的概念可以擴(kuò)展為程序中能夠被編譯的最小代碼片段,例如,面向過程的編程語言中的函數(shù),以及Qemu等二進(jìn)制翻譯器中的基本塊等
第一編譯調(diào)度單元12,用于在當(dāng)前編譯隊列的長度大于隊列長度閾值時,按照基于方法大小的動態(tài)編譯調(diào)度策略對所述當(dāng)前編譯隊列中的熱點方法進(jìn)行編譯調(diào)度。
第二編譯調(diào)度單元13,用于在當(dāng)前編譯隊列的長度不大于隊列長度閾值時,按照基于方法運(yùn)行速度的動態(tài)編譯調(diào)度策略對所述當(dāng)前編譯隊列中的熱點方法進(jìn)行編譯調(diào)度。
移除單元14,用于將編譯調(diào)度時所選定的熱點方法從所述當(dāng)前編譯隊列中移除;
編譯單元15,用于對所述移除單元所移除的熱點方法進(jìn)行編譯。
本發(fā)明實施例提供的自適應(yīng)動態(tài)編譯調(diào)度裝置,在當(dāng)前編譯隊列的長度大 于隊列長度閾值時,按照基于方法大小的動態(tài)編譯調(diào)度策略對當(dāng)前編譯隊列中的熱點方法進(jìn)行編譯調(diào)度,在當(dāng)前編譯隊列的長度不大于隊列長度閾值時,按照基于方法運(yùn)行速度的動態(tài)編譯調(diào)度策略對當(dāng)前編譯隊列中的熱點方法進(jìn)行編譯調(diào)度,并將編譯調(diào)度時所選定的熱點方法從當(dāng)前編譯隊列中移除后進(jìn)行編譯。與現(xiàn)有技術(shù)相比,本發(fā)明能夠根據(jù)編譯隊列的長度自適應(yīng)地選擇最佳的編譯調(diào)度策略對當(dāng)前編譯隊列中的所有熱點方法進(jìn)行編譯調(diào)度,從而可以提高虛擬機(jī)動態(tài)編譯的吞吐量,加快虛擬機(jī)的響應(yīng)速度,提升虛擬機(jī)的動態(tài)編譯性能。
圖4為本發(fā)明自適應(yīng)動態(tài)編譯調(diào)度裝置實施例二的結(jié)構(gòu)示意圖,如圖4所示,可選地,所述第一編譯調(diào)度單元12,用于從所述當(dāng)前編譯隊列中選取最小的熱點方法。
其中,所述最小的熱點方法,指的是當(dāng)前編譯隊列中包含字節(jié)碼最少的熱點方法。
可選地,所述第二編譯調(diào)度單元13,用于從所述當(dāng)前編譯隊列中選取運(yùn)行速度最大的熱點方法。
本實施例的裝置在圖3所示裝置結(jié)構(gòu)的基礎(chǔ)上,進(jìn)一步地,所述自適應(yīng)動態(tài)編譯調(diào)度裝置還可以包括:
第二獲取單元16,用于在所述第二編譯調(diào)度單元13從所述當(dāng)前編譯隊列中選取運(yùn)行速度最大的熱點方法進(jìn)行編譯之前,獲取所述當(dāng)前編譯隊列中所有熱點方法的運(yùn)行速度。
可選地,所述第二獲取單元16,用于按照如下公式計算獲得當(dāng)前編譯隊列中所有熱點方法的運(yùn)行速度:
其中,speed(m)為熱點方法m的運(yùn)行速度,Δt為當(dāng)前時刻前的某一時間段 長度,Δexecute(m)為當(dāng)前時刻前的Δt時間段內(nèi)熱點方法m的執(zhí)行次數(shù),Δexecute(m)=Δinvocation_count(m)+Δloop_count(m),Δinvocation_count(m)為當(dāng)前時刻前的Δt時間段內(nèi)熱點方法m被調(diào)用的次數(shù),Δloop_count(m)為當(dāng)前時刻前的Δt時間段內(nèi)熱點方法m內(nèi)部循環(huán)迭代的次數(shù)。
本發(fā)明實施例提供的自適應(yīng)動態(tài)編譯調(diào)度裝置,在當(dāng)前編譯隊列的長度大于隊列長度閾值時,從所述當(dāng)前編譯隊列中選取最小的熱點方法進(jìn)行編譯,在當(dāng)前編譯隊列的長度不大于隊列長度閾值時,從所述當(dāng)前編譯隊列中選取運(yùn)行速度最大的熱點方法進(jìn)行編譯,并將編譯調(diào)度時所選定的熱點方法從當(dāng)前編譯隊列中移除后進(jìn)行編譯,直至編譯隊列為空。與現(xiàn)有技術(shù)相比,本發(fā)明能夠根據(jù)編譯隊列的長度優(yōu)先選擇最小的熱點方法或者運(yùn)行速度最大的熱點方法進(jìn)行編譯,從而可以提高虛擬機(jī)動態(tài)編譯的吞吐量,加快虛擬機(jī)的響應(yīng)速度,提升虛擬機(jī)的動態(tài)編譯性能。
本發(fā)明實施例自適應(yīng)動態(tài)編譯調(diào)度方法及裝置,可以適用于在JAVA等高級語言虛擬機(jī)中進(jìn)行自適應(yīng)動態(tài)編譯調(diào)度,但不僅限于此。
本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述實施例方法中的全部或部分流程,是可以通過計算機(jī)程序來指令相關(guān)的硬件來完成,所述的程序可存儲于一計算機(jī)可讀取存儲介質(zhì)中,該程序在執(zhí)行時,可包括如上述各方法的實施例的流程。其中,所述的存儲介質(zhì)可為磁碟、光盤、只讀存儲記憶體(Read-Only Memory,ROM)或隨機(jī)存儲記憶體(Random Access Memory,RAM)等。
以上所述,僅為本發(fā)明的具體實施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)該以權(quán)利要求的保護(hù)范圍為準(zhǔn)。