解釋器訪存優(yōu)化方法及裝置的制造方法
【專利摘要】本發(fā)明實(shí)施例提供一種解釋器訪存優(yōu)化方法及裝置,其中,所述方法包括:在非一致性存儲訪問NUMA系統(tǒng)的至少兩個節(jié)點(diǎn)上分別生成解釋器;根據(jù)解釋器線程所在的節(jié)點(diǎn)的編號,從所述至少兩個節(jié)點(diǎn)上的解釋器中選擇一個解釋器作為當(dāng)前解釋器;使用所述當(dāng)前解釋器對所述解釋器線程調(diào)用的虛擬機(jī)指令進(jìn)行解釋執(zhí)行。本發(fā)明實(shí)施例提供的解釋器訪存優(yōu)化方法及裝置,通過在至少兩個節(jié)點(diǎn)上分別生成解釋器,運(yùn)行時根據(jù)解釋器線程所在的節(jié)點(diǎn)的編號,從所述至少兩個節(jié)點(diǎn)上的解釋器中選擇一個解釋器作為當(dāng)前解釋器,以減少解釋器的跨節(jié)點(diǎn)存儲訪問數(shù)量,從而提高虛擬機(jī)解釋器的性能。
【專利說明】
解釋器訪存優(yōu)化方法及裝置
技術(shù)領(lǐng)域
[0001]本發(fā)明實(shí)施例涉及虛擬機(jī)技術(shù),尤其涉及一種解釋器訪存優(yōu)化方法及裝置。
【背景技術(shù)】
[0002]隨著云計(jì)算和大數(shù)據(jù)時代的來臨,數(shù)據(jù)和信息的規(guī)模呈指數(shù)級增長,科學(xué)計(jì)算和事務(wù)處理等對計(jì)算機(jī)系統(tǒng)的性能提出了更高要求。為了應(yīng)對日益增長增長的計(jì)算需求,多處理器計(jì)算機(jī)系統(tǒng)已經(jīng)成為當(dāng)今應(yīng)用的主流。對稱多處理器(簡稱:SMP)系統(tǒng)是一種常見的多處理器計(jì)算機(jī)系統(tǒng),在SMP系統(tǒng)中所有處理器共享系統(tǒng)總線,對內(nèi)存的訪問具有相同的延遲。但是,當(dāng)處理器數(shù)目增大時,SMP系統(tǒng)對總線的競爭沖突增大,系統(tǒng)總線成為制約性能的瓶頸。因此,SMP系統(tǒng)通常僅支持幾個到十幾個的處理器,其可擴(kuò)展性較差。為了充分發(fā)揮多處理器系統(tǒng)的優(yōu)勢,提高系統(tǒng)的并發(fā)度,非一致性存儲訪問(簡稱:NUMA)系統(tǒng)應(yīng)運(yùn)而生,由于NUMA架構(gòu)更易于大規(guī)模并行,更適合于構(gòu)建分布式系統(tǒng),并且還解決了 SMP系統(tǒng)的可擴(kuò)展性問題,故NUMA系統(tǒng)成為高端服務(wù)器的主流設(shè)計(jì)架構(gòu)。
[0003]虛擬機(jī)(Virtual Machine,簡稱VM)通常是現(xiàn)代高性能服務(wù)器上運(yùn)行的核心軟件系統(tǒng)。虛擬機(jī)主要通過軟件(或者輔以少量硬件支持)的方法來虛擬出一臺計(jì)算機(jī),并且這臺虛擬的計(jì)算機(jī)通常還支持一套自己的指令集,稱為虛擬機(jī)指令集。虛擬機(jī)依托于本地的物理機(jī),通過其執(zhí)行引擎對給定的虛擬機(jī)指令序列(也稱目標(biāo)程序)在本地物理機(jī)器上模擬執(zhí)行。虛擬機(jī)的執(zhí)行引擎一般包括解釋器和編譯器兩種類型:解釋器以一條虛擬機(jī)指令為單位進(jìn)行取指令、譯碼和執(zhí)行;編譯器以一組連續(xù)的虛擬機(jī)指令序列(基本塊、函數(shù)或方法)為單位一次性編譯成本地CPU指令序列,所生成的本地機(jī)器指令稱為本地方法。相對于編譯器,解釋器具有結(jié)構(gòu)簡單、易于實(shí)現(xiàn)和可維護(hù)性強(qiáng)等諸多優(yōu)勢,是實(shí)現(xiàn)虛擬機(jī)執(zhí)行引擎的首選方案。例如,廣泛應(yīng)用的Python語言,其執(zhí)行引擎僅由解釋器來實(shí)現(xiàn)。此外,由于編譯器的編譯行為具有滯后性,因此,解釋器往往決定了虛擬機(jī)系統(tǒng)的啟動性能和響應(yīng)速度。考慮到現(xiàn)有高性能服務(wù)器大都為NUMA架構(gòu),因此提升NUMA架構(gòu)中虛擬機(jī)解釋器的性能,對于優(yōu)化服務(wù)器上應(yīng)用系統(tǒng)的啟動性能和響應(yīng)速度具有十分重要的意義。
[0004]圖1為現(xiàn)有技術(shù)基于NUMA架構(gòu)的多處理器計(jì)算機(jī)系統(tǒng)的架構(gòu)示意圖。NUMA系統(tǒng)可以有多個節(jié)點(diǎn),為便于敘述,圖1以兩個節(jié)點(diǎn)為例進(jìn)行說明。如圖1所示,該系統(tǒng)中總共有兩個節(jié)點(diǎn):節(jié)點(diǎn)O和節(jié)點(diǎn)1,其中,節(jié)點(diǎn)O包括內(nèi)存O和CPU0,節(jié)點(diǎn)I包括內(nèi)存I和CPUl0同一節(jié)點(diǎn)內(nèi)部的CPU和存儲器直接相連;不同節(jié)點(diǎn)間的CPU通過高速互聯(lián)總線相連。從圖1可見,NUMA系統(tǒng)中存儲系統(tǒng)在物理結(jié)構(gòu)上具有分布式的特性,分布的存儲系統(tǒng)使得處理器對不同節(jié)點(diǎn)中的內(nèi)存訪問具有不同的訪存延遲。例如,CPUO訪問節(jié)點(diǎn)I中內(nèi)存I的延遲將遠(yuǎn)大于CPUO訪問節(jié)點(diǎn)O中內(nèi)存O的延遲。這是由于當(dāng)CPUO訪問內(nèi)存I時,內(nèi)存I中的數(shù)據(jù)需要通過高速互聯(lián)總線進(jìn)行傳輸,數(shù)據(jù)在高速互聯(lián)總線上的傳輸帶寬與速率遠(yuǎn)小于相同節(jié)點(diǎn)內(nèi)處理器對內(nèi)存的直接訪問。因此,NUMA系統(tǒng)中的訪存可以劃分為兩類:本地存儲訪問和跨節(jié)點(diǎn)存儲訪問;其中,本地存儲訪問,是指訪存目標(biāo)地址所在節(jié)點(diǎn)和發(fā)起訪存請求的處理器所在節(jié)點(diǎn)相同的存儲訪問;跨節(jié)點(diǎn)存儲訪問,是指訪存目標(biāo)地址所在節(jié)點(diǎn)和發(fā)起訪存請求的處理器所在節(jié)點(diǎn)不同的存儲訪問。研究表明,減少NUMA系統(tǒng)中的跨節(jié)點(diǎn)存儲訪問是提升NUMA系統(tǒng)性能的關(guān)鍵。因此,減少解釋器在NUMA系統(tǒng)中的跨節(jié)點(diǎn)存儲訪存,是提高虛擬機(jī)解釋器性能的重要手段。
[0005]現(xiàn)有技術(shù)通常采用隨機(jī)在某個節(jié)點(diǎn)上生成解釋器的方案,但是現(xiàn)有技術(shù)的這種隨機(jī)產(chǎn)生解釋器的方案容易產(chǎn)生解釋器線程與解釋器不在同一個節(jié)點(diǎn)上運(yùn)行,則會導(dǎo)致大量的跨節(jié)點(diǎn)存儲訪問的技術(shù)問題,極大降低了解釋器的性能。
【發(fā)明內(nèi)容】
[0006]本發(fā)明實(shí)施例提供一種解釋器訪存優(yōu)化方法及裝置,以減少NUMA系統(tǒng)中的跨節(jié)點(diǎn)存儲訪冋,提尚虛擬機(jī)解釋器的性能。
[0007]第一方面,本發(fā)明實(shí)施例提供一種解釋器訪存優(yōu)化方法,其中,所述方法包括:
[0008]在非一致性存儲訪問NUMA系統(tǒng)的至少兩個節(jié)點(diǎn)上分別生成解釋器;
[0009]根據(jù)解釋器線程所在的節(jié)點(diǎn)的編號,從所述至少兩個節(jié)點(diǎn)上的解釋器中選擇一個解釋器作為當(dāng)前解釋器;
[0010]使用所述當(dāng)前解釋器對所述解釋器線程調(diào)用的虛擬機(jī)指令進(jìn)行解釋執(zhí)行。
[0011]根據(jù)第一方面,在第一方面的第一種可能的實(shí)現(xiàn)方式中,所述根據(jù)解釋器線程所在的節(jié)點(diǎn)的編號,從所述至少兩個節(jié)點(diǎn)上的解釋器中選擇一個解釋器作為當(dāng)前解釋器,包括:
[0012]根據(jù)所述解釋器線程所在的節(jié)點(diǎn)的編號,確定所述解釋器線程所在的節(jié)點(diǎn)是否為所述至少兩個節(jié)點(diǎn)之一;
[0013]若是,則將所述解釋器線程所在的節(jié)點(diǎn)上的解釋器選擇為當(dāng)前解釋器。
[0014]根據(jù)第一方面,在第一方面的第二種可能的實(shí)現(xiàn)方式中,所述根據(jù)解釋器線程所在的節(jié)點(diǎn)的編號,從所述至少兩個節(jié)點(diǎn)上的解釋器中選擇一個解釋器作為當(dāng)前解釋器,包括:
[0015]根據(jù)所述解釋器線程所在的節(jié)點(diǎn)的編號,及所述NUMA系統(tǒng)的所有節(jié)點(diǎn)的分布信息,從所述至少兩個節(jié)點(diǎn)中選擇距離所述解釋器線程所在的節(jié)點(diǎn)最近的節(jié)點(diǎn)作為當(dāng)前節(jié)占.V,
[0016]將所述當(dāng)前節(jié)點(diǎn)上的解釋器作為當(dāng)前解釋器。
[0017]根據(jù)第一方面,在第一方面的第三種可能的實(shí)現(xiàn)方式中,所述根據(jù)解釋器線程所在的節(jié)點(diǎn)的編號,從所述至少兩個節(jié)點(diǎn)上的解釋器中選擇一個解釋器作為當(dāng)前解釋器之前,還包括:獲取所述解釋器線程所在的節(jié)點(diǎn)的編號;將所述獲取的所述解釋器線程所在的節(jié)點(diǎn)的編號寫入全局指針寄存器。
[0018]根據(jù)第一方面的第三種可能的實(shí)現(xiàn)方式,在第一方面的第四種可能的實(shí)現(xiàn)方式中,所述根據(jù)解釋器線程所在的節(jié)點(diǎn)的編號,從所述至少兩個節(jié)點(diǎn)上的解釋器中選擇一個解釋器作為當(dāng)前解釋器,包括:
[0019]根據(jù)所述全局指針寄存器的值,將所述至少兩個節(jié)點(diǎn)中節(jié)點(diǎn)編號等于所述全局指針寄存器的值的節(jié)點(diǎn)上的解釋器作為當(dāng)前解釋器。
[0020]第二方面,本發(fā)明實(shí)施例提供一種解釋器訪存優(yōu)化裝置,其中,所述裝置包括:
[0021]解釋器生成模塊,用于在非一致性存儲訪問NUMA系統(tǒng)的至少兩個節(jié)點(diǎn)上分別生成解釋器;
[0022]選擇模塊,用于根據(jù)解釋器線程所在的節(jié)點(diǎn)的編號,從所述解釋器生成模塊生成的所述至少兩個節(jié)點(diǎn)上的解釋器中選擇一個解釋器作為當(dāng)前解釋器;
[0023]指令執(zhí)行模塊,用于使用所述選擇模塊選擇的所述當(dāng)前解釋器對所述解釋器線程調(diào)用的虛擬機(jī)指令進(jìn)行解釋執(zhí)行。
[0024]根據(jù)第二方面,在第二方面的第一種可能的實(shí)現(xiàn)方式中,所述選擇模塊,具體用于:根據(jù)所述解釋器線程所在的節(jié)點(diǎn)的編號,確定所述解釋器線程所在的節(jié)點(diǎn)是否為所述至少兩個節(jié)點(diǎn)之一;若是,則將所述解釋器線程所在的節(jié)點(diǎn)上的解釋器選擇為當(dāng)前解釋器。
[0025]根據(jù)第二方面,在第二方面的第二種可能的實(shí)現(xiàn)方式中,所述選擇模塊,具體用于:根據(jù)所述解釋器線程所在的節(jié)點(diǎn)的編號,及所述NUMA系統(tǒng)的所有節(jié)點(diǎn)的分布信息,從所述至少兩個節(jié)點(diǎn)中選擇距離所述解釋器線程所在的節(jié)點(diǎn)最近的節(jié)點(diǎn)作為當(dāng)前節(jié)點(diǎn);將所述當(dāng)前節(jié)點(diǎn)上的解釋器作為當(dāng)前解釋器。
[0026]根據(jù)第二方面,在第二方面的第三種可能的實(shí)現(xiàn)方式中,還包括:
[0027]獲取模塊,用于所述選擇模塊根據(jù)解釋器線程所在的節(jié)點(diǎn)的編號,從所述至少兩個節(jié)點(diǎn)上的解釋器中選擇一個解釋器作為當(dāng)前解釋器之前,獲取所述解釋器線程所在的節(jié)點(diǎn)的編號;將所述獲取的所述解釋器線程所在的節(jié)點(diǎn)的編號寫入全局指針寄存器。
[0028]根據(jù)第二方面的第三種可能的實(shí)現(xiàn)方式,在第二方面的第四種可能的實(shí)現(xiàn)方式中,所述選擇模塊,具體用于:根據(jù)所述全局指針寄存器的值,將所述至少兩個節(jié)點(diǎn)中節(jié)點(diǎn)編號等于所述全局指針寄存器的值的節(jié)點(diǎn)上的解釋器作為當(dāng)前解釋器。
[0029]本發(fā)明實(shí)施例提供的解釋器訪存優(yōu)化方法及裝置,通過在至少兩個節(jié)點(diǎn)上分別生成解釋器,以此增加可供選擇的解釋器的數(shù)量,運(yùn)行時根據(jù)解釋器線程所在的節(jié)點(diǎn)的編號,從所述至少兩個節(jié)點(diǎn)上的解釋器中選擇一個解釋器作為當(dāng)前解釋器,以減少解釋器的跨節(jié)點(diǎn)存儲訪冋數(shù)量,從而提尚虛擬機(jī)解釋器的性能。
【附圖說明】
[0030]為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作一簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0031]圖1為現(xiàn)有技術(shù)基于NUMA架構(gòu)的多處理器計(jì)算機(jī)系統(tǒng)的架構(gòu)示意圖;
[0032]圖2為本發(fā)明實(shí)施例提供的解釋器訪存優(yōu)化方法的流程圖;
[0033]圖3為本發(fā)明實(shí)施例提供的解釋器訪存示意圖;
[0034]圖4為本發(fā)明實(shí)施例提供的解釋器訪存優(yōu)化方法的另一流程圖;
[0035]圖5為本發(fā)明實(shí)施例提供的解釋器訪存優(yōu)化裝置的結(jié)構(gòu)示意圖;
[0036]圖6為本發(fā)明實(shí)施例提供的解釋器訪存優(yōu)化裝置的又一結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0037]為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0038]圖2為本發(fā)明實(shí)施例提供的解釋器訪存優(yōu)化方法的流程圖。如圖2所示,本發(fā)明實(shí)施例提供的解釋器訪存優(yōu)化方法,包括:
[0039]201、在非一致性存儲訪問NUMA系統(tǒng)的至少兩個節(jié)點(diǎn)上分別生成解釋器。
[0040]202、根據(jù)解釋器線程所在的節(jié)點(diǎn)的編號,從所述至少兩個節(jié)點(diǎn)上的解釋器中選擇一個解釋器作為當(dāng)前解釋器。
[0041]其中,節(jié)點(diǎn)主要是指NUMA節(jié)點(diǎn);節(jié)點(diǎn)的編號主要是指執(zhí)行解釋器的解釋器線程所在的NUMA節(jié)點(diǎn)的節(jié)點(diǎn)編號;在本發(fā)明實(shí)施例中,所述至少兩個節(jié)點(diǎn)可以是指NUMA系統(tǒng)的兩個及以上節(jié)點(diǎn),當(dāng)然也可以是指NUMA系統(tǒng)的所有節(jié)點(diǎn)。
[0042]203、使用所述當(dāng)前解釋器對所述解釋器線程調(diào)用的虛擬機(jī)指令進(jìn)行解釋執(zhí)行。
[0043]本發(fā)明實(shí)施例提供的解釋器訪存優(yōu)化方法,可以應(yīng)用于基于NUMA架構(gòu)的多處理器計(jì)算機(jī)系統(tǒng)。本發(fā)明實(shí)施例提供的解釋器訪存優(yōu)化方法的執(zhí)行主體為解釋器訪存優(yōu)化裝置,所述解釋器訪存優(yōu)化裝置例如,可以是虛擬機(jī)。所述解釋器線程是指在虛擬機(jī)中執(zhí)行解釋器的線程。NUMA系統(tǒng)可以有多個節(jié)點(diǎn),每個節(jié)點(diǎn)通常包括處理器和本地存儲器,同一節(jié)點(diǎn)內(nèi)部的處理器和存儲器直接相連;不同節(jié)點(diǎn)間的處理器通過高速互聯(lián)總線相連??蛇x的,所述在NUMA系統(tǒng)的至少兩個節(jié)點(diǎn)上分別生成解釋器包括:在NUMA系統(tǒng)的每個節(jié)點(diǎn)上均分別生成解釋器。
[0044]現(xiàn)有技術(shù)采用隨機(jī)在某個節(jié)點(diǎn)上生成解釋器的方案,如果解釋器線程與解釋器不在同一個節(jié)點(diǎn)上運(yùn)行,則會導(dǎo)致大量的跨節(jié)點(diǎn)存儲訪問,極大降低了解釋器的性能。與現(xiàn)有技術(shù)相比,本發(fā)明實(shí)施例通過在至少兩個節(jié)點(diǎn)上分別生成解釋器,以此增加可供選擇的解釋器的數(shù)量,運(yùn)行時根據(jù)解釋器線程所在的節(jié)點(diǎn)的編號,從所述至少兩個節(jié)點(diǎn)上的解釋器中選擇一個解釋器作為當(dāng)前解釋器,以降低解釋器的跨節(jié)點(diǎn)存儲訪問,從而提高虛擬機(jī)解釋器的性能。
[0045]在本發(fā)明的一實(shí)施例中,在NUMA系統(tǒng)的至少兩個節(jié)點(diǎn)上分別生成解釋器后,根據(jù)所述解釋器線程所在的節(jié)點(diǎn)的編號,確定所述解釋器線程所在的節(jié)點(diǎn)是否為所述至少兩個節(jié)點(diǎn)之一;
[0046]若否,則根據(jù)解釋器線程所在的節(jié)點(diǎn)的編號,從所述至少兩個節(jié)點(diǎn)上的解釋器中選擇一個解釋器作為當(dāng)前解釋器。
[0047]若是,則將所述解釋器線程所在的節(jié)點(diǎn)上的解釋器選擇為當(dāng)前解釋器。從而,使得解釋器線程與解釋器位于同一個節(jié)點(diǎn),可以大幅降低解釋器在NUMA系統(tǒng)中的跨節(jié)點(diǎn)存儲訪問,增強(qiáng)了解釋器訪存的局部性,提高了虛擬機(jī)的性能。
[0048]在本發(fā)明的一實(shí)施例中,在至少兩個節(jié)點(diǎn)上分別生成解釋器的實(shí)現(xiàn)方式可以為:在所述至少兩個節(jié)點(diǎn)上分別分配解釋器存儲空間,并使用解釋器存儲空間生成解釋器存儲空間對應(yīng)的解釋器。
[0049]在此基礎(chǔ)上,本發(fā)明的一種選定當(dāng)前解釋器的實(shí)現(xiàn)方式可以為:根據(jù)所述解釋器線程所在的節(jié)點(diǎn)的編號,及所述NUMA系統(tǒng)的所有節(jié)點(diǎn)的分布信息,從所述至少兩個節(jié)點(diǎn)中選擇距離所述解釋器線程所在的節(jié)點(diǎn)最近的節(jié)點(diǎn)作為當(dāng)前節(jié)點(diǎn);將所述當(dāng)前節(jié)點(diǎn)上的解釋器作為當(dāng)前解釋器。其中,所述NUMA系統(tǒng)中所有節(jié)點(diǎn)的分布信息可以包括:所述NUMA系統(tǒng)中的節(jié)點(diǎn)數(shù)量、各個節(jié)點(diǎn)之間存儲訪問的代價。本領(lǐng)域技術(shù)人員可以理解的是:節(jié)點(diǎn)間的距離“最近”是指節(jié)點(diǎn)間的代價最小。而根據(jù)所有節(jié)點(diǎn)的分布信息,從各節(jié)點(diǎn)中選擇與解釋器線程所在節(jié)點(diǎn)間代價最小的節(jié)點(diǎn),可以采用已有的方法實(shí)現(xiàn)。本發(fā)明實(shí)施例的技術(shù)方案,降低了解釋器線程所在的節(jié)點(diǎn)與解釋器所在的節(jié)點(diǎn)的距離,能夠極大地降低解釋器的跨節(jié)點(diǎn)存儲訪問的開銷,因此,提高了虛擬機(jī)解釋器的性能。
[0050]圖3為本發(fā)明實(shí)施例提供的解釋器訪存示意圖。實(shí)際中,NUMA系統(tǒng)可以有多個節(jié)點(diǎn),為便于敘述,如圖3所示,以包括兩個節(jié)點(diǎn)(節(jié)點(diǎn)O和節(jié)點(diǎn)I)的NUMA系統(tǒng)為例,其中,節(jié)點(diǎn)O包括內(nèi)存O和CPU0,節(jié)點(diǎn)I包括內(nèi)存I和CPUl。同一節(jié)點(diǎn)內(nèi)部的CPU和存儲器直接相連;不同節(jié)點(diǎn)間的CPU通過高速互聯(lián)總線相連。本發(fā)明實(shí)施例在每個節(jié)點(diǎn)上均分別生成一個解釋器,即:在節(jié)點(diǎn)O上生成解釋器0,在節(jié)點(diǎn)I上生成解釋器I。運(yùn)行時,根據(jù)解釋器線程所在的節(jié)點(diǎn)的編號,選擇與解釋器線程位于同一節(jié)點(diǎn)的解釋器作為當(dāng)前解釋器。例如,若解釋器線程在CPUO上執(zhí)行,則分派解釋器O運(yùn)行。顯而易見的,本發(fā)明實(shí)施例大幅減少了解釋器在NUMA系統(tǒng)中的跨節(jié)點(diǎn)存儲訪問數(shù)量,增強(qiáng)了解釋器訪存的局部性,提高了虛擬機(jī)的性能。
[0051]圖4為本發(fā)明實(shí)施例提供的解釋器訪存優(yōu)化方法的另一流程圖。在上述實(shí)施例的基礎(chǔ)上,圖4所示的解釋器訪存優(yōu)化方法以在NUMA系統(tǒng)的每個節(jié)點(diǎn)上分別生成解釋器的場景為例,對本發(fā)明實(shí)施例技術(shù)方案的具體實(shí)現(xiàn)進(jìn)行了示例說明。圖4所示的解釋器訪存優(yōu)化方法,包括如下步驟:
[0052]1、虛擬機(jī)啟動,完成一系列初始化工作。
[0053]2、生成解釋器,具體為:
[0054]2.1、獲取機(jī)器的節(jié)點(diǎn)分布信息;
[0055]2.2、在每個節(jié)點(diǎn)上,為解釋器分配存儲空間;
[0056]2.3、在每個節(jié)點(diǎn)上,使用解釋器存儲空間生成解釋器;
[0057]2.4、向虛擬機(jī)注冊所有節(jié)點(diǎn)上生成的解釋器;
[0058]2.5、完成解釋器相關(guān)的其它初始化工作。
[0059]3、解釋器線程啟動。
[0060]4、獲取解釋器線程運(yùn)行時所在的節(jié)點(diǎn)的編號。
[0061]5、解釋器線程循環(huán)執(zhí)行以下步驟:
[0062]5.1、獲取即將執(zhí)行的虛擬機(jī)指令;
[0063]5.2、虛擬機(jī)指令譯碼;
[0064]5.3、根據(jù)解釋器線程所在的節(jié)點(diǎn)的編號,從各個節(jié)點(diǎn)上的解釋器中選擇一個解釋器作為當(dāng)前解釋器:分派和當(dāng)前執(zhí)行解釋器線程的處理器位于同一個節(jié)點(diǎn)的解釋器作為當(dāng)前解釋器;
[0065]5.4、獲取操作數(shù);
[0066]5.5、使用當(dāng)前解釋器對解釋器線程調(diào)用的虛擬機(jī)指令進(jìn)行解釋執(zhí)行,即執(zhí)行虛擬機(jī)指令規(guī)定的語義動作;
[0067]5.6、判斷解釋器是否應(yīng)當(dāng)停止執(zhí)行:若是,則停止;若否,則跳轉(zhuǎn)至5.1繼續(xù)循環(huán)。
[0068]本發(fā)明的另一種選定當(dāng)前解釋器的實(shí)現(xiàn)方式為:在根據(jù)解釋器線程所在的節(jié)點(diǎn)的編號,從所述至少兩個節(jié)點(diǎn)上的解釋器中選擇一個解釋器作為當(dāng)前解釋器之前,獲取所述解釋器線程所在的節(jié)點(diǎn)的編號,將所述獲取的所述解釋器線程所在的節(jié)點(diǎn)的編號寫入全局指針寄存器;然后,根據(jù)所述全局指針寄存器的值,將所述至少兩個節(jié)點(diǎn)中節(jié)點(diǎn)編號等于所述全局指針寄存器的值的節(jié)點(diǎn)上的解釋器作為當(dāng)前解釋器。具體地,
[0069]在圖4所示實(shí)施例的基礎(chǔ)上,進(jìn)一步,在步驟3中,解釋器線程啟動時,將全局指針寄存器(也稱GP寄存器)的值保存到指定寄存器或內(nèi)存中指定地址中。在步驟4中,獲取解釋器線程運(yùn)行時所在的節(jié)點(diǎn)的編號,并將所述獲取的所述解釋器線程所在的節(jié)點(diǎn)的編號寫入所述全局指針寄存器中。在步驟5.3中,根據(jù)解釋器線程所在的節(jié)點(diǎn)的編號,從各個節(jié)點(diǎn)上的解釋器中選擇一個解釋器作為當(dāng)前解釋器,具體可以為:根據(jù)所述全局指針寄存器的值,將所述至少兩個節(jié)點(diǎn)中節(jié)點(diǎn)編號等于所述全局指針寄存器的值的節(jié)點(diǎn)上的解釋器作為當(dāng)前解釋器。在步驟5.6中,若判斷解釋器停止執(zhí)行,則讀取上述指定寄存器或內(nèi)存中指定地址中存儲的值,并寫入全局指針寄存器中。
[0070]本發(fā)明實(shí)施例通過在每個節(jié)點(diǎn)上分別生成解釋器,運(yùn)行時,根據(jù)解釋器線程所在的節(jié)點(diǎn)的編號,選擇與解釋器線程位于同一節(jié)點(diǎn)的解釋器作為當(dāng)前解釋器,大幅減少了解釋器的跨節(jié)點(diǎn)存儲訪問數(shù)量,提高了虛擬機(jī)解釋器的性能。
[0071]圖5為本發(fā)明實(shí)施例提供的解釋器訪存優(yōu)化裝置的結(jié)構(gòu)示意圖。如圖5所示,本發(fā)明實(shí)施例提供的解釋器訪存優(yōu)化裝置500,包括:
[0072]解釋器生成模塊501,用于在非一致性存儲訪問NUMA系統(tǒng)的至少兩個節(jié)點(diǎn)上分別生成解釋器;
[0073]選擇模塊502,用于根據(jù)解釋器線程所在的節(jié)點(diǎn)的編號,從所述解釋器生成模塊501生成的所述至少兩個節(jié)點(diǎn)上的解釋器中選擇一個解釋器作為當(dāng)前解釋器;
[0074]指令執(zhí)行模塊503,用于使用所述選擇模塊502選擇的所述當(dāng)前解釋器對所述解釋器線程調(diào)用的虛擬機(jī)指令進(jìn)行解釋執(zhí)行。
[0075]與現(xiàn)有技術(shù)相比,本發(fā)明實(shí)施例通過在至少兩個節(jié)點(diǎn)上分別生成解釋器,以此增加可供選擇的解釋器的數(shù)量,運(yùn)行時根據(jù)解釋器線程所在的節(jié)點(diǎn)的編號,從所述至少兩個節(jié)點(diǎn)上的解釋器中選擇一個解釋器作為當(dāng)前解釋器,以降低解釋器的跨節(jié)點(diǎn)存儲訪問,從而提尚虛擬機(jī)解釋器的性能。
[0076]在本發(fā)明的一實(shí)施例中,所述選擇模塊502,具體用于:根據(jù)所述解釋器線程所在的節(jié)點(diǎn)的編號,確定所述解釋器線程所在的節(jié)點(diǎn)是否為所述至少兩個節(jié)點(diǎn)之一;若是,則將所述解釋器線程所在的節(jié)點(diǎn)上的解釋器選擇為當(dāng)前解釋器。
[0077]在本發(fā)明的一實(shí)施例中,所述選擇模塊502,具體用于:根據(jù)所述解釋器線程所在的節(jié)點(diǎn)的編號,及所述NUMA系統(tǒng)的所有節(jié)點(diǎn)的分布信息,從所述至少兩個節(jié)點(diǎn)中選擇距離所述解釋器線程所在的節(jié)點(diǎn)最近的節(jié)點(diǎn)作為當(dāng)前節(jié)點(diǎn);將所述當(dāng)前節(jié)點(diǎn)上的解釋器作為當(dāng)前解釋器。
[0078]與現(xiàn)有技術(shù)相比,本發(fā)明實(shí)施例通過在至少兩個節(jié)點(diǎn)上分別生成解釋器,以此增加可供選擇的解釋器的數(shù)量,運(yùn)行時根據(jù)解釋器線程所在的節(jié)點(diǎn)的編號,從所述至少兩個節(jié)點(diǎn)上的解釋器中選擇選擇距離所述解釋器線程所在的節(jié)點(diǎn)最近的節(jié)點(diǎn)上的解釋器作為當(dāng)前解釋器,以降低解釋器的跨節(jié)點(diǎn)存儲訪問,從而提高虛擬機(jī)解釋器的性能。
[0079]圖6為本發(fā)明實(shí)施例提供的解釋器訪存優(yōu)化裝置的又一結(jié)構(gòu)示意圖。在圖5所示實(shí)施例的基礎(chǔ)上,圖6所示的解釋器訪存優(yōu)化裝置600,也包括:解釋器生成模塊501、選擇模塊502及指令執(zhí)行模塊503 ;進(jìn)一步,在本發(fā)明實(shí)施例還包括:獲取模塊601,用于在所述選擇模塊502根據(jù)解釋器線程所在的節(jié)點(diǎn)的編號,從所述至少兩個節(jié)點(diǎn)上的解釋器中選擇一個解釋器作為當(dāng)前解釋器之前,獲取所述解釋器線程所在的節(jié)點(diǎn)的編號;將所述獲取的所述解釋器線程所在的節(jié)點(diǎn)的編號寫入全局指針寄存器。
[0080]在上述實(shí)施例的基礎(chǔ)上,所述選擇模塊502具體用于:根據(jù)所述全局指針寄存器的值,將所述至少兩個節(jié)點(diǎn)中節(jié)點(diǎn)編號等于所述全局指針寄存器的值的節(jié)點(diǎn)上的解釋器作為當(dāng)前解釋器。
[0081]與現(xiàn)有技術(shù)相比,本發(fā)明實(shí)施例通過獲取模塊601獲取解釋器線程所在的節(jié)點(diǎn)的編號,并將解釋器線程所在的節(jié)點(diǎn)的編號寫入全局指針寄存器,選擇模塊502將所述至少兩個節(jié)點(diǎn)中節(jié)點(diǎn)編號等于全局指針寄存器的值的節(jié)點(diǎn)上的解釋器作為當(dāng)前解釋器,從而借助全局指針寄存器實(shí)現(xiàn)了從所述至少兩個節(jié)點(diǎn)上的解釋器中選擇一個解釋器作為當(dāng)前解釋器的方案。
[0082]最后應(yīng)說明的是:以上各實(shí)施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述各實(shí)施例對本發(fā)明進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對其中部分或者全部技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的范圍。
【主權(quán)項(xiàng)】
1.一種解釋器訪存優(yōu)化方法,其特征在于,包括: 在非一致性存儲訪問NUMA系統(tǒng)的至少兩個節(jié)點(diǎn)上分別生成解釋器; 根據(jù)解釋器線程所在的節(jié)點(diǎn)的編號,從所述至少兩個節(jié)點(diǎn)上的解釋器中選擇一個解釋器作為當(dāng)前解釋器; 使用所述當(dāng)前解釋器對所述解釋器線程調(diào)用的虛擬機(jī)指令進(jìn)行解釋執(zhí)行。2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述根據(jù)解釋器線程所在的節(jié)點(diǎn)的編號,從所述至少兩個節(jié)點(diǎn)上的解釋器中選擇一個解釋器作為當(dāng)前解釋器,包括: 根據(jù)所述解釋器線程所在的節(jié)點(diǎn)的編號,確定所述解釋器線程所在的節(jié)點(diǎn)是否為所述至少兩個節(jié)點(diǎn)之一; 若是,則將所述解釋器線程所在的節(jié)點(diǎn)上的解釋器選擇為當(dāng)前解釋器。3.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述根據(jù)解釋器線程所在的節(jié)點(diǎn)的編號,從所述至少兩個節(jié)點(diǎn)上的解釋器中選擇一個解釋器作為當(dāng)前解釋器,包括: 根據(jù)所述解釋器線程所在的節(jié)點(diǎn)的編號,及所述NUMA系統(tǒng)的所有節(jié)點(diǎn)的分布信息,從所述至少兩個節(jié)點(diǎn)中選擇距離所述解釋器線程所在的節(jié)點(diǎn)最近的節(jié)點(diǎn)作為當(dāng)前節(jié)點(diǎn); 將所述當(dāng)前節(jié)點(diǎn)上的解釋器作為當(dāng)前解釋器。4.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述根據(jù)解釋器線程所在的節(jié)點(diǎn)的編號,從所述至少兩個節(jié)點(diǎn)上的解釋器中選擇一個解釋器作為當(dāng)前解釋器之前,還包括: 獲取所述解釋器線程所在的節(jié)點(diǎn)的編號;將所述獲取的所述解釋器線程所在的節(jié)點(diǎn)的編號寫入全局指針寄存器。5.根據(jù)權(quán)利要求4所述的方法,其特征在于, 所述根據(jù)解釋器線程所在的節(jié)點(diǎn)的編號,從所述至少兩個節(jié)點(diǎn)上的解釋器中選擇一個解釋器作為當(dāng)前解釋器,包括: 根據(jù)所述全局指針寄存器的值,將所述至少兩個節(jié)點(diǎn)中節(jié)點(diǎn)編號等于所述全局指針寄存器的值的節(jié)點(diǎn)上的解釋器作為當(dāng)前解釋器。6.一種解釋器訪存優(yōu)化裝置,其特征在于,包括: 解釋器生成模塊,用于在非一致性存儲訪問NUMA系統(tǒng)的至少兩個節(jié)點(diǎn)上分別生成解釋器; 選擇模塊,用于根據(jù)解釋器線程所在的節(jié)點(diǎn)的編號,從所述解釋器生成模塊生成的所述至少兩個節(jié)點(diǎn)上的解釋器中選擇一個解釋器作為當(dāng)前解釋器; 指令執(zhí)行模塊,用于使用所述選擇模塊選擇的所述當(dāng)前解釋器對所述解釋器線程調(diào)用的虛擬機(jī)指令進(jìn)行解釋執(zhí)行。7.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述選擇模塊,具體用于:根據(jù)所述解釋器線程所在的節(jié)點(diǎn)的編號,確定所述解釋器線程所在的節(jié)點(diǎn)是否為所述至少兩個節(jié)點(diǎn)之一;若是,則將所述解釋器線程所在的節(jié)點(diǎn)上的解釋器選擇為當(dāng)前解釋器。8.根據(jù)權(quán)利要求6或7所述的裝置,其特征在于,所述選擇模塊,具體用于: 根據(jù)所述解釋器線程所在的節(jié)點(diǎn)的編號,及所述NUMA系統(tǒng)的所有節(jié)點(diǎn)的分布信息,從所述至少兩個節(jié)點(diǎn)中選擇距離所述解釋器線程所在的節(jié)點(diǎn)最近的節(jié)點(diǎn)作為當(dāng)前節(jié)點(diǎn);將所述當(dāng)前節(jié)點(diǎn)上的解釋器作為當(dāng)前解釋器。9.根據(jù)權(quán)利要求6或7所述的裝置,其特征在于,還包括: 獲取模塊,用于所述選擇模塊根據(jù)解釋器線程所在的節(jié)點(diǎn)的編號,從所述至少兩個節(jié)點(diǎn)上的解釋器中選擇一個解釋器作為當(dāng)前解釋器之前,獲取所述解釋器線程所在的節(jié)點(diǎn)的編號;將所述獲取的所述解釋器線程所在的節(jié)點(diǎn)的編號寫入全局指針寄存器。10.根據(jù)權(quán)利要求9所述的裝置,其特征在于, 所述選擇模塊,具體用于:根據(jù)所述全局指針寄存器的值,將所述至少兩個節(jié)點(diǎn)中節(jié)點(diǎn)編號等于所述全局指針寄存器的值的節(jié)點(diǎn)上的解釋器作為當(dāng)前解釋器。
【文檔編號】G06F9/455GK105988856SQ201510053110
【公開日】2016年10月5日
【申請日】2015年2月2日
【發(fā)明人】傅杰, 靳國杰, 高翔, 王劍
【申請人】龍芯中科技術(shù)有限公司