本發(fā)明實(shí)施例涉及虛擬化、云計(jì)算領(lǐng)域,特別是涉及一種虛擬機(jī)遷移方法及裝置。
背景技術(shù):
在云計(jì)算技術(shù)浪潮的推動(dòng)下,虛擬化技術(shù)不斷發(fā)展。虛擬化是一種資源管理技術(shù),是將計(jì)算機(jī)的各種實(shí)體資源,如服務(wù)器、網(wǎng)絡(luò)、內(nèi)存及存儲(chǔ)等,予以抽象、轉(zhuǎn)換后呈現(xiàn)出來(lái),打破實(shí)體結(jié)構(gòu)間不可切割的障礙,使用戶可以比原本的組態(tài)更好的方式來(lái)應(yīng)用這些資源,根據(jù)不同需求進(jìn)行重新規(guī)劃以達(dá)到最大利用率,實(shí)現(xiàn)各種資源的自動(dòng)部署、動(dòng)態(tài)擴(kuò)展、按需分配,提高it資源利用率。
虛擬化技術(shù)催生了虛擬機(jī),即通過(guò)軟件模擬的、具有完整硬件系統(tǒng)功能的、運(yùn)行在一個(gè)完全隔離環(huán)境中的完整計(jì)算機(jī)系統(tǒng)。當(dāng)硬件發(fā)生故障或需要維護(hù)時(shí),正在運(yùn)行的服務(wù)需要被遷移到其他的平臺(tái)上繼續(xù)運(yùn)行,并且這一過(guò)程不能對(duì)虛擬機(jī)所承載的應(yīng)用服務(wù)產(chǎn)生影響,這就涉及到虛擬機(jī)遷移技術(shù),虛擬機(jī)遷移技術(shù)能使虛擬機(jī)在物理主機(jī)之間進(jìn)行快速的在線遷移,并且保持虛擬機(jī)在運(yùn)行過(guò)程中不間斷運(yùn)行,有效的改善資源分配。
由于不同的物理主機(jī)的硬件配置不同,尤其是cpu個(gè)數(shù)與核數(shù)不盡相同,虛擬機(jī)在遷移時(shí)需要與原綁定的主機(jī)進(jìn)行解除綁定關(guān)系,但是由于虛擬機(jī)中的配置文件有時(shí)無(wú)法立即更新,導(dǎo)致虛擬機(jī)跨主機(jī)遷移失敗,嚴(yán)重的限制了虛擬機(jī)的應(yīng)用場(chǎng)景及實(shí)用性。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例的目的是提供一種虛擬機(jī)遷移方法及裝置,提高了虛擬機(jī)跨主機(jī)遷移的成功率,有利于提高虛擬化產(chǎn)品的競(jìng)爭(zhēng)力。
為解決上述技術(shù)問(wèn)題,本發(fā)明實(shí)施例提供以下技術(shù)方案:
本發(fā)明實(shí)施例一方面提供了一種虛擬機(jī)遷移方法,包括:
s101:獲取當(dāng)前主機(jī)cpu的個(gè)數(shù);
s102:獲取待遷移虛擬機(jī)的vcpu綁定字節(jié)的長(zhǎng)度,并判斷與所述主機(jī)的各個(gè)cpu字節(jié)長(zhǎng)度是否相同;
s103:當(dāng)判定與所述cpu字節(jié)長(zhǎng)度不相同時(shí),執(zhí)行s106;反之,將所述vcpu的比特圖與對(duì)應(yīng)綁定的cpu的比特圖逐位進(jìn)行與運(yùn)算;
s104:當(dāng)運(yùn)算結(jié)果為0時(shí),執(zhí)行s106;反之,獲取已綁定的vcpu的總數(shù),當(dāng)所述總數(shù)為1時(shí),將所述總數(shù)設(shè)置為0,并將vcpu綁定比特位的數(shù)據(jù)結(jié)構(gòu)置空,執(zhí)行s106;
s105:當(dāng)所述總數(shù)不為1時(shí),按照預(yù)設(shè)的算法依次對(duì)每個(gè)vcpu綁定比特位的數(shù)據(jù)結(jié)構(gòu)進(jìn)行處理;
s106:將所述虛擬機(jī)的xml中存儲(chǔ)的vcpu綁定比特位的數(shù)據(jù)結(jié)構(gòu)及已綁定的vcpu的總數(shù)進(jìn)行更新。
可選的,所述按照預(yù)設(shè)的算法依次對(duì)每個(gè)vcpu綁定比特位的數(shù)據(jù)結(jié)構(gòu)進(jìn)行處理包括:
依次獲取保存vcpu綁定比特位的數(shù)據(jù)結(jié)構(gòu)的數(shù)組中的元素;
將各個(gè)已綁定的vcpu的標(biāo)識(shí)號(hào)與待綁定vcpu的標(biāo)識(shí)號(hào)進(jìn)行比較,當(dāng)所述vcpu的標(biāo)識(shí)號(hào)與所述待綁定vcpu的標(biāo)識(shí)號(hào)相同時(shí),則將該vcpu綁定比特位的數(shù)據(jù)結(jié)構(gòu)賦值為所述數(shù)組中的最后一個(gè)元素,相應(yīng)的,將所述數(shù)組中的最后一個(gè)元素置空,數(shù)組的元素個(gè)數(shù)減一。
可選的,所述獲取當(dāng)前主機(jī)cpu的個(gè)數(shù)為:
獲取當(dāng)前主機(jī)的numa拓?fù)湫畔?,根?jù)所述numa拓?fù)湫畔⒋_定所述主機(jī)cpu的個(gè)數(shù)。
可選的,還包括:
s107:發(fā)送所述待遷移虛擬機(jī)進(jìn)行遷移的指令,并獲取所述待遷移虛擬機(jī)的遷移信息;
s108:根據(jù)所述遷移信息判斷所述待遷移虛擬機(jī)是否遷移成功;
s109:當(dāng)判定所述待遷移虛擬機(jī)遷移失敗時(shí),向用戶進(jìn)行發(fā)送遷移失敗的反饋信息。
可選的,在所述當(dāng)判定所述待遷移虛擬機(jī)遷移失敗時(shí)之后,還包括:
進(jìn)行報(bào)警提示。
本發(fā)明實(shí)施例另一方面提供了一種虛擬機(jī)遷移裝置,包括:
獲取數(shù)據(jù)模塊,用于獲取當(dāng)前主機(jī)cpu的個(gè)數(shù)及待遷移虛擬機(jī)的vcpu綁定字節(jié)的長(zhǎng)度;
判斷模塊,用于判斷與所述主機(jī)的各個(gè)cpu字節(jié)長(zhǎng)度是否相同,當(dāng)判定與所述cpu字節(jié)長(zhǎng)度不相同時(shí),將所述虛擬機(jī)的xml中存儲(chǔ)的vcpu綁定比特位的數(shù)據(jù)結(jié)構(gòu)及已綁定的vcpu的總數(shù)進(jìn)行更新;反之,將所述vcpu的比特圖與對(duì)應(yīng)綁定的cpu的比特圖逐位進(jìn)行與運(yùn)算;
數(shù)據(jù)處理模塊,用于當(dāng)運(yùn)算結(jié)果為1時(shí),獲取已綁定的vcpu的總數(shù),當(dāng)所述總數(shù)為1時(shí),將所述總數(shù)設(shè)置為0,并將vcpu綁定比特位的數(shù)據(jù)結(jié)構(gòu)置空;當(dāng)所述總數(shù)不為1時(shí),按照預(yù)設(shè)的算法依次對(duì)每個(gè)vcpu綁定比特位的數(shù)據(jù)結(jié)構(gòu)進(jìn)行處理;
更新模塊,用于將所述虛擬機(jī)的xml中存儲(chǔ)的vcpu綁定比特位的數(shù)據(jù)結(jié)構(gòu)及已綁定的vcpu的總數(shù)進(jìn)行更新。
可選的,所述數(shù)據(jù)處理模塊為依次獲取保存vcpu綁定比特位的數(shù)據(jù)結(jié)構(gòu)的數(shù)組中的元素;將各個(gè)已綁定的vcpu的標(biāo)識(shí)號(hào)與待綁定vcpu的標(biāo)識(shí)號(hào)進(jìn)行比較,當(dāng)所述vcpu的標(biāo)識(shí)號(hào)與所述待綁定vcpu的標(biāo)識(shí)號(hào)相同時(shí),則將該vcpu綁定比特位的數(shù)據(jù)結(jié)構(gòu)賦值為所述數(shù)組中的最后一個(gè)元素,相應(yīng)的,將所述數(shù)組中的最后一個(gè)元素置空,數(shù)組的元素個(gè)數(shù)減一的模塊。
可選的,所述獲取數(shù)據(jù)模塊為獲取當(dāng)前主機(jī)的numa拓?fù)湫畔?,根?jù)所述numa拓?fù)湫畔⒋_定所述主機(jī)cpu的個(gè)數(shù)的模塊。
可選的,還包括:
發(fā)送模塊,用于發(fā)送所述待遷移虛擬機(jī)進(jìn)行遷移的指令,并獲取所述待遷移虛擬機(jī)的遷移信息;根據(jù)所述遷移信息判斷所述待遷移虛擬機(jī)是否遷移成功;當(dāng)判定所述待遷移虛擬機(jī)遷移失敗時(shí),向用戶進(jìn)行發(fā)送遷移失敗的反饋信息。
可選的,還包括:
報(bào)警模塊,用于當(dāng)判定所述待遷移虛擬機(jī)遷移失敗時(shí),進(jìn)行報(bào)警提示。
本發(fā)明實(shí)施例提供了一種虛擬機(jī)遷移方法,首先將待遷移虛擬機(jī)的vcpu綁定字節(jié)的長(zhǎng)度與當(dāng)前主機(jī)的各個(gè)cpu字節(jié)長(zhǎng)度進(jìn)行比較,以判斷vcpu的綁定情況;當(dāng)vcpu綁定字節(jié)的長(zhǎng)度與cpu字節(jié)長(zhǎng)度相同時(shí),逐位計(jì)算vcpu的比特圖與對(duì)應(yīng)綁定的cpu的比特圖;在運(yùn)算結(jié)果為1時(shí),當(dāng)已綁定的vcpu的總數(shù)為1時(shí),將該總數(shù)設(shè)置為0,并將vcpu綁定比特位的數(shù)據(jù)結(jié)構(gòu)置空;而總數(shù)不為1時(shí),則按照預(yù)設(shè)的算法依次對(duì)每個(gè)vcpu綁定比特位的數(shù)據(jù)結(jié)構(gòu)進(jìn)行處理;最后將所述虛擬機(jī)的xml中存儲(chǔ)的vcpu綁定比特位的數(shù)據(jù)結(jié)構(gòu)及已綁定的vcpu的總數(shù)進(jìn)行更新。
本申請(qǐng)?zhí)峁┑募夹g(shù)方案的優(yōu)點(diǎn)在于,通過(guò)在虛擬機(jī)進(jìn)行遷移之前,通過(guò)修改libvirt源碼來(lái)刪除虛擬機(jī)中xml中指定的vcpu元素,實(shí)現(xiàn)了解除vcpu與之前主機(jī)的cpu綁定,使得libvirt和qemu進(jìn)程中保存的虛擬機(jī)xml數(shù)據(jù)的一致性。完善了vcpu綁定功能,提高了虛擬機(jī)的跨主機(jī)遷移的成功率,有效的增加虛擬機(jī)遷移功能的使用場(chǎng)景,減少遷移限制,同時(shí)由于這種方式只涉及到軟件部分的修改,方便后期虛擬化產(chǎn)品的升級(jí)與維護(hù),有利于提高虛擬化產(chǎn)品的競(jìng)爭(zhēng)力
此外,本發(fā)明實(shí)施例還針對(duì)虛擬機(jī)遷移方法提供了相應(yīng)的實(shí)現(xiàn)裝置,進(jìn)一步使得所述方法更具有實(shí)用性,所述裝置具有相應(yīng)的優(yōu)點(diǎn)。
附圖說(shuō)明
為了更清楚的說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單的介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實(shí)施例提供的一種虛擬機(jī)遷移方法的流程示意圖;
圖2為本發(fā)明實(shí)施例提供的另一種虛擬機(jī)遷移方法的流程示意圖;
圖3為本發(fā)明實(shí)施例提供的虛擬機(jī)遷移裝置的一種具體實(shí)施方式結(jié)構(gòu)圖;
圖4為本發(fā)明實(shí)施例提供的虛擬機(jī)遷移裝置的另一種具體實(shí)施方式結(jié)構(gòu)圖。
具體實(shí)施方式
為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下面結(jié)合附圖和具體實(shí)施方式對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說(shuō)明。顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
本申請(qǐng)的說(shuō)明書和權(quán)利要求書及上述附圖中的術(shù)語(yǔ)“第一”、“第二”、“第三”“第四”等是用于區(qū)別不同的對(duì)象,而不是用于描述特定的順序。此外術(shù)語(yǔ)“包括”和“具有”以及他們?nèi)魏巫冃?,意圖在于覆蓋不排他的包含。例如包含了一系列步驟或單元的過(guò)程、方法、系統(tǒng)、產(chǎn)品或設(shè)備沒(méi)有限定于已列出的步驟或單元,而是可包括沒(méi)有列出的步驟或單元。
本申請(qǐng)的發(fā)明人經(jīng)過(guò)研究發(fā)現(xiàn),在linux系統(tǒng)中,可以用modprobe系統(tǒng)工具去加載kvm(kernel-basedvirtualmachine)模塊,如果用rpm安裝kvm軟件包,系統(tǒng)會(huì)在啟動(dòng)時(shí)自動(dòng)加載模塊。加載了模塊后,才能進(jìn)一步通過(guò)其他工具創(chuàng)建虛擬機(jī)。但僅有kvm模塊是遠(yuǎn)遠(yuǎn)不夠的,由于用戶無(wú)法直接控制內(nèi)核模塊去執(zhí)行任務(wù),還必須有一個(gè)用戶空間的工具??刹捎瞄_源虛擬化軟件qemu作為用戶空間的工具。qemu是一個(gè)強(qiáng)大的虛擬化軟件,它可以虛擬不同的cpu構(gòu)架。比如說(shuō)在x86的cpu上虛擬一個(gè)power的cpu,并利用它編譯出可運(yùn)行在power上的程序。kvm使用了qemu的基于x86的部分,并稍加改造,形成可控制kvm內(nèi)核模塊的用戶空間工具qemu-kvm。
盡管qemu-kvm工具可以創(chuàng)建和管理kvm虛擬機(jī),由于qemu工具效率不高,不易于使用。libvirt是一套提供了多種語(yǔ)言接口的api,為各種虛擬化工具提供一套方便、可靠的編程接口,只需要通過(guò)libvirt提供的函數(shù)連接到kvm宿主機(jī),便可以用同樣的命令控制不同的虛擬機(jī)了。
基于qemu和libvirt創(chuàng)建的vm(virtualmachine,虛擬機(jī)),在運(yùn)行過(guò)程中,可以根據(jù)主機(jī)cpu資源使用情況,將vcpu(virtualcpu,虛擬中央處理器)綁定到主機(jī)指定的cpu上,進(jìn)而提高資源利用率,實(shí)現(xiàn)主機(jī)資源的合理調(diào)度。在進(jìn)行cpu綁定的同時(shí),會(huì)在對(duì)應(yīng)的vm的xml里生成相應(yīng)的元素,顯示vcpu具體綁定到主機(jī)的哪些cpu上。在默認(rèn)情況下,vcpu不會(huì)進(jìn)行綁定,在xml中體現(xiàn)為vcpu綁定到主機(jī)的全部cpu上,此時(shí),vm對(duì)應(yīng)的qemu進(jìn)程會(huì)在主機(jī)的所有cpu上進(jìn)行輪轉(zhuǎn),若將vcpu綁定到主機(jī)的全部cpu上,即是解除綁定。虛擬機(jī)的一個(gè)重要功能是可以實(shí)現(xiàn)主機(jī)之間的遷移,由于不同主機(jī)的硬件配置不同,特別是cpu的個(gè)數(shù)與核數(shù)不盡相同,若想實(shí)現(xiàn)vm的遷移,需在遷移之前解除cpu的綁定。但是原生的libvirt在解除vcpu綁定后,并沒(méi)有消除xml中cpu綁定元素,導(dǎo)致libvirt在傳給qemu進(jìn)程中的參數(shù)中包含vcpu綁定列表,進(jìn)而導(dǎo)致虛擬機(jī)跨主機(jī)遷移失敗,嚴(yán)重限制了虛擬機(jī)的應(yīng)用場(chǎng)景以及實(shí)用性。
鑒于此,本申請(qǐng)?zhí)岢隽艘环N基于libvirt的解除vcpu綁定實(shí)現(xiàn)虛擬機(jī)遷移的方法,通過(guò)修改libvirt源碼來(lái)刪除虛擬機(jī)對(duì)應(yīng)的xml中vcpu元素,來(lái)實(shí)現(xiàn)虛擬機(jī)的遷移。通過(guò)對(duì)libvirt源碼的再次開發(fā),進(jìn)一步完善vcpu綁定的功能,提高虛擬化產(chǎn)品的競(jìng)爭(zhēng)力。
在介紹了本發(fā)明實(shí)施例的技術(shù)方案后,下面詳細(xì)的說(shuō)明本申請(qǐng)的各種非限制性實(shí)施方式。
首先參見(jiàn)圖1,圖1為本發(fā)明實(shí)施例提供的一種虛擬機(jī)遷移方法的流程示意圖,本發(fā)明實(shí)施例可包括以下內(nèi)容:
s101:獲取當(dāng)前主機(jī)cpu的個(gè)數(shù)。
非統(tǒng)一內(nèi)存訪問(wèn)(numa)是一種用于多處理器的電腦記憶體設(shè)計(jì),內(nèi)存訪問(wèn)時(shí)間取決于處理器的內(nèi)存位置。numa通過(guò)提供分離的存儲(chǔ)器給各個(gè)處理器,避免當(dāng)多個(gè)處理器訪問(wèn)同一個(gè)存儲(chǔ)器產(chǎn)生的性能損失。對(duì)于涉及到分散的數(shù)據(jù)的應(yīng)用(在服務(wù)器和類似于服務(wù)器的應(yīng)用中很常見(jiàn)),numa可以通過(guò)一個(gè)共享的存儲(chǔ)器提高性能至n倍,而n大約是處理器(或者分離的存儲(chǔ)器)的個(gè)數(shù)。
故可通過(guò)獲取當(dāng)前主機(jī)的numa拓?fù)湫畔?,根?jù)所述numa拓?fù)湫畔⒋_定主機(jī)cpu的個(gè)數(shù)。
s102:獲取待遷移虛擬機(jī)的vcpu綁定字節(jié)的長(zhǎng)度,并判斷與所述主機(jī)的各個(gè)cpu字節(jié)長(zhǎng)度是否相同;
vcpu虛擬處理器,虛擬機(jī)內(nèi)的cpu,即cpu的虛擬化技術(shù),cpu的虛擬化就是單cpu模擬多cpu并行,允許一個(gè)平臺(tái)同時(shí)運(yùn)行多個(gè)操作系統(tǒng),并且應(yīng)用程序都可以在相互獨(dú)立的空間內(nèi)運(yùn)行而互不影響,從而顯著提高計(jì)算機(jī)的工作效率。
一般每8個(gè)cpu核對(duì)應(yīng)一個(gè)字節(jié),通過(guò)判斷虛擬機(jī)的vcpu綁定字節(jié)的長(zhǎng)度與主機(jī)各個(gè)cpu字節(jié)長(zhǎng)度是否一致,可以得知該vcpu是否綁定cpu,如果二者相等,則證明需要進(jìn)行解除綁定,也就是將vcpu綁定在主機(jī)的所有cpu上。如果都不相等,則證明不需要進(jìn)行解除綁定,即vcpu與主機(jī)各個(gè)cpu均不存在綁定關(guān)系。
s103:當(dāng)判定與所述cpu字節(jié)長(zhǎng)度不相同時(shí),執(zhí)行s106;反之,將所述vcpu的比特圖與對(duì)應(yīng)綁定的cpu的比特圖逐位進(jìn)行與運(yùn)算;
由于虛擬機(jī)上可能存在多個(gè)vcpu,為了區(qū)別每個(gè)不同的vcpu,可給每個(gè)vcpu設(shè)置唯一的標(biāo)識(shí)碼。在確定當(dāng)前虛擬機(jī)的vcpu與主機(jī)的cpu有綁定時(shí),獲取vcpu的標(biāo)識(shí)碼,該vcpu的比特圖以及與該vcpu對(duì)應(yīng)綁定的cpu的比特圖。
比特圖,即位模式,是指二進(jìn)制比特“0”與“1””的組合格式。有n位就有2的n次方種組合。比特是計(jì)算機(jī)領(lǐng)域信息量的度量單位,二進(jìn)制數(shù)的一位所包含的信息就是1比特。
一般將綁定vcpu的cpu的比特圖設(shè)置為1,故可直接將vcpu的比特圖與1進(jìn)行與運(yùn)算。
s104:當(dāng)運(yùn)算結(jié)果為0時(shí),執(zhí)行s106;反之,獲取已綁定的vcpu的總數(shù),并判斷總數(shù)是否為1;
當(dāng)二者與運(yùn)算的結(jié)果為0時(shí),說(shuō)明不是全部綁定,直接進(jìn)行更新xml中的綁定列表即可。由于虛擬機(jī)的vcpu不一定為一個(gè),故綁定的vcpu也不一定為1個(gè),故在與運(yùn)算結(jié)果為1時(shí),需要進(jìn)一步的判斷當(dāng)前虛擬機(jī)綁定vcpu的個(gè)數(shù)。當(dāng)僅僅有一個(gè)時(shí),直接將總數(shù)置0,即設(shè)置當(dāng)前無(wú)綁定的vcpu。
s105:當(dāng)所述總數(shù)為1時(shí),將所述總數(shù)設(shè)置為0,并將vcpu綁定比特位的數(shù)據(jù)結(jié)構(gòu)置空,執(zhí)行s106;
s106:當(dāng)所述總數(shù)不為1時(shí),按照預(yù)設(shè)的算法依次對(duì)每個(gè)vcpu綁定比特位的數(shù)據(jù)結(jié)構(gòu)進(jìn)行處理;
具體的可為:
依次獲取保存vcpu綁定比特位的數(shù)據(jù)結(jié)構(gòu)的數(shù)組中的元素;
將各個(gè)已綁定的vcpu的標(biāo)識(shí)號(hào)與待綁定vcpu的標(biāo)識(shí)號(hào)進(jìn)行比較,當(dāng)所述vcpu的標(biāo)識(shí)號(hào)與所述待綁定vcpu的標(biāo)識(shí)號(hào)相同時(shí),則將該vcpu綁定比特位的數(shù)據(jù)結(jié)構(gòu)賦值為所述數(shù)組中的最后一個(gè)元素,相應(yīng)的,將所述數(shù)組中的最后一個(gè)元素置空,數(shù)組的元素個(gè)數(shù)減一。按照上述處理過(guò)程對(duì)每一個(gè)綁定的vcpu執(zhí)行,直至處理完畢。
s107:將所述虛擬機(jī)的xml中存儲(chǔ)的vcpu綁定比特位的數(shù)據(jù)結(jié)構(gòu)及已綁定的vcpu的總數(shù)進(jìn)行更新。
xml(extensiblemarkuplanguage,可擴(kuò)展標(biāo)記語(yǔ)言),是一種標(biāo)記語(yǔ)言。標(biāo)記指計(jì)算機(jī)所能理解的信息符號(hào),通過(guò)此種標(biāo)記,計(jì)算機(jī)之間可以處理包含各種信息的文章等。xml為一種簡(jiǎn)單的數(shù)據(jù)存儲(chǔ)語(yǔ)言,重在數(shù)據(jù)本身,使用一系列簡(jiǎn)單的標(biāo)記描述數(shù)據(jù),而這些標(biāo)記可以用方便的方式建立。虛擬機(jī)中關(guān)于虛擬機(jī)的所有配置文件存儲(chǔ)在xml中,例如vcpu綁定列表。
將虛擬機(jī)中存儲(chǔ)的xml中的vcpu綁定列表進(jìn)行更新,以使虛擬機(jī)中xml文件中關(guān)于vcpu綁定的情況與實(shí)際綁定情況一致,例如,當(dāng)原生的libvirt在解除vcpu綁定后,并沒(méi)有消除xml中cpu綁定元素,而通過(guò)修改libvirt源碼來(lái)刪除虛擬機(jī)對(duì)應(yīng)的xml中vcpu元素,實(shí)現(xiàn)了vcpu綁定列表的更新,使得libvirt在傳給qemu進(jìn)程中的參數(shù)中包含vcpu綁定列表與實(shí)際相符,有利于虛擬機(jī)跨主機(jī)遷移成功。
上述各個(gè)步驟,可以通過(guò)c語(yǔ)言進(jìn)行控制實(shí)現(xiàn),當(dāng)然,也可采用其他計(jì)算機(jī)語(yǔ)言,這均不影響本申請(qǐng)的實(shí)現(xiàn)。
在本發(fā)明實(shí)施例所提供的技術(shù)方案中,通過(guò)在虛擬機(jī)進(jìn)行遷移之前,通過(guò)修改libvirt源碼來(lái)刪除虛擬機(jī)中xml中指定的vcpu元素,實(shí)現(xiàn)了解除vcpu與之前主機(jī)的cpu綁定,使得libvirt和qemu進(jìn)程中保存的虛擬機(jī)xml數(shù)據(jù)的一致性。完善了vcpu綁定功能,提高了虛擬機(jī)的跨主機(jī)遷移的成功率,有效的增加虛擬機(jī)遷移功能的使用場(chǎng)景,減少遷移限制,同時(shí)由于這種方式只涉及到軟件部分的修改,方便后期虛擬化產(chǎn)品的升級(jí)與維護(hù),有利于提高虛擬化產(chǎn)品的競(jìng)爭(zhēng)力
考慮到系統(tǒng)自動(dòng)更新虛擬機(jī)中xml文件中vcpu綁定列表中vcpu的綁定情況,可能會(huì)出錯(cuò);或者由于其他情況發(fā)生,導(dǎo)致虛擬機(jī)遷移不成功,鑒于此,基于上述實(shí)施例,還可包括:
s108:發(fā)送所述待遷移虛擬機(jī)進(jìn)行遷移的指令,并獲取所述待遷移虛擬機(jī)的遷移信息;
s109:根據(jù)所述遷移信息判斷所述待遷移虛擬機(jī)是否遷移成功;
s110:當(dāng)判定所述待遷移虛擬機(jī)遷移失敗時(shí),向用戶進(jìn)行發(fā)送遷移失敗的反饋信息。
當(dāng)然,在一種具體的實(shí)施方式中,當(dāng)判定所述待遷移虛擬機(jī)遷移失敗時(shí),還可進(jìn)行報(bào)警提示。
對(duì)用戶進(jìn)行反饋遷移不成功的信息以及報(bào)警提示,可在虛擬機(jī)遷移失敗時(shí),及時(shí)通知用戶,以便盡快排查失敗的原因,及時(shí)進(jìn)行維修,有利于提升虛擬機(jī)遷移的速率。
本發(fā)明實(shí)施例還針對(duì)虛擬機(jī)遷移方法提供了相應(yīng)的實(shí)現(xiàn)裝置,進(jìn)一步使得所述方法更具有實(shí)用性。下面對(duì)本發(fā)明實(shí)施例提供的虛擬機(jī)遷移裝置進(jìn)行介紹,下文描述的虛擬機(jī)遷移裝置與上文描述的虛擬機(jī)遷移方法可相互對(duì)應(yīng)參照。
參見(jiàn)圖3,圖3為本發(fā)明實(shí)施例提供的虛擬機(jī)遷移裝置在一種具體實(shí)施方式下的結(jié)構(gòu)圖,該裝置可包括:
獲取數(shù)據(jù)模塊301,用于獲取當(dāng)前主機(jī)cpu的個(gè)數(shù)及待遷移虛擬機(jī)的vcpu綁定字節(jié)的長(zhǎng)度。
判斷模塊302,用于判斷與所述主機(jī)的各個(gè)cpu字節(jié)長(zhǎng)度是否相同,當(dāng)判定與所述cpu字節(jié)長(zhǎng)度不相同時(shí),將所述虛擬機(jī)的xml中存儲(chǔ)的vcpu綁定比特位的數(shù)據(jù)結(jié)構(gòu)及已綁定的vcpu的總數(shù)進(jìn)行更新;反之,將所述vcpu的比特圖與對(duì)應(yīng)綁定的cpu的比特圖逐位進(jìn)行運(yùn)算。
數(shù)據(jù)處理模塊303,用于當(dāng)運(yùn)算結(jié)果為1時(shí),獲取已綁定的vcpu的總數(shù),當(dāng)所述總數(shù)為1時(shí),將所述總數(shù)設(shè)置為0,并將vcpu綁定比特位的數(shù)據(jù)結(jié)構(gòu)置空;當(dāng)所述總數(shù)不為1時(shí),按照預(yù)設(shè)的算法依次對(duì)每個(gè)vcpu綁定比特位的數(shù)據(jù)結(jié)構(gòu)進(jìn)行處理;
更新模塊304,用于將所述虛擬機(jī)的xml中存儲(chǔ)的vcpu綁定比特位的數(shù)據(jù)結(jié)構(gòu)及已綁定的vcpu的總數(shù)進(jìn)行更新。
在本實(shí)施例的一些具體實(shí)施方式中,所述數(shù)據(jù)處理模塊303可為依次獲取保存vcpu綁定比特位的數(shù)據(jù)結(jié)構(gòu)的數(shù)組中的元素;將各個(gè)已綁定的vcpu的標(biāo)識(shí)號(hào)與待綁定vcpu的標(biāo)識(shí)號(hào)進(jìn)行比較,當(dāng)所述vcpu的標(biāo)識(shí)號(hào)與所述待綁定vcpu的標(biāo)識(shí)號(hào)相同時(shí),則將該vcpu綁定比特位的數(shù)據(jù)結(jié)構(gòu)賦值為所述數(shù)組中的最后一個(gè)元素,相應(yīng)的,將所述數(shù)組中的最后一個(gè)元素置空,數(shù)組的元素個(gè)數(shù)減一的模塊。
所述獲取數(shù)據(jù)模塊301還可為獲取當(dāng)前主機(jī)的numa拓?fù)湫畔?,根?jù)所述numa拓?fù)湫畔⒋_定所述主機(jī)cpu的個(gè)數(shù)的模塊。
可選的,在本實(shí)施例的一些實(shí)施方式中,請(qǐng)參閱圖4,所述裝置例如可以包括:
發(fā)送模塊305,用于發(fā)送所述待遷移虛擬機(jī)進(jìn)行遷移的指令,并獲取所述待遷移虛擬機(jī)的遷移信息;根據(jù)所述遷移信息判斷所述待遷移虛擬機(jī)是否遷移成功;當(dāng)判定所述待遷移虛擬機(jī)遷移失敗時(shí),向用戶進(jìn)行發(fā)送遷移失敗的反饋信息。
在另外一種實(shí)施方式中,所述裝置例如還可以包括:
報(bào)警模塊306,用于當(dāng)判定所述待遷移虛擬機(jī)遷移失敗時(shí),進(jìn)行報(bào)警提示。
本發(fā)明實(shí)施例所述的虛擬機(jī)遷移裝置的各功能模塊的功能可根據(jù)上述方法實(shí)施例中的方法具體實(shí)現(xiàn),其具體實(shí)現(xiàn)過(guò)程可以參照上述方法實(shí)施例的相關(guān)描述,此處不再贅述。
由上可知,本發(fā)明實(shí)施例通過(guò)在虛擬機(jī)進(jìn)行遷移之前,通過(guò)修改libvirt源碼來(lái)刪除虛擬機(jī)中xml中指定的vcpu元素,實(shí)現(xiàn)了解除vcpu與之前主機(jī)的cpu綁定,使得libvirt和qemu進(jìn)程中保存的虛擬機(jī)xml數(shù)據(jù)的一致性。完善了vcpu綁定功能,提高了虛擬機(jī)的跨主機(jī)遷移的成功率,有效的增加虛擬機(jī)遷移功能的使用場(chǎng)景,減少遷移限制,同時(shí)由于這種方式只涉及到軟件部分的修改,方便后期虛擬化產(chǎn)品的升級(jí)與維護(hù),有利于提高虛擬化產(chǎn)品的競(jìng)爭(zhēng)力。
本說(shuō)明書中各個(gè)實(shí)施例采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說(shuō)明的都是與其它實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同或相似部分互相參見(jiàn)即可。對(duì)于實(shí)施例公開的裝置而言,由于其與實(shí)施例公開的方法相對(duì)應(yīng),所以描述的比較簡(jiǎn)單,相關(guān)之處參見(jiàn)方法部分說(shuō)明即可。
專業(yè)人員還可以進(jìn)一步意識(shí)到,結(jié)合本文中所公開的實(shí)施例描述的各示例的單元及算法步驟,能夠以電子硬件、計(jì)算機(jī)軟件或者二者的結(jié)合來(lái)實(shí)現(xiàn),為了清楚地說(shuō)明硬件和軟件的可互換性,在上述說(shuō)明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來(lái)執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計(jì)約束條件。專業(yè)技術(shù)人員可以對(duì)每個(gè)特定的應(yīng)用來(lái)使用不同方法來(lái)實(shí)現(xiàn)所描述的功能,但是這種實(shí)現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。
結(jié)合本文中所公開的實(shí)施例描述的方法或算法的步驟可以直接用硬件、處理器執(zhí)行的軟件模塊,或者二者的結(jié)合來(lái)實(shí)施。軟件模塊可以置于隨機(jī)存儲(chǔ)器(ram)、內(nèi)存、只讀存儲(chǔ)器(rom)、電可編程rom、電可擦除可編程rom、寄存器、硬盤、可移動(dòng)磁盤、cd-rom、或技術(shù)領(lǐng)域內(nèi)所公知的任意其它形式的存儲(chǔ)介質(zhì)中。
以上對(duì)本發(fā)明所提供的一種虛擬機(jī)遷移方法及裝置進(jìn)行了詳細(xì)介紹。本文中應(yīng)用了具體個(gè)例對(duì)本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說(shuō)明只是用于幫助理解本發(fā)明的方法及其核心思想。應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明原理的前提下,還可以對(duì)本發(fā)明進(jìn)行若干改進(jìn)和修飾,這些改進(jìn)和修飾也落入本發(fā)明權(quán)利要求的保護(hù)范圍內(nèi)。