本發(fā)明涉及高性能網絡下虛擬化領域,具體涉及一種基于非一致性I/O訪問構架的性能監(jiān)控器及其監(jiān)控方法。
背景技術:
虛擬化技術是一種將計算機各種實體資源(如CPU、I/O、內存等)等進行抽象和轉換后進行呈現(xiàn)的管理技術。通過虛擬化技術可以將一臺物理機虛擬化為一臺或者多臺虛擬計算機操作系統(tǒng),使每臺虛擬計算機操作系統(tǒng)擁有自己的虛擬硬件(如虛擬內存、虛擬I/O、虛擬CPU等),來使虛擬計算機操作系統(tǒng)可以相互獨立的運行而不相互影響。虛擬化技術的發(fā)展極大地促進了云計算領域的快速發(fā)展。虛擬化技術有助于開發(fā)人員、使用人員以及維護人員系統(tǒng)、應用以及數(shù)據(jù)的維護,從而改善IT運維和減少成本支出。
虛擬化技術很多情況下是通過VMM(Virtual Machine Monitor,虛擬機監(jiān)視器)來完成虛擬操作系統(tǒng)和硬件的通信功能。系統(tǒng)上所有虛擬機對硬件資源的訪問是由VMM決定的,通過VMM將傳統(tǒng)的硬件資源分配給虛擬機進行使用。
現(xiàn)代系統(tǒng)的虛擬化程度非常高,所以對虛擬機的調度問題非常的復雜?,F(xiàn)代操作系統(tǒng)大多數(shù)都采用NMUA(Non-Uniform Memory Access,非一致性內存訪問)架構,在虛擬化環(huán)境中多個虛擬機競爭內存、CPU等硬件資源。現(xiàn)有對NUMA架構在虛擬化中的應用進行了優(yōu)化,包括將虛擬機運行在與其相關資源的NUMA節(jié)點上、將虛擬機運行內存進行遷移等方式進行硬件資源最優(yōu)化配置,主要集中在內存和CPU及相關資源的調度和優(yōu)化,而沒有考慮到I/O性能對于NUMA架構的影響。
I/O設備虛擬化是虛擬化的重要組成部分,I/O虛擬化主要是針對網卡功能的虛擬化,常見的方式有全虛擬化、半虛擬化、SRIOV(Single-root I/O virtualization,單根I/O虛擬化)。隨著高性能網絡的不斷發(fā)展,網卡性能不斷的提升,如何充分利用網卡性能、高效的訪問I/O資源變得尤為重要。因此我們在NUMA架構的基礎上提出了NUIOA(Non-Uniform I/O Access,非一致性I/O訪問),如附圖1中所示的結構。
I/O設備的遠程訪問帶來了極大的性能下降和額外的開銷,因此,本領域的技術人員致力于開發(fā)一種基于非一致性I/O訪問構架的性能監(jiān)控器及其監(jiān)控方法,主要針對虛擬化環(huán)境中,虛擬機擺放在距離I/O不同距離的不同節(jié)點上時虛擬機隊硬件資源的使用情況進行分析和監(jiān)測。
技術實現(xiàn)要素:
有鑒于現(xiàn)有技術的上述缺陷,本發(fā)明所要解決的技術問題是在虛擬化虛擬化環(huán)境中,I/O設備的遠程訪問帶來的極大的性能下降和額外的開銷問題。
為實現(xiàn)上述目的,本發(fā)明提供了一種基于非一致性I/O訪問構架的性能監(jiān)控器,包括主機性能監(jiān)控模塊、虛擬機I/O性能監(jiān)控模塊和虛擬機熱頁監(jiān)控模塊,所述主機性能監(jiān)控模塊被配置為利用linux內核提供的性能監(jiān)控單元計算硬件資源的使用情況;所述虛擬機I/O性能監(jiān)控模塊被配置為完成對虛擬機的I/O請求進行的監(jiān)控;所述虛擬機熱頁監(jiān)控模塊被配置為通過perf監(jiān)控虛擬機中內存頁的被使用情況。
進一步地,所述主機性能監(jiān)控模塊對硬件資源監(jiān)控包括中央處理器周期數(shù)、指令數(shù)、L1、L2、L3不同級別緩存性能情況以及CPU利用率、內存利用率、內存時延、Last Level Cache命中率。
進一步地,所述虛擬機I/O性能監(jiān)控模塊對虛擬機I/O性能監(jiān)控被配置為將虛擬機擺放在不同的NUMA節(jié)點,綁定在不同的物理CPU上,通過獲得網卡收到中斷請求的次數(shù),來獲取I/O請求操作的數(shù)量。
進一步地,所述虛擬機熱頁監(jiān)控模塊被配置為通過累計一段時間的內存頁情況來判斷是否為熱頁。
進一步地,所述熱頁的判斷被配置為通過維護一個5位位圖表,記錄一段時間內頁面被訪問的情況,同時監(jiān)控內存頁被訪問頻繁程度。
本發(fā)明還提供了一種基于非一致性I/O訪問構架的性能監(jiān)控方法,包括以下步驟:
提供主機性能監(jiān)控模塊、虛擬機I/O性能監(jiān)控模塊和虛擬機熱頁監(jiān)控模塊;
利用linux提供的perf_event接口,對硬件信息進行采集;
使用PERF_TYPE_HARDWARE的不同類型對每個虛擬機的VCPU進行紀錄;
通過計算緩存未命中的次數(shù)以及緩存命中次數(shù)計算出緩存命中率;
通過在宿主機中/proc/stat中監(jiān)測宿主機的運行情況進行計算;
通過整個系統(tǒng)的時間和各線程的運行時間,周期性的計算每個線程的運行時間以計算CPU利用率;
從宿主機中/proc/meminfo文件中提取當前內存的使用量以及內存總量以計算內存使用率。
進一步地,所述CPU利用率為100%*(user_time+nice_time+system_time)/(user_time+nice_time+system_time+idle_time)。
進一步地,所述內存使用率為100%*(c_mem/u_mem)。
進一步地,所述虛擬機I/O性能監(jiān)控模塊的虛擬機I/O性能監(jiān)控步驟為:
第一步:通過讀取/proc/interrupts中網卡中斷的信息,獲取不同CPU收到的網卡IO中斷次數(shù);
第二步:將虛擬機擺放在不同的NUMA節(jié)點,綁定在不同的物理CPU上,在虛擬機中跑不同的應用,通過在虛擬機中讀取網卡中斷信息,查看虛擬機中IO請求數(shù)量;
第三步:通過進行對比主機中和不同虛擬機中IO請求情況,判斷虛擬機擺放在不同節(jié)點上的IO請求情況;
第四步:確定IO密集型操作的虛擬機。
進一步地,所述虛擬機熱頁監(jiān)控模塊的虛擬機熱頁監(jiān)控步驟為:
第一步:通過perf獲取虛擬機中的進程頁的使用情況,如果正在使用,則記為當時的“熱”,每隔固定時間讀取虛擬機內存頁使用情況;
第二步:維護一個所有頁狀態(tài)向量P(P1,P2,P3…Pn),在每個檢測的瞬時如果內存頁正在使用,則置1,如果內存頁沒有使用,則置0;
第三步:對每隔t時間進行一次采樣,每一個內存頁維護一個m維FIFO隊列,記錄每個瞬時某個確定頁Pi的頁面使用情況Pi(Pi1,Pi2,Pi3…Pim);
第四步:經過m次采樣,形成一個內存頁使用情況的矩陣;每個頁面Pi在j時間點是否被使用的狀態(tài)記為Pij;
第五步:計算每個頁面當前的“熱度”,通過給定不同權值W(W1,W2,W3…Wm)對頁面熱度進行計算,第i個頁面的熱度Wi=Pi1*Wi1,Pi2*Wi2,Pi3*Wi3…Pim*Wim;
第六步:比較每個頁面的“熱度”,如果最熱頁的熱度大于兩倍次熱頁,則判斷當前頁面為“熱頁”,同時通知系統(tǒng)發(fā)現(xiàn)“熱頁”。
基于現(xiàn)有系統(tǒng)的缺陷,本發(fā)明主要建立虛擬化環(huán)境下非一致性I/O訪問資源的監(jiān)控器及其監(jiān)控方法,對高性能網絡環(huán)境NUMA架構下的硬件資源性能提供一套完整的監(jiān)控系統(tǒng),數(shù)字化、實時地體現(xiàn)系統(tǒng)性能指標。性能監(jiān)控器主要由三部分組成,包括基于PMU的主機性能監(jiān)控模塊、虛擬機I/O性能監(jiān)控模塊和虛擬機熱頁監(jiān)控模塊,反映硬件資源使用情況。
主機性能監(jiān)控模塊:linux內核提供了一種PMU(性能監(jiān)控單元),可以部分計算硬件資源的使用情況,包括中央處理器周期數(shù)、指令數(shù)、L1、L2、L3不同級別緩存性能情況等,我們對PMU的數(shù)據(jù)進行了處理和計算,對CPU利用率、內存利用率、內存時延、LLC(Last Level Cache)命中率進行監(jiān)控和綜合分析,更完善、全面的提供硬件性能信息監(jiān)控主機性能。
虛擬機I/O性能監(jiān)控模塊:完成對機器的I/O請求進行的監(jiān)控。在主機中,通過獲得網卡收到中斷請求的次數(shù),來獲取I/O請求操作的數(shù)量。將虛擬機擺放在不同的NUMA節(jié)點,綁定在不同的物理CPU上。在虛擬機中跑不同的應用,查看虛擬機中I/O請求數(shù)量,通過進行對比主機中和虛擬機中I/O請求情況,來判斷虛擬機擺放在不同節(jié)點上(綁定在不同CPU上)的I/O請求情況。
虛擬機熱頁監(jiān)控模塊:通過perf監(jiān)控虛擬機中內存頁的被使用情況,通過累計一段時間的內存頁情況來判斷是否為熱頁。通過維護一個5位位圖表,記錄一段時間內頁面被訪問的情況,監(jiān)控內存頁被訪問頻繁程度。
本性能監(jiān)測器與現(xiàn)有性能監(jiān)測器相比有如下優(yōu)勢:
1)以極低的性能開銷,將虛擬化環(huán)境下的關鍵因素的性能指標進行了綜合分析,對主機以及虛擬機的性能進行同時監(jiān)測,對高性能網絡下的非一致性I/O訪問的性能進行了完整、詳細的監(jiān)測。
2)提出準確高效地虛擬機內性能監(jiān)控算法,對虛擬化環(huán)境下多個虛擬機共用硬件資源的利用情況進行監(jiān)控,方便測量和計算多種資源之間的相互影響作用。
3)通過對基礎資源性能的監(jiān)控,提出了一種虛擬機內熱頁的監(jiān)測和計算方法。
以下將結合附圖對本發(fā)明的構思、具體結構及產生的技術效果作進一步說明,以充分地了解本發(fā)明的目的、特征和效果。
附圖說明
圖1是本發(fā)明的一個較佳實施例的非一致性I/O訪問架構示意圖;
圖2是本發(fā)明的一個較佳實施例的虛擬化性能監(jiān)控器構架示意圖;
圖3是本發(fā)明的一個較佳實施例的性能監(jiān)控器具體實現(xiàn)示意圖。
具體實施方式
下面結合附圖對本發(fā)明所述的性能監(jiān)控器的具體實施方案進行較為詳細的闡述和介紹。本發(fā)明所述的性能監(jiān)控器主要包括以下三個模塊:
如圖2所示,基于PMU的主機性能監(jiān)控模塊主要對內存負載和CPU負載進行監(jiān)控,來獲取主機的硬件信息,在計數(shù)模式中pmu的運行對于系統(tǒng)性能的開銷非常小。利用linux提供的perf_event接口,對硬件信息進行采集,使用PERF_TYPE_HARDWARE的不同類型的紀錄,對每個虛擬機的VCPU進行紀錄和分析,通過計算緩存未命中的次數(shù)以及緩存命中次數(shù)計算出緩存命中率。
同時通過在宿主機中/proc/stat中監(jiān)測宿主機的運行情況進行計算,通過整個系統(tǒng)的時間和各線程的運行時間,周期性的計算每個線程的運行時間,獲得CPU的利用率。CPU利用率=100%*(user_time+nice_time+system_time)/(user_time+nice_time+system_time+idle_time)。內存使用率需要從/proc/meminfo文件中提取兩個數(shù)據(jù),當前內存的使用量以及內存總量。內存使用率=100%*(c_mem/u_mem)。
虛擬機IO性能監(jiān)控模塊主要用于虛擬機IO請求情況監(jiān)測,如圖3所示,主要分為以下三個步驟:
第一步:完成對機器的I/O請求進行的監(jiān)控。在主機中,通過獲得網卡收到中斷請求的次數(shù),來獲取IO請求操作的數(shù)量。通過讀取/proc/interrupts中網卡中斷的信息,獲取不同CPU收到的網卡IO中斷次數(shù)。
第二步:將虛擬機擺放在不同的NUMA節(jié)點,綁定在不同的物理CPU上。在虛擬機中跑不同的應用,通過在虛擬機中讀取網卡中斷信息,查看虛擬機中IO請求數(shù)量。
第三步:通過進行對比主機中和不同虛擬機中IO請求情況,來判斷虛擬機擺放在不同節(jié)點上(綁定在不同CPU上)的IO請求情況。
第四步:確定IO密集型操作的虛擬機。
虛擬機熱頁監(jiān)控模塊:
Linux進程中內存頁使用情況可以被進程監(jiān)測工具進行檢測,我們基于perf進行進程監(jiān)測模塊的開發(fā),如圖3所示,主要分如下幾個步驟:
第一步:通過perf獲取虛擬機中的進程頁的使用情況,如果正在使用,則記為當時的“熱”,每隔固定時間讀取虛擬機內存頁使用情況。
第二步:維護一個所有頁狀態(tài)向量P(P1,P2,P3…Pn),在每個檢測的瞬時如果內存頁正在使用,則置1,如果內存頁沒有使用,則置0。
第三步:對隔t時間進行一次采樣,每一個內存頁維護一個m維FIFO隊列,記錄每個瞬時某個確定頁Pi的頁面使用情況Pi(Pi1,Pi2,Pi3…Pim)。
第四步:經過m次采樣,形成一個內存頁使用情況的矩陣。每個頁面Pi在j時間點是否被使用的狀態(tài)記為Pij。
第五步:計算每個頁面當前的“熱度”,通過給定不同權值W(W1,W2,W3…Wm)對頁面熱度進行計算,第i個頁面的熱度Wi=Pi1*Wi1,Pi2*Wi2,Pi3*Wi3…Pim*Wim。
第六步:比較每個頁面的“熱度”,如果最熱頁的熱度大于兩倍次熱頁,則稱當前頁面為“熱頁”,通知系統(tǒng),發(fā)現(xiàn)“熱頁”。
以上詳細描述了本發(fā)明的較佳具體實施例。應當理解,本領域的普通技術無需創(chuàng)造性勞動就可以根據(jù)本發(fā)明的構思作出諸多修改和變化。因此,凡本技術領域中技術人員依本發(fā)明的構思在現(xiàn)有技術的基礎上通過邏輯分析、推理或者有限的實驗可以得到的技術方案,皆應在由權利要求書所確定的保護范圍內。