本發(fā)明涉及存儲技術(shù)領(lǐng)域,特別涉及一種熱添加CPU使能x2APIC的方法和服務(wù)器系統(tǒng)。
背景技術(shù):
隨著服務(wù)器行業(yè)的發(fā)展,對系統(tǒng)的穩(wěn)定性要求越來越高,系統(tǒng)容錯能力越來越重要。為了實現(xiàn)系統(tǒng)的容錯能力,服務(wù)器廠商發(fā)布的服務(wù)器具有的中央處理器(英文全稱:Central Processing Unit,英文簡稱:CPU)熱插拔、內(nèi)存熱插拔、PCI-E(PCI-Express)設(shè)備熱插拔特性便成了服務(wù)器的競爭力,目前,高端服務(wù)器系統(tǒng)中CPU熱插拔已成為不可或缺的特性。
一般來說,服務(wù)器系統(tǒng)由多個CPU組成,當(dāng)一個服務(wù)器系統(tǒng)的一個或多個CPU出現(xiàn)致命錯誤需要移除時,為了不影響整個系統(tǒng)的業(yè)務(wù)運(yùn)行,CPU熱插拔特性可以保證客戶不中斷業(yè)務(wù),CPU熱插拔過程中新添加的CPU需要重新加入到系統(tǒng)并且重新配置,包括寄存器及一些特性,比如中斷模式。
APIC(Advanced Programmable Interrupt Controller)是高級可編程中斷控制器,xAPIC是服務(wù)器系統(tǒng)中一種中斷模式,為Intel CPU提供中斷傳輸機(jī)制,但是xAPIC只支持8bit的邏輯APIC標(biāo)識符(ID),不能支持多節(jié)點大服務(wù)器系統(tǒng)(即超過256個邏輯CPU的服務(wù)器系統(tǒng)),而x2APIC是一種擴(kuò)展的xAPIC中斷模式,支持32bit的邏輯x2APIC ID。由于Intel CPU默認(rèn)的中斷傳輸方式是xAPIC,超過256個邏輯CPU的大服務(wù)器系統(tǒng)在啟動或熱添加時都必須使能x2APIC中斷模式。
熱添加CPU時主要是系統(tǒng)啟動線程(英文全稱:System Boot Strap Processor,英文簡稱:SBSP)運(yùn)行程序,在使用xAPIC中斷模式時,SBSP發(fā)處理器之間的中斷(Inter-Processor Interrupt,IPI)到熱添加CPU的處理器主線程(英文全稱:Processor Boot Strap Processor,英文簡稱:PBSP),使得熱添加CPU的PBSP廣播IPI到該熱添加CPU的所有處理器普通線程(英文全稱:Application Processor,英文簡稱:AP),收集該熱添加CPU的所有 AP的x2APIC ID,并返回給SBSP。
現(xiàn)有技術(shù)中,當(dāng)熱添加CPU與處理器主線程(英文全稱:Processor Boot Strap Processor,英文簡稱:SBSP)所在的CPU在不同節(jié)點(例如除節(jié)點0外的其他節(jié)點)時,此時熱添加CPU的所有線程的x2APIC ID都不能用8bit表示,所以SBSP不能向熱添加CPU的PBSP發(fā)定點IPI中斷,因為熱添加CPU上電時默認(rèn)為xAPIC模式,其APIC ID只有8bit,還未配置正確的APIC ID,而定點IPI中斷必須指定APIC ID,此時若發(fā)送定點IPI會出現(xiàn)兩種情況,以4節(jié)點16CPU為例:
(1)指定APIC ID為系統(tǒng)分配的值(0x0140),CPU5PBSP上電默認(rèn)為APIC模式,APIC ID默認(rèn)為0x40,PBSP將不能找到相應(yīng)的APIC ID而導(dǎo)致系統(tǒng)掛死。
(2)指定APIC ID為上電默認(rèn)值(0x40),將發(fā)送到本節(jié)點對應(yīng)的CPU的線程上(CPU 1的PBSP),而不能完成相應(yīng)功能。
如上所述,現(xiàn)有技術(shù)在熱添加CPU與SBSP所在的CPU在不同節(jié)點時無法實現(xiàn)熱添加CPU使能x2APIC。
技術(shù)實現(xiàn)要素:
本申請?zhí)峁┝艘环N熱添加CPU使能x2APIC的方法和服務(wù)器系統(tǒng),在熱添加CPU與SBSP所在的CPU在不同節(jié)點時有效實現(xiàn)了熱添加CPU使能x2APIC,實現(xiàn)方式簡單。
本申請中,第一方面提供一種熱添加CPU使能x2APIC的方法,所述方法應(yīng)用于服務(wù)器系統(tǒng),所述服務(wù)器系統(tǒng)包括第一CPU和第二CPU,所述第一CPU為所述服務(wù)器系統(tǒng)的系統(tǒng)啟動線程SBSP所在的CPU,所述第二CPU為加入系統(tǒng)拓?fù)浣Y(jié)構(gòu)且未完成使能x2APIC的熱添加CPU,所述第一CPU和所述第二CPU為不同節(jié)點中的CPU,所述第一CPU和所述第二CPU預(yù)設(shè)有一個兩者均可訪問的同步寄存器,所述方法包括:
所述第一CPU通過所述SBSP在所述同步寄存器保存所述第二CPU的節(jié)點標(biāo)識符ID;
所述第二CPU確定所述同步寄存器中是否保存了所述第二CPU的節(jié)點 ID,若是,利用所述第二CPU的節(jié)點ID和所述第二CPU的PBSP默認(rèn)的APIC ID,得到所述第二CPU的PBSP的x2APIC ID,并使能所述第二CPU的PBSP對應(yīng)的x2APIC寄存器;
所述第一CPU通過所述SBSP向標(biāo)識為目標(biāo)x2APIC ID的線程發(fā)送定點處理器間中斷IPI,所述目標(biāo)x2APIC ID與所述第二CPU的PBSP的x2APIC ID相同;
所述第二CPU通過自身的PBSP接收所述SBSP發(fā)送的定點IPI,并廣播IPI到所述第二CPU的所有AP,所述廣播IPI中包括所述第二CPU的節(jié)點ID,以使得各AP更新自身的x2APIC ID,使能各自對應(yīng)的x2APIC寄存器,并將更新的x2APIC ID返回給所述第二CPU的PBSP;
所述第二CPU通過自身的PBSP接收所有AP返回的x2APIC ID,并將所述第二CPU的SBSP的x2APIC ID以及所有AP的x2APIC ID,發(fā)送給所述SBSP;
所述第一CPU通過所述SBSP接收所述第二CPU的PBSP線程發(fā)送的所述第二CPU的PBSP的x2APIC ID和所有AP的x2APIC ID。
從上可知,SBSP所在的第一CPU和第二CPU不在同一個節(jié)點,SBSP所在的第一CPU和第二CPU設(shè)有兩者均可訪問的同步寄存器,SBSP通過在同步寄存器保存第二CPU的節(jié)點ID后,第二CPU的PBSP在確定同步寄存器中保存了第二CPU的節(jié)點ID之后,利用所述節(jié)點ID和第二CPU的PBSP默認(rèn)的APIC ID,得到第二CPU的PBSP的x2APIC ID,并配置使能第二CPU的PBSP對應(yīng)的x2APIC寄存器,所述SBSP通過同步寄存器中保存的第二CPU的x2APIC ID,發(fā)送定點IPI到第二CPU的PBSP,以使得SBSP實現(xiàn)收集第二CPU的PBSP的x2APIC ID和所有AP的x2APIC ID。本申請在熱添加CPU與SBSP所在的CPU在不同節(jié)點時有效實現(xiàn)了熱添加CPU使能x2APIC,實現(xiàn)方式簡單有效。
在第一方面的一些可能的實現(xiàn)方式中,在所述第一CPU通過所述SBSP在所述同步寄存器保存所述第二CPU的節(jié)點ID之前,所述方法還包括:
所述第一CPU通過所述SBSP選擇第二CPU的通用寄存器,作為所述第一CPU與所述第二CPU的同步寄存器。
這樣,將第二CPU的通用寄存器作為所述第一CPU與所述第二CPU的同步寄存器,使得第一CPU和第二CPU均可以訪問所述同步寄存器,是由于第二CPU訪問自身的通用寄存器更加方便,同時由于第一CPU是系統(tǒng)啟動線程所在的CPU,設(shè)置第二CPU的通用寄存器為所述同步寄存器,可以降低實現(xiàn)難度。
在第一方面的另一些可能的實現(xiàn)方式中,所述同步寄存器中存儲有標(biāo)識所述同步寄存器中是否保存了所述第二CPU的節(jié)點ID的目標(biāo)信息;
在所述第一CPU通過所述SBSP在所述同步寄存器保存所述第二CPU的節(jié)點ID之后,所述方法還包括:
所述第一CPU通過所述SBSP設(shè)置所述目標(biāo)信息以標(biāo)識所述同步寄存器中保存了所述第二CPU的節(jié)點ID;
所述第二CPU確定所述同步寄存器中是否保存了所述第二CPU的節(jié)點ID,包括:
所述第二CPU通過自身的處理器主線程PBSP通過讀取所述目標(biāo)信息,確定所述同步寄存器中保存了所述第二CPU的節(jié)點ID。
這樣,在所述同步寄存器中存儲有標(biāo)識所述同步寄存器中是否保存了所述第二CPU的節(jié)點ID的目標(biāo)信息時,第一CPU既可以設(shè)置所述目標(biāo)信息以標(biāo)識所述同步寄存器中保存了所述第二CPU的節(jié)點ID,這樣即可觸發(fā)第二CPU通過讀取所述目標(biāo)信息,進(jìn)而確定所述同步寄存器中保存了所述第二CPU的節(jié)點ID。
可選的,所述同步寄存器的第一個bit位信息為所述目標(biāo)信息,當(dāng)所述第一個bit位信息為1時,標(biāo)識所述同步寄存器中保存了所述第二CPU的節(jié)點ID;
所述第一CPU通過所述SBSP設(shè)置所述目標(biāo)信息以標(biāo)識所述同步寄存器中保存了所述第二CPU的節(jié)點ID,包括:
所述第一CPU通過所述SBSP將所述同步寄存器的第一個bit位信息設(shè)為1。
由于,第二CPU的通用寄存器是32位,有五個二進(jìn)制bit位,例如00000,將第一個bit位信息設(shè)為所述目標(biāo)信息,方便讀取確定,當(dāng)然,本申請中,所 述目標(biāo)信息也可以在通用寄存器的其它bit位,例如最后一位,此處不作限定。
進(jìn)一步可選的,當(dāng)所述服務(wù)器系統(tǒng)中每個節(jié)點中包括四個CPU時,所述第一CPU通過所述SBSP在所述同步寄存器保存所述第二CPU的節(jié)點ID,包括:
所述第一CPU通過所述SBSP在所述同步寄存器的第二個bit位和第三個bit位保存所述第二CPU的節(jié)點ID。
第二方面,提供了一種服務(wù)器系統(tǒng),所述服務(wù)器系統(tǒng)包括第一CPU和第二CPU,所述第一CPU為所述服務(wù)器系統(tǒng)的系統(tǒng)啟動線程SBSP所在的CPU,所述第二CPU為加入系統(tǒng)拓?fù)浣Y(jié)構(gòu)且未完成使能x2APIC的熱添加CPU,所述第一CPU和所述第二CPU為不同節(jié)點中的CPU,所述第一CPU和所述第二CPU預(yù)設(shè)有一個兩者均可訪問的同步寄存器;
所述第一CPU用于通過所述SBSP在所述同步寄存器保存所述第二CPU的ID;
所述第二CPU用于確定所述同步寄存器中是否保存了所述第二CPU的節(jié)點ID,若是,利用所述第二CPU的節(jié)點ID和所述第二CPU的PBSP默認(rèn)的APIC ID,得到所述第二CPU的PBSP的x2APIC ID,并使能所述第二CPU的PBSP對應(yīng)的x2APIC寄存器;
所述第一CPU還用于通過所述SBSP向標(biāo)識為目標(biāo)x2APIC ID的線程發(fā)送定點處理器間中斷IPI,所述目標(biāo)x2APIC ID與所述第二CPU的PBSP的x2APIC ID相同;
所述第二CPU還用于通過自身的PBSP接收所述SBSP發(fā)送的定點IPI,并廣播IPI到所述第二CPU的所有AP,所述廣播IPI中包括所述第二CPU的節(jié)點ID,以使得各AP更新自身的x2APIC ID,使能各自對應(yīng)的x2APIC寄存器,并將更新的x2APIC ID返回給所述第二CPU的PBSP;
所述第二CPU還用于通過自身的PBSP接收所有AP返回的x2APIC ID,并將所述第二CPU的SBSP的x2APIC ID以及所有AP的x2APIC ID,發(fā)送給所述SBSP;
所述第一CPU還用于通過所述SBSP接收所述第二CPU的PBSP線程發(fā)送的所述第二CPU的PBSP的x2APIC ID和所有AP的x2APIC ID。
本申請第二方面中,SBSP所在的第一CPU和第二CPU不在同一個節(jié)點,第一CPU和第二CPU設(shè)有兩者均可訪問的同步寄存器,SBSP通過在同步寄存器保存第二CPU的節(jié)點ID后,第二CPU的PBSP在確定同步寄存器中保存了第二CPU的節(jié)點ID之后,利用所述節(jié)點ID和熱添加CPU的PBSP默認(rèn)的APIC ID,得到第二CPU的PBSP的x2APIC ID,并配置使能第二CPU的PBSP對應(yīng)的x2APIC寄存器,所述SBSP通過同步寄存器中保存的第二CPU的x2APIC ID,發(fā)送定點IPI到第二CPU的PBSP,以使得SBSP實現(xiàn)收集第二CPU的PBSP的x2APIC ID和所有AP的x2APIC ID。本申請在熱添加CPU與SBSP所在的CPU在不同節(jié)點時有效實現(xiàn)了熱添加CPU使能x2APIC,實現(xiàn)方式簡單有效。
在第二方面的一些可能的實現(xiàn)方式中,所述第一CPU還用于在所述第一CPU通過所述SBSP在所述同步寄存器保存所述第二CPU的節(jié)點ID之前,通過所述SBSP選擇第二CPU的通用寄存器,作為所述第一CPU與所述第二CPU的同步寄存器。
在第二方面的另一些可能的實現(xiàn)方式中,所述同步寄存器中存儲有標(biāo)識所述同步寄存器中是否保存了所述第二CPU的節(jié)點ID的目標(biāo)信息;
所述第一CPU還用于在所述第一CPU通過所述SBSP在所述同步寄存器保存所述第二CPU的節(jié)點ID之后,通過所述SBSP設(shè)置所述目標(biāo)信息以標(biāo)識所述同步寄存器中保存了所述第二CPU的節(jié)點ID;
所述第二CPU具體用于通過自身的處理器主線程PBSP通過讀取所述目標(biāo)信息,確定所述同步寄存器中保存了所述第二CPU的節(jié)點ID。
可選的,所述同步寄存器的第一個bit位信息為所述目標(biāo)信息,當(dāng)所述第一個bit位信息為1時,標(biāo)識所述同步寄存器中保存了所述第二CPU的節(jié)點ID;
所述第一CPU具體用于通過所述SBSP將所述同步寄存器的第一個bit位信息設(shè)為1。
進(jìn)一步可選的,當(dāng)所述服務(wù)器系統(tǒng)中每個節(jié)點中包括四個CPU時,所述第一CPU具體用于通過所述SBSP在所述同步寄存器的第二個bit位和第三個 bit位保存所述第二CPU的節(jié)點ID。
從以上技術(shù)方案可以看出,本申請具有以下優(yōu)點:
本申請中,在熱添加CPU與SBSP所在的CPU在不同節(jié)點時有效實現(xiàn)了熱添加CPU使能x2APIC,實現(xiàn)方式簡單有效。
附圖說明
圖1是本申請中服務(wù)器系統(tǒng)的一個實施例示意圖;
圖2是本申請中熱添加CPU使能x2APIC的方法的一個實施例示意圖;
圖3是本申請中服務(wù)器系統(tǒng)的一個實施例示意圖。
具體實施方式
本申請?zhí)峁┝艘环N熱添加CPU使能x2APIC的方法和服務(wù)器系統(tǒng),在熱添加CPU與SBSP所在的CPU在不同節(jié)點時有效實現(xiàn)了熱添加CPU使能x2APIC,實現(xiàn)方式簡單有效。
為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下面將結(jié)合本申請中的附圖,對本申請中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分的實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都應(yīng)當(dāng)屬于本發(fā)明保護(hù)的范圍。
本發(fā)明的說明書和權(quán)利要求書及上述附圖中的術(shù)語“第一”、“第二”等(如果存在)是用于區(qū)別類似的對象,而不必用于描述特定的順序或先后次序。應(yīng)該理解這樣使用的數(shù)據(jù)在適當(dāng)情況下可以互換,以便這里描述的實施例能夠以除了在這里圖示或描述的內(nèi)容以外的順序?qū)嵤4送?,術(shù)語“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過程、方法、系統(tǒng)、產(chǎn)品或設(shè)備不必限于清楚地列出的那些步驟或單元,而是可包括沒有清楚地列出的或?qū)τ谶@些過程、方法、產(chǎn)品或設(shè)備固有的其它步驟或單元。
為了方便理解本發(fā)明實施例,首先,在此介紹本發(fā)明實施例描述中會引入的幾個要素;
固件(Firmware):就是寫入可擦寫只讀存儲器(Eraseable Read Only Me mory,EROM)或電可擦可編程只讀存儲器(Electrically Erasable Programm able Read-Only Memory,EEPROM)中的程序,固件擔(dān)任著一個系統(tǒng)最基礎(chǔ)最底層工作的軟件,而在硬件設(shè)備中,固件就是硬件設(shè)備的靈魂,因為一些硬件設(shè)備除了固件以外沒有其它軟件組成,因此固件也就決定著硬件設(shè)備的功能及性能。
IPI:Inter-Processor Interrupt(處理器之間的中斷),IPI是一種特別的中斷,在對稱多處理器(SMP)環(huán)境下,它可以被任意一個處理器用來對另一個處理器產(chǎn)生中斷。
APIC:(Advanced Programmable Interrupt Control)高級可編程中斷控制器,通常是指Intel(英特爾)CPU的中斷控制器;一般由兩部分組成:
IO APIC:位于南橋中,用于處理橋上的設(shè)備所產(chǎn)生的各種中斷。它用來接收IO設(shè)備所產(chǎn)生的中斷,并將其傳送給Local APIC,通常有24個輸入。
Local APIC:位于CPU中,每個CPU都有一個,負(fù)責(zé)傳送中斷至指定的處理器,Local APIC可以接收以下中斷源所發(fā)出的中斷:1.外部的中斷設(shè)備:
這些IO設(shè)備連接到IO APIC的INTIN pin,其產(chǎn)生的中斷請求信息通過IO APIC傳送到Local APIC;2.處理器之間的中斷(IPI):處理器通過寫ICR(Interrupt Command Register)可以觸發(fā)IPI。
目前,APIC架構(gòu)的包括如下版本:
(1)APIC
Intel P6系列CPU使用,Local APIC與IO APIC之間通過APIC BUS(總線)通信。
(2)xAPIC
Intel Pentium 4及至強(qiáng)Xeon系列CPU使用,Local APIC與IO APIC之間通過System BUS通信,xAPIC是APIC架構(gòu)中一些功能的擴(kuò)展或修改。
(3)x2APIC
x2APIC是xAPIC架構(gòu)的進(jìn)一步擴(kuò)展,主要是提升了處理器尋址能力 (processor address ability),x2APIC架構(gòu)提供向后兼容(即兼容xAPIC)和向前擴(kuò)展(即未來Intel新平臺)的能力。
在xAPIC模式中,寄存器是通過內(nèi)存映射到一段物理地址。有一個默認(rèn)值,防止同其他地址沖突,這個地址又可以重新指定到另外一個地方,BIOS開發(fā)人員在對付APIC時可能會用到這個功能。
本申請中,多節(jié)點大服務(wù)器系統(tǒng)指的是超過256個邏輯CPU的多節(jié)點服務(wù)器系統(tǒng),如圖1所示,為一種服務(wù)器系統(tǒng)中的示意圖,其中,每4個CPU是一個節(jié)點(如圖1中CPU0、CPU1、CPU2、CPU3),一般情況下,插在同一個單板上的CPU為同一個節(jié)點的CPU,不通過節(jié)點控制器(Node Controller,NC)就能夠互相通信的CPU屬于同一個節(jié)點,例如通過CPU之間的快速通道互聯(lián)(英文全稱:Quick Path Interconnect,英文簡稱:QPI)總線進(jìn)行CPU間的通信。同一個節(jié)點的CPU連接同一個NC,屬于同一個QPI,Cpu間以及Cpu和NC都通過QPI總線互連。
每個服務(wù)器系統(tǒng)中會包括一個系統(tǒng)啟動線程(英文全稱:System Boot Strap Processor,英文簡稱:SBSP),該系統(tǒng)啟動線程位于多節(jié)點大服務(wù)器系統(tǒng)中某一節(jié)點中的某一個CPU中,一般情況下,SBSP默認(rèn)位于節(jié)點0中的CPU0(第一個節(jié)點的第一個CPU)中。
服務(wù)器系統(tǒng)中的每個CPU都包括一個處理器主線程(英文全稱:Processor Boot Strap Processor,英文簡稱:PBSP)和若干個處理器普通線程(英文全稱:Application Processor,英文簡稱:AP),支持x2APIC模式的每個CPU的PBSP和所有AP都有一個對應(yīng)的使能x2APIC寄存器,一般情況下,使能x2APIC寄存器的寄存器中存儲的信息為0時,代表未使能,1代表使能,同時,服務(wù)器系統(tǒng)中的每個CPU都包括一個或多個32位通用寄存器。
服務(wù)器系統(tǒng)的一個或多個CPU出現(xiàn)致命錯誤需要移除時,為了不影響整個系統(tǒng)的業(yè)務(wù)運(yùn)行,CPU熱插拔特性可以保證客戶不中斷業(yè)務(wù),CPU熱插拔過程中新添加的CPU需要重新加入到系統(tǒng)并且重新配置,比如中斷模式,本申請中主要關(guān)注中斷模式的配置。
一般情況下,熱添加CPU要想支持x2APIC中斷模式,熱添加CPU需要 使能x2APIC,即熱添加CPU的PBSP和所有AP都需要更新x2APICID,使能x2APIC寄存器,并將更新的所有x2APICID由熱添加CPU的PBSP收集返回給SBSP,從而實現(xiàn)熱添加CPU使能x2APIC。
現(xiàn)有方案中,在熱添加CPU與SBSP所在的CPU在不同節(jié)點時無法實現(xiàn)熱添加CPU使能x2APIC,基于此,本申請?zhí)峁┮环N熱添加CPU使能x2APIC的方法、CPU及服務(wù)器系統(tǒng)。
下面首先介紹本申請中熱添加CPU使能x2APIC的方法的實施例。
圖2為本申請中使能x2APIC的方法的一個實施例,所述方法應(yīng)用于服務(wù)器系統(tǒng),所述服務(wù)器系統(tǒng)包括第一CPU和第二CPU,所述第一CPU為所述服務(wù)器系統(tǒng)的系統(tǒng)啟動線程SBSP所在的CPU,所述第二CPU為加入系統(tǒng)拓?fù)浣Y(jié)構(gòu)且未完成使能x2APIC的熱添加CPU,所述第一CPU和所述第二CPU為不同節(jié)點中的CPU,所述第一CPU和所述第二CPU之間預(yù)設(shè)有一個兩者均可訪問的同步寄存器,所述方法包括:
201、第一CPU通過SBSP在所述同步寄存器保存所述第二CPU的節(jié)點ID;
本實施例是在服務(wù)器系統(tǒng)在拓?fù)浒l(fā)現(xiàn)完成后,第一CPU的SBSP在熱添加CPU加入服務(wù)器系統(tǒng)拓?fù)浣Y(jié)構(gòu)后,可以獲知熱添加CPU的節(jié)點ID,因此,本實施例中,第一CPU通過SBSP知道第二CPU的節(jié)點ID后,可以在所述同步寄存器保存所述第二CPU的節(jié)點ID。
本實施例中,在所述第一CPU通過所述SBSP在所述同步寄存器保存所述第二CPU的節(jié)點ID之前,所述方法還可以包括:所述第一CPU通過所述SBSP選擇第二CPU的通用寄存器,作為所述第一CPU與所述第二CPU的同步寄存器,即此時,第二CPU的一個32位通用寄存器作為所述同步寄存器,可以理解的是,本實施例中,也可以是將第一CPU的通用寄存器作為所述同步寄存器,或者所述同步寄存器為所述第一CPU和所述第二CPU均可訪問的獨立寄存器,此處不作限定。
可選的,當(dāng)所述系統(tǒng)中每個節(jié)點中包括四個CPU時,所述第一CPU通過所述SBSP在所述同步寄存器保存所述第二CPU的節(jié)點ID,可以包括:所述第一CPU通過所述SBSP在所述同步寄存器的第四位到第八位保存所述第二 CPU的節(jié)點ID。
202、所述第二CPU確定所述同步寄存器中是否保存了所述第二CPU的節(jié)點ID,若是,執(zhí)行步驟203;
在所述同步寄存器中存儲有標(biāo)識所述同步寄存器中是否保存了所述第二CPU的節(jié)點ID的目標(biāo)信息時,在所述第一CPU通過所述SBSP在所述同步寄存器保存所述第二CPU的節(jié)點ID之后,所述方法還可以包括:
所述第一CPU通過所述SBSP設(shè)置所述目標(biāo)信息以標(biāo)識所述同步寄存器中保存了所述第二CPU的節(jié)點ID;
此時,所述第二CPU確定所述同步寄存器中是否保存了所述第二CPU的節(jié)點ID,包括:
所述第二CPU通過自身的處理器主線程PBSP通過讀取所述目標(biāo)信息,確定所述同步寄存器中保存了所述第二CPU的節(jié)點ID。
例如,假設(shè)所述同步寄存器的第一個bit位信息可以設(shè)置為0或1,1代表所述同步寄存器中保存了所述第二CPU的節(jié)點ID,此時SBSP將所述同步寄存器中的第一個bit位設(shè)為1即確定所述同步寄存器中保存了所述第二CPU的節(jié)點ID,所述第二CPU即可通過自身的PBSP通過讀取所述第一個bit位,確定所述同步寄存器中保存了所述第二CPU的節(jié)點ID。
在確定所述同步寄存器中保存了所述第二CPU的節(jié)點ID之后,第二CPU可以通過自身的PBSP讀取所述同步寄存器中保存的所述第二CPU的節(jié)點ID;
203、所述第二CPU利用所述第二CPU的節(jié)點ID和所述第二CPU的PBSP默認(rèn)的APIC ID,得到所述第二CPU的PBSP的x2APIC ID,并使能所述第二CPU的PBSP對應(yīng)的x2APIC寄存器;
所述第二CPU利用所述第二CPU的節(jié)點ID和所述第二CPU的PBSP默認(rèn)的APIC ID,得到所述第二CPU的PBSP的x2APIC ID的過程,即利用第二CPU的節(jié)點ID和所述第二CPU的PBSP默認(rèn)的APIC ID更新第二CPU的PBSP的x2APIC ID的過程,此時,第二CPU的PBSP進(jìn)入等待激活狀態(tài)。
其中,所述第二CPU利用所述第二CPU的節(jié)點ID和所述第二CPU的PBSP默認(rèn)的APIC ID,得到所述第二CPU的PBSP的x2APIC ID具體可以是:
第二CPU通過自身的PBSP將所述第二CPU的節(jié)點ID和所述第二CPU的PBSP默認(rèn)的APIC ID合并后,得到所述第二CPU的PBSP的x2APIC ID;
例如,同步寄存器為32位,可以用5個bit位表示,其中第一個bit位為所述同步寄存器中標(biāo)識是否觸發(fā)所述第二CPU的熱添加流程的目標(biāo)信息,如0或1,第二CPU的節(jié)點ID保存在同步寄存器的第二個bit位和第三個bit位,如第一個節(jié)點用節(jié)點ID 00表示,第二個節(jié)點用節(jié)點ID 01表示,而第二CPU的PBSP默認(rèn)的APIC ID為8位,例如第二CPU默認(rèn)APIC ID為0x40,第二CPU在節(jié)點1中,則第二CPU的節(jié)點ID和所述第二CPU的PBSP默認(rèn)的APIC ID合并即可得到第二CPU的PBSP的x2APIC ID:0x0140。
204、所述第一CPU通過所述SBSP向標(biāo)識為目標(biāo)x2APIC ID的線程發(fā)送定點IPI,所述目標(biāo)x2APIC ID與所述第二CPU的PBSP的x2APIC ID相同;
SBSP在熱添加CPU加入系統(tǒng)拓?fù)浣Y(jié)構(gòu)后,可以獲知熱添加CPU的具體位置,例如是哪塊單板上的哪個CPU,此時SBSP可以獲知PBSP所在節(jié)點ID和默認(rèn)的APIC ID,因此可知道由熱添加CPU的PBSP所在節(jié)點號和默認(rèn)的APIC ID的x2APIC ID,因此,本實施例中,SBSP可以知道第二CPU(熱添加CPU)的x2APIC ID,由于上述步驟中第二CPU的PBSP配置成功了x2APIC ID,因此,第一CPU通過SBSP可以直接利向標(biāo)識為目標(biāo)x2APIC ID的線程發(fā)送定點IPI,由于所述目標(biāo)x2APIC ID與所述第二CPU的PBSP的x2APIC ID相同,因此,向標(biāo)識為目標(biāo)x2APIC ID的線程發(fā)送定點IPI即向第二CPU的PBSP發(fā)送定點IPI,第二CPU的PBSP可以接收到所述第一CPU通過SBSP發(fā)送的定點IPI。
205、所述第二CPU通過自身的PBSP接收所述SBSP發(fā)送的定點IPI,并廣播IPI到所述第二CPU的所有AP;
所述廣播IPI中包括所述第二CPU的節(jié)點ID,以使得各AP更新自身的x2APIC ID,并使能各自對應(yīng)的x2APIC寄存器,將更新的x2APIC ID返回給所述第二CPU的PBSP;
206、第二CPU通過自身的PBSP接收所有AP返回的x2APIC ID;
207、第二CPU通過自身的PBSP將所述第二CPU的SBSP的x2APIC ID以及所有AP的x2APIC ID,發(fā)送給所述SBSP;
此時,所述SBSP接收所述第二CPU的PBSP線程發(fā)送的所述第二CPU的PBSP的x2APIC ID和所有AP的x2APIC ID,完成第二CPU熱添加使能x2APIC。
本申請中,服務(wù)器系統(tǒng)主線程SBSP所在的第一CPU和第二CPU不在同一個節(jié)點,SBSP所在的第一CPU和第二CPU設(shè)有兩者均可訪問的同步寄存器,SBSP通過在同步寄存器保存第二CPU的節(jié)點ID后,第二CPU的PBSP在確定同步寄存器中保存了第二CPU的節(jié)點ID之后,利用所述節(jié)點ID和第二CPU的PBSP默認(rèn)的APIC ID,得到第二CPU的PBSP的x2APIC ID,并配置使能第二CPU的PBSP對應(yīng)的x2APIC寄存器,所述SBSP通過同步寄存器中保存的第二CPU的x2APIC ID,發(fā)送定點IPI到第二CPU的PBSP,以使得SBSP實現(xiàn)收集第二CPU的PBSP的x2APIC ID和所有AP的x2APIC ID。本申請在熱添加CPU與SBSP所在的CPU在不同節(jié)點時有效實現(xiàn)了熱添加CPU使能x2APIC,實現(xiàn)方式簡單有效。
下面介紹本申請中服務(wù)器系統(tǒng)的實施例。
圖3為本申請中服務(wù)器系統(tǒng)的一個實施例,所述服務(wù)器系統(tǒng)300包括第一CPU 301和第二CPU 302,所述第一CPU 301為所述服務(wù)器系統(tǒng)的系統(tǒng)啟動線程SBSP所在的CPU,所述第二CPU 302為加入系統(tǒng)拓?fù)浣Y(jié)構(gòu)且未完成使能x2APIC的熱添加CPU,所述第一CPU 301和所述第二CPU 302為不同節(jié)點中的CPU,例如,如圖3所示(為便于舉例說明,圖中服務(wù)器系統(tǒng)僅示出兩個節(jié)點,每個節(jié)點中僅示出了一個CPU),第一CPU可以在第一節(jié)點,第二CPU可以在第二節(jié)點,第一節(jié)點與第二節(jié)點是不同的節(jié)點,所述第一CPU301和所述第二CPU 302預(yù)設(shè)有一個兩者均可訪問的同步寄存器;
所述第一CPU用于通過所述SBSP在所述同步寄存器保存所述第二CPU的ID;
所述第二CPU用于確定所述同步寄存器中是否保存了所述第二CPU的節(jié)點ID,若是,利用所述第二CPU的節(jié)點ID和所述第二CPU的PBSP默認(rèn)的APIC ID,得到所述第二CPU的PBSP的x2APIC ID,并使能所述第二CPU的PBSP對應(yīng)的x2APIC寄存器;
所述第一CPU還用于通過所述SBSP向標(biāo)識為目標(biāo)x2APIC ID的線程發(fā) 送定點處理器間中斷IPI,所述目標(biāo)x2APIC ID與所述第二CPU的PBSP的x2APIC ID相同;
所述第二CPU還用于通過自身的PBSP接收所述SBSP發(fā)送的定點IPI,并廣播IPI到所述第二CPU的所有AP,所述廣播IPI中包括所述第二CPU的節(jié)點ID,以使得各AP更新自身的x2APIC ID,使能各自對應(yīng)的x2APIC寄存器,并將更新的x2APIC ID返回給所述第二CPU的PBSP;
所述第二CPU還用于通過自身的PBSP接收所有AP返回的x2APIC ID,并將所述第二CPU的SBSP的x2APIC ID以及所有AP的x2APIC ID,發(fā)送給所述SBSP;
所述第一CPU還用于通過所述SBSP接收所述第二CPU的PBSP線程發(fā)送的所述第二CPU的PBSP的x2APIC ID和所有AP的x2APIC ID。
本申請中,SBSP所在的第一CPU和第二CPU不在同一個節(jié)點,第一CPU和第二CPU設(shè)有兩者均可訪問的同步寄存器,SBSP通過在同步寄存器保存第二CPU的節(jié)點ID后,第二CPU的PBSP在確定同步寄存器中保存了第二CPU的節(jié)點ID之后,利用所述節(jié)點ID和熱添加CPU的PBSP默認(rèn)的APIC ID,得到第二CPU的PBSP的x2APIC ID,并配置使能第二CPU的PBSP對應(yīng)的x2APIC寄存器,所述SBSP通過同步寄存器中保存的第二CPU的x2APIC ID,發(fā)送定點IPI到第二CPU的PBSP,以使得SBSP實現(xiàn)收集第二CPU的PBSP的x2APIC ID和所有AP的x2APIC ID。本申請在熱添加CPU與SBSP所在的CPU在不同節(jié)點時有效實現(xiàn)了熱添加CPU使能x2APIC,實現(xiàn)方式簡單有效。
在本發(fā)明一些實施例中,所述第一CPU還用于在所述第一CPU通過所述SBSP在所述同步寄存器保存所述第二CPU的節(jié)點ID之前,通過所述SBSP選擇第二CPU的通用寄存器,作為所述第一CPU與所述第二CPU的同步寄存器。
可選的,所述同步寄存器中存儲有標(biāo)識所述同步寄存器中是否保存了所述第二CPU的節(jié)點ID的目標(biāo)信息;
所述第一CPU還用于在所述第一CPU通過所述SBSP在所述同步寄存器保存所述第二CPU的節(jié)點ID之后,通過所述SBSP設(shè)置所述目標(biāo)信息以標(biāo)識 所述同步寄存器中保存了所述第二CPU的節(jié)點ID;
所述第二CPU具體用于通過自身的處理器主線程PBSP通過讀取所述目標(biāo)信息,確定所述同步寄存器中保存了所述第二CPU的節(jié)點ID。
可選的,所述同步寄存器的第一個bit位信息為所述目標(biāo)信息,當(dāng)所述第一個bit位信息為1時,標(biāo)識所述同步寄存器中保存了所述第二CPU的節(jié)點ID;
所述第一CPU具體用于通過所述SBSP將所述同步寄存器的第一個bit位信息設(shè)為1。
在本發(fā)明的一些實施例中,當(dāng)所述服務(wù)器系統(tǒng)中每個節(jié)點中包括四個CPU時,所述第一CPU具體用于通過所述SBSP在所述同步寄存器的第二個bit位和第三個bit位保存所述第二CPU的節(jié)點ID。
所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡潔,上述描述的系統(tǒng),裝置和單元的具體工作過程,可以參考前述方法實施例中的對應(yīng)過程,在此不再贅述。
需要說明的是,對于前述的各方法實施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本發(fā)明并不受所描述的動作順序的限制,因為依據(jù)本發(fā)明,某些步驟可以采用其他順序或者同時進(jìn)行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,說明書中所描述的實施例均屬于優(yōu)選實施例,所涉及的動作和模塊并不一定是本發(fā)明所必須的。
在上述實施例中,對各個實施例的描述都各有側(cè)重,某個實施例中沒有詳述的部分,可以參見其他實施例的相關(guān)描述。
在本申請所提供的幾個實施例中,應(yīng)該理解到,所揭露的系統(tǒng),裝置和方法,可以通過其它的方式實現(xiàn)。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,例如多個單元或組件可以結(jié)合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機(jī)械或其它的形式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作 為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本實施例方案的目的。
另外,在本發(fā)明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以采用硬件的形式實現(xiàn),也可以采用軟件功能單元的形式實現(xiàn)。
所述集成的單元如果以軟件功能單元的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用時,可以存儲在一個計算機(jī)可讀取存儲介質(zhì)中。基于這樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機(jī)軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算機(jī)設(shè)備(可以是個人計算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例所述方法的全部或部分步驟。而前述的存儲介質(zhì)包括:U盤、移動硬盤、只讀存儲器(ROM,Read-Only Memory)、隨機(jī)存取存儲器(RAM,Random Access Memory)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
以上所述,以上實施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述實施例對本發(fā)明進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對前述各實施例所記載的技術(shù)方案進(jìn)行修改,或者對其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實施例技術(shù)方案的精神和范圍。