加入核心組的加入請求;
[0092]步驟303、重核心根據(jù)加入請求,將相應(yīng)輕核心增加至核心組,并向相應(yīng)的輕核心發(fā)送成功加入核心組的指示信息;
[0093]步驟304、輕核心根據(jù)接收到的成功加入核心組的指示信息,向重核心發(fā)送應(yīng)答消息,表示得知已加入核心組;
[0094]步驟305、當(dāng)重核心收到所有發(fā)送加入請求的輕核心發(fā)送的應(yīng)答消息,則更新當(dāng)前的組成員信息,核心組初始化成功。
[0095]在圖4所示的一個(gè)優(yōu)選實(shí)施例中,描述了上述步驟102的具體實(shí)現(xiàn)流程,具體可以包括以下執(zhí)行步驟:
[0096]步驟401、重核心接收系統(tǒng)服務(wù)發(fā)送的注冊請求消息,并運(yùn)行接收到的系統(tǒng)服務(wù);
[0097]該步驟中,系統(tǒng)服務(wù)向重核心發(fā)送注冊請求消息,以便該系統(tǒng)服務(wù)能夠在重核心上運(yùn)行,重核心根據(jù)收到系統(tǒng)服務(wù)發(fā)送的該注冊請求消息,可以為該系統(tǒng)服務(wù)分配服務(wù)ID。
[0098]步驟402、重核心向多個(gè)輕核心內(nèi)核廣播所接收的系統(tǒng)服務(wù)注冊信息,指定運(yùn)行系統(tǒng)服務(wù)的相應(yīng)輕核心內(nèi)核;
[0099]步驟403、接收多個(gè)輕核心內(nèi)核發(fā)送的注冊回應(yīng)消息,通知系統(tǒng)服務(wù)至相應(yīng)輕核心內(nèi)核進(jìn)行注冊,以便相應(yīng)輕核心內(nèi)核運(yùn)行所述系統(tǒng)服務(wù)。
[0100]該步驟中,通常,輕核心接收到重核心廣播的系統(tǒng)服務(wù)注冊信息,需要向重核心發(fā)送注冊回應(yīng)消息,從而,重核心可以根據(jù)該輕核心發(fā)送的注冊回應(yīng)消息,獲知該輕核心已做好運(yùn)行系統(tǒng)服務(wù)的準(zhǔn)備,則重核心可以通知系統(tǒng)服務(wù)至該輕核心進(jìn)行注冊,實(shí)現(xiàn)在該輕核心上運(yùn)行系統(tǒng)服務(wù)。對于接收到重核心廣播的系統(tǒng)服務(wù)注冊信息、卻未向重核心發(fā)送注冊回應(yīng)消息的輕核心,則被重核心確定為發(fā)生故障,進(jìn)而執(zhí)行故障恢復(fù)操作。對于具體故障恢復(fù)操作,后面再做詳細(xì)說明。
[0101]此外,在系統(tǒng)服務(wù)運(yùn)行的過程中,每個(gè)核心可以監(jiān)測本地運(yùn)行的系統(tǒng)服務(wù)的狀態(tài),例如:定期查看操作系統(tǒng)服務(wù)進(jìn)程的狀態(tài),如果在系統(tǒng)服務(wù)未申請退出的情況下進(jìn)程消失,則該內(nèi)核自動(dòng)恢復(fù)該系統(tǒng)服務(wù)進(jìn)程。
[0102]上面實(shí)施例描述的是在內(nèi)核上注冊系統(tǒng)服務(wù)的流程,圖5所示,為本發(fā)明提供的一個(gè)系統(tǒng)服務(wù)退出內(nèi)核的實(shí)施例,具體可以包括以下流程:
[0103]步驟501、重核心接收系統(tǒng)服務(wù)發(fā)送的退出請求消息,并將本地保存的系統(tǒng)服務(wù)進(jìn)行刪除;
[0104]當(dāng)系統(tǒng)服務(wù)需要退出時(shí),系統(tǒng)服務(wù)向重核心發(fā)送退出請求消息,重核心收到該退出請求消息,將本地保存的該系統(tǒng)進(jìn)行刪除,此外,重核心還可以將本地保存的該系統(tǒng)服務(wù)的服務(wù)信息進(jìn)行刪除。
[0105]步驟502、重核心向多個(gè)輕核心廣播所接收的系統(tǒng)服務(wù)退出信息;
[0106]重核心刪除本地保存的該系統(tǒng)服務(wù)之后,向多個(gè)輕核心廣播所接收的系統(tǒng)服務(wù)退出信息。
[0107]步驟503、重核心接收多個(gè)輕核心發(fā)送的退出回應(yīng)消息,由多個(gè)輕核心在將本地保存的系統(tǒng)服務(wù)進(jìn)行刪除。
[0108]輕核心接收到系統(tǒng)服務(wù)退出消息之后,將本地保存的該系統(tǒng)服務(wù)進(jìn)行刪除,并向重核心發(fā)送退出回應(yīng)消息。
[0109]步驟504、重核心通知所述系統(tǒng)服務(wù)進(jìn)行退出。
[0110]當(dāng)重核心接收到所有輕核心發(fā)送的退出回應(yīng)消息,獲知所有輕核心已成功將各自本地保存的系統(tǒng)服務(wù)進(jìn)行刪除,重核心通知該系統(tǒng)服務(wù)可以進(jìn)行退出,則該系統(tǒng)服務(wù)退出。
[0111]需要說明的是,本發(fā)明實(shí)施例中,核心組成員之間的通信采用基于PCIE或HT總線標(biāo)準(zhǔn)的通信鏈路的廣播機(jī)制。任意2個(gè)核心之間可以利用基于PCIE或HT的通信鏈路實(shí)現(xiàn)互相的點(diǎn)對點(diǎn)通信,在點(diǎn)對點(diǎn)通信的基礎(chǔ)上,封裝廣播接口,接口的形式可以為Kernel_Broadcast (MSG),通過該接口,重核心可以實(shí)現(xiàn)向核心組內(nèi)的所有成員發(fā)送消息,并通過該接口接收輕核心發(fā)送的回應(yīng)消息。
[0112]需要廣播的消息具體可以包括:內(nèi)核的狀態(tài)信息,例如:成員信息、系統(tǒng)服務(wù)信息以及系統(tǒng)關(guān)鍵事件信息。
[0113]本發(fā)明實(shí)施例中,如圖6所示,描述了上述步驟103的具體實(shí)現(xiàn)流程,具體可以包括:
[0114]步驟601、重核心或多個(gè)輕核心向各自的前繼節(jié)點(diǎn)內(nèi)核發(fā)送心跳信息。
[0115]如圖7所示,在核心組中,重核心和多個(gè)輕核心組成一個(gè)邏輯環(huán),每個(gè)內(nèi)核成員向各自的前繼節(jié)點(diǎn)內(nèi)核(例如:順時(shí)針方向的下一個(gè)節(jié)點(diǎn))發(fā)送心跳消息,發(fā)送心跳消息的介質(zhì)采用基于PCIE或HT的通信鏈路,同時(shí),每個(gè)內(nèi)核接收邏輯環(huán)上后續(xù)節(jié)點(diǎn)(順時(shí)針方向的上一個(gè)節(jié)點(diǎn))成員的心跳消息。
[0116]步驟602、當(dāng)重核心或多個(gè)輕核心的前繼節(jié)點(diǎn)內(nèi)核在預(yù)置時(shí)間內(nèi)未接收到所述心跳信息,則確定重核心或輕核心出現(xiàn)故障。
[0117]該步驟中,如果在預(yù)置時(shí)間內(nèi),重核心或多個(gè)輕核心的前繼節(jié)點(diǎn)內(nèi)核未能接收到重核心或多個(gè)輕核心發(fā)送的心跳信息,則可確定重核心或輕核心出現(xiàn)故障。
[0118]本發(fā)明實(shí)施例中,當(dāng)出現(xiàn)故障的是重核心,則由多個(gè)輕核心選擇出作為新的重核心的輕核心。具體地,由多個(gè)輕核心進(jìn)行投票協(xié)商,選擇出負(fù)載最小的輕核心作為新的重核心。本發(fā)明實(shí)施例中,當(dāng)重核心出現(xiàn)故障后,由發(fā)現(xiàn)故障的輕核心發(fā)起投票,即發(fā)現(xiàn)故障的輕核心發(fā)起一次廣播,指示其他所有的輕核心通過廣播報(bào)告自己的負(fù)載;所有的輕核心接收到廣播消息,判斷自己的負(fù)載狀態(tài),并通過廣播消息向其他輕核心報(bào)告自己的負(fù)載。最終,由負(fù)載最小的輕核心發(fā)起投票,并向其他輕核心進(jìn)行廣播,申請成為重核心,由其他輕核心確認(rèn)當(dāng)前發(fā)起投票申請成為重核心的輕核心負(fù)載是否為最小。若負(fù)載確實(shí)為最小,則其他輕核心返回投票通過的消息;否則,其他輕核心返回投票不通過的消息,繼續(xù)選擇負(fù)載最小的輕核心。若投票通過,則該負(fù)載最小的輕核心升級為新的重核心,由該新的重核心加載原重核心的功能,然后由該新的重核心向所有的輕核心發(fā)送更新的組內(nèi)成員信息,如果該新的重核心接收到所有的輕核心回應(yīng)的應(yīng)答消息,則故障處理成功;否則,新的重核心對沒有進(jìn)行回應(yīng)的輕核心進(jìn)行故障處理。
[0119]當(dāng)出現(xiàn)故障的是輕核心,則由重核心對該輕核心進(jìn)行故障處理。具體地,重核心將該故障輕核心從核心組中剔除,刪除該故障輕核心的狀態(tài)信息,在剩余輕核心中確定出可以替代該故障輕核心的輕核心,保存該輕核心的狀態(tài)信息,并通過廣播向所有輕核心發(fā)送已發(fā)生變化的內(nèi)核的狀態(tài)信息,由各個(gè)輕核心更新自身保存的內(nèi)核的狀態(tài)信息。通常,可以設(shè)置接收廣播的輕核心需要向重核心發(fā)送應(yīng)答消息,當(dāng)重核心接收到所有輕核心的應(yīng)答消息,則故障處理成功;否則,重核心需要對未發(fā)送應(yīng)答消息的輕核心進(jìn)行故障處理。
[0120]需要說明的是,當(dāng)出現(xiàn)故障的是重核心時(shí),則新的重核心根據(jù)自身保存的所有內(nèi)核的狀態(tài)信息,獲知原重核心上運(yùn)行的系統(tǒng)服務(wù)的進(jìn)程信息,根據(jù)所述進(jìn)程信息得到對應(yīng)的物理地址,根據(jù)所述物理地址獲取對應(yīng)的內(nèi)存映像,將所述內(nèi)存映像中的系統(tǒng)服務(wù)加載至本地,在本地進(jìn)行系統(tǒng)服務(wù)進(jìn)程的重構(gòu)。如果多次加載不成功,則進(jìn)行報(bào)錯(cuò)。
[0121]而當(dāng)出現(xiàn)故障的是輕核心時(shí),則重核心確定出接收故障輕核心上運(yùn)行的系統(tǒng)服務(wù)的正常輕核心;該正常輕核心根據(jù)自身保存的所有內(nèi)核的狀態(tài)信息,獲知故障輕核心上運(yùn)行的系統(tǒng)服務(wù)的進(jìn)程信息,根據(jù)所述進(jìn)程信息得到對應(yīng)的物理地址,根據(jù)所述物理地址獲取對應(yīng)的內(nèi)存映像,將所述內(nèi)存映像中的系統(tǒng)服務(wù)加載至本地,在本地進(jìn)行系統(tǒng)服務(wù)進(jìn)程的重構(gòu)。如果多次加載不成功,則進(jìn)行報(bào)錯(cuò)。
[0122]下面通過圖8所示的應(yīng)用場景,描述本發(fā)明的相關(guān)技術(shù)方案。
[0123]如圖8所示,系統(tǒng)內(nèi)有4個(gè)型號相同類型的CPU (如Xeon),每個(gè)CPU上部署一個(gè)內(nèi)核,每個(gè)CPU都有自己本地的內(nèi)存(Memory),各個(gè)CPU的內(nèi)存之間相互獨(dú)立,正常狀態(tài)下不能相互訪問。CPU間通過PCIE總線互連。PCIE的連接是建立在一個(gè)雙向的序列的點(diǎn)對點(diǎn)連接基礎(chǔ)之上,每個(gè)PCIE設(shè)備都有自己獨(dú)立的數(shù)據(jù)連接,在要求傳輸數(shù)據(jù)的時(shí)候各自建立自己的傳輸通道,各個(gè)設(shè)備之間并發(fā)的數(shù)據(jù)傳輸互不影響。設(shè)計(jì)基于PCIE的廣播機(jī)制,在兩個(gè)核心可以互相通信的基礎(chǔ)上,封裝廣播接口使得一個(gè)核心可以調(diào)用接口實(shí)現(xiàn)對于組內(nèi)所有成員的廣播。
[0124]內(nèi)核的狀態(tài)信息采用基于PCIE的機(jī)制在各個(gè)核心之間進(jìn)行傳輸,系統(tǒng)服務(wù)部署在核心上,由核心來管理本地資源。每個(gè)核心監(jiān)控自己本地的系統(tǒng)服務(wù),若發(fā)現(xiàn)出現(xiàn)異常,則重新載入系統(tǒng)服務(wù),如果多次載入失敗,則進(jìn)行報(bào)錯(cuò),報(bào)錯(cuò)信息在內(nèi)核間同步。當(dāng)有核心失效時(shí),重核心可以進(jìn)行授權(quán),使得遷移目標(biāo)核心可以訪問失效核心的內(nèi)存。
[0125]初始化時(shí),假設(shè)按CPU的加電順序,核心I首先啟動(dòng)成為重核心,其他核心加入成為輕核心。每個(gè)核心保存組內(nèi)一致性狀態(tài)視圖,視圖內(nèi)容包括組成員信息、系統(tǒng)服務(wù)信息、系統(tǒng)關(guān)鍵事件信息。當(dāng)有成員退出系統(tǒng)OS服務(wù)信息需要同步時(shí),重核心通過廣播機(jī)制實(shí)現(xiàn)同步,如果某個(gè)輕核心沒有回應(yīng)同步消息,則重核心進(jìn)行仲裁,重核心會重發(fā)消息,如果獲得該輕核心的回應(yīng),則同步成功,否則進(jìn)行故障處理,將故障的核心剔除出當(dāng)前核心組;如果是重核心沒有回應(yīng),則輕核心在核心組內(nèi)發(fā)起投票,進(jìn)一步判斷核心I (當(dāng)前的重核心)是否故障,若投票通過,則核心2、核心3或核心4中選擇一個(gè)升級為重核心,然后將核心I上運(yùn)行的服務(wù)加載過來,由新的重核心更新狀態(tài)視圖并發(fā)給其他核心;若投票不通過,則不對核心I進(jìn)行處理??梢?,對于斷定為故障的重核心,新的重核心需要在核心組內(nèi)更新成員視圖,同時(shí),新的重核心將失效核