本發(fā)明涉及資源分配技術(shù)領(lǐng)域,尤其是涉及一種系統(tǒng)及其動(dòng)態(tài)分配MMIO資源的方法。
背景技術(shù):
現(xiàn)有的大部分系統(tǒng),例如X86系統(tǒng)中,大部分的PCI(Peripheral Component Interconnect,外設(shè)部件互連標(biāo)準(zhǔn))設(shè)備都需要用到32位的MMIO(Memory mapping I/O,內(nèi)存映射I/O)資源,通常我們將32位的MMIO資源稱(chēng)為MMIOL(Memory Map IO Low,低內(nèi)存映射I/O)資源。
MMIOL資源通常位于系統(tǒng)的內(nèi)存地址4GB以下。在多節(jié)點(diǎn)大系統(tǒng)中,由于系統(tǒng)中CPU(Central Processing Unit,中央處理器)數(shù)量比較多,PCI設(shè)備所需的MMIOL資源顯得比較緊缺。如何合理的分配MMIOL資源顯得尤為重要,現(xiàn)有技術(shù)提供了兩種MMIOL資源的分配方案,具體如下文所述。
第一種分配方案:
屬于完全固定的MMIOL資源分配方式。具體而言,每個(gè)物理CPU所分配到的MMIOL資源的大小都是不變的。例如,若MMIOL資源的大小為2GB,規(guī)定每個(gè)CPU分配32MB的MMIOL資源。則在64個(gè)CPU組成的NC系統(tǒng)中,MMIOL資源全部分配到每個(gè)CPU中。但在32個(gè)CPU組成的NC系統(tǒng)中,由于每個(gè)CPU同樣是分配到32MB的MMIOL資源,則會(huì)剩余1GB的MMIOL資源,由此造成資源的浪費(fèi)。
第二種分配方案:
屬于不完全固定的MMIOL資源分配方式。具體而言,不論多節(jié)點(diǎn)系統(tǒng)的規(guī)模是多大,系統(tǒng)中所有的MMIOL資源都會(huì)被分配完。例如, 若MMIOL資源的大小為2GB,則在64個(gè)CPU組成的NC系統(tǒng)中,每個(gè)CPU分配到32MB的MMIOL資源中。在32個(gè)CPU組成的NC系統(tǒng)中,每個(gè)CPU分配到64MB的MMIOL資源。
綜上,現(xiàn)有技術(shù)的兩種分配方案都是分配給CPU固定的MMIOL資源,如果在某個(gè)CPU上多插幾個(gè)PCI設(shè)備,則很可能導(dǎo)致資源不足而導(dǎo)致設(shè)備無(wú)法使用。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明主要解決的技術(shù)問(wèn)題是提供一種系統(tǒng)及其動(dòng)態(tài)分配MMIO資源的方法,能夠動(dòng)態(tài)分配MMIO資源,以解決某個(gè)或某幾個(gè)CPU上MMIO資源不夠而導(dǎo)致的設(shè)備無(wú)法使用的問(wèn)題,并且實(shí)現(xiàn)MMIO資源充分利用。
第一方面提供一種系統(tǒng)動(dòng)態(tài)分配MMIO資源的方法,方法包括以下步驟:獲取一CPU所需的MMIO資源的大小;查詢(xún)內(nèi)存地址空間中的MMIO資源空余的地址段;判斷內(nèi)存地址空間中的MMIO資源空余的地址段是否大于或等于CPU所需的MMIO資源的大小,并在判斷的結(jié)果為是時(shí),從空余的地址段中分配對(duì)應(yīng)大小的地址段給CPU。
在第一方面的第一種可能的實(shí)現(xiàn)方式中,方法還包括:在判斷的結(jié)果為否時(shí),不進(jìn)行MMIO資源的地址段的分配,并返回錯(cuò)誤提示。
在第一方面的第二種可能的實(shí)現(xiàn)方式中,方法還包括:枚舉CPU的PCI設(shè)備,并根據(jù)PCI設(shè)備來(lái)計(jì)算CPU所需的MMIO資源的大小。
在第一方面的第三種可能的實(shí)現(xiàn)方式中,從空余的地址段中分配對(duì)應(yīng)大小的地址段給CPU的步驟還包括:對(duì)對(duì)應(yīng)大小的地址段設(shè)置譯碼規(guī)則,然后再將設(shè)置了譯碼規(guī)則的對(duì)應(yīng)大小的地址段分配給CPU,使得CPU可以根據(jù)譯碼規(guī)則去訪問(wèn)對(duì)應(yīng)大小的地址段。
在第一方面的第四種可能的實(shí)現(xiàn)方式中,方法還包括:判斷是否給每一個(gè)CPU都分配了對(duì)應(yīng)大小的地址段,并在判斷的結(jié)果為否時(shí)繼續(xù)執(zhí)行獲取CPU所需的MMIO資源的大小的步驟,以給未分配對(duì)應(yīng)大小的地址段的CPU分配MMIO資源空余的地址段。
在第一方面的第五種可能的實(shí)現(xiàn)方式中,MMIO資源的大小為1GB-2GB。
第二方面提供一種系統(tǒng),系統(tǒng)包括至少一個(gè)節(jié)點(diǎn),至少一個(gè)節(jié)點(diǎn)包括至少一個(gè)CPU和節(jié)點(diǎn)控制器,其中,節(jié)點(diǎn)控制器與至少一個(gè)CPU電連接,系統(tǒng)包括:獲取模塊,用于獲取CPU所需的MMIO資源的大?。徊樵?xún)模塊,用于查詢(xún)內(nèi)存地址空間中的MMIO資源空余的地址段,進(jìn)一步判斷內(nèi)存地址空間中的MMIO資源空余的地址段是否大于或等于CPU所需的MMIO資源的大?。环峙淠K,用于在查詢(xún)模塊判斷的結(jié)果為是時(shí),從空余的地址段中分配對(duì)應(yīng)大小的地址段給CPU。
在第二方面的第一種可能的實(shí)現(xiàn)方式中,分配模塊在查詢(xún)模塊判斷的結(jié)果為否時(shí),不進(jìn)行MMIO資源的地址段的分配,并返回錯(cuò)誤提示。
在第二方面的第二種可能的實(shí)現(xiàn)方式中,獲取模塊枚舉CPU的PCI設(shè)備,并根據(jù)PCI設(shè)備來(lái)計(jì)算CPU所需的MMIO資源的大小。
在第二方面的第三種可能的實(shí)現(xiàn)方式中,分配模塊進(jìn)一步用于對(duì)對(duì)應(yīng)大小的地址段設(shè)置譯碼規(guī)則,然后再將設(shè)置了譯碼規(guī)則的對(duì)應(yīng)大小的地址段分配給CPU,使得CPU可以根據(jù)譯碼規(guī)則去訪問(wèn)對(duì)應(yīng)大小的地址段。
在第二方面的第四種可能的實(shí)現(xiàn)方式中,至少一個(gè)節(jié)點(diǎn)包括多個(gè)CPU,多個(gè)CPU均與節(jié)點(diǎn)控制器電連;查詢(xún)模塊進(jìn)一步判斷是否給每一個(gè)CPU都分配了對(duì)應(yīng)大小的地址段;獲取模塊在查詢(xún)模塊判斷的結(jié)果為否時(shí)繼續(xù)執(zhí)行獲取CPU所需的MMIO資源的大小,以給未分配對(duì)應(yīng)大小的地址段的CPU分配MMIO資源空余的地址段。
在第二方面的第五種可能的實(shí)現(xiàn)方式中,MMIO資源的大小為1GB-2GB。
本發(fā)明的有益效果是:區(qū)別于現(xiàn)有技術(shù)的情況,本發(fā)明的系統(tǒng)動(dòng)態(tài)分配MMIO資源的方法為:首先獲取一CPU所需的MMIO資源的大小,然后查詢(xún)內(nèi)存地址空間中的MMIO資源空余的地址段,最后判斷內(nèi)存地址空間中的MMIO資源空余的地址段是否大于或等于該CPU所需的MMIO資源的大小,并在判斷的結(jié)果為是時(shí),從空余的地址段中分配對(duì) 應(yīng)大小的地址段給該CPU。因此,本發(fā)明可以動(dòng)態(tài)的提供對(duì)應(yīng)大小的MMIO資源給CPU,以解決CPU上MMIO資源不夠而導(dǎo)致的設(shè)備無(wú)法使用的問(wèn)題,并且實(shí)現(xiàn)MMIO資源充分利用。
附圖說(shuō)明
圖1是本發(fā)明實(shí)施例提供的一種系統(tǒng)的結(jié)構(gòu)示意圖;
圖2是本發(fā)明實(shí)施例提供的一種系統(tǒng)的結(jié)構(gòu)框圖;
圖3是本發(fā)明的4GB以下的內(nèi)存地址空間的結(jié)構(gòu)示意圖;
圖4是本發(fā)明實(shí)施例提供的一種系統(tǒng)動(dòng)態(tài)分配MMIO資源的方法的流程圖。
具體實(shí)施方式
請(qǐng)一并參閱圖1和圖2,圖1是本發(fā)明實(shí)施例提供的一種系統(tǒng)的結(jié)構(gòu)示意圖,圖2是本發(fā)明實(shí)施例提供的一種系統(tǒng)的結(jié)構(gòu)框圖。如圖1所示,本發(fā)明的系統(tǒng)10包括至少一個(gè)節(jié)點(diǎn)11。其中,至少一個(gè)節(jié)點(diǎn)11包括至少一個(gè)CPU 110和節(jié)點(diǎn)控制器111,節(jié)點(diǎn)控制器111與至少一個(gè)CPU110電連接。
本實(shí)施例中,舉例系統(tǒng)10為多節(jié)點(diǎn)系統(tǒng),其包括多個(gè)節(jié)點(diǎn)11,應(yīng)理解圖1只是示例性的示出兩個(gè)節(jié)點(diǎn)11,并不該理解為對(duì)本實(shí)施例的系統(tǒng)10的節(jié)點(diǎn)數(shù)量的限制。其中,每個(gè)節(jié)點(diǎn)11包括兩個(gè)CPU 110和一個(gè)節(jié)點(diǎn)控制器111,并且每個(gè)CPU 110都與節(jié)點(diǎn)控制器111電連接。
應(yīng)理解,在其他實(shí)施例中,系統(tǒng)10還可以為其他數(shù)量節(jié)點(diǎn)的系統(tǒng),并且每個(gè)節(jié)點(diǎn)的CPU 110數(shù)量和節(jié)點(diǎn)控制器111的數(shù)量也可以為其他。例如每個(gè)節(jié)點(diǎn)包括多個(gè)CPU,多個(gè)CPU均與節(jié)點(diǎn)控制器電連接。
本實(shí)施例中,多節(jié)點(diǎn)系統(tǒng)10優(yōu)選為X86系統(tǒng),其大部分的PCI設(shè)備都需要用到32位的MMIO資源,通常我們定義32位的MMIO資源稱(chēng)為MMIOL資源。32位的MMIO資源位于內(nèi)存地址空間的4GB以下。請(qǐng)參閱圖3所示,圖3是本發(fā)明的4GB以下的內(nèi)存地址空間的結(jié)構(gòu)示意圖。4GB以下內(nèi)存地址空間包括1~2GB的Memory(內(nèi)存)區(qū)間、256MB的MMCFGL(低內(nèi)存映射配置)空間、40MB左右的特殊空間以及1~2GB 的MMIO空間。MMIO空間即用來(lái)存儲(chǔ)MMIO資源。
如圖2所示,系統(tǒng)10包括獲取模塊14、查詢(xún)模塊15以及分配模塊16。其中,獲取模塊14用于獲取CPU 110所需的MMIO資源的大小。查詢(xún)模塊15用于查詢(xún)內(nèi)存地址空間中的MMIO資源空余的地址段,進(jìn)一步判斷內(nèi)存地址空間中的MMIO資源空余的地址段是否大于或等于CPU 110所需的MMIO資源的大小。分配模塊16用于在查詢(xún)模塊15判斷的結(jié)果為是時(shí),從空余的地址段中分配對(duì)應(yīng)大小的地址段給CPU 110。
進(jìn)一步的,分配模塊16在查詢(xún)模塊15判斷的結(jié)果為否時(shí),即判斷到內(nèi)存地址空間中的MMIO資源空余的地址段小于CPU 110所需的MMIO資源的大小時(shí),不進(jìn)行MMIO資源的地址段的分配,并返回錯(cuò)誤提示。
可選地,該錯(cuò)誤提示可以為提示資源不足,或提示CPU暫停運(yùn)行。
可選的,在返回錯(cuò)誤提示后,查詢(xún)模塊15周期性的查詢(xún)內(nèi)存地址空間中的MMIO資源的情況,在MMIO資源空余的地址段大于或等于該CPU 110所需的MMIO資源的大小時(shí),分配模塊16優(yōu)先給該CPU 110分配對(duì)應(yīng)大小的MMIO資源,使得該CPU 110可以及時(shí)回復(fù)運(yùn)行。
因此,本發(fā)明可以根據(jù)CPU 110的需求來(lái)動(dòng)態(tài)的提供對(duì)應(yīng)大小的MMIO資源給CPU 110。由此可以解決CPU 110上MMIO資源不夠而導(dǎo)致的設(shè)備無(wú)法使用的問(wèn)題,并且實(shí)現(xiàn)MMIO資源充分利用。
本實(shí)施例中,CPU 110通過(guò)IO接口與至少一個(gè)PCI設(shè)備13連接。其中,獲取模塊14獲取CPU 110所需的MMIO資源的大小具體為:首先枚舉CPU 110的PCI設(shè)備13,并根據(jù)PCI設(shè)備13來(lái)計(jì)算該CPU 110所需的MMIO資源的大小。
分配模塊16在獲取CPU 110所需的MMIO資源的地址段后,首先對(duì)該地址段設(shè)置譯碼規(guī)則,然后再將設(shè)置了譯碼規(guī)則的該地址段分配給CPU 110中,使得CPU可以根據(jù)譯碼規(guī)則去訪問(wèn)對(duì)應(yīng)大小的地址段。
具體而言,每一段地址在分配前都將進(jìn)行譯碼。分配模塊16具體包括地址譯碼器,作用是將內(nèi)存地址映射到對(duì)應(yīng)的物理存儲(chǔ)設(shè)備上,如PCI設(shè)備的EEROM(Electrically Erasable Programmable Read-Only Memory,電可擦可編程只讀存儲(chǔ)器)等。當(dāng)需要去訪問(wèn)該地址時(shí),地址譯碼器首先會(huì)將該地址翻譯為具體的物理存儲(chǔ)設(shè)備的編號(hào),然后CPU110再根據(jù)這個(gè)編號(hào)查找到具體物理設(shè)備存儲(chǔ)區(qū)間進(jìn)行讀寫(xiě)。通常來(lái)說(shuō),地址譯碼器會(huì)提供多組寄存器來(lái)配置地址空間,每配置一組地址空間就是一個(gè)譯碼規(guī)則條目,配置在里面的地址空間在之后的讀寫(xiě)訪問(wèn)時(shí)能被翻譯。
進(jìn)一步的,查詢(xún)模塊15在分配模塊16分配完一個(gè)CPU所需的MMIO資源后,還進(jìn)一步判斷是否給每一個(gè)CPU都分配了對(duì)應(yīng)大小的地址段。獲取模塊14在查詢(xún)模塊15判斷的結(jié)果為否時(shí)繼續(xù)執(zhí)行獲取CPU所需的MMIO資源的大小,以給未分配對(duì)應(yīng)大小的地址段的CPU分配MMIO資源空余的地址段。重復(fù)以上操作,直到所有的CPU都分配了對(duì)應(yīng)大小的MMIO資源。
本實(shí)施例中,獲取模塊14、查詢(xún)模塊15以及分配模塊16都是在BIOS(Basic Input Output System,基本輸入輸出系統(tǒng))中實(shí)現(xiàn)的。BIOS在系統(tǒng)上電時(shí)進(jìn)行硬件設(shè)備配置、檢查以及引導(dǎo)OS(Operating System,操作系統(tǒng))等功能。
本發(fā)明實(shí)施例還提供一種系統(tǒng)動(dòng)態(tài)分配MMIO資源的方法,該方法應(yīng)用于前文所述的系統(tǒng)中。具體而言,請(qǐng)參閱圖4,圖4是本發(fā)明實(shí)施例提供的一種動(dòng)態(tài)分配MMIO資源的方法的流程圖。
如圖4所示,該方法包括以下步驟:
步驟S1:獲取一CPU所需的MMIO資源的大小。
本步驟具體為枚舉CPU的PCI設(shè)備,并根據(jù)PCI設(shè)備來(lái)計(jì)算CPU所需的MMIO資源的大小。
步驟S2:查詢(xún)內(nèi)存地址空間中的MMIO資源空余的地址段??蛇x的,MMIO資源的大小為1GB-2GB。
步驟S3:判斷內(nèi)存地址空間中的MMIO資源空余的地址段是否大于或等于CPU所需的MMIO資源的大小。
本步驟中,在判斷的結(jié)果為是時(shí),跳轉(zhuǎn)到步驟S4。在判斷的結(jié)果為否時(shí),跳轉(zhuǎn)到步驟S5。
步驟S4:從空余的地址段中分配對(duì)應(yīng)大小的地址段給CPU。
本步驟具體為:首先對(duì)該對(duì)應(yīng)大小的地址段設(shè)置譯碼規(guī)則,然后再將設(shè)置了譯碼規(guī)則的地址段分配給CPU,使得CPU可以根據(jù)譯碼規(guī)則去訪問(wèn)對(duì)應(yīng)大小的地址段。
具體的,每一段地址在分配前都將進(jìn)行譯碼,作用是將內(nèi)存地址映射到對(duì)應(yīng)的物理存儲(chǔ)設(shè)備上,如PCI設(shè)備的EEROM等。當(dāng)需要去訪問(wèn)該地址時(shí),首先會(huì)將該地址翻譯為具體的物理存儲(chǔ)設(shè)備的編號(hào),然后在根據(jù)這個(gè)編號(hào)查找到具體物理設(shè)備存儲(chǔ)空間進(jìn)行讀寫(xiě)。通常來(lái)說(shuō),每配置一組地址空間就是一個(gè)譯碼規(guī)則條目,配置在里面的地址空間在之后的讀寫(xiě)訪問(wèn)時(shí)能被翻譯。
步驟S5:不進(jìn)行MMIO資源的地址段的分配,并返回錯(cuò)誤提示。
其中,本實(shí)施例的方法還進(jìn)一步判斷是否給每一個(gè)CPU都分配了對(duì)應(yīng)大小的地址段,并在判斷的結(jié)果為否時(shí)繼續(xù)執(zhí)行步驟S1-S5,以給未分配對(duì)應(yīng)大小的地址段的CPU分配MMIO資源空余的地址段。在判斷的結(jié)果為是時(shí),結(jié)束進(jìn)程。
綜上所述,本發(fā)明可以動(dòng)態(tài)的提供對(duì)應(yīng)大小的MMIO資源給CPU,以解決CPU上MMIO資源不夠而導(dǎo)致的設(shè)備無(wú)法使用的問(wèn)題,并且實(shí)現(xiàn)MMIO資源充分利用。
以上所述僅為本發(fā)明的實(shí)施例,并非因此限制本發(fā)明的專(zhuān)利范圍,凡是利用本發(fā)明說(shuō)明書(shū)及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運(yùn)用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專(zhuān)利保護(hù)范圍內(nèi)。