龍芯處理器的主核熱插拔方法
【專利摘要】本發(fā)明公開了一種龍芯處理器的主核熱插拔方法,包括動態(tài)關(guān)閉主核,所述動態(tài)關(guān)閉主核包括以下步驟:1)主核從輔助核心中選定一個核心為代理主核;2)代理主核通知主核執(zhí)行角色轉(zhuǎn)換例程并等待主核發(fā)送進入可關(guān)閉狀態(tài)通知;3)主核執(zhí)行角色轉(zhuǎn)換例程,所述角色轉(zhuǎn)換例程包括將CPU特征數(shù)據(jù)復(fù)制一份給代理主核,外部中斷路由設(shè)置到代理主核,代理主核成為參考時鐘源對象;4)主核進行任務(wù)遷移,主核向代理主核發(fā)送進入可關(guān)閉狀態(tài)通知;5)代理主核關(guān)閉主核時鐘。該方法解決動態(tài)關(guān)閉主核時CPU的特征信息被銷毀,外部中斷路由過程受阻,計時系統(tǒng)校準(zhǔn)失去參考對象的問題。使CPU熱插拔過程更加完善,更加靈活、健壯。
【專利說明】龍芯處理器的主核熱插拔方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種處理器的主核熱拔插方法,特別是涉及一種龍芯處理器的主核熱插拔方法,屬于計算機【技術(shù)領(lǐng)域】。
【背景技術(shù)】
[0002]靈活性、健壯性、節(jié)能都是計算機系統(tǒng)設(shè)計的重要指標(biāo)。CPU熱插拔(即動態(tài)開關(guān)處理器核)是達成這些目的的一種重要手段。有了 CPU熱插拔,可以在不關(guān)機的情況下更改計算機配置,具有極大的靈活性;有了 CPU熱插拔,可以在個別處理器核出現(xiàn)故障的時候?qū)⑵潢P(guān)閉并移走正在執(zhí)行的任務(wù),增強了健壯性;有了 CPU熱插拔,還可以在系統(tǒng)負載較輕的時候關(guān)閉一部分處理器核,因而也是一種節(jié)能方法。云計算的典型模式就是擁有大量的CPU資源,在之上運行大量的虛擬機,因而CPU熱插拔顯得尤為重要。
[0003]CPU熱插拔分為軟件層面的熱插拔和硬件層面的熱插拔,前者只是在功能上啟用或者禁用,后者是真正在物理上進行添加和移除。對于動態(tài)增加(熱插),必須先在硬件層面添加,然后在軟件層面啟用;對于動態(tài)移除(熱拔),必須現(xiàn)在軟件層面禁用,然后在硬件層面移除。本發(fā)明主要關(guān)注的是軟件層面上的熱插拔。
[0004]大多數(shù)操作系統(tǒng)都已經(jīng)實現(xiàn)軟件層面的CPU熱插拔,但這些已有的方法都有一個缺點就是主核不能被熱插拔。在多核處理器系統(tǒng)里面,有一個特殊的核叫主核,或者叫啟動核,編號通常是零。主核是計算機上電以后第一個啟動的核,其他核(輔核,非啟動核)都是被主核激活以后才上線的。雖然系統(tǒng)啟動完成以后,所有的CPU核都基本上是對稱、等效的,但是主核還是有一些特別之處。除了啟動時候的區(qū)別之外,還有一個重要的特點就是主核不能被熱插拔(動態(tài)開關(guān))。
[0005]運行在X86處理器上的Linux操作系統(tǒng)已經(jīng)在嘗試實現(xiàn)對主核的熱插拔。但X86處理器和MIPS家族的龍芯處理器有著極大的區(qū)別:與多核有關(guān)的中斷路由、計時在兩種處理器上完全不同;而且尤為重要的是,X86有基于ACPI的B1S,可以協(xié)助操作系統(tǒng)完成很多事情,龍芯則完全沒有ACPI。因此在龍芯上實現(xiàn)主核熱插拔會面臨更多的新問題。
[0006]主核之所以不能熱插拔,并不是因為技術(shù)上完全不可行,而是現(xiàn)有的操作系統(tǒng)對于主核有一些假定,比如:
[0007]1、啟動假定:因為計算機必須從主核啟動,因此許多CPU的特征信息都記錄在主核的數(shù)據(jù)結(jié)構(gòu)里面。因此,一旦主核被關(guān)閉,相關(guān)數(shù)據(jù)結(jié)構(gòu)被銷毀,則許多有用的信息都將無法獲取。
[0008]2、中斷假定:龍芯電腦使用的中斷控制器非常簡單,不像X86的APIC那樣可以動態(tài)仲裁、動態(tài)路由。在現(xiàn)有的操作系統(tǒng)中,所有的外部中斷都被路由到主核。這種配置對于輔核的熱插拔來說非常方便,因為不管怎么開關(guān),中斷傳遞的過程都是不需要關(guān)注的。但是如果要做主核熱插拔,這種配置就反倒成為了挑戰(zhàn)。
[0009]3、計時假定:龍芯電腦上,計時系統(tǒng)的主要時鐘源是MIPS時鐘源,即Count/Compare寄存器對。在沒有CPU熱插拔的時候,所有核的Count寄存器都是同步的,但一個核被關(guān)閉后,Count寄存器就會停止遞增;當(dāng)這個核重新開啟后,Count寄存器的值就會落后于其他核。因此,新啟動的核要跟其他核進行Count寄存器校準(zhǔn),而校準(zhǔn)的參考對象就是主核。主核被假定永遠在線,因此是最佳參考對象。而如果要實現(xiàn)主核熱插拔,則這個假定不能成立。
【發(fā)明內(nèi)容】
[0010]針對上述現(xiàn)有技術(shù)的不足,本發(fā)明的目的是提供一種龍芯處理器的主核熱插拔方法,解決動態(tài)關(guān)閉主核時,CPU的特征信息被銷毀,外部中斷路由過程受阻,計時系統(tǒng)校準(zhǔn)失去參考對象的問題。將CPU熱插拔過程更加完善,更加靈活、健壯。
[0011]本發(fā)明的技術(shù)方案是這樣的:一種龍芯處理器的主核熱插拔方法,包括動態(tài)關(guān)閉主核,其特征在于,所述動態(tài)關(guān)閉主核包括以下步驟:
[0012]I)主核從輔助核心中選定一個核心為代理主核;
[0013]2)代理主核通知主核執(zhí)行角色轉(zhuǎn)換例程并等待主核發(fā)送進入可關(guān)閉狀態(tài)通知;
[0014]3)主核執(zhí)行角色轉(zhuǎn)換例程,所述角色轉(zhuǎn)換例程包括主核將CPU特征數(shù)據(jù)復(fù)制一份給代理主核,外部中斷路由設(shè)置到代理主核,代理主核成為參考時鐘源對象;
[0015]4)主核進行任務(wù)遷移,主核向代理主核發(fā)送進入可關(guān)閉狀態(tài)通知;
[0016]5)代理主核關(guān)閉主核時鐘。
[0017]進一步的,所述角色轉(zhuǎn)換例程包括主核將自身設(shè)置成離線狀態(tài),然后通知所有在線的處理器核暫停運行;主核將CPU特征數(shù)據(jù)復(fù)制一份給代理主核,外部中斷路由設(shè)置到代理主核,代理主核成為參考時鐘源對象;最后主核通知所有在線的處理器核繼續(xù)運行。
[0018]優(yōu)選的,所述主核從輔助核心中選定編號最小的一個核心為代理主核。
[0019]在本發(fā)明的一個具體實施例中,所述龍芯處理器的主核熱插拔方法還包括動態(tài)開啟核心,所述動態(tài)打開核心包括如下步驟:
[0020]I)主核執(zhí)行BootSecondary:主核打開待開啟核心的時鐘,準(zhǔn)備好待開啟核心的初始執(zhí)行入口、初始進程和初始堆棧,設(shè)置待開啟核心的IPI寄存器,激活待開啟核心使之開始執(zhí)行,并等待待開啟核心的通知;
[0021]2)待開啟核心初始化并執(zhí)行InitSecondary,所述InitSecondary包括協(xié)處理器O中斷掩碼設(shè)置和Count寄存器校準(zhǔn),所述校準(zhǔn)的參考對象是主核;
[0022]3)待開啟核心計算主頻;
[0023]4)待開啟核心執(zhí)行SmpFinish,所述SmpFinish將自身設(shè)置成在線狀態(tài),然后通知主核并打開本地中斷;
[0024]5)主核收到通知后,繼續(xù)執(zhí)行自身工作。
[0025]需要指出的是本發(fā)明引入了“代理主核”的概念,
【發(fā)明內(nèi)容】
所述的主核并非僅為處理器的物理主核,其還可以包括進行過關(guān)閉物理主核后成為代理主核的輔助核心。因此本發(fā)明技術(shù)方案針對的是當(dāng)前系統(tǒng)中以“主核”身份運行的處理器核心關(guān)閉問題。對主核進行熱插拔的過程即是在輔助核心中選出一個核來充當(dāng)主核,將系統(tǒng)中所有對原主核的依賴改造成對新主核的依賴;然后新主核承擔(dān)原主核的職責(zé),將原主核視為普通的輔助核心,對其進行熱插拔。
[0026]本發(fā)明所提供的技術(shù)方案,處理器的熱拔插操作不再局限于僅可關(guān)閉輔助核心或者必須在所有輔助核心關(guān)閉之后才能關(guān)閉主核。而是可以根據(jù)當(dāng)前系統(tǒng)運行情況,隨時關(guān)閉具有“主核”身份的真正物理主核或者實際為輔助核心的代理主核,CPU熱插拔是嚴(yán)格串行化的,因此不會出現(xiàn)多個主核或代理主核共存的情況。因此本發(fā)明技術(shù)方案使CPU熱插拔過程更加完善,更加靈活、健壯。
【專利附圖】
【附圖說明】
[0027]圖1為龍芯處理器關(guān)核流程示意圖。
[0028]圖2為龍芯處理器開核流程示意圖。
[0029]圖3為龍芯處理器關(guān)核流程中主核關(guān)閉流程示意圖。
[0030]圖4為龍芯處理器開核流程中主核打開流程示意圖。
【具體實施方式】
[0031]下面結(jié)合實施例對本發(fā)明作進一步說明,但不作為對本發(fā)明的限定。
[0032]請參見圖1,關(guān)閉核心的完整過程是:
[0033]具有“主核”身份的核心:選擇性地執(zhí)行SelectMaster (當(dāng)關(guān)閉目標(biāo)是“主核”時執(zhí)行該步驟)一執(zhí)行CpuDie操作一等待“輔核”進入可關(guān)閉狀態(tài)一關(guān)閉“輔核”繼續(xù)運行。
[0034]“輔核”即目標(biāo)核心:執(zhí)行CpuDisable操作一將進程遷移到其他在線核心一執(zhí)行PlayDead —等待直到被“主核”關(guān)閉。
[0035]請參見圖2,開啟核心的完整過程是:
[0036]具有“主核”身份的核心:執(zhí)行BootSecondary操作一等待“輔核”啟動完成一繼續(xù)運行。
[0037]“輔核”即目標(biāo)核心:執(zhí)行初始化一執(zhí)行InitSecondary操作一計算主頻一執(zhí)行SmpFinish —開始投入運行。
[0038]其中,
[0039]SelectMaster:在“主核”上執(zhí)行,當(dāng)即將被關(guān)閉的目標(biāo)核心是具有“主核”身份的核心時,執(zhí)行該操作。具體工作是:通知所有在線的處理器核暫停運行;在所有在線的“輔核”中,選擇編號最小的“輔核”作為代理主核;本核進入等待狀態(tài),代理主核成為具有“主核”身份的核心,繼續(xù)執(zhí)行的后續(xù)工作,其他核繼續(xù)執(zhí)行本職工作。
[0040]本步驟完成之后,主核角色轉(zhuǎn)換初步完成。
[0041]CpuDie:在“主核”上執(zhí)行,它通知目標(biāo)核心即將被關(guān)閉,然后等待目標(biāo)核心進入可關(guān)閉狀態(tài)后,關(guān)閉目標(biāo)核心時鐘。
[0042]CpuDisable:即角色轉(zhuǎn)換例程,在目標(biāo)核心上執(zhí)行,進程遷移之前的工作都必須在此完成,主要是將本核設(shè)置成離線狀態(tài),如果目標(biāo)核心是之前具有“主核”身份的核心,則還要完成主核資源移交。
[0043]主核資源移交所完成的工作:通知所有在線的處理器核暫停運行;將CPU特征數(shù)據(jù)復(fù)制一份,移交給初步轉(zhuǎn)化角色后的新主核,這樣原主核的數(shù)據(jù)結(jié)構(gòu)就可以安全銷毀了 ;在所有核暫停運行的狀態(tài)下,可以安全地完成中斷遷移,也就是將外部中斷路由重新設(shè)置到新主核上面;將參考時鐘源對象從原主核改設(shè)成新主核;通知所有在線的處理器核繼續(xù)運行。當(dāng)資源移交完畢后,主核角色轉(zhuǎn)換全部完成。
[0044]PlayDead:在目標(biāo)核心上執(zhí)行,完成進程遷移之后的工作,包括TLB刷回,Cache刷回和聲明本核已進入可關(guān)閉狀態(tài)。
[0045]BootSecondary:在“主核”上執(zhí)行,具體工作包括:打開目標(biāo)“輔核”的時鐘,準(zhǔn)備好目標(biāo)輔核的初始執(zhí)行入口、初始進程和初始堆棧,設(shè)置目標(biāo)“輔核”的IPI (Inter-Processor Interrupt,處理器間中斷)寄存器,激活目標(biāo)“輔核”使之開始執(zhí)行。
[0046](2) InitSecondary:在目標(biāo)“輔核”上執(zhí)行,主頻計算之前的工作都必須在此完成,具體包括CPO (協(xié)處理器O)中斷掩碼設(shè)置和Count寄存器校準(zhǔn)。校準(zhǔn)的參考對象是主核或者代理主核。
[0047](3) SmpFinish:在目標(biāo)“輔核”上執(zhí)行,完成主頻計算之后剩余的工作,包括設(shè)置本核的在線狀態(tài)并打開本地中斷。設(shè)置好在線狀態(tài),“主核”就會得到通知,得以繼續(xù)運行。
[0048]具體的,以四核龍芯3A為例,四個核分別編號為0、1、2、3,其中O號為物理主核,其他三個為物理輔核。下面描述動態(tài)關(guān)閉和重新開啟O號核(物理主核)的過程,假設(shè)初始狀態(tài)是4個核全部在線。
[0049]動態(tài)關(guān)閉O號核的具體步驟如圖3所示:
[0050]1)0號核執(zhí)行SelectMaster:它通知所有在線的處理器核暫停運行;然后選擇I號核作為代理主核;0號核進入等待狀態(tài),I號核則繼續(xù)執(zhí)行O號核的后續(xù)工作,其他核繼續(xù)執(zhí)行本職工作。
[0051]2) I號核執(zhí)行CpuDie:它通知O號核即將被關(guān)閉,然后等待O號核進入可關(guān)閉狀態(tài)后,關(guān)閉O號核時鐘。
[0052]3)0號核執(zhí)行CpuDisable:它將本核設(shè)置成離線狀態(tài),然后通知所有在線的處理器核暫停運行;將CPU特征數(shù)據(jù)復(fù)制一份,移交給I號核,這樣O號核的數(shù)據(jù)結(jié)構(gòu)就可以安全銷毀了 ;在所有核暫停運行的狀態(tài)下,可以安全地完成中斷遷移,也就是將外部中斷路由重新設(shè)置到I號核上面;將參考時鐘源對象O號核改成I號核;通知所有在線的處理器核繼續(xù)運行。本步驟執(zhí)行完畢后,主核角色轉(zhuǎn)換全部完成。
[0053]4)O號核進行任務(wù)遷移,本核即將離線,因此任務(wù)將轉(zhuǎn)交給其他核代為執(zhí)行。
[0054]5)0號核執(zhí)行PlayDead:完成進程遷移之后的工作,包括TLB刷回,Cache刷回和聲明本核已進入可關(guān)閉狀態(tài)。
[0055]6)當(dāng)I號核得到通知后,關(guān)閉O號核時鐘,然后I號CpuDie返回,繼續(xù)執(zhí)行本職工作。主核關(guān)閉至此全部完成。
[0056]重新開啟O號核的具體步驟如圖4所示,此時I號核為代理主核:
[0057]I) I號核執(zhí)行BootSecondary:它打開O號核的時鐘,準(zhǔn)備好O號核的初始執(zhí)行入口、初始進程和初始堆棧,設(shè)置O號核的IPI (Inter-Processor Interrupt,處理期間中斷)寄存器,激活O號核使之開始執(zhí)行。完成之后進入等待。
[0058]2) O號核初始化,即CPU類型探測(非龍芯特有)。
[0059]3) O號核執(zhí)行InitSecondary:具體包括CPO (協(xié)處理器O)中斷掩碼設(shè)置和Count寄存器校準(zhǔn)。校準(zhǔn)的參考對象是I號核(代理主核)。
[0060]4) O號核計算主頻(非龍芯特有)。
[0061]5)0號核執(zhí)行SmpFinish:將本核設(shè)置成在線狀態(tài),打開本地中斷。接下來O號核就正式投入運行了。
[0062]6) I號核得到通知后,繼續(xù)執(zhí)行自己本職工作,主核開啟至此全部完成。
【權(quán)利要求】
1.一種龍芯處理器的主核熱插拔方法,包括動態(tài)關(guān)閉主核,其特征在于,所述動態(tài)關(guān)閉主核包括以下步驟: 1)主核從輔助核心中選定一個核心為代理主核; 2)代理主核通知主核執(zhí)行角色轉(zhuǎn)換例程并等待主核發(fā)送進入可關(guān)閉狀態(tài)通知; 3)主核執(zhí)行角色轉(zhuǎn)換例程,所述角色轉(zhuǎn)換例程包括將CPU特征數(shù)據(jù)復(fù)制一份給代理主核,外部中斷路由設(shè)置到代理主核,代理主核成為參考時鐘源對象; 4)主核進行任務(wù)遷移,主核向代理主核發(fā)送進入可關(guān)閉狀態(tài)通知; 5)代理主核關(guān)閉主核時鐘。
2.根據(jù)權(quán)利要求1所述的龍芯處理器的主核熱插拔方法,其特征在于:所述角色轉(zhuǎn)換例程包括主核將自身設(shè)置成離線狀態(tài),然后通知所有在線的處理器核暫停運行;主核將(PU特征數(shù)據(jù)復(fù)制一份給代理主核,外部中斷路由設(shè)置到代理主核,代理主核成為參考時鐘源對象;最后主核通知所有在線的處理器核繼續(xù)運行。
3.根據(jù)權(quán)利要求1所述的龍芯處理器的主核熱插拔方法,其特征在于:所述主核從輔助核心中選定編號最小的一個核心為代理主核。
4.根據(jù)權(quán)利要求1至3中任意一項所述的龍芯處理器的主核熱插拔方法,其特征在于:所述龍芯處理器的主核熱插拔方法還包括動態(tài)打開核心,所述動態(tài)打開核心包括如下步驟: 1)主核執(zhí)行BootSecondary:主核打開待開啟核心的時鐘,準(zhǔn)備好待開啟核心的初始執(zhí)行入口、初始進程和初始堆棧,設(shè)置待開啟核心的IPI寄存器,激活待開啟核心使之開始執(zhí)行,并等待待開啟核心的通知; 2)待開啟核心初始化并執(zhí)行InitSecondary,所述InitSecondary包括協(xié)處理器0中斷掩碼設(shè)置和Count寄存器校準(zhǔn),所述校準(zhǔn)的參考對象是主核; 3)待開啟核心計算主頻; 4)待開啟核心執(zhí)行SmpFinish,所述SmpFinish包括將自身設(shè)置成在線狀態(tài),通知主核并打開本地中斷; 5)主核收到通知后,繼續(xù)執(zhí)行自身工作。
【文檔編號】G06F9/46GK104375881SQ201410586423
【公開日】2015年2月25日 申請日期:2014年10月28日 優(yōu)先權(quán)日:2014年10月28日
【發(fā)明者】陳華才, 張福新, 吳少剛 申請人:江蘇中科夢蘭電子科技有限公司