本發(fā)明屬于計算機,涉及一種面向申威架構(gòu)的虛擬機cpu熱插拔方法及電子設(shè)備。
背景技術(shù):
1、虛擬機cpu熱插拔技術(shù)是指在虛擬機運行時動態(tài)增加或減少虛擬cpu的數(shù)量。這種技術(shù)可以提高虛擬機性能配置的的靈活性,是虛擬化中一項非常重要的功能。目前x86平臺通過高級配置和電源管理接口acpi(advanced?configuration?and?power?managementinterface)的機制實現(xiàn)了該平臺的虛擬機cpu熱插拔功能,然而申威平臺目前并不支持acpi?。
2、qemu(quick?emulator)是一個開源的虛擬機監(jiān)視器和模擬器,它可以通過修改虛擬機配置和更新虛擬機狀態(tài),進一步通知虛擬機內(nèi)的操作系統(tǒng)進行相應(yīng)的處理,從而實現(xiàn)虛擬機cpu的熱插拔。kvm(kernel-based?virtual?machine)是一種基于linux內(nèi)核的開源虛擬化技術(shù),它允許管理員在linux系統(tǒng)上創(chuàng)建和管理虛擬機。libvirt是一個用于管理虛擬化平臺的開源api、后臺程序和管理工具,它旨在提供一個通用和穩(wěn)定的軟件庫來高效、安全地管理一個結(jié)點上的虛擬機,并支持遠程操作。
3、在虛擬機cpu熱插拔中,libvirt的virsh管理命令會轉(zhuǎn)換成qemu對外monitor接口能夠識別的qmp-shell命令,進一步地將轉(zhuǎn)換后的命令發(fā)送到qemu對外monitor接口,實現(xiàn)通過libvirt命令進行虛擬機cpu熱插拔的操作。通過qemu與kvm的配合,可以對運行狀態(tài)下的虛擬機cpu資源進行動態(tài)管理。由于cpu的實現(xiàn)與平臺架構(gòu)強相關(guān),所以不同平臺對于虛擬機cpu熱插拔的實現(xiàn)均為針對該平臺的特殊實現(xiàn),當(dāng)前申威平臺沒有相關(guān)的實現(xiàn),在申威平臺上,現(xiàn)階段沒有實現(xiàn)虛擬機cpu熱插拔的代碼邏輯和功能,無法通過qemu或者libvirt的管理命令進行虛擬機運行時下cpu的動態(tài)添加和刪除。
4、因此,亟需一種面向申威架構(gòu)的虛擬機cpu熱插拔方法及電子設(shè)備以解決上述技術(shù)問題。
技術(shù)實現(xiàn)思路
1、本發(fā)明的目的在于克服現(xiàn)有技術(shù)中的不足,提供一種面向申威架構(gòu)的虛擬機cpu熱插拔方法及電子設(shè)備,能夠解決現(xiàn)有技術(shù)中無法在申威平臺實現(xiàn)虛擬機cpu熱插拔的問題。
2、為緩解上述技術(shù)問題,本發(fā)明是采用下述技術(shù)方案實現(xiàn)的:
3、第一方面,本發(fā)明提供了一種面向申威架構(gòu)的虛擬機cpu熱插方法,由qemu執(zhí)行,所述qemu中模擬有申威架構(gòu),所述申威架構(gòu)內(nèi)構(gòu)建有虛擬機,所述qemu中應(yīng)用有kvm,包括:
4、解析輸入的添加命令,獲取申威架構(gòu)的cpu參數(shù),將所述cpu參數(shù)與所述qemu說明文檔中支持的cpu參數(shù)對齊,獲得對齊后的cpu參數(shù),將對齊后的cpu參數(shù)添加并保存至所述申威架構(gòu)的cpu結(jié)構(gòu)體中;
5、控制所述kvm創(chuàng)建申威架構(gòu)下模擬cpu的線程,并構(gòu)建qemu中的虛擬機cpu結(jié)構(gòu)體,觸發(fā)熱插中斷,發(fā)送所述對齊后的cpu參數(shù)至虛擬機內(nèi)核的pm-device設(shè)備驅(qū)動;
6、在接收到所述虛擬機cpu熱插中斷后,在虛擬機pm-device設(shè)備驅(qū)動中解析qemu發(fā)送的所述對齊后的cpu參數(shù),并根據(jù)解析獲得的信息在虛擬機內(nèi)核創(chuàng)建虛擬機cpu結(jié)構(gòu)體;
7、綁定所述qemu中的虛擬機cpu結(jié)構(gòu)體和虛擬機內(nèi)核創(chuàng)建的虛擬機cpu結(jié)構(gòu)體,完成cpu的熱插。
8、進一步地,在控制所述kvm創(chuàng)建申威架構(gòu)下模擬cpu的線程之前:
9、通過所述qemu中的cpu狀態(tài)管理模塊檢測所述對齊后的cpu參數(shù)對應(yīng)的cpu在線狀態(tài),當(dāng)所述對齊后的cpu參數(shù)對應(yīng)的cpu離線時,查詢所述qemu中對應(yīng)虛擬機cpu的槽位是否為空,當(dāng)所述虛擬機cpu的槽位為空時,返回能夠熱插cpu的槽位信息至所述qemu,更新所述cpu狀態(tài)管理模塊中的cpu熱插拔狀態(tài)管理表。
10、進一步地,所述觸發(fā)熱插中斷包括:
11、通過所述申威架構(gòu)的pm-device設(shè)備填寫所述對齊后的cpu參數(shù),并通過申威架構(gòu)下注冊在pm-device設(shè)備中的cpu熱插操作函數(shù),觸發(fā)注冊的熱插cpu中斷。
12、進一步地,所述添加命令為qmp-shell命令或者virsh命令,其中,所述virsh命令會經(jīng)過所述qemu中的libvirt轉(zhuǎn)換成qmp-shell命令。
13、進一步地,在綁定所述qemu中的虛擬機cpu結(jié)構(gòu)體和虛擬機內(nèi)核創(chuàng)建的虛擬機cpu結(jié)構(gòu)體之后:
14、通過上線命令控制新插入的虛擬機cpu上線,通過顯示命令顯示新插入的虛擬機cpu。
15、第二方面,本發(fā)明提供了一種面向申威架構(gòu)的虛擬機cpu熱拔方法,其特征在于,由qemu執(zhí)行,所述qemu中模擬有申威架構(gòu),包括:
16、在qemu側(cè)進行cpu刪除的命令輸入;
17、解析輸入的刪除命令,獲得待熱拔cpu的id信息;
18、基于所述待熱拔cpu的id信息,通過所述qemu中的cpu狀態(tài)管理模塊檢測待熱拔cpu是否在線且非0核心,均滿足時更新所述cpu狀態(tài)管理模塊中的cpu熱插拔狀態(tài)管理表,查找待熱拔cpu的槽位信息,通過所述待熱拔cpu的槽位信息找到相應(yīng)的cpu設(shè)備信息;
19、通過所述申威架構(gòu)下注冊在pm-device設(shè)備中的cpu熱拔操作函數(shù),觸發(fā)注冊的熱拔cpu中斷,在接收到所述qemu發(fā)送的熱拔cpu中斷后,根據(jù)所述相應(yīng)的cpu設(shè)備信息控制對應(yīng)的虛擬機cpu進行資源釋放;
20、所述虛擬機cpu資源釋放后,發(fā)送中斷給qemu,釋放模擬虛擬機cpu線程資源,完成cpu的熱拔。
21、進一步地,在解析輸入的刪除命令之前通過下線命令控制虛擬機cpu下線。
22、第三方面,本發(fā)明提供了一種電子設(shè)備,用于執(zhí)行上述第一方面所述的面向申威架構(gòu)的虛擬機cpu熱插方法或上述第二方面所述的面向申威架構(gòu)的虛擬機cpu熱拔方法。
23、與現(xiàn)有技術(shù)相比,本發(fā)明所達到的有益效果:
24、在解析輸入的添加命令,獲取申威架構(gòu)的cpu參數(shù)并對齊之后控制kvm創(chuàng)建申威架構(gòu)下模擬cpu的線程,并構(gòu)建qemu中的虛擬機cpu結(jié)構(gòu)體,在接收到所述虛擬機cpu熱插中斷后,在虛擬機pm-device設(shè)備驅(qū)動中解析qemu發(fā)送的所述對齊后的cpu參數(shù),并根據(jù)解析獲得的信息在虛擬機內(nèi)核創(chuàng)建虛擬機cpu結(jié)構(gòu)體,綁定所述qemu中的虛擬機cpu結(jié)構(gòu)體和虛擬機內(nèi)核創(chuàng)建的虛擬機cpu結(jié)構(gòu)體,完成cpu的熱插;在獲得待熱拔cpu的id信息后,查找待熱拔cpu的槽位信息,在接收到熱拔cpu中斷后,調(diào)用虛擬機cpu初始化中的釋放操作,進行qemu創(chuàng)建的虛擬機cpu設(shè)備銷毀工作,完成cpu的熱拔;實現(xiàn)了在申威平臺實現(xiàn)虛擬機cpu熱插拔;
25、由于現(xiàn)階段申威平臺不支持acpi,為實現(xiàn)申威平臺的完整熱插拔邏輯鏈,通過在申威平臺的pm-device設(shè)備中注冊cpu熱插拔函數(shù),并在注冊函數(shù)的回調(diào)中實現(xiàn)申威平臺的中斷發(fā)送機制,區(qū)別于x86平臺的acpi中斷發(fā)送流程,解決在現(xiàn)有申威平臺下qemu與虛擬機之間cpu熱插拔中斷收發(fā)以及熱插拔cpu信息傳遞的實現(xiàn)問題;
26、在申威平臺設(shè)計虛擬機cpu熱插拔邏輯并實現(xiàn),解決申威平臺虛擬機cpu熱插拔的功能缺失問題,實現(xiàn)申威平臺下虛擬機cpu的隨機反復(fù)熱插拔的功能。