專利名稱:一種基于多核平臺虛擬機的進程遷移跟蹤方法
技術領域:
本發(fā)明涉及一種基于虛擬機的進程遷移的跟蹤方法,特別是涉及一種基于多核平臺的虛擬機客戶操作系統(tǒng)中進程遷移的跟蹤方法。
背景技術:
隨著硬件技術的進步,現(xiàn)今多核處理器己經越來越流行,價格也越來越便宜。作為世界上最主要的兩大處理器生產商,Intel和AMD分別發(fā)布了面向普通用戶的4核處理器。同時,虛擬化作為一個廣義的概念,描述了一種對于計算機資源的抽象,它可以理解為一種框架或者理論將計算機資源分割成為多個可以獨立執(zhí)行的計算環(huán)境,它們在一臺物理服務器硬件上通過虛擬機監(jiān)視器(Virtual Machines Monitor -VMM)或者虛擬環(huán)境(Virtual Environments - VEs)被劃分和創(chuàng)建。但是,多核處理器和虛擬化技術都有它們天生的弱點,現(xiàn)在很少有研究關注將這兩者結合的主題,可是實際上這種方法能夠很好的發(fā)揮它們各自的優(yōu)勢并抵消各自的缺陷。將二者結合并創(chuàng)建一種全新的基于多核的虛擬機結構,并將虛擬機監(jiān)視器的一些特定功能指定給特定的內核,這種結構也考慮將運行在客戶操作系統(tǒng)中的進程分類并將它們綁定在對應的物理內核上,用這些方法以期望獲得更高的性能。為了驗證這樣的期望以及綁定機制的有效性,我們需要一種方法來獲取并監(jiān)控客戶操作系統(tǒng)中的進程和處理器物理內核的映射關系,用這些信息來反映客戶操作系統(tǒng)的進程在處理器內核上的遷移過程。我們提出了這樣一種方法,它的實現(xiàn)是通過客戶操作系統(tǒng)的內核和虛擬機監(jiān)視器的合作來完成。
目前有一些相關的工作,它們都用來監(jiān)控系統(tǒng)的狀態(tài)。同時在Linux操作系統(tǒng)中,根目錄下的/proc文件夾也可以提供很多有用的文件來反映系統(tǒng)運行的實時信息。Hannu和Lauri共同開發(fā)的工具Torsmo可以顯示處理器運行和休眠的狀況,和它類似的工具還有conky。 sysstat (http:〃pagesperso-orange.fr)可以獲取處理器的全面信息,例如全局信息,每一個內核的信息并支持虛擬化技術。Hisham Muhammad的團隊開發(fā)了工具htop,類似于Linux的命令top,它是一種交互式的進程査看工具。但是,這些工具都不能關注到如何反映進程和它運行所在的處理器內核的關系,監(jiān)視進程在處理器內核上的遷移過程,更不用說跨越虛擬機監(jiān)視器這一層次去反映客戶操作系統(tǒng)中的進程和處理器物理內核之間的映射關系和遷移過程了。我們的工作卻更關注于這些方面,以期能完整地反應和監(jiān)視跨越虛擬機管理器的進程和處理器的對應關系。
發(fā)明內容
本發(fā)明以跟蹤進程遷移為目標,通過兩次映射,跨越虛擬機監(jiān)視器這一層次達到監(jiān)控客戶操作系統(tǒng)中的進程和物理處理器內核之間的關系,跟蹤客戶操作系統(tǒng)的進程在物理處理器內核上遷移的過程。具體包括
1. 在客戶操作系統(tǒng)中找到控制表,從中得到進程表的入口。遍歷這個進程表,找到表示每個進程的運行時環(huán)境的進程映像并從中提取出與處理器和進程調度結果相關的信息。
2. 從客戶操作系統(tǒng)內核開始,通過通信機制將每個進程的與虛擬處理器編號對應關系的信息傳遞到虛擬機監(jiān)視器中。
3. 在虛擬機監(jiān)視器中,獲取虛擬處理器編號和物理處理器內核編號的映射關系,并將客戶操作系統(tǒng)的進
程和虛擬處理器的對應關系連接,即可以將客戶操作系統(tǒng)中的進程對應到物理處理器內核上。
4. 重復這個過程,獲取每個時刻客戶操作系統(tǒng)進程和物理處理器內核對應的關系,即可以達到跟蹤客戶
操作系統(tǒng)的進程在物理處理器內核上遷移過程的目的。
與現(xiàn)有技術相比,本發(fā)明的創(chuàng)新之處在于跨越虛擬機監(jiān)視器這一層,將客戶操作系統(tǒng)中的進程映射到物理處理器內核上。具體體現(xiàn)在-
1. 不僅僅關注客戶操作系統(tǒng)和虛擬處理器或虛擬處理器和物理處理器內核的對應關系和遷移過程,而是溝通虛擬機監(jiān)視器兩側的客戶操作系統(tǒng)的進程和物理處理器內核,找到它們的對應關系,跨越虛擬機監(jiān)視器這一層次跟蹤進程在物理處理器內核之間的遷移。
2. 通過該方法,可以量化的評價虛擬機監(jiān)視器調度客戶操作系統(tǒng)的進程和虛擬處理器的結果,顯示虛擬機監(jiān)視器對物理硬件資源的利用率的情況,從一個側面驗證虛擬機監(jiān)視器的性能和表現(xiàn)。
圖1處理器映射的系統(tǒng)結構圖2進程映像
圖3操作系統(tǒng)中控制表和進程表的一般結構圖4客戶操作系統(tǒng)和虛擬機監(jiān)視器之間的交互圖5 Xen Hypervisor中的結構體cpu—info
具體實施例方式
本發(fā)明的實現(xiàn)在Linux操作系統(tǒng)和開源虛擬機監(jiān)視器Xen Hypervisor中進行,Xen Hypervisor中的客戶操作系統(tǒng)同樣為Linux。參閱圖1,完成整個跟蹤進程遷移的過程需要三個步驟,首先,從作為客戶操作系統(tǒng)的Linux操作系統(tǒng)中獲取進程和虛擬處理器之間對應關系的信息,接著,在客戶操作系統(tǒng)Linux和虛擬機監(jiān)視器Xen Hypervisor之間建立一條事件通道,將進程和虛擬處理器對應關系的信息從客戶操作系統(tǒng)Linux發(fā)送到虛擬機監(jiān)視器Xen Hypervisor,最后,在虛擬機監(jiān)視器Xen Hypervisor中,獲取虛擬處理器vCPU和物理處理器內核CPU的對應關系,再將客戶操作系統(tǒng)Linux中的進程和虛擬處理器vCPU的對應關系與其連接映射,得到客戶操作系統(tǒng)Linux中的進程和物理處理器內核CPU的對應關系,重復這個過程,將連續(xù)獲得每個時刻的對應信息,即跨越了虛擬機監(jiān)視器Xen Hypervisor這一層次,使客戶操作系統(tǒng)和物理處理器內核間進行了關聯(lián),達到跟蹤客戶操作系統(tǒng)的進程在物理處理器內核之間遷移過程的目的。
獲取進程和虛擬處理器vCPU對應關系的過程在客戶操作系統(tǒng)Linux中進行。在任何操作系統(tǒng)中,進程是程序的實例,它包括一系列程序指令。在組成上,進程可以看成一些元素集合的入口。這些元素包含進程號、進程狀態(tài)、進程優(yōu)先級、程序計數(shù)器、主存指針、上下文環(huán)境和I/0信息等等。這些信息唯一標識一個進程,為操作系統(tǒng)控制進程提供區(qū)分的依據(jù)。操作系統(tǒng)需要掌握進程的情況和系統(tǒng)資源的分配情況。一個進程必須至少包含一系列可執(zhí)行的程序和相關聯(lián)的數(shù)據(jù),進程也需要一些必要的存儲器空間來保存這些程序和數(shù)據(jù)。同時,進程還需要一塊存儲器空間作為棧來跟蹤過程的調用,最后,進程還有一系列信息為操作系統(tǒng)控制所用。在實現(xiàn)上,操作系統(tǒng)將這些控制信息包含在一個數(shù)據(jù)結構中,稱作進程控制塊(Process Control Block -PCB),它隨著進程的創(chuàng)建被創(chuàng)建。程序、數(shù)據(jù)、棧和PCB的整體稱為進程映像(ProcessImage),進程映像的結構參閱圖2。為了管理進程映像,操作系統(tǒng)通常將它們放在一個隊列結構的進程表中。進程映象是進程的運行時環(huán)境,隨著進程的運行和調度,它的屬性會改變,新的運行時環(huán)境也就產生了。
現(xiàn)代操作系統(tǒng)中通用的方法是維護一個控制表來存放主存、設備、文件和進程信息。從控制表中的入口開始,操作系統(tǒng)就可以得到進程表在存儲器中的位置。為了從客戶操作系統(tǒng)的內核中得到進程的運行時信息并從其中提取關于進程調度和處理器分配的信息,需要找到操作系統(tǒng)中控制表,從中得到進程表的入口,遍歷這個表,找到每個進程的運行時環(huán)境并提取出其中與處理器相關聯(lián)的信息。在大多數(shù)操作系統(tǒng)中,進程控制塊包含了很多重要的信息,基本上可以分為三類,1)進程標識信息;2)處理器狀態(tài)信息;3)進程控制信息。經分析, 一個進程運行所在的處理器內核編號的信息可以在后兩類信息中找到。在Linux操作系統(tǒng)的內核源代碼中,這樣的信息存放在結構體threadjnfo中的cpu字段中。在其他操作系統(tǒng)中,這些信息可能以其他形式存在,這和該操作系統(tǒng)的具體實現(xiàn)相關?,F(xiàn)代操作系統(tǒng)中控制表和進程表的一般結構參閱圖3。
為了實現(xiàn)這一目的,需要在客戶操作系統(tǒng)Linux中編寫一個內核模塊,這個模塊的功能是找到并且遍歷系統(tǒng)當前的進程列表并提取每個進程運行時所在的處理器內核編號。編譯后將模塊加載到系統(tǒng)內核,這個模塊會在Linux操作系統(tǒng)的/proc文件夾中注冊一個文件task—cpu并將得到的信息寫入這個文件中。
6遍歷系統(tǒng)當前進程列表可以通過宏for一each一process(p)得到,這個宏需要一個類型為task—struct的參數(shù)P,宏經過替換成為一個for循環(huán),
for (p = &init—task; (p = next—task(p)) != &init—task;)
其中,&init—task為0號進程init的地址,通過遍歷進程鏈表依次得到每個進程的task_struct結構體指針p,每個task_struct結構體保存了進程當前的運行時信息,其中一個thread—info類型的指針stack, stack中保存的是這個task_struct對應的thread—info結構體,通過類型強制轉換訪問stack得到threadjnfo并訪問其中的字段cpu,就可以得到進程當前運行的所在處理器內核的編號。
((struct thread—info氺)(p)->stack)->cpu
同時在客戶操作系統(tǒng)中用Python編寫了一個程序,讀取文件/proc/taslecpu,并將讀到的內容發(fā)送到虛擬機監(jiān)視器所在的domain0, domain0即得到了 domainU的進程和虛擬處理器vCPU對應的關系task—vcpu。
虛擬機監(jiān)視器在初始化的過程中會確定為每一個客戶操作系統(tǒng)分配的虛擬處理器數(shù)量,考慮到性能的問題, 一般分配給客戶操作系統(tǒng)的虛擬處理器數(shù)量應該小于物理處理器內核的數(shù)量。在運行過程中,客戶操作系統(tǒng)會調度虛擬處理器,將進程分配到虛擬處理器上運行。在虛擬機監(jiān)視器內部,它會通過當前的情況動態(tài)的改變虛擬處理器和物理處理器內核的對應關系,這種對應關系在虛擬機監(jiān)視器中建立,每個時刻將這樣的關系和得到的進程和虛擬處理器的對應關系與虛擬處理器和物理處理器內核的對應關系相關聯(lián),得到客戶操作系統(tǒng)中的進程和物理處理器內核編號的對應關系。
獲取虛擬處理器vCPU和物理處理器內核CPU的對應關系,再將客戶操作系統(tǒng)Linux中的進程和虛擬處理器vCPU的對應關系與其連接映射的過程在虛擬機監(jiān)視器Xen Hypervisor中進行。在Xen Hypervisor中,結構體cpu—info體現(xiàn)了關于虛擬處理器與物理處理器內核的對應關系。參閱圖5,可以看出cpu一info包括了當前物理處理器內核的編號和虛擬處理器子結構,而且虛擬處理器的編號存在于vcpu一struct子結構中。通過此數(shù)據(jù)結構我們就可以捕捉到它們之間的對應關系。在虛擬機監(jiān)視器Xen Hypervisor中,可以使用xend接口和hypervisor進行對話得到這個對應關系。xend提供了大多數(shù)Xen管理功能的接口 ,它接收用戶空間的請求,直接和hypervisor內核通信。圖5中顯示的虛擬處理器vCPU編號和物理處理器內核CPU編號的對應關系可以通過接口 server, xend. domain. getVCPUInfo得到,只要指定需要査詢的客戶操作系統(tǒng)domainU,將它作為參數(shù)傳入server, xend. domain. getVCPUInfo,或者通過Python語言的方法,(func, target),將server, xend. domain. getVCPUInfo禾口 doraainU當做參數(shù)func禾卩target的值傳遞給map()方法,就可以得到關于這個domainU的虛擬處理器的所有信息,這些信息通過Python列表的方式表示,以[key, value]的形式組織。其中以number和CPU為key對應的value值即為這個domainU的虛擬處理器和物理處理器內核的編號。通過Python語言提供的接口,即可以從列表中獲得對應的信息,得到當前domainU每一個虛擬處理器vCPU和物理處理器內核CPU之間的對應列表vcpu—list。
7將客戶操作系統(tǒng)Linux進程和虛擬處理器vCPU對應關系的信息從客戶操作系統(tǒng)Linux發(fā)送到虛擬機監(jiān)視器Xen Hypervisor的過程通過客戶操作系統(tǒng)Linux和虛擬機監(jiān)視器Xen Hypervisor合作完成。虛擬機監(jiān)視器Xen Hypervisor建立一條事件通道,和客戶操作系統(tǒng)Linux相連通,開始虛擬機監(jiān)視器XenHypervisor和客戶操作系統(tǒng)Linux都處于監(jiān)聽狀態(tài)。然后虛擬機監(jiān)視器Xen Hypervisor轉為活躍狀態(tài),發(fā)送請求向客戶操作系統(tǒng)Linux,此后轉回監(jiān)聽狀態(tài)。客戶操作系統(tǒng)Linux接收到請求,轉為活躍狀態(tài),通過從內核模塊獲取客戶操作系統(tǒng)Linux中的進程和虛擬處理器vCPU之間的對應關系并保存。完成后客戶操作系統(tǒng)Linux回應虛擬機監(jiān)視器Xen Hypervisor其需要的信息已經得到,并轉回監(jiān)聽狀態(tài)。虛擬機監(jiān)視器Xen Hypervisor收到客戶操作系統(tǒng)Linux的回應信息,轉為活躍狀態(tài),得到客戶操作系統(tǒng)Linux的進程和虛擬處理器vCPU之間的對應關系task—vcpu并轉回監(jiān)聽狀態(tài)。完整的通信過程參閱圖4。
在實現(xiàn)中,Xen Hypervisor和客戶操作系統(tǒng)Linux之間的通信由一條socket連接完成。在XenHypervisor中,所有高層的請求都被翻譯成底層的事件并通過事件通道傳送,所以這些socket通信在底層也通過事件機制完成。當Xen Hypervisor首先向客戶操作系統(tǒng)發(fā)出請求,客戶操作系統(tǒng)得到請求后讀取進程和虛擬處理器對應關系的列表并通過socket連接將信息發(fā)送給Xen Hypervisor, Xen Hypervisor隨后接收這些消息并獲取虛擬處理器和物理處理器內核之間的對應關系,最后進行映射,得到客戶操作系統(tǒng)中的進程和物理處理器內核的對應關系,達到跨越虛擬機監(jiān)視器層次,跟蹤客戶操作系統(tǒng)的進程在物理處理器內核之間遷移的目的。
權利要求
1、一種基于多核平臺的虛擬機的進程遷移跟蹤方法,包括以下步驟(1)從客戶操作系統(tǒng)的內核中得到進程的運行時信息并從其中提取關于進程調度和處理器分配的信息;(2)將關于進程調度和處理器分配的信息從客戶操作系統(tǒng)的內核中傳遞到虛擬機監(jiān)視器中;(3)通過虛擬機監(jiān)視器,得到客戶操作系統(tǒng)中虛擬處理器和物理硬件上處理器內核編號的對應關系;(4)在虛擬機監(jiān)視器中,將進程調度和處理器分配的信息與虛擬處理器和物理硬件上處理器內核對應關系的信息相關聯(lián),得到客戶操作系統(tǒng)中的進程和物理處理器內核編號的對應關系,監(jiān)視客戶操作系統(tǒng)中的進程在物理處理器內核間的遷移;其特征在于所述的從客戶操作系統(tǒng)的內核中得到進程的運行時信息并從其中提取關于進程調度和處理器分配的信息的步驟包括1)找到操作系統(tǒng)中控制表,從中得到進程表的入口;2)遍歷該表,找到每個進程的運行時環(huán)境并提取出其中與處理器相關聯(lián)的信息;所述的將關于進程調度和處理器分配的信息從客戶操作系統(tǒng)的內核中傳遞到虛擬機監(jiān)視器中的步驟包括1)虛擬機監(jiān)視器首先建立一條事件通道,然后向客戶操作系統(tǒng)發(fā)送一個請求;2)客戶操作系統(tǒng)接收到這個請求,獲取進程和虛擬處理器之間的關系,將它們保存在主存或者文件中;3)客戶操作系統(tǒng)建立一條事件通道并響應虛擬機監(jiān)視器,告知其信息已經得到;4)虛擬機監(jiān)視器得到響應,得到來自客戶操作系統(tǒng)的信息;所述的通過虛擬機監(jiān)視器,得到客戶操作系統(tǒng)中虛擬處理器和物理硬件上處理器內核編號的對應關系的步驟包括1)客戶空間的進程庫將客戶進程對應到內核進程;2)客戶操作系統(tǒng)內核將內核進程對應到虛擬處理器;3)虛擬機監(jiān)視器將虛擬處理器指定到物理處理器內核。所述的在虛擬機監(jiān)視器中,將進程調度和處理器分配的信息與虛擬處理器和物理硬件上處理器內核對應關系的信息相關聯(lián),得到客戶操作系統(tǒng)中的進程和物理處理器內核編號的關系,監(jiān)視客戶操作系統(tǒng)中的進程在物理處理器內核間遷移的步驟包括虛擬機監(jiān)視器將得到的客戶操作系統(tǒng)中的進程和虛擬處理器內核的關系與得到的虛擬處理器和物理處理器內核的對應關系相關聯(lián),得到客戶操作系統(tǒng)中的進程和物理處理器內核編號的關系,監(jiān)視客戶操作系統(tǒng)中的進程在物理處理器內核間的遷移。
2、 根據(jù)權利要求1所述的方法,其特征在于從客戶操作系統(tǒng)的內核中得到進程的運行時信息并從其中提取關于進程調度和處理器分配的信息步驟的步驟1)中,進程看成一些元素集合的入口,這些元素包含進程號、進程狀態(tài)、進程優(yōu)先級、程序計數(shù)器、主存指針、上下文環(huán)境和I/0信息,這些信息唯一標識一個進程。
3、 根據(jù)權利要求1和2所述的方法,其特征在于將關于進程調度和處理器分配的信息從客戶操作系統(tǒng)的內核中傳遞到虛擬機監(jiān)視器中步驟的步驟1)中,虛擬機監(jiān)視器建立一條事件通道,和客戶操作系統(tǒng)相連通,此時虛擬機監(jiān)視器處于監(jiān)聽狀態(tài),虛擬機監(jiān)視器轉為活躍狀態(tài)并向客戶操作系統(tǒng)發(fā)送請求,此后轉回監(jiān)聽狀態(tài)。
4、 根據(jù)權利要求1-3所述的方法,其特征在于將關于進程調度和處理器分配的信息從客戶操作系統(tǒng)的內核中傳遞到虛擬機監(jiān)視器中步驟的步驟2)中,客戶操作系統(tǒng)在監(jiān)聽狀態(tài)接收到請求,轉為活躍狀態(tài),獲取進程和虛擬處理器之間的關系,將它們保存在主存或者文件中。
5、 根據(jù)權利要求1-4所述的方法,其特征在于將關于進程調度和處理器分配的信息從客戶操作系統(tǒng)的內核中傳遞到虛擬機監(jiān)視器中步驟的步驟3)中,客戶操作系統(tǒng)轉為活躍狀態(tài),回應虛擬機監(jiān)視器,虛擬機監(jiān)視器收到回應后,客戶操作系統(tǒng)轉回監(jiān)聽狀態(tài)。
6、 根據(jù)權利要求1所述的方法,其特征在于將關于進程調度和處理器分配的信息從客戶操作系統(tǒng)的內核中傳遞到虛擬機監(jiān)視器中步驟的步驟4)中,虛擬機監(jiān)視器收到客戶操作系統(tǒng)的回應信息,轉為活躍狀態(tài),接受并得到客戶操作系統(tǒng)的進程和虛擬處理器之間的對應關系,此后轉為監(jiān)聽狀態(tài)。
7、 根據(jù)權利要求1所述的方法,其特征在于通過虛擬機監(jiān)視器,得到客戶操作系統(tǒng)中虛擬處理器和物理硬件上處理器內核編號的關系步驟的步驟1)中,虛擬機監(jiān)視器在初始化的過程中確定為每一個客戶操作系統(tǒng)分配的虛擬處理器數(shù)量,分配給客戶操作系統(tǒng)的虛擬處理器數(shù)量小于物理處理器內核的數(shù)量。
8、 根據(jù)權利要求1所述的方法,其特征在于通過虛擬機監(jiān)視器,得到客戶操作系統(tǒng)中虛擬處理器和物理硬件上處理器內核編號的關系步驟的步驟2)中,客戶操作系統(tǒng)調度虛擬處理器,將進程分配到虛擬處理器上運行。
9、 根據(jù)權利要求1所述的方法,其特征在于通過虛擬機監(jiān)視器,得到客戶操作系統(tǒng)中虛擬處理器和物理硬件上處理器內核編號的關系步驟的步驟3)中,虛擬機監(jiān)視器通過當前的情況動態(tài)的改變虛擬處理器和物理處理器內核的對應關系,這種對應關系在虛擬機監(jiān)視器中建立。
全文摘要
本發(fā)明涉及一種進程遷移的跟蹤方法,特別是涉及一種基于多核平臺的虛擬機客戶操作系統(tǒng)中進程遷移的跟蹤方法。本發(fā)明以跟蹤進程遷移為目標,通過兩次映射,跨越虛擬機監(jiān)視器這一層次達到監(jiān)控客戶操作系統(tǒng)中的進程和物理處理器內核之間的關系。首先在客戶操作系統(tǒng)中找到每個進程的運行時環(huán)境并提取其中與處理器相關聯(lián)的信息。然后從客戶操作系統(tǒng)內核開始,通過通信機制將每個進程與虛擬處理器編號的關系傳遞到虛擬機監(jiān)視器中。最后在虛擬機監(jiān)視器中,得到虛擬處理器編號和物理處理器內核編號的映射關系,即可將客戶操作系統(tǒng)中的進程對應到物理處理器內核上。重復該過程,將連續(xù)獲取每個時刻的對應信息,即跨越虛擬機監(jiān)視器這一層次,使客戶操作系統(tǒng)和物理處理器內核進行關聯(lián),達到跟蹤客戶操作系統(tǒng)的進程在物理處理器內核之間遷移過程的目的。
文檔編號G06F9/48GK101561769SQ20091008482
公開日2009年10月21日 申請日期2009年5月25日 優(yōu)先權日2009年5月25日
發(fā)明者良 張, 白躍彬, 鑫 魏 申請人:北京航空航天大學