Numa架構(gòu)系統(tǒng)在虛擬機(jī)環(huán)境中的訪存優(yōu)化方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及虛擬機(jī)調(diào)度技術(shù)領(lǐng)域,尤其涉及一種NUMA架構(gòu)系統(tǒng)在虛擬機(jī)環(huán)境中的訪存優(yōu)化方法及系統(tǒng)。
【背景技術(shù)】
[0002]隨著云計算和大數(shù)據(jù)的興起,NUMA(Non-Uniform Memory Access,非一致內(nèi)存訪問)系統(tǒng)平臺已經(jīng)成為云計算和云存儲的主要基礎(chǔ)設(shè)施,NUMA架構(gòu)將逐漸成為高性能計算的主流架構(gòu)。同時,由于虛擬機(jī)的高度隔離性(虛擬機(jī)與底層的物理機(jī)器均實(shí)現(xiàn)隔離)、易于讓用戶接受(與用戶所習(xí)慣使用的普通機(jī)器看起來一致)、支持不同的操作系統(tǒng)和應(yīng)用程序、低風(fēng)險和易于維護(hù)等特性,使得虛擬機(jī)無論是在個人PC還是在商業(yè)服務(wù)器被使用得都非常廣泛,虛擬機(jī)技術(shù)已經(jīng)成為云計算中的一個關(guān)鍵技術(shù)。然而,NUMA架構(gòu)特性對整個系統(tǒng)的性能影響非常嚴(yán)重,尤其是在虛擬機(jī)環(huán)境中的影響更為明顯。如果運(yùn)行在NUMA架構(gòu)上的虛擬機(jī)得到適當(dāng)?shù)墓芾砗驼{(diào)度,比如在虛擬機(jī)環(huán)境下對NUMA系統(tǒng)進(jìn)行訪存優(yōu)化,系統(tǒng)性能將得到大幅提高。然而,正因?yàn)樘摂M機(jī)的高度隔離性,運(yùn)行在虛擬機(jī)上的客戶操作系統(tǒng)無法正確獲取底層硬件信息,使得大部分的性能剖析工具在虛擬機(jī)中無法正確運(yùn)行,給虛擬機(jī)環(huán)境下NUMA訪存優(yōu)化帶來了極大的困難。
【發(fā)明內(nèi)容】
[0003]本發(fā)明所要解決的技術(shù)問題是,提供一種NUMA架構(gòu)系統(tǒng)在虛擬機(jī)環(huán)境中的訪存優(yōu)化方法及系統(tǒng),以實(shí)現(xiàn)在虛擬機(jī)環(huán)境下對NUMA系統(tǒng)進(jìn)行訪存優(yōu)化。本發(fā)明是這樣實(shí)現(xiàn)的:
[0004]NUMA架構(gòu)系統(tǒng)在虛擬機(jī)環(huán)境中的訪存優(yōu)化方法,所述NUMA架構(gòu)系統(tǒng)包括若干通過高速互聯(lián)網(wǎng)絡(luò)連接在一起的節(jié)點(diǎn);包括如下步驟:
[0005]步驟A:在虛擬機(jī)環(huán)境下通過編程處理器的非核部分性能監(jiān)視單元實(shí)時檢測NUMA架構(gòu)系統(tǒng)中每一節(jié)點(diǎn)的物理內(nèi)存帶寬壓力,并判斷各節(jié)點(diǎn)的物理內(nèi)存帶寬壓力是否超出預(yù)設(shè)水平;
[0006]步驟B:當(dāng)某節(jié)點(diǎn)的物理內(nèi)存帶寬壓力超出預(yù)設(shè)水平時,檢測所述節(jié)點(diǎn)的全局隊(duì)列緩沖壓力,并據(jù)此判斷所述節(jié)點(diǎn)的本地訪存壓力與遠(yuǎn)端訪存壓力的大小關(guān)系;
[0007]步驟C:當(dāng)所述節(jié)點(diǎn)的遠(yuǎn)端訪存壓力大于本地訪存壓力時,將所述節(jié)點(diǎn)中的非本地虛擬機(jī)的內(nèi)存物理頁迀移到其他節(jié)點(diǎn);當(dāng)所述節(jié)點(diǎn)的本地訪存壓力大于遠(yuǎn)端訪存壓力時,檢測第一預(yù)設(shè)時間內(nèi)所述節(jié)點(diǎn)中各本地虛擬機(jī)導(dǎo)致二級緩存失效的次數(shù),并將導(dǎo)致二級緩存失效次數(shù)最少的本地虛擬機(jī)調(diào)度到其他節(jié)點(diǎn)。
[0008]進(jìn)一步地,所述步驟A包括如下步驟:
[0009]步驟Al:在虛擬機(jī)環(huán)境下利用可編程的處理器的非核部分性能監(jiān)視單元監(jiān)視每一節(jié)點(diǎn)的內(nèi)存控制器性能事件,據(jù)此獲取每一節(jié)點(diǎn)內(nèi)存控制器的帶寬使用情況及訪存延遲情況;
[0010]步驟A2:根據(jù)所述節(jié)點(diǎn)內(nèi)存控制器的帶寬使用情況及訪存延遲情況判斷各節(jié)點(diǎn)的物理內(nèi)存帶寬壓力是否超出預(yù)設(shè)水平;如果所述節(jié)點(diǎn)內(nèi)存控制器的帶寬使用率超出預(yù)設(shè)的第一閾值,且該節(jié)點(diǎn)內(nèi)存控制器的訪存延遲超出預(yù)設(shè)的第二閾值,則判定所述節(jié)點(diǎn)的物理內(nèi)存帶寬壓力超出預(yù)設(shè)水平,否則判定所述節(jié)點(diǎn)的物理內(nèi)存帶寬壓力未超出預(yù)設(shè)水平。
[0011]進(jìn)一步地,所述步驟B包括如下步驟:
[0012]步驟B1:當(dāng)某節(jié)點(diǎn)的物理內(nèi)存帶寬壓力超出預(yù)設(shè)水平時,在虛擬機(jī)環(huán)境下利用可編程的處理器的非核部分性能監(jiān)視單元監(jiān)視第二預(yù)設(shè)時間內(nèi)該節(jié)點(diǎn)全局隊(duì)列中的三個緩沖隊(duì)列滿的周期數(shù);所述三個緩沖隊(duì)列滿的周期數(shù)分別為:
[0013]全局隊(duì)列中本地讀請求隊(duì)列滿的周期數(shù);
[0014]全局隊(duì)列中本地寫請求隊(duì)列滿的周期數(shù);
[0015]全局隊(duì)列中遠(yuǎn)端請求隊(duì)列滿的周期數(shù);
[0016]步驟B2:當(dāng)?shù)诙A(yù)設(shè)時間內(nèi)全局隊(duì)列中本地讀請求隊(duì)列滿的周期數(shù)與全局隊(duì)列中本地寫請求隊(duì)列滿的周期數(shù)之和大于全局隊(duì)列中遠(yuǎn)端請求隊(duì)列滿的周期數(shù)時,判定所述節(jié)點(diǎn)的本地訪存壓力大于遠(yuǎn)端訪存壓力;當(dāng)?shù)诙A(yù)設(shè)時間內(nèi)全局隊(duì)列中本地讀請求隊(duì)列滿的周期數(shù)與全局隊(duì)列中本地寫請求隊(duì)列滿的周期數(shù)之和小于全局隊(duì)列中遠(yuǎn)端請求隊(duì)列滿的周期數(shù)時,判定所述節(jié)點(diǎn)的遠(yuǎn)端訪存壓力大于本地訪存壓力。
[0017]進(jìn)一步地,檢測第一預(yù)設(shè)時間內(nèi)所述節(jié)點(diǎn)中各本地虛擬機(jī)導(dǎo)致二級緩存失效的次數(shù)的步驟包括:
[0018]在虛擬機(jī)管理器層通過編程處理器的核內(nèi)部分性能監(jiān)視單元監(jiān)視所述節(jié)點(diǎn)的每一物理CPU的二級緩存失效事件,并統(tǒng)計第一預(yù)設(shè)時間內(nèi)所述節(jié)點(diǎn)的每一物理CPU上由每一虛擬CPU導(dǎo)致的二級緩存失效次數(shù);
[0019]將第一預(yù)設(shè)時間內(nèi)每一虛擬CPU在各物理CPU上導(dǎo)致的二級緩存失效次數(shù)分別匯總,得到第一預(yù)設(shè)時間內(nèi)所述節(jié)點(diǎn)中的每一虛擬CPU導(dǎo)致的二級緩存失效次數(shù)總數(shù);
[0020]根據(jù)虛擬CPU與本地虛擬機(jī)的隸屬關(guān)系確定第一預(yù)設(shè)時間內(nèi)所述節(jié)點(diǎn)中各本地虛擬機(jī)導(dǎo)致二級緩存失效的次數(shù)。
[0021]進(jìn)一步地,將所述節(jié)點(diǎn)中的非本地虛擬機(jī)的內(nèi)存物理頁迀移到其他節(jié)點(diǎn)的方法為:優(yōu)先將所述非本地虛擬機(jī)的內(nèi)存物理頁迀移到該虛擬機(jī)所在的本地節(jié)點(diǎn),如果該虛擬機(jī)所在的本地節(jié)點(diǎn)內(nèi)存不足,則將該非本地虛擬機(jī)的內(nèi)存物理頁隨機(jī)迀移到其他內(nèi)存有剩余空間的節(jié)點(diǎn)。
[0022]進(jìn)一步地,將所述本地虛擬機(jī)調(diào)度到其他節(jié)點(diǎn)的方法為:將該本地虛擬機(jī)調(diào)度到帶寬使用率最小的節(jié)點(diǎn)上。
[0023]NUMA架構(gòu)系統(tǒng)在虛擬機(jī)環(huán)境中的訪存優(yōu)化系統(tǒng),所述NUMA架構(gòu)系統(tǒng)包括若干通過高速互聯(lián)網(wǎng)絡(luò)連接在一起的節(jié)點(diǎn);包括:
[0024]節(jié)點(diǎn)帶寬壓力檢測模塊,用于在虛擬機(jī)環(huán)境下通過編程處理器的非核部分性能監(jiān)視單元實(shí)時檢測NUMA架構(gòu)系統(tǒng)中每一節(jié)點(diǎn)的物理內(nèi)存帶寬壓力,并判斷各節(jié)點(diǎn)的物理內(nèi)存帶寬壓力是否超出預(yù)設(shè)水平;
[0025]節(jié)點(diǎn)全局隊(duì)列緩沖壓力檢測模塊,用于當(dāng)某節(jié)點(diǎn)的物理內(nèi)存帶寬壓力超出預(yù)設(shè)水平時,檢測所述節(jié)點(diǎn)的全局隊(duì)列緩沖壓力,并據(jù)此判斷所述節(jié)點(diǎn)的本地訪存壓力與遠(yuǎn)端訪存壓力的大小關(guān)系;
[0026]虛擬機(jī)調(diào)度模塊,用于當(dāng)所述節(jié)點(diǎn)的遠(yuǎn)端訪存壓力大于本地訪存壓力時,將所述節(jié)點(diǎn)中的非本地虛擬機(jī)的內(nèi)存物理頁迀移到其他節(jié)點(diǎn);當(dāng)所述節(jié)點(diǎn)的本地訪存壓力大于遠(yuǎn)端訪存壓力時,檢測第一預(yù)設(shè)時間內(nèi)所述節(jié)點(diǎn)中各本地虛擬機(jī)導(dǎo)致二級緩存失效的次數(shù),并將導(dǎo)致二級緩存失效次數(shù)最少的本地虛擬機(jī)調(diào)度到其他節(jié)點(diǎn)。
[0027]進(jìn)一步地,所述節(jié)點(diǎn)帶寬壓力檢測模塊包括:
[0028]內(nèi)存控制器性能事件監(jiān)視模塊,用于在虛擬機(jī)環(huán)境下利用可編程的處理器的非核部分性能監(jiān)視單元監(jiān)視每一節(jié)點(diǎn)的內(nèi)存控制器性能事件,據(jù)此獲取每一節(jié)點(diǎn)內(nèi)存控制器的帶寬使用情況及訪存延遲情況;
[0029]節(jié)點(diǎn)帶寬壓力判斷模塊,用于根據(jù)所述節(jié)點(diǎn)內(nèi)存控制器的帶寬使用情況及訪存延遲情況判斷各節(jié)點(diǎn)的物理內(nèi)存帶寬壓力是否超出預(yù)設(shè)水平;如果所述節(jié)點(diǎn)內(nèi)存控制器的帶寬使用率超出預(yù)設(shè)的第一閾值,且該節(jié)點(diǎn)內(nèi)存控制器的訪存延遲超出預(yù)設(shè)的第二閾值,則判定所述節(jié)點(diǎn)的物理內(nèi)存帶寬壓力超出預(yù)設(shè)水平,否則判定所述節(jié)點(diǎn)的物理內(nèi)存帶寬壓力未超出預(yù)設(shè)水平。
[0030]進(jìn)一步地,所述節(jié)點(diǎn)全局隊(duì)列緩沖壓力檢測模塊包括:
[0031]節(jié)點(diǎn)全局隊(duì)列性能事件監(jiān)視模塊,用于當(dāng)某節(jié)點(diǎn)的物理內(nèi)存帶寬壓力超出預(yù)設(shè)水平時,在虛擬機(jī)環(huán)境下利用可編程的處理器的非核部分性能監(jiān)視單元監(jiān)視第二預(yù)設(shè)時間內(nèi)該節(jié)點(diǎn)全局隊(duì)列中的三個緩沖隊(duì)列滿的周期數(shù);所述三個緩沖隊(duì)列滿的周期數(shù)分別為:
[0032]全局隊(duì)列中本地讀請求隊(duì)列滿的周期數(shù);
[0033]全局隊(duì)列中本地寫請求隊(duì)列滿的周期數(shù);
[0034]全局