本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,具體涉及一種輸入輸出虛擬化資源的調(diào)整方法及處理器。
背景技術(shù):
Intel X86架構(gòu)包括一個中央處理器(Central Processing Unit,簡稱CPU)或者多個CPU,CPU具有熱插拔功能,在不關(guān)閉系統(tǒng)和不切斷電源的情況下,可以對CPU進(jìn)行熱移除或熱添加,以提高系統(tǒng)對災(zāi)難的及時恢復(fù)能力、擴(kuò)展性和靈活性等。另外,架構(gòu)中還包括輸入輸出中心(Input/Output Hub,簡稱IOH)芯片,IOH和CPU相連,用來處理外部設(shè)備的讀寫訪問請求。隨著技術(shù)的進(jìn)步與發(fā)展,IOH芯片被逐漸集成到CPU中,形成內(nèi)部輸入輸出模塊(Internal Input Output,簡稱IIO)。在CPU集成IIO模塊后,要完成CPU熱插拔,則要完成IIO模塊熱插拔的相關(guān)處理。
IIO模塊中主要包括三個組件,分別如下:
快速外圍元件互聯(lián)(Peripheral Component Interconnect Express,簡稱PCIe)根橋,集成在IIO模塊上用來連接更多的PCIe或者PCIe設(shè)備,管理PCIe設(shè)備的輸入輸出請求;
輸入輸出高級可編程中斷控制器(Input/Output Advanced Programmable Interrupt Controller,簡稱I/O APIC),集成在IIO模塊上用來管理I/O設(shè)備的中斷請求;
輸入輸出內(nèi)存管理單元(Input Output Memory Management Unit,簡稱IOMMU),集成在IIO模塊上實(shí)現(xiàn)I/O虛擬化,在Intel技術(shù)中,用于實(shí)現(xiàn)直接內(nèi)存訪問虛擬化技術(shù)(Virtualization Technology Direct Memory Access,簡稱VT-d)。
其中,業(yè)界標(biāo)準(zhǔn)的PCIe規(guī)范已經(jīng)提供了PCIe根橋以及根橋下外掛PCIe設(shè)備的熱插拔實(shí)現(xiàn)方案,同樣高級控制與電源管理接口(Advanced Configuration and Power Management Interface,簡稱ACPI)規(guī)范也提供了I/OAPIC設(shè)備的熱插拔實(shí)現(xiàn)方案,這些方案僅針對PCIe設(shè)備或I/O APIC設(shè)備的 單獨(dú)熱插拔實(shí)現(xiàn),但目前業(yè)內(nèi)并沒有提供適用于CPU中集成IIO模塊熱插拔的解決方案,以最終實(shí)現(xiàn)CPU熱插拔。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例提供了一種輸入輸出虛擬化資源的調(diào)整方法及處理器,用于解決現(xiàn)有技術(shù)中集成有IIO模塊的CPU的熱插拔問題。
本發(fā)明第一方面提供了一種輸入輸出虛擬化資源的調(diào)整方法,應(yīng)用于X86系統(tǒng),上述X86系統(tǒng)中包括一個第一中央處理器CPU,上述X86系統(tǒng)通過熱插拔方式熱添加第二CPU,該方法可包括:
上述第一CPU調(diào)用基本輸入輸出系統(tǒng)(Basic Input/Output System,簡稱BIOS)檢測到熱添加進(jìn)來的第二CPU,獲取集成在上述第二CPU上的內(nèi)部輸入輸出IIO模塊的初始化信息,并將上述初始化信息保存到差別化系統(tǒng)描述表(Differentiated System Description Table,簡稱DSDT),上述初始化信息用于調(diào)整輸入輸出虛擬化資源;
上述第一CPU根據(jù)上述DSDT中的上述初始化信息,配置輸入輸出虛擬化資源以完成上述第二CPU的熱添加。
其中,DSDT表是APCI規(guī)范中提供的一種描述動態(tài)變化的表,可以用于描述同一個系統(tǒng)中多個同類設(shè)備的個體差異,或者動態(tài)反映一個設(shè)備在不同時期的狀態(tài)差異。在本發(fā)明實(shí)施例中采用該DSDT來保存熱插拔相關(guān)的CPU的IIO模塊的初始化信息,從而使得第一CPU在任何時候都能獲取到X86系統(tǒng)當(dāng)前所有CPU的IIO模塊的初始化信息。
可以看出,本發(fā)明實(shí)施例中BIOS可以檢測到熱添加進(jìn)來的第二CPU,并獲取第二CPU中集成的IIO模塊的初始化信息,并將該初始化信息保存到上述DSDT表中,從而第二CPU能夠從DSDT表中獲取該初始化信息,對熱添加進(jìn)來的第二CPU完成輸入輸出虛擬化資源的配置,以實(shí)現(xiàn)整個第二CPU的熱添加。
可選地,上述初始化信息至少包括設(shè)備類型、分段號、總線號、所占用的內(nèi)存地址區(qū)間、上述內(nèi)存地址區(qū)間對應(yīng)的親和域。
在本發(fā)明一些實(shí)施例中,在上述第一CPU調(diào)用BIOS檢測熱添加的第二CPU之前包括:在上述X86系統(tǒng)初始化時,上述第一CPU調(diào)用上述BIOS檢 測上述X86系統(tǒng)中已添加的其它CPU,獲取上述其它CPU中集成的IIO模塊的初始化信息,并將獲取的初始化信息保存到上述DSDT。在本發(fā)明實(shí)施例中,在X86系統(tǒng)初始化時,BIOS能夠檢測到X86系統(tǒng)中其它CPU(不包括上述第二CPU)的存在,然后將其它CPU集成的IIO模塊的初始化信息也保存到DSDT表中,以確保X86系統(tǒng)中所有CPU的更新狀態(tài)都呈現(xiàn)在DSDT表中。
本發(fā)明第二方面提供了一種輸入輸出虛擬化資源的調(diào)整方法,應(yīng)用于X86系統(tǒng),上述X86系統(tǒng)中包括一個第一中央處理器CPU,上述X86系統(tǒng)通過熱插拔方式熱移除第二CPU,該方法包括:
上述第一CPU調(diào)用基本輸入輸出系統(tǒng)BIOS檢測需要熱移除的第二CPU;
上述第一CPU從差別化系統(tǒng)描述表DSDT獲取上述第二CPU中集成的內(nèi)部輸入輸出IIO模塊的初始化信息,上述初始化信息用于調(diào)整輸入輸出虛擬化資源;
上述第一CPU根據(jù)上述初始化信息,刪除輸入輸出虛擬化資源以實(shí)現(xiàn)上述第二CPU的熱移除。
可以看出,在本發(fā)明實(shí)施例中BIOS能夠感知到需要移除的第二CPU,然后第一CPU從DSDT表中獲取該第二CPU集成的IIO模塊的初始化信息,根據(jù)該初始化信息去刪除已配置的輸入輸出虛擬化資源,然后完成第二CPU的熱移除。
可選地,在本發(fā)明實(shí)施例中,上述初始化信息至少包括設(shè)備類型、分段號、總線號、所占用的內(nèi)存地址區(qū)間、該內(nèi)存地址區(qū)間對應(yīng)的親和域。
在本發(fā)明一些實(shí)施例中,上述第一CPU調(diào)用基本輸入輸出系統(tǒng)BIOS檢測熱移除的第二CPU之前包括:在上述X86系統(tǒng)初始化時,上述第一CPU調(diào)用上述BIOS檢測上述X86系統(tǒng)中已添加的上述第二CPU和其它CPU,獲取上述第二CPU中集成的IIO模塊的初始化信息和上述其它CPU中集成IIO模塊的初始化信息,并將獲取的初始化信息保存到上述DSDT。在本發(fā)明實(shí)施例中,上述第二CPU若是在X86系統(tǒng)啟動前已添加進(jìn)來,那么在X86初始化時,將第二CPU集成的IIO模塊的初始化信息保存到DSDT表,那么后續(xù)需要熱移除時,可以從DSDT表中獲取到該初始化信息,完成相應(yīng)輸入輸出虛擬化資源的刪除,從而完成第二CPU的熱移除。同時,當(dāng)X86系統(tǒng)中還存在 已添加的其它CPU,將其它CPU集成的IIO模塊的初始化信息也保存到DSDT表,以便后續(xù)需要對其它CPU熱移除時,可以從DSDT中獲取初始化信息。
在本發(fā)明另一些實(shí)施例中,上述第一CPU調(diào)用基本輸入輸出系統(tǒng)BIOS檢測熱移除的第二CPU之前包括:上述第一CPU調(diào)用上述BIOS檢測到上述第二CPU熱添加進(jìn)來,獲取上述第二CPU集成的IIO模塊的初始化信息,并將上述第二CPU的IIO模塊的初始化信息保存到上述DSDT。在本發(fā)明實(shí)施例中,該第二CPU還可能是在X86系統(tǒng)啟動后才熱添加進(jìn)來的,那么在熱添加該第二CPU時,將第二CPU集成的IIO模塊的初始化信息保存到DSDT中,以便后續(xù)從DSDT獲取初始化信息。
本發(fā)明第三方面提供了一種處理器,該處理器設(shè)置于X86系統(tǒng)中,該X86系統(tǒng)通過熱插拔方式熱添加第二CPU,該處理器可包括:
檢測模塊,用于調(diào)用基本輸入輸出系統(tǒng)BIOS檢測到熱添加進(jìn)來的第二CPU,獲取集成在上述第二CPU上的內(nèi)部輸入輸出IIO模塊的初始化信息,并將上述初始化信息保存到差別化系統(tǒng)描述表DSDT,上述初始化信息用于調(diào)整輸入輸出虛擬化資源;
資源調(diào)整模塊,用于根據(jù)上述DSDT中的上述初始化信息,配置輸入輸出虛擬化資源以完成上述第二CPU的熱添加。
可選地,上述第三方面提供的初始化信息至少包括設(shè)備類型、分段號、總線號、所占用的內(nèi)存地址區(qū)間、該內(nèi)存地址區(qū)間對應(yīng)的親和域。
在本發(fā)明一些實(shí)施例中,上述檢測模塊還用于,在該X86系統(tǒng)初始化時,調(diào)用所述BIOS檢測所述X86系統(tǒng)中已添加的其它第二CPU,獲取所述其它CPU中集成的IIO模塊的初始化信息,并將獲取的初始化信息保存到所述DSDT。
本發(fā)明第四方面提供了一種處理器,該處理器設(shè)置于X86系統(tǒng)中,該X86系統(tǒng)通過熱插拔方式熱移除第二CPU,可包括:
檢測模塊,用于調(diào)用基本輸入輸出系統(tǒng)BIOS檢測需要熱移除的第二CPU;
資源調(diào)整模塊,用于從差別化系統(tǒng)描述表DSDT獲取上述第二CPU中集成的內(nèi)部輸入輸出IIO模塊的初始化信息,上述初始化信息用于調(diào)整輸入輸出 虛擬化資源;根據(jù)上述初始化信息,刪除輸入輸出虛擬化資源以實(shí)現(xiàn)上述第二CPU的熱移除。
可選地,本發(fā)明第四方面提供的初始化信息至少包括設(shè)備類型、分段號、總線號、所占用的內(nèi)存地址區(qū)間、所述內(nèi)存地址區(qū)間對應(yīng)的親和域。
本發(fā)明一些實(shí)施例中,上述檢測模塊還用于,在所述X86系統(tǒng)初始化時,調(diào)用所述BIOS檢測所述X86系統(tǒng)中已添加的所述第二CPU和其它CPU,獲取所述第二CPU中集成的IIO模塊的初始化信息和所述其它CPU中集成的IIO模塊的初始化信息,并將獲取的初始化信息保存到所述DSDT。
在本發(fā)明另一些實(shí)施例中,上述檢測模塊還用于,調(diào)用所述BIOS檢測到所述第二CPU熱添加進(jìn)來,獲取所述第二CPU集成的IIO模塊的初始化信息,并將所述第二CPU的IIO模塊的初始化信息保存到所述DSDT。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例的技術(shù)方案,下面將對本發(fā)明實(shí)施例中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實(shí)施例提供的輸入輸出虛擬化資源的調(diào)整方法的流程示意圖;
圖2為本發(fā)明實(shí)施例提供的處理器的結(jié)構(gòu)示意圖;
圖3為本發(fā)明實(shí)施例提供的處理器的另一結(jié)構(gòu)示意圖;
圖4為本發(fā)明實(shí)施例提供的處理器的另一結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
本發(fā)明實(shí)施例提供了一種輸入輸出虛擬化資源的調(diào)整方法,用于實(shí)現(xiàn)集成有IIO模塊的CPU的熱插拔。本發(fā)明實(shí)施例還提供了一種輸入輸出虛擬化 資源的調(diào)整方法對應(yīng)的處理器。
本發(fā)明可以應(yīng)用于一些服務(wù)器,如英特爾(intel)的X86系統(tǒng),在intel X86系統(tǒng)中安裝有一個CPU(比如Legacy),該CPU通過藍(lán)橋外掛安裝著BIOS程序的閃存(flash),在運(yùn)行時,通過將閃存中的BIOS程序拷貝到內(nèi)存進(jìn)行執(zhí)行,同時,intel X86系統(tǒng)的硬盤中安裝著操作系統(tǒng)(Operating System,簡稱OS),OS存儲著其它應(yīng)用程序,這些應(yīng)用程序?qū)⒂蒀PU調(diào)用執(zhí)行。通常而言,由于該CPU外掛安裝著BIOS的閃存,是不參與熱插拔操作的。X86系統(tǒng)需要處理的業(yè)務(wù)較多,單個CPU處理能力往往無法滿足,因此可以通過多CPU方式解決,并且通過熱插拔方式在intel X86系統(tǒng)中熱添加或熱移除其它CPU。
本發(fā)明實(shí)施例提供的CPU內(nèi)部集成IIO模塊,IIO模塊包括IOMMU,能夠?qū)崿F(xiàn)I/O虛擬化技術(shù)(Virtualization Technology–DMA,簡稱VT-d),也就是DMA重映射?,F(xiàn)有PCIe規(guī)范對PCIe根橋和根橋下的PCIe設(shè)備的熱插拔做了詳細(xì)介紹,另外,ACPI規(guī)范定義了IOAPIC的熱插拔,因此,要完成CPU熱插拔,在現(xiàn)有PCIe規(guī)范和ACPI規(guī)范基礎(chǔ)上,還需要相應(yīng)完成I/O虛擬化資源調(diào)整,包括在熱添加CPU時配置I/O虛擬化資源,以及在熱移除CPU時刪除I/O虛擬化資源。
OS和BIOS進(jìn)行數(shù)據(jù)交換的方法可以有多種,其中與電源管理和設(shè)備配置相關(guān)的數(shù)據(jù)往往通過ACPI傳遞。由于OS一般是通用的,不了解硬件的特征,而BIOS是隨著硬件定制的,對硬件特征有足夠的了解,因此BIOS可以通過ACPI將硬件的一些特征抽象為ACPI的數(shù)據(jù)傳遞給OS。
ACPI簡單來說就是提供了很多種數(shù)據(jù)表格,每種表格描述了一類硬件的一些特性。用于保存初始化信息的表格即為DMAR表,其中,DMAR表中保存了CPU中IIO模塊的初始化信息,該初始化信息包括設(shè)備類型、分段號(Segment Number)、總線號(Bus Number)、所占用的內(nèi)存地址區(qū)間、該內(nèi)存地址區(qū)間對應(yīng)的親和域(Proximity Domain)以及支持高級翻譯服務(wù)(Advanced Translation Services,簡稱ATS)等。
在X86系統(tǒng)啟動時,BIOS啟動進(jìn)入環(huán)境配置階段(Driver Execution Environment,簡稱DXE)時,CPU的IIO模塊初始化生成DMAR表。但是, ACPI規(guī)范定義的DMAR表是一個靜態(tài)表,也就是一旦生成,內(nèi)容無法更改,也就無法適應(yīng)熱插拔的需求。因?yàn)闊岵灏伟l(fā)生時,設(shè)備所分配到的地址區(qū)間、地址區(qū)間所對應(yīng)的親和域,以及所管理的下游設(shè)備等信息都是有可能發(fā)生變化的,在X86系統(tǒng)運(yùn)行過程中,當(dāng)有CPU熱添加時,OS對其IIO模塊的初始化信息就不能再從DMAR獲取,因?yàn)镈MAR中的初始化信息是開機(jī)啟動時的狀態(tài),未包括熱添加進(jìn)來的IIO模塊的初始化信息。當(dāng)有CPU熱移除時,DMAR中的該IIO模塊的初始化信息也不會同時被刪除。在這兩種情況下,都會造成DMAR中的信息跟X86系統(tǒng)的狀態(tài)不符合。
而ACPI規(guī)范提供了一類表格DSDT,是一種描述動態(tài)變化的表,可以用于描述同一個系統(tǒng)中多個同類設(shè)備的個體差異,或者動態(tài)反映一個設(shè)備在不同時期的狀態(tài)差異。在本發(fā)明實(shí)施例中采用該DSDT來保存熱插拔相關(guān)的CPU的IIO模塊的初始化信息,從而使得第一CPU在任何時候都能獲取到X86系統(tǒng)當(dāng)前所有CPU的IIO模塊的初始化信息。因此,在本發(fā)明實(shí)施例中將利用現(xiàn)有的DSDT進(jìn)行及時更新CPU的IIO模塊的初始化信息,使得OS能夠?qū)崟r從DSDT表中獲取到當(dāng)前CPU的IIO模塊的初始化信息。
下面將以具體實(shí)施例,對本發(fā)明進(jìn)行詳細(xì)介紹。
請參閱圖1,圖1為本發(fā)明實(shí)施例提供的輸入輸出虛擬化資源的調(diào)整方法流程示意圖;如圖1所示,一種輸入輸出虛擬化資源的調(diào)整方法,可包括:
101、啟動X86系統(tǒng);
102、第一CPU通過BIOS檢測X86系統(tǒng)中已添加的其它CPU,獲取其它CPU集成的IIO模塊的初始化信息,生成DMAR表;
這里所指的其它CPU是不包括第一CPU在內(nèi)的其它可以以熱插拔方式進(jìn)行熱添加或熱移除的CPU。本發(fā)明實(shí)施例中所指的第一CPU為上述介紹的通過藍(lán)橋外掛flash的CPU(可以為Legacy),該flash中存儲有BIOS程序。
在本發(fā)明實(shí)施例中,DMAR表根據(jù)IIO模塊的初始化信息生成,DMAR表包括所有其它CPU集成的IIO模塊的初始化信息。每一個CPU中的IIO模塊都具有自己的設(shè)備標(biāo)識(例如設(shè)備編號),因此,在DMAR表中可以以IIO模塊的設(shè)備標(biāo)識區(qū)分保存。且此時兩份表格的初始化信息一致。
可以理解,是由BIOS通過ACPI將初始化時硬件的信息抽象成初始化信 息生成DMAR表。
103、第一CPU通過BIOS將DMAR表中的IIO模塊的初始化信息拷貝到DSDT;
可以理解,在生成DMAR表后,將DMAR表中的IIO模塊的初始化信息拷貝到DSDT中,在DSDT中IIO模塊的初始化信息同樣以設(shè)備標(biāo)識進(jìn)行區(qū)分保存。
在本發(fā)明一些實(shí)施例中,在X86系統(tǒng)啟動時,BIOS在內(nèi)存中申請到一個自定義內(nèi)存,然后將DMAR中的IIO模塊的初始化信息拷貝到自定義內(nèi)存中,且以DSDT的格式將初始化信息保存到自定義內(nèi)存。在DSDT中定義關(guān)鍵字,利用該關(guān)鍵字與自定義內(nèi)存建立關(guān)聯(lián),在后續(xù)OS從DSDT中獲取初始化信息時,則可以通過該關(guān)聯(lián)關(guān)系從自定義內(nèi)存中獲取(具體實(shí)現(xiàn)流程將在后續(xù)介紹)。
104、第一CPU通過BIOS檢測到熱添加進(jìn)來的第二CPU時,獲取第二CPU集成的IIO模塊的初始化信息,將第二CPU的IIO模塊的初始化信息添加到上述DSDT;
在CPU熱添加時,將會有IIO模塊的初始化程序運(yùn)行,這些程序運(yùn)行在BIOS的系統(tǒng)管理中斷模式(System Management Mode,簡稱SMM)下。因此,BIOS能夠感知到第二CPU的IIO模塊的初始化信息并獲取,再通過ACPI將獲取到的第二CPU的IIO模塊保存進(jìn)上述DSDT表(此時的DSDT已將X86系統(tǒng)初始化時所有其它CPU的IIO模塊的初始化信息保存進(jìn)來,那么在此基礎(chǔ)上將添加進(jìn)第二CPU的IIO模塊的初始化信息),第二CPU的IIO模塊的初始化信息同樣以設(shè)備標(biāo)識進(jìn)行保存。此時DSDT中將比DMAR表多了第二CPU的IIO模塊的初始化信息。
在本發(fā)明一些實(shí)施例中,同樣是通過將第二CPU的IIO模塊的初始化信息保存到上述自定義內(nèi)存中,由于自定義內(nèi)存與DSDT表的關(guān)聯(lián),從而實(shí)現(xiàn)將第二CPU的IIO模塊的初始化信息保存到DSDT表。
執(zhí)行完步驟104后轉(zhuǎn)向步驟105。
105、第一CPU從DSDT讀取第二CPU的IIO模塊的初始化信息,配置輸入輸出虛擬化資源以完成該第二CPU的熱添加;
需要說明,在CPU熱添加時,除了完成對熱添加的第二CPU的IIO模塊的初始化信息的配置,還創(chuàng)建相應(yīng)的數(shù)據(jù)結(jié)構(gòu),同時,也將分配PCIe根橋和IOAPIC的資源和創(chuàng)建相關(guān)數(shù)據(jù)結(jié)構(gòu)。
其中,輸入輸出虛擬化資源配置是根據(jù)第二CPU的IIO模塊的初始化信息完成,具體是為IIO模塊配置分段號、對應(yīng)的內(nèi)存地址區(qū)間、內(nèi)存地址區(qū)間對應(yīng)的親和域等,以便在該IIO模塊外接I/O設(shè)備時,該I/O設(shè)備能夠利用這些資源。
在本發(fā)明一些實(shí)施例中,第二CPU的IIO模塊的初始化信息是保存在自定義內(nèi)存中,那么DSDT可以讓OS根據(jù)其與自定義內(nèi)存的關(guān)聯(lián)關(guān)系獲取自定義內(nèi)存中的初始化信息很重要的一個原因是,DSDT中提供了一種叫做“Method”的機(jī)制。DSDT中的方法(Method)通過描述一種行為來告訴OS的ACPI驅(qū)動應(yīng)該做什么來獲取相應(yīng)的信息。比如DSDT提供的Method(_GSB),當(dāng)寫成返回(120)即return(120)的時候,表示每次OS想獲取_GSB的值時,ACPI驅(qū)動將讀到120。也可以將該方法改寫成return(XXXX),則表示每次OS想獲取_GSB的值時,ACPI驅(qū)動將讀到XXXX這個變量的值,而XXXX的值可以由開發(fā)者根據(jù)用戶需要設(shè)置。
DSDT的開發(fā)軟件中包括諸多設(shè)備描述,是按照包含與被包含的層級關(guān)系來排布的。比如IIO模塊包含PCIE根橋、IOAPIC、IOMMU三個部分,也就是三個子設(shè)備,可以在DSDT中表示為:
上述偽代碼僅用來示意層級排布的表達(dá)方式,并且假設(shè)I/O虛擬化在ACPI規(guī)范中定義了_HID。關(guān)鍵字設(shè)備(Device)后面用一對大括號表示包含關(guān)系,稱為域(Scope),上述偽代碼中將PCIE根橋、IOAPIC、VT-d三個子設(shè)備放在IIO模塊的域中,表示這三個設(shè)備是屬于IIO模塊的設(shè)備。
這里進(jìn)一步介紹一下方法Method(_DSM),其中,_DSM(Device Specific Method)是由ACPI規(guī)范定義的用來給主板和操作系統(tǒng)的開發(fā)者自定義功能的方法。也就是說,只要符合_DSM的輸出、輸出參數(shù)要求,開發(fā)者可以用_DSM為某個設(shè)備自定義功能。_DSM的傳入4個參數(shù)包括設(shè)備的通用唯一標(biāo)識符(Universally Unique Identifier,簡稱UUID)、版本號、功能號和一個定制參數(shù)包,而輸出則為一個數(shù)據(jù)緩存塊。所以只要DSDT的提供者(BIOS)與DSDT的消費(fèi)者(OS的ACPI驅(qū)動)約定好_DSM的輸入、輸出參數(shù),就可以實(shí)現(xiàn)向OS相對實(shí)時提供IIO模塊的初始化信息。
為了進(jìn)行I/O虛擬化資源的調(diào)整,就在每個IIO模塊的scope中放入一個_DSM Method,在進(jìn)行CPU熱插拔時,OS通過ACPI驅(qū)動利用設(shè)備的包含關(guān)系找到對應(yīng)的_DSM,然后在通過_DSM的返回參數(shù)獲得IIO模塊的初始化信息。例如可以簡單表示如下:
因此,在本發(fā)明實(shí)施例中,通過將Method(_DSM)描述一個行為就是:將“自定義內(nèi)容”的數(shù)據(jù)拷貝到ACPI緩存,并將ACPI緩存作為Method(_DSM)的返回值,從而第一CPU(也就是OS)能夠獲取到自定義內(nèi)存中的初始化信息。
106、第一CPU通過BIOS檢測有需要熱移除的第三CPU;
其中,該第三CPU可以是上述步驟102中的其它CPU中的任意一個或者上述步驟104中的第二CPU。同樣,在X86系統(tǒng)運(yùn)行過程中,如有CPU要熱移除,BIOS同樣能夠感知得到。
107、第一CPU從DSDT獲取第三CPU集成的IIO模塊的初始化信息,刪除輸入輸出虛擬化資源以完成該第三CPU的熱移除。
X86系統(tǒng)運(yùn)行過程中,如果有CPU熱移除,從DSDT中獲取初始化信息,然后將I/O虛擬化資源停用,并且刪除相應(yīng)的數(shù)據(jù)結(jié)構(gòu)。當(dāng)然,還需要將PCIe根橋和IOAPIC對應(yīng)的資源停用,使得要被移除的設(shè)備不再被分配到物理資 源,并控制其斷電,以便將整個CPU從硬件系統(tǒng)中拔出。
可以看出,本發(fā)明實(shí)施例中,利用ACPI提供的動態(tài)表DSDT,在X86系統(tǒng)初始化時,將X86系統(tǒng)中已添加的CPU的IIO模塊的初始化信息保存到改DSDT表。在X86系統(tǒng)運(yùn)行過程中,若有熱添加的CPU,則將熱添加的CPU的IIO模塊的初始化信息也保存到該DSDT,并且從該DSDT讀取添加進(jìn)去的初始化信息完成該CPU的熱添加。之后,若需要對X86系統(tǒng)中當(dāng)前的CPU熱移除時,則可以從DSDT表中獲取熱移除的CPU的IIO模塊的初始化信息,以完成該CPU的熱移除。
請參閱圖2,圖2為本發(fā)明實(shí)施例提供的處理器的結(jié)構(gòu)示意圖;如圖2所示,該處理器設(shè)置于X86系統(tǒng)中,該X86系統(tǒng)通過熱插拔方式熱添加第二CPU,該處理器可包括:
檢測模塊210,用于調(diào)用基本輸入輸出系統(tǒng)BIOS檢測到熱添加進(jìn)來的第二CPU,獲取集成在所述第二CPU上的內(nèi)部輸入輸出IIO模塊的初始化信息,并將所述初始化信息保存到差別化系統(tǒng)描述表DSDT,所述初始化信息用于調(diào)整輸入輸出虛擬化資源;
資源調(diào)整模塊220,用于根據(jù)所述DSDT中的所述初始化信息,配置輸入輸出虛擬化資源以完成所述第二CPU的熱添加。
可選地,上述初始化信息至少包括設(shè)備類型、分段號、總線號、所占用的內(nèi)存地址區(qū)間、所述內(nèi)存地址區(qū)間對應(yīng)的親和域。
在本發(fā)明一些實(shí)施例中,上述檢測模塊210還用于,在所述X86系統(tǒng)初始化時,調(diào)用所述BIOS檢測所述X86系統(tǒng)中已添加的其它第二CPU,獲取所述其它CPU中集成的IIO模塊的初始化信息,并將獲取的初始化信息保存到所述DSDT。
請參閱圖3,圖3為本發(fā)明實(shí)施例提供的處理器的另一結(jié)構(gòu)示意圖;如圖3所示,該處理器設(shè)置于X86系統(tǒng)中,該X86統(tǒng)通過熱插拔方式熱添加第二CPU,該處理器可可包括:
檢測模塊310,用于調(diào)用基本輸入輸出系統(tǒng)BIOS檢測需要熱移除的第二CPU;
資源調(diào)整模塊320,用于從差別化系統(tǒng)描述表DSDT獲取所述第二CPU 中集成的內(nèi)部輸入輸出IIO模塊的初始化信息,所述初始化信息用于調(diào)整輸入輸出虛擬化資源;根據(jù)所述初始化信息,刪除輸入輸出虛擬化資源以實(shí)現(xiàn)所述第二CPU的熱移除。
可選地,初始化信息至少包括設(shè)備類型、分段號、總線號、所占用的內(nèi)存地址區(qū)間、所述內(nèi)存地址區(qū)間對應(yīng)的親和域。
在本發(fā)明一些實(shí)施例中,上述檢測模塊310還用于,在所述X86系統(tǒng)初始化時,調(diào)用所述BIOS檢測所述X86系統(tǒng)中已添加的所述第二CPU和其它CPU,獲取所述第二CPU中集成的IIO模塊的初始化信息和所述其它CPU中集成的IIO模塊的初始化信息,并將獲取的初始化信息保存到所述DSDT。
在本發(fā)明一些實(shí)施例中,上述檢測模塊310還用于,調(diào)用所述BIOS檢測到所述第二CPU熱添加進(jìn)來,獲取所述第二CPU集成的IIO模塊的初始化信息,并將所述第二CPU的IIO模塊的初始化信息保存到所述DSDT。
請參考圖4,圖4為本發(fā)明實(shí)施例提供的處理器的另一結(jié)構(gòu)示意圖,其中,該處理器401通過至少一個通信總線與至少一個網(wǎng)絡(luò)接口或者其它通信接口、存儲器402連接通信。所述處理器401用于執(zhí)行存儲器中存儲的可執(zhí)行模塊,例如計(jì)算機(jī)程序。所述存儲器402可能包含高速隨機(jī)存取存儲器(RAM,Random Access Memory),也可能還包括非不穩(wěn)定的存儲器(non-volatile memory),例如至少一個磁盤存儲器。通過至少一個網(wǎng)絡(luò)接口(可以是有線或者無線)實(shí)現(xiàn)該系統(tǒng)網(wǎng)關(guān)與至少一個其它網(wǎng)元之間的通信連接,可以使用互聯(lián)網(wǎng),廣域網(wǎng),本地網(wǎng),城域網(wǎng)等。
如圖4所示,在一些實(shí)施方式中,所述存儲器402中存儲了程序指令,程序指令可以被處理器401執(zhí)行,所述處理器401具體執(zhí)行以下步驟:調(diào)用基本輸入輸出系統(tǒng)BIOS檢測到熱添加進(jìn)來的第二CPU,獲取集成在所述第二CPU上的內(nèi)部輸入輸出IIO模塊的初始化信息,并將所述初始化信息保存到差別化系統(tǒng)描述表DSDT,所述初始化信息用于調(diào)整輸入輸出虛擬化資源;根據(jù)所述DSDT中的所述初始化信息,配置輸入輸出虛擬化資源以完成所述第二CPU的熱添加;
或者,調(diào)用基本輸入輸出系統(tǒng)BIOS檢測需要熱移除的第二CPU;從差別化系統(tǒng)描述表DSDT獲取所述第二CPU中集成的內(nèi)部輸入輸出IIO模塊的 初始化信息,所述初始化信息用于調(diào)整輸入輸出虛擬化資源;根據(jù)所述初始化信息,刪除輸入輸出虛擬化資源以實(shí)現(xiàn)所述第二CPU的熱移除。
在一些實(shí)施方式中,所述處理器401還可以執(zhí)行以下步驟:在所述X86系統(tǒng)初始化時,調(diào)用所述BIOS檢測所述X86系統(tǒng)中已添加的其它CPU,獲取所述其它CPU中集成的IIO模塊的初始化信息,并將獲取的初始化信息保存到所述DSDT。
在一些實(shí)施方式中,所述處理器401還可以執(zhí)行以下步驟:在所述X86系統(tǒng)初始化時,調(diào)用所述BIOS檢測所述X86系統(tǒng)中已添加的所述第二CPU和其它CPU,獲取所述第二CPU中集成的IIO模塊的初始化信息和所述其它CPU中集成IIO模塊的初始化信息,并將獲取的初始化信息保存到所述DSDT。
在一些實(shí)施方式中,所述處理器401還可以執(zhí)行以下步驟:調(diào)用所述BIOS檢測到所述第二CPU熱添加進(jìn)來,獲取所述第二CPU集成的IIO模塊的初始化信息,并將所述第二CPU的IIO模塊的初始化信息保存到所述DSDT。
在上述實(shí)施例中,對各個實(shí)施例的描述都各有側(cè)重,某個實(shí)施例中沒有詳述的部分,可以參見其他實(shí)施例的相關(guān)描述。
所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡潔,上述描述的系統(tǒng),裝置和單元的具體工作過程,可以參考前述方法實(shí)施例中的對應(yīng)過程,在此不再贅述。
在本申請所提供的幾個實(shí)施例中,應(yīng)該理解到,所揭露的系統(tǒng),裝置和方法,可以通過其它的方式實(shí)現(xiàn)。例如,以上所描述的裝置實(shí)施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時可以有另外的劃分方式,例如多個單元或組件可以結(jié)合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機(jī)械或其它的形式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或 者全部單元來實(shí)現(xiàn)本實(shí)施例方案的目的。
另外,在本發(fā)明各個實(shí)施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨(dú)物理存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能單元的形式實(shí)現(xiàn)。
所述集成的單元如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時,可以存儲在一個計(jì)算機(jī)可讀取存儲介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計(jì)算機(jī)設(shè)備(可以是個人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實(shí)施例所述方法的全部或部分步驟。而前述的存儲介質(zhì)包括:U盤、移動硬盤、只讀存儲器(ROM,Read-Only Memory)、隨機(jī)存取存儲器(RAM,Random Access Memory)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
以上對本發(fā)明所提供的一種輸入輸出虛擬化資源的調(diào)整方法及處理器進(jìn)行了詳細(xì)介紹,對于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明實(shí)施例的思想,在具體實(shí)施方式及應(yīng)用范圍上均會有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對本發(fā)明的限制。