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