本發(fā)明涉及虛擬機(jī)高性能定時領(lǐng)域,尤其涉及一種用于虛擬機(jī)的高性能定時器實現(xiàn)方法、虛擬機(jī)。
背景技術(shù):
目前在虛擬化領(lǐng)域的應(yīng)用中,虛擬機(jī)性能是大家普遍關(guān)注的一個關(guān)鍵指標(biāo),一臺虛擬機(jī)能否具有和物理機(jī)相同的性能是虛擬化領(lǐng)域長期以來比較難以解決的難題,而嵌入式虛擬化由于其承載業(yè)務(wù)具有高實時性要求的特性,因此對虛擬化后的各項性能指標(biāo)要求更為苛刻,而影響虛擬機(jī)運行指標(biāo)中最為關(guān)鍵的一個就是虛擬機(jī)定時器精度問題。
現(xiàn)有嵌入式虛擬化高精度定時器處理流程是:GuestOS配置偏移為0x380的Timer Initial Count寄存器定時值;硬件寫0x380寄存器產(chǎn)生VM_Exit到Hypervisor進(jìn)行指令解碼后寫入真實硬件寄存器;系統(tǒng)由Hypervisor返回到GuestOS繼續(xù)運行;高精度定時器定時到硬件產(chǎn)生中斷發(fā)生VM_Exit到Hypervisor處理中斷后將該中斷轉(zhuǎn)換為虛擬中斷注入GuestOS的IDT中斷處理流程。
該方法存在影響嵌入式虛擬機(jī)高精度定時器性能的關(guān)鍵因素有兩個方面:第一是每次向0x380寄存器寫定時值會產(chǎn)生一次VM_Exit到Hypervisor處理產(chǎn)生指令解碼操作形成性能瓶頸;第二是當(dāng)定時到時高精度定時器會發(fā)出中斷產(chǎn)生VM_Exit到Hypervisor處理后再注入中斷到GuestOS IDT中斷處理例程, 這個過程增加了VM_Exit到Hypervisor切換和硬件中斷處理開銷,對于虛擬機(jī)定時器精度有較大的性能影響。
因此,如何提供一種具備較高定時器精度的高性能定時器實現(xiàn)方法,是本領(lǐng)域技術(shù)人員亟待解決的技術(shù)問題。
技術(shù)實現(xiàn)要素:
本發(fā)明提供了一種用于虛擬機(jī)的高性能定時器實現(xiàn)方法、虛擬機(jī),以解決虛擬機(jī)定時器精度差的問題。
本發(fā)明提供了一種用于虛擬機(jī)的高性能定時器實現(xiàn)方法,其包括:分區(qū)GuestOS產(chǎn)生定時要求,向高精度定時器寄存器0x380寫定時值;分區(qū)CPU捕獲寫0x380寄存器特權(quán)指令操作,產(chǎn)生VM_Exit到Hypervisor處理;嵌入式Hypervisor通過CPU獲取寫寄存器偏移和寫入值添加至定時器配置報文,發(fā)送至高速通訊隊列;高精度定時器模塊從高速通訊隊列中獲取定時器配置報文,并寫入硬件core寄存器。
進(jìn)一步的,當(dāng)存在多個分區(qū)時,還包括:嵌入式Hypervisor將發(fā)起寄存器寫操作的分區(qū)VCPU所在的core id、對應(yīng)硬件Posted Interrupt描述符地址整合,并添加至定時器配置報文。
進(jìn)一步的,在將定時器配置報文發(fā)送至高速通訊隊列之后,還包括:通知高精度定時器模塊寫寄存器操作完成;高精度定時器模塊在收到通知后,從高速通訊隊列中獲取定時器配置報文。
進(jìn)一步的,高精度定時器模塊將定時器配置報文寫入硬件core寄存器包括:高精度定時器模塊解析定時器配置報文,獲取寫寄存器偏移和寫入值,確定定 時器偏移及定時值,寫入硬件Core定時器。
進(jìn)一步的,當(dāng)存在多個分區(qū)時,還包括:高精度定時器模塊解析定時器配置報文,獲取寫寄存器偏移和寫入值、發(fā)起寄存器寫操作的分區(qū)VCPU所在的core id、對應(yīng)硬件Posted Interrupt描述符地址,以定時器偏移及定時值為VCPU所在的core id、硬件Posted Interrupt描述符地址存儲到虛擬機(jī)定時器模型;找出的最小定時值寫入硬件Core定時器。
進(jìn)一步的,還包括:判斷硬件Core定時器是否處于非定時狀態(tài);如果硬件Core定時器處于非定時狀態(tài),則高精度定時器模塊查找虛擬機(jī)定時器數(shù)據(jù)模型,將找出的最小定時值寫入硬件Core定時器;如果硬件Core定時器處于定時狀態(tài),不進(jìn)行硬件Core定時器的寫入操作。
進(jìn)一步的,還包括:部署分區(qū)虛擬機(jī)的core通過Hypervisor關(guān)閉高精度定時器。
進(jìn)一步的,還包括:選擇一core,在core該運行嵌入式Hypervisor高精度定時器模塊。
進(jìn)一步的,還包括:在嵌入式Hypervisor軟件層構(gòu)建各個分區(qū)虛擬機(jī)與高精度定時器模塊之間的高速通訊通道。
進(jìn)一步的,還包括:硬件Core定時器在定時到達(dá)時,發(fā)送中斷通知至高精度定時器模塊,高精度定時器模塊向分區(qū)PI描述符寫入高精度定時器中斷標(biāo)志,向分區(qū)core發(fā)送PI物理中斷。
進(jìn)一步的,當(dāng)存在多個分區(qū)時,還包括:高精度定時器模塊從虛擬機(jī)定時器模型中獲取定時到的虛擬機(jī)的VCPU的core id及虛擬機(jī)PI描述符地址信息,根據(jù)獲取的虛擬機(jī)PI描述符地址向?qū)?yīng)的PI描述符寫入高精度定時器中斷標(biāo) 志,根據(jù)獲取的VCPU的core id向?qū)?yīng)的core發(fā)送PI物理中斷。
進(jìn)一步的,還包括:高精度定時器模塊從虛擬機(jī)定時器模型中刪除已經(jīng)完成定時中斷注入的分區(qū)定時器數(shù)據(jù),并從虛擬機(jī)定時器數(shù)據(jù)模型讀取下一個最小定時值,將讀取的虛擬機(jī)下一個最小定時值寫入硬件Core定時器。
本發(fā)明提供了一種虛擬機(jī),其包括:分區(qū)GuestOS,用于產(chǎn)生定時要求,向高精度定時器寄存器0x380寫定時值;分區(qū)CPU,用于捕獲寫0x380寄存器特權(quán)指令操作,產(chǎn)生VM_Exit到Hypervisor處理;嵌入式Hypervisor,用于通過CPU獲取寫寄存器偏移和寫入值添加至定時器配置報文,發(fā)送至高速通訊隊列;高精度定時器模塊,用于從高速通訊隊列中獲取定時器配置報文,并寫入硬件core寄存器。
進(jìn)一步的,當(dāng)存在多個分區(qū)時,嵌入式Hypervisor還用于將發(fā)起寄存器寫操作的分區(qū)VCPU所在的core id、對應(yīng)硬件Posted Interrupt描述符地址整合,并添加至定時器配置報文。
進(jìn)一步的,嵌入式Hypervisor在將定時器配置報文發(fā)送至高速通訊隊列之后,還用于通知高精度定時器模塊寫寄存器操作完成;高精度定時器模塊還用于在收到通知后,從高速通訊隊列中獲取定時器配置報文。
進(jìn)一步的,高精度定時器模塊用于解析定時器配置報文,獲取寫寄存器偏移和寫入值,確定定時器偏移及定時值,寫入硬件Core定時器。
進(jìn)一步的,當(dāng)存在多個分區(qū)時,高精度定時器模塊還用于解析定時器配置報文,獲取寫寄存器偏移和寫入值、發(fā)起寄存器寫操作的分區(qū)VCPU所在的core id、對應(yīng)硬件Posted Interrupt描述符地址,以定時器偏移及定時值為VCPU所在的core id、硬件Posted Interrupt描述符地址存儲到虛擬機(jī)定時器模型;找出 的最小定時值寫入硬件Core定時器。
進(jìn)一步的,高精度定時器模塊還用于判斷硬件Core定時器是否處于非定時狀態(tài);如果硬件Core定時器處于非定時狀態(tài),則查找虛擬機(jī)定時器數(shù)據(jù)模型,將找出的最小定時值寫入硬件Core定時器;如果硬件Core定時器處于定時狀態(tài),不進(jìn)行硬件Core定時器的寫入操作。
進(jìn)一步的,部署分區(qū)虛擬機(jī)的core還用于通過Hypervisor關(guān)閉高精度定時器。
進(jìn)一步的,嵌入式Hypervisor還用于選擇一core,在core該運行嵌入式Hypervisor高精度定時器模塊。
進(jìn)一步的,嵌入式Hypervisor還用于在軟件層構(gòu)建各個分區(qū)虛擬機(jī)與高精度定時器模塊之間的高速通訊通道。
進(jìn)一步的,硬件Core定時器還用于硬件Core定時器在定時到達(dá)時,發(fā)送中斷通知至高精度定時器模塊;高精度定時器模塊還用于向分區(qū)PI描述符寫入高精度定時器中斷標(biāo)志,向分區(qū)core發(fā)送PI物理中斷。
進(jìn)一步的,當(dāng)存在多個分區(qū)時,高精度定時器模塊還用于從虛擬機(jī)定時器模型中獲取定時到的虛擬機(jī)的VCPU的core id及虛擬機(jī)PI描述符地址信息,根據(jù)獲取的虛擬機(jī)PI描述符地址向?qū)?yīng)的PI描述符寫入高精度定時器中斷標(biāo)志,根據(jù)獲取的VCPU的core id向?qū)?yīng)的core發(fā)送PI物理中斷。
進(jìn)一步的,高精度定時器模塊還用于從虛擬機(jī)定時器模型中刪除已經(jīng)完成定時中斷注入的分區(qū)定時器數(shù)據(jù),并從虛擬機(jī)定時器數(shù)據(jù)模型讀取下一個最小定時值,將讀取的虛擬機(jī)下一個最小定時值寫入硬件Core定時器。
本發(fā)明的有益效果:
本發(fā)明提供了一種新的高性能定時器實現(xiàn)方法,在生成定時器配置報文并寫入定時器的過程中,不需要像現(xiàn)有技術(shù)那樣硬件寫0x380寄存器產(chǎn)生VM_Exit到Hypervisor進(jìn)行指令解碼后寫入真實硬件寄存器,這樣,GuestOS寫0x380寄存器不需要軟件進(jìn)行指令解碼,硬件會進(jìn)行指令解碼并直接在VM_Exit事件中將寄存器偏移地址和寫入值傳遞給Hypervisor處理,從本質(zhì)上消除了軟件指令解碼產(chǎn)生的時間瓶頸;進(jìn)一步的,在定時器到達(dá)后,高精度定時器模塊先向Posted Interrupt descriptor寫入高精度定時器中斷標(biāo)志,然后向?qū)?yīng)的core id發(fā)送Posted Interrupt核間中斷,Intel Posted Interrupt硬件虛擬化機(jī)制會自動根據(jù)上述配置完成對不同分區(qū)虛擬機(jī)高精度定時器的中斷注入,此過程中不會產(chǎn)生任何VM_Exit也不需要Hypervisor介入中斷處理,因此性能可以達(dá)到與物理機(jī)一致的水平。
附圖說明
圖1為本發(fā)明第一實施例提供的虛擬機(jī)的結(jié)構(gòu)示意圖;
圖2為本發(fā)明第二實施例提供的高性能定時器實現(xiàn)方法的流程圖;
圖3為本發(fā)明第三實施例提供的高性能定時器實現(xiàn)方法的流程圖。
具體實施方式
現(xiàn)通過具體實施方式結(jié)合附圖的方式對本發(fā)明做出進(jìn)一步的詮釋說明。
第一實施例:
圖1為本發(fā)明第一實施例提供的虛擬機(jī)的結(jié)構(gòu)示意圖,由圖1可知,在本 實施例中,本發(fā)明提供的虛擬機(jī)1包括:
分區(qū)GuestOS11,用于產(chǎn)生定時要求,向高精度定時器寄存器0x380寫定時值;
分區(qū)CPU12,用于捕獲寫0x380寄存器特權(quán)指令操作,產(chǎn)生VM_Exit到Hypervisor處理;
嵌入式Hypervisor13,用于通過CPU獲取寫寄存器偏移和寫入值添加至定時器配置報文,發(fā)送至高速通訊隊列;
高精度定時器模塊14,用于從高速通訊隊列中獲取定時器配置報文,并寫入硬件core寄存器15;
硬件core寄存器15用于執(zhí)行定時器。
在一些實施例中,當(dāng)存在多個分區(qū)時,上述實施例中的嵌入式Hypervisor13還用于將發(fā)起寄存器寫操作的分區(qū)VCPU所在的core id、對應(yīng)硬件Posted Interrupt描述符地址整合,并添加至定時器配置報文。
在一些實施例中,上述實施例中的嵌入式Hypervisor13在將定時器配置報文發(fā)送至高速通訊隊列之后,還用于通知高精度定時器模塊寫寄存器操作完成;高精度定時器模塊還用于在收到通知后,從高速通訊隊列中獲取定時器配置報文。
在一些實施例中,上述實施例中的高精度定時器模塊14用于解析定時器配置報文,獲取寫寄存器偏移和寫入值,確定定時器偏移及定時值,寫入硬件Core定時器。
在一些實施例中,當(dāng)存在多個分區(qū)時,上述實施例中的高精度定時器模塊 14還用于解析定時器配置報文,獲取寫寄存器偏移和寫入值、發(fā)起寄存器寫操作的分區(qū)VCPU所在的core id、對應(yīng)硬件Posted Interrupt描述符地址,以定時器偏移及定時值為VCPU所在的core id、硬件Posted Interrupt描述符地址存儲到虛擬機(jī)定時器模型;找出的最小定時值寫入硬件Core定時器15。
在一些實施例中,上述實施例中的高精度定時器模塊14還用于判斷硬件Core定時器15是否處于非定時狀態(tài);如果硬件Core定時器處于非定時狀態(tài),則查找虛擬機(jī)定時器數(shù)據(jù)模型,將找出的最小定時值寫入硬件Core定時器;如果硬件Core定時器處于定時狀態(tài),不進(jìn)行硬件Core定時器的寫入操作。
在一些實施例中,上述實施例中的部署分區(qū)虛擬機(jī)的core還用于通過Hypervisor13關(guān)閉高精度定時器。
在一些實施例中,上述實施例中的嵌入式Hypervisor13還用于選擇一core,在core該運行嵌入式Hypervisor高精度定時器模塊14。
在一些實施例中,上述實施例中的嵌入式Hypervisor13還用于在軟件層構(gòu)建各個分區(qū)虛擬機(jī)與高精度定時器模塊14之間的高速通訊通道。
在一些實施例中,上述實施例中的硬件Core定時器15還用于硬件Core定時器在定時到達(dá)時,發(fā)送中斷通知至高精度定時器模塊14;高精度定時器模塊14還用于向分區(qū)PI描述符寫入高精度定時器中斷標(biāo)志,向分區(qū)core發(fā)送PI物理中斷。
在一些實施例中,當(dāng)存在多個分區(qū)時,上述實施例中的高精度定時器模塊14還用于從虛擬機(jī)定時器模型中獲取定時到的虛擬機(jī)的VCPU的core id及虛擬機(jī)PI描述符地址信息,根據(jù)獲取的虛擬機(jī)PI描述符地址向?qū)?yīng)的PI描述符寫入高精度定時器中斷標(biāo)志,根據(jù)獲取的VCPU的core id向?qū)?yīng)的core發(fā)送 PI物理中斷。
在一些實施例中,上述實施例中的高精度定時器模塊14還用于從虛擬機(jī)定時器模型中刪除已經(jīng)完成定時中斷注入的分區(qū)定時器數(shù)據(jù),并從虛擬機(jī)定時器數(shù)據(jù)模型讀取下一個最小定時值,將讀取的虛擬機(jī)下一個最小定時值寫入硬件Core定時器。
第二實施例:
圖2為本發(fā)明第二實施例提供的高性能定時器實現(xiàn)方法的流程圖,由圖2可知,在本實施例中,本發(fā)明提供的高性能定時器實現(xiàn)方法包括以下步驟:
S201:分區(qū)GuestOS產(chǎn)生定時要求,向高精度定時器寄存器0x380寫定時值;
S202:分區(qū)CPU捕獲寫0x380寄存器特權(quán)指令操作,產(chǎn)生VM_Exit到Hypervisor處理;
S203:嵌入式Hypervisor通過CPU獲取寫寄存器偏移和寫入值添加至定時器配置報文,發(fā)送至高速通訊隊列;
S204:高精度定時器模塊從高速通訊隊列中獲取定時器配置報文,并寫入硬件core寄存器。
在一些實施例中,當(dāng)存在多個分區(qū)時,上述實施例中的方法還包括:嵌入式Hypervisor將發(fā)起寄存器寫操作的分區(qū)VCPU所在的core id、對應(yīng)硬件Posted Interrupt描述符地址整合,并添加至定時器配置報文。
在一些實施例中,上述實施例中的方法在將定時器配置報文發(fā)送至高速通訊隊列之后,還包括:通知高精度定時器模塊寫寄存器操作完成;高精度定時器 模塊在收到通知后,從高速通訊隊列中獲取定時器配置報文。
在一些實施例中,上述實施例中的高精度定時器模塊將定時器配置報文寫入硬件core寄存器包括:高精度定時器模塊解析定時器配置報文,獲取寫寄存器偏移和寫入值,確定定時器偏移及定時值,寫入硬件Core定時器。
在一些實施例中,當(dāng)存在多個分區(qū)時,上述實施例中的方法還包括:高精度定時器模塊解析定時器配置報文,獲取寫寄存器偏移和寫入值、發(fā)起寄存器寫操作的分區(qū)VCPU所在的core id、對應(yīng)硬件Posted Interrupt描述符地址,以定時器偏移及定時值為VCPU所在的core id、硬件Posted Interrupt描述符地址存儲到虛擬機(jī)定時器模型;找出的最小定時值寫入硬件Core定時器。
在一些實施例中,上述實施例中的方法還包括:判斷硬件Core定時器是否處于非定時狀態(tài);如果硬件Core定時器處于非定時狀態(tài),則高精度定時器模塊查找虛擬機(jī)定時器數(shù)據(jù)模型,將找出的最小定時值寫入硬件Core定時器;如果硬件Core定時器處于定時狀態(tài),不進(jìn)行硬件Core定時器的寫入操作。
在一些實施例中,上述實施例中的方法還包括:部署分區(qū)虛擬機(jī)的core通過Hypervisor關(guān)閉高精度定時器。
在一些實施例中,上述實施例中的方法還包括:選擇一core,在core該運行嵌入式Hypervisor高精度定時器模塊。
在一些實施例中,上述實施例中的方法還包括:在嵌入式Hypervisor軟件層構(gòu)建各個分區(qū)虛擬機(jī)與高精度定時器模塊之間的高速通訊通道。
在一些實施例中,上述實施例中的方法還包括:硬件Core定時器在定時到達(dá)時,發(fā)送中斷通知至高精度定時器模塊,高精度定時器模塊向分區(qū)PI描述符寫入高精度定時器中斷標(biāo)志,向分區(qū)core發(fā)送PI物理中斷。
在一些實施例中,當(dāng)存在多個分區(qū)時,上述實施例中的方法還包括:高精度定時器模塊從虛擬機(jī)定時器模型中獲取定時到的虛擬機(jī)的VCPU的core id及虛擬機(jī)PI描述符地址信息,根據(jù)獲取的虛擬機(jī)PI描述符地址向?qū)?yīng)的PI描述符寫入高精度定時器中斷標(biāo)志,根據(jù)獲取的VCPU的core id向?qū)?yīng)的core發(fā)送PI物理中斷。
在一些實施例中,上述實施例中的方法還包括:高精度定時器模塊從虛擬機(jī)定時器模型中刪除已經(jīng)完成定時中斷注入的分區(qū)定時器數(shù)據(jù),并從虛擬機(jī)定時器數(shù)據(jù)模型讀取下一個最小定時值,將讀取的虛擬機(jī)下一個最小定時值寫入硬件Core定時器。
現(xiàn)結(jié)合具體應(yīng)用場景對本發(fā)明做進(jìn)一步的詮釋說明。
第三實施例:
圖3為本發(fā)明第三實施例提供的高性能定時器實現(xiàn)方法的流程圖,由圖3可知,在本實施例中,本發(fā)明提供的高性能定時器實現(xiàn)方法包括以下步驟:
S301:虛擬機(jī)初始化。
初始化包括以下步驟:
部署分區(qū)虛擬機(jī)的core通過Hypervisor關(guān)閉高精度定時器,防止產(chǎn)生不必要的外部中斷影響;
單獨分離出一個core運行嵌入式Hypervisor高精度定時器模塊,啟動該core高精度定時器硬件功能,該模塊為不同分區(qū)高精度定時器提供時鐘源;
在嵌入式Hypervisor軟件層構(gòu)建各個分區(qū)虛擬機(jī)與高精度定時器模塊之間的高速通訊通道,提供不同分區(qū)0x380寄存器定時值向高精度定時器模塊的寫 入機(jī)制;
嵌入式Hypervisor配置分區(qū)虛擬機(jī)硬件APIC Register Virtualization功能,目的是讓GuestOS寫0x380寄存器不需要軟件進(jìn)行指令解碼,硬件會進(jìn)行指令解碼并直接在VM_Exit事件中將寄存器偏移地址和寫入值傳遞給Hypervisor處理,從本質(zhì)上消除了軟件指令解碼產(chǎn)生的時間瓶頸;
S302:分區(qū)生成定時器配置報文。
嵌入式Hypervisor捕獲GuestOS對0x380寄存器寫處理操作并不直接寫入當(dāng)前core的硬件寄存器,而是通過高速通訊通道將定時值、當(dāng)前core id及對應(yīng)的Posted Interrupt descriptor地址寫入高精度定時器模塊。
具體的,本步驟包括:
高精GuestOS產(chǎn)生定時要求向高精度定時器寄存器0x380寫定時值;
CPU硬件捕獲寫0x380寄存器特權(quán)指令操作產(chǎn)生VM_Exit到Hypervisor處理;
嵌入式Hypervisor通過CPU硬件獲取寫寄存器偏移和寫入值并將發(fā)起寄存器寫操作的分區(qū)VCPU所在的core id和對應(yīng)的硬件Posted Interrupt描述符地址整合后,通過定時器配置報文打包發(fā)送到高速通訊隊列;
嵌入式Hypervisor發(fā)送事件通知高精度定時器模塊寫寄存器操作完成;
高精度定時器模塊從高速通訊隊列中獲取定時器配置報文。
S303:將定時值寫入硬件core定時器。
高精度定時器模塊從高速通訊通道接收來自各個分區(qū)虛擬機(jī)配置的高精度定時器報文,更新內(nèi)部數(shù)據(jù)模型,并進(jìn)行計算與分析最后完成高精度定時器模塊所在core硬件高精度定時器的配置。
具體的,本步驟包括:
高精度定時器模塊收到Hypervisor消息事件通道通知,證明此時已經(jīng)有虛擬機(jī)分區(qū)寫入高精度定時器定時報文,準(zhǔn)備從通訊隊列讀取定時報文內(nèi)容;
高精度定時器模塊解析消息事件信息獲取高速通訊隊列號,并從隊列中讀取虛擬機(jī)分區(qū)寫入的高精度定時器定時報文;
高精度定時器模塊分析讀取的虛擬機(jī)配置定時器報文,以定時器偏移及定時值為索引將報文中的VCPU運行的coreid、硬件Posted Interrupt描述符地址存儲到虛擬機(jī)定時器數(shù)據(jù)模型;
如果當(dāng)前硬件Core定時器處于非定時狀態(tài)則高精度定時器模塊查找虛擬機(jī)定時器數(shù)據(jù)模型,將找出的最小定時值寫入硬件Core定時器;如果當(dāng)前硬件Core定時器處于定時狀態(tài),不進(jìn)行硬件Core定時器的寫入操作。
S304:硬件core定時器定時到達(dá),產(chǎn)生中斷。
高精度定時器模塊所在的core硬件高精度定時器定時到后觸發(fā)高精度定時器模塊運行,通過內(nèi)部數(shù)據(jù)模型查找需要定時處理的分區(qū)虛擬機(jī)Posted Interrupt descriptor地址和core id,找到數(shù)據(jù)后先向Posted Interrupt descriptor寫入高精度定時器中斷標(biāo)志,然后向?qū)?yīng)的core id發(fā)送Posted Interrupt核間中斷,Intel Posted Interrupt硬件虛擬化機(jī)制會自動根據(jù)上述配置完成對不同分區(qū)虛擬機(jī)高精度定時器的中斷注入,此過程中不會產(chǎn)生任何VM_Exit也不需要Hypervisor介入中斷處理,因此性能可以達(dá)到與物理機(jī)一致的水平
具體的,本步驟包括:
硬件Core定時器定時到發(fā)中斷通知高精度定時器模塊;
高精度定時器模塊從虛擬機(jī)定時器數(shù)據(jù)模型中獲取定時到的相關(guān)虛擬機(jī)coreid及PI描述符地址信息;
根據(jù)從數(shù)據(jù)模型中獲取的虛擬機(jī)PI描述符地址向?qū)?yīng)的PI描述符寫入高精度定時器中斷標(biāo)志;
根據(jù)從數(shù)據(jù)模型中獲取的VCPU的coreid向該core發(fā)送PI物理中斷;
當(dāng)軟件Hypervisor完成本步驟后,硬件會自動從PI描述符中讀取高精度定時器中斷標(biāo)志并自動產(chǎn)生高精度定時器中斷并跳轉(zhuǎn)到GuestOS中斷處理例程執(zhí)行,整個過程不會產(chǎn)生VM_Exit,因此性能與物理機(jī)完全一致。
S305:在硬件core定時器寫入下一定時信息。
高精度定時器模塊從虛擬機(jī)定時器模型中刪除已經(jīng)完成定時中斷注入的分區(qū)定時器數(shù)據(jù),并從虛擬機(jī)定時器數(shù)據(jù)模型讀取下一個最小定時值;高精度定時器模塊將讀取的虛擬機(jī)下一個最小定時值寫入硬件Core高精度定時器。
綜上可知,通過本發(fā)明的實施,至少存在以下有益效果:
在生成定時器配置報文并寫入定時器的過程中,不需要像現(xiàn)有技術(shù)那樣硬件寫0x380寄存器產(chǎn)生VM_Exit到Hypervisor進(jìn)行指令解碼后寫入真實硬件寄存器,這樣,GuestOS寫0x380寄存器不需要軟件進(jìn)行指令解碼,硬件會進(jìn)行指令解碼并直接在VM_Exit事件中將寄存器偏移地址和寫入值傳遞給Hypervisor處理,從本質(zhì)上消除了軟件指令解碼產(chǎn)生的時間瓶頸;
進(jìn)一步的,在定時器到達(dá)后,高精度定時器模塊先向Posted Interrupt descriptor寫入高精度定時器中斷標(biāo)志,然后向?qū)?yīng)的core id發(fā)送Posted Interrupt核間中斷,Intel Posted Interrupt硬件虛擬化機(jī)制會自動根據(jù)上述配置 完成對不同分區(qū)虛擬機(jī)高精度定時器的中斷注入,此過程中不會產(chǎn)生任何VM_Exit也不需要Hypervisor介入中斷處理,因此性能可以達(dá)到與物理機(jī)一致的水平;
進(jìn)一步的,部署分區(qū)虛擬機(jī)的core通過Hypervisor關(guān)閉高精度定時器,防止產(chǎn)生不必要的外部中斷影響;
進(jìn)一步的,單獨分離出一個core運行嵌入式Hypervisor高精度定時器模塊,啟動該core高精度定時器硬件功能,該模塊為不同分區(qū)高精度定時器提供時鐘源;
進(jìn)一步的,在嵌入式Hypervisor軟件層構(gòu)建各個分區(qū)虛擬機(jī)與高精度定時器模塊之間的高速通訊通道,提供不同分區(qū)0x380寄存器定時值向高精度定時器模塊的寫入機(jī)制。
以上僅是本發(fā)明的具體實施方式而已,并非對本發(fā)明做任何形式上的限制,凡是依據(jù)本發(fā)明的技術(shù)實質(zhì)對以上實施方式所做的任意簡單修改、等同變化、結(jié)合或修飾,均仍屬于本發(fā)明技術(shù)方案的保護(hù)范圍。