本發(fā)明涉及存儲(chǔ)技術(shù)領(lǐng)域,尤其涉及一種服務(wù)器中內(nèi)存模塊的數(shù)據(jù)遷移方法及服務(wù)器。
背景技術(shù):
內(nèi)存熱插拔主要應(yīng)用在服務(wù)器領(lǐng)域,為服務(wù)器帶來了更高的可用性和可維護(hù)性。在內(nèi)存熱插拔時(shí),一個(gè)服務(wù)器涉及硬件層、基本輸入輸出服務(wù)器(basicinputoutputsystem,bios)層、操作系統(tǒng)(operatingsystem,os)(也可還包含虛擬機(jī)監(jiān)控器(virtualmachinemonitor,vmm))層,硬件層包含至少兩個(gè)內(nèi)存模塊,其各層關(guān)系圖如圖1所示。在所示的邏輯結(jié)構(gòu)中,硬件層提供物理上實(shí)際可用的資源;bios層對(duì)這些物理資源進(jìn)行配置并上報(bào)可用資源以及提供操作接口;os可以直接使用bios上報(bào)的資源,也可以由vmm先對(duì)資源進(jìn)行虛擬化,再分配到os使用,也就是os是這些資源的最終使用者。在內(nèi)存熱插拔技術(shù)中,硬件層提供了實(shí)體的內(nèi)存模塊以及訪問通道,bios層對(duì)內(nèi)存進(jìn)行初始化、分配地址、上報(bào)可用地址給os或者vmm,最終os在內(nèi)存中運(yùn)行程序或存放數(shù)據(jù)。內(nèi)存熱插拔包括內(nèi)存熱添加和內(nèi)存熱移除兩個(gè)過程。
現(xiàn)有技術(shù)在進(jìn)行內(nèi)存熱移除時(shí),需要os先將準(zhǔn)備熱移除的內(nèi)存地址上的數(shù)據(jù)遷移到其他內(nèi)存地址上,然而,因?yàn)閛s每次搬移一個(gè)內(nèi)存頁都要先取得這個(gè)頁的控制權(quán),暫停其他程序的訪問后才能開始搬移,所以如果要遷移的用戶態(tài)數(shù)據(jù)被其他程序頻繁訪問,那么os每次都要花費(fèi)一定時(shí)間才能獲得內(nèi)存頁的控制權(quán),結(jié)果需要花費(fèi)很長(zhǎng)時(shí)間才能完成整個(gè)內(nèi)存模塊的數(shù)據(jù)遷移。
綜上,由于內(nèi)存數(shù)據(jù)遷移時(shí)對(duì)os的依賴性很強(qiáng),os的數(shù)據(jù)布局以及內(nèi)存數(shù)據(jù)遷移的能力都會(huì)對(duì)內(nèi)存數(shù)據(jù)遷移的成敗造成影響,所以如何方便地實(shí)現(xiàn)內(nèi)存模塊的數(shù)據(jù)遷移成為目前迫切需要解決的問題。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明實(shí)施例提供一種服務(wù)器中內(nèi)存模塊的數(shù)據(jù)遷移方法及服務(wù)器,以期方便地實(shí)現(xiàn)服務(wù)器中內(nèi)存模塊的數(shù)據(jù)遷移。
第一方面,提供了一種服務(wù)器中內(nèi)存模塊的數(shù)據(jù)遷移方法,包括:
當(dāng)處理器接收到用戶對(duì)第一內(nèi)存模塊的數(shù)據(jù)遷移請(qǐng)求時(shí),所述處理器查找第二內(nèi)存模塊,并向第一代理裝置發(fā)送鏡像關(guān)系建立指令,所述第一內(nèi)存模塊處于運(yùn)行狀態(tài),所述第二內(nèi)存模塊處于空閑狀態(tài);
所述第一代理裝置接收所述鏡像關(guān)系建立指令,與第二代理裝置建立鏡像關(guān)系;
所述處理器向所述第一代理裝置發(fā)送數(shù)據(jù)遷移指令;
所述第一代理裝置接收所述數(shù)據(jù)遷移指令,將所述第一內(nèi)存模塊中的數(shù)據(jù)發(fā)送至所述第二代理裝置;
所述第二代理裝置將所述第一內(nèi)存模塊中的數(shù)據(jù)寫入所述第二內(nèi)存模塊中;
所述處理器向所述第一代理裝置發(fā)送鏡像關(guān)系解除指令,將所述第一內(nèi)存模塊和所述第二內(nèi)存模塊分別設(shè)置為空閑狀態(tài)和運(yùn)行狀態(tài);
所述第一代理裝置接收所述鏡像關(guān)系解除指令,解除與所述第二代理裝置的所述鏡像關(guān)系。
在第一種可能的實(shí)現(xiàn)方式中,所述第一代理裝置接收所述數(shù)據(jù)遷移指令,將所述第一內(nèi)存模塊中的數(shù)據(jù)發(fā)送至所述第二代理裝置,包括:
所述第一代理裝置接收所述處理器發(fā)送的數(shù)據(jù)讀取指令,讀取所述第一內(nèi)存模塊中的數(shù)據(jù)并將所述第一內(nèi)存模塊中的數(shù)據(jù)返回給所述處理器;
所述第一代理裝置接收所述處理器寫入的所述第一內(nèi)存模塊中的數(shù)據(jù),將所述第一內(nèi)存模塊中的數(shù)據(jù)發(fā)送至所述第二代理裝置。
結(jié)合第一方面或第一方面的第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,所述處理器向所述第一代理裝置發(fā)送鏡像關(guān)系解除指令之前,所述方法還包括:
所述處理器向所述第一代理裝置的第一物理地址寫入第一數(shù)據(jù);
所述第一代理裝置接收所述第一數(shù)據(jù),并將所述第一數(shù)據(jù)轉(zhuǎn)發(fā)給所述第二代理裝置;
所述第二代理裝置將所述第一數(shù)據(jù)寫入所述第二內(nèi)存模塊中的所述第一物理地址。
結(jié)合第一方面或第一方面的第一種可能的實(shí)現(xiàn)方式或第一方面的第二種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,所述第一代理裝置接收所述鏡像關(guān)系解除指令,解除與所述第二代理裝置的所述鏡像關(guān)系之后,所述方法還包括:
所述處理器斷開所述第一內(nèi)存模塊的電源,以移除所述第一內(nèi)存模塊。
結(jié)合第一方面或第一方面的第一種可能的實(shí)現(xiàn)方式或第一方面的第二種可能的實(shí)現(xiàn)方式或第一方面的第三種可能的實(shí)現(xiàn)方式,在第四種可能的實(shí)現(xiàn)方式中,所述方法還包括:
當(dāng)所述處理器接收到用戶的內(nèi)存模塊添加請(qǐng)求時(shí),所述處理器給添加的內(nèi)存模塊供電,并對(duì)所述添加的內(nèi)存模塊進(jìn)行初始化,所述添加的內(nèi)存模塊進(jìn)入空閑狀態(tài)。
第二方面,提供了一種服務(wù)器,包括:
處理器、連接所述處理器的第一代理裝置和第二代理裝置、與所述第一代理裝置連接的第一內(nèi)存模塊、以及與所述第二代理裝置連接的第二內(nèi)存模塊;
所述處理器,用于當(dāng)接收到用戶對(duì)第一內(nèi)存模塊的數(shù)據(jù)遷移請(qǐng)求后,并且所述第一內(nèi)存模塊為運(yùn)行狀態(tài),所述第二內(nèi)存模塊為空閑狀態(tài)時(shí),查找第二內(nèi)存模塊,并向第一代理裝置發(fā)送鏡像關(guān)系建立指令;
所述第一代理裝置,用于接收所述鏡像關(guān)系建立指令,在接收到所述鏡像關(guān)系建立指令后,與第二代理裝置建立鏡像關(guān)系;
所述處理器,還用于在所述鏡像關(guān)系建立完成后,向所述第一代理裝置發(fā)送數(shù)據(jù)遷移指令;
所述第一代理裝置,還用于接收所述數(shù)據(jù)遷移指令,在接收到所述數(shù)據(jù)遷移指令后,將所述第一內(nèi)存模塊中的數(shù)據(jù)發(fā)送至所述第二代理裝置;
所述第二代理裝置,用于接收所述第一代理裝置發(fā)出的所述數(shù)據(jù),將所述數(shù)據(jù)寫入所述第二內(nèi)存模塊中;
所述處理器,還用于在所述數(shù)據(jù)遷移完后,向所述第一代理裝置發(fā)送鏡像關(guān)系解除指令,以及在發(fā)出所述鏡像關(guān)系解除指令后,將所述第一內(nèi)存模塊和所述第二內(nèi)存模塊分別設(shè)置為空閑狀態(tài)和運(yùn)行狀態(tài);
所述第一代理裝置,還用于接收到所述鏡像關(guān)系解除指令后,解除與所述第二代理裝置的所述鏡像關(guān)系。
在第一種可能的實(shí)現(xiàn)方式中,所述第一代理裝置還用于接收所述數(shù)據(jù)遷移指令,在接收到所述數(shù)據(jù)遷移指令后,將所述第一內(nèi)存模塊中的數(shù)據(jù)發(fā)送至所述第二代理裝置,包括:
所述第一代理裝置,還用于接收所述處理器發(fā)送的數(shù)據(jù)讀取指令,在接收到所述數(shù)據(jù)讀取指令后,讀取所述第一內(nèi)存模塊中的數(shù)據(jù)并將所述第一內(nèi)存模塊中的數(shù)據(jù)返回給所述處理器;
所述第一代理裝置,還用于接收所述處理器寫入的所述第一內(nèi)存模塊中的數(shù)據(jù),將所述第一內(nèi)存模塊中的數(shù)據(jù)發(fā)送至所述第二代理裝置。
結(jié)合第二方面或第二方面的第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,所述處理器,還用于向所述第一代理裝置的第一物理地址寫入第一數(shù)據(jù);
所述第一代理裝置,還用于接收到所述第一數(shù)據(jù)后,將所述第一數(shù)據(jù)轉(zhuǎn)發(fā)給所述第二代理裝置;
所述第二代理裝置,還用于在接收到所述第二代理裝置轉(zhuǎn)發(fā)的所述第一數(shù)據(jù)后,將所述第一數(shù)據(jù)寫入所述第二內(nèi)存模塊中的所述第一物理地址。
結(jié)合第二方面或第二方面的第一種可能的實(shí)現(xiàn)方式或第二方面的第二種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,所述處理器,還用于在所述數(shù)據(jù)遷移完以及向所述第一代理裝置發(fā)送鏡像關(guān)系解除指令后,斷開所述第一內(nèi)存模塊的電源,以移除所述第一內(nèi)存模塊。
結(jié)合第二方面或第二方面的第一種可能的實(shí)現(xiàn)方式或第二方面的第二種可能的實(shí)現(xiàn)方式或第二方面的第三種可能的實(shí)現(xiàn)方式,在第四種可能的實(shí)現(xiàn)方式中,所述處理器,還用于當(dāng)接收到用戶的內(nèi)存模塊添加請(qǐng)求時(shí),給添加的內(nèi)存模塊供電,并對(duì)所述添加的內(nèi)存模塊進(jìn)行初始化,所述添加的內(nèi)存模塊成為空閑內(nèi)存模塊。
采用本發(fā)明提供的一種服務(wù)器中內(nèi)存模塊的數(shù)據(jù)遷移方法及服務(wù)器的技術(shù)方案,處理器通過在兩個(gè)內(nèi)存模塊的代理裝置之間建立鏡像關(guān)系,指示代理裝置在兩個(gè)內(nèi)存模塊間進(jìn)行數(shù)據(jù)遷移,從而完成一個(gè)內(nèi)存模塊到另一個(gè)內(nèi)存模塊的數(shù)據(jù)遷移,整個(gè)數(shù)據(jù)遷移過程無需操作系統(tǒng)參與,數(shù)據(jù)遷移過程耗時(shí)短,方便地實(shí)現(xiàn)了服務(wù)器中內(nèi)存模塊的數(shù)據(jù)遷移。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為現(xiàn)有技術(shù)中內(nèi)存熱插拔時(shí)涉及的服務(wù)器各層的關(guān)系示意圖;
圖2為本發(fā)明提供的一種服務(wù)器中內(nèi)存模塊的數(shù)據(jù)遷移方法的一個(gè)實(shí)施例的流程圖;
圖3為本發(fā)明提供的一種服務(wù)器中內(nèi)存模塊的數(shù)據(jù)遷移方法的另一個(gè)實(shí)施例的流程圖;
圖4為現(xiàn)有技術(shù)中的內(nèi)存模塊熱移除流程圖;
圖5為現(xiàn)有技術(shù)中的內(nèi)存模塊熱添加流程圖;
圖6a為服務(wù)器包含的內(nèi)存模塊結(jié)構(gòu)示意圖;
圖6b為對(duì)服務(wù)器中的內(nèi)存模塊的數(shù)據(jù)遷移示意圖;
圖6c為服務(wù)器中的內(nèi)存模塊完成數(shù)據(jù)遷移后內(nèi)存模塊的角色轉(zhuǎn)換示意圖;
圖6d為對(duì)服務(wù)器中的空閑內(nèi)存模塊進(jìn)行替換的示意圖;
圖6e為服務(wù)器中的空閑內(nèi)存模塊替換后的示意圖;
圖7a為代理裝置ha和內(nèi)存模塊的結(jié)構(gòu)示意圖;
圖7b為節(jié)點(diǎn)控制器nc和內(nèi)存模塊的結(jié)構(gòu)示意圖;
圖8a為進(jìn)行內(nèi)存模塊數(shù)據(jù)遷移過程的服務(wù)器示意圖;
圖8b為完成內(nèi)存模塊數(shù)據(jù)遷移過程后的服務(wù)器示意圖;
圖9為本發(fā)明的一種服務(wù)器的結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
圖2為本發(fā)明提供的一種服務(wù)器中內(nèi)存模塊的數(shù)據(jù)遷移方法的一個(gè)實(shí)施例的流程圖。如圖2所示,該方法包括以下步驟:
步驟s101,當(dāng)處理器接收到用戶對(duì)第一內(nèi)存模塊的數(shù)據(jù)遷移請(qǐng)求時(shí),所述處理器查找第二內(nèi)存模塊,并向第一代理裝置發(fā)送鏡像關(guān)系建立指令,所述第一內(nèi)存模塊處于運(yùn)行狀態(tài),所述第二內(nèi)存模塊處于空閑狀態(tài)。
步驟s102,所述第一代理裝置接收所述鏡像關(guān)系建立指令,與第二代理裝置建立鏡像關(guān)系。
在本發(fā)明實(shí)施例中,服務(wù)器包含至少兩個(gè)內(nèi)存模塊,例如第一內(nèi)存模塊和第二內(nèi)存模塊,其中第一內(nèi)存模塊處于運(yùn)行狀態(tài),第二內(nèi)存模塊處于空閑狀態(tài),該內(nèi)存模塊可以是內(nèi)存卡,即將雙列直插式存儲(chǔ)模塊(dualin-linememorymodule,dimm,又稱內(nèi)存條)安裝在內(nèi)存卡上,再將內(nèi)存卡插到主板上。其中,第一內(nèi)存模塊中存儲(chǔ)有數(shù)據(jù),由處理器分配了物理地址并上報(bào)給了os,os可以在該第一內(nèi)存模塊中運(yùn)行程序或存放數(shù)據(jù);而處理器僅對(duì)第二內(nèi)存模塊進(jìn)行內(nèi)存初始化,不為其分配物理地址,也不通知os該第二內(nèi)存模塊的存在,因而os也不會(huì)用到該第二內(nèi)存模塊。
在本發(fā)明實(shí)施例中,參與數(shù)據(jù)遷移過程的每個(gè)內(nèi)存模塊都與一個(gè)代理裝置相連,該代理裝置負(fù)責(zé)接收處理器的內(nèi)存地址訪問請(qǐng)求,這些內(nèi)存地址是其所代理的本地(home/local)的內(nèi)存模塊的地址,并將從內(nèi)存模塊返回的結(jié)果通過處理器送回原內(nèi)存訪問的請(qǐng)求者。
當(dāng)用戶希望將服務(wù)器中第一內(nèi)存模塊的數(shù)據(jù)全部遷移,以將該第一內(nèi)存模塊移除時(shí),用戶向處理器發(fā)出數(shù)據(jù)遷移請(qǐng)求。處理器接收到用戶對(duì)第一內(nèi)存模塊的數(shù)據(jù)遷移請(qǐng)求時(shí),查找一個(gè)處于空閑狀態(tài)的內(nèi)存模塊即第二內(nèi)存模塊,向與第一內(nèi)存模塊連接的代理裝置a發(fā)送鏡像關(guān)系建立指令,代理裝置a接收到該鏡像關(guān)系建立指令后,與連接于該第二內(nèi)存模塊的代理裝置b建立鏡像關(guān)系。所謂鏡像關(guān)系是指,第二內(nèi)存模塊在初始化時(shí)不具有物理地址,當(dāng)代理裝置a和代理裝置b建立鏡像關(guān)系后,第二內(nèi)存模塊就具有與第一內(nèi)存模塊相同的物理地址,代理裝置a在從處理器接收到寫入第一內(nèi)存模塊的某物理地址的數(shù)據(jù)后,除了將該數(shù)據(jù)寫入第一內(nèi)存模塊的該物理地址,還將該數(shù)據(jù)寫入代理裝置b,再由代理裝置b將數(shù)據(jù)寫入第二內(nèi)存模塊中的相同的物理地址。
可以理解的是,本發(fā)明中處理器所執(zhí)行的操作實(shí)際上可以是由處理器上的bios程序來完成的。
步驟s103,所述處理器向所述第一代理裝置發(fā)送數(shù)據(jù)遷移指令。
步驟s104,所述第一代理裝置接收所述數(shù)據(jù)遷移指令,將所述第一內(nèi)存模塊中的數(shù)據(jù)發(fā)送至所述第二代理裝置。
步驟s105,所述第二代理裝置將所述第一內(nèi)存模塊中的數(shù)據(jù)寫入所述第二內(nèi)存模塊中。
代理裝置a和代理裝置b建立了鏡像關(guān)系后,處理器向代理裝置a發(fā)送數(shù)據(jù)遷移指令,要將第一內(nèi)存模塊的數(shù)據(jù)逐步遷移至第二內(nèi)存模塊。代理裝置a接收到該數(shù)據(jù)遷移指令后,從第一內(nèi)存模塊獲取要遷移的數(shù)據(jù),將該數(shù)據(jù)發(fā)送至代理裝置b,由代理裝置b將數(shù)據(jù)寫入第二內(nèi)存模塊中,寫入第二內(nèi)存模塊的數(shù)據(jù)的物理地址與該數(shù)據(jù)在第一內(nèi)存模塊中的物理地址是完全一致的。
步驟s106,所述處理器向所述第一代理裝置發(fā)送鏡像關(guān)系解除指令,將所述第一內(nèi)存模塊和所述第二內(nèi)存模塊分別設(shè)置為空閑狀態(tài)和運(yùn)行狀態(tài)。
步驟s107,所述第一代理裝置接收所述鏡像關(guān)系解除指令,解除與所述第二代理裝置的所述鏡像關(guān)系。
全部遷移完第一內(nèi)存模塊中的數(shù)據(jù)后,處理器向代理裝置a發(fā)送鏡像關(guān)系解除指令,指示代理裝置a和代理裝置b解除鏡像關(guān)系,代理裝置a接收到該鏡像關(guān)系解除指令后,解除與代理裝置b的鏡像關(guān)系,并且將接收該段物理地址的讀寫指令的代理裝置由代理裝置a修改為代理裝置b,這樣第一內(nèi)存模塊轉(zhuǎn)為空閑狀態(tài),而第二內(nèi)存模塊轉(zhuǎn)為運(yùn)行狀態(tài),處理器對(duì)該段物理地址進(jìn)行數(shù)據(jù)的讀寫時(shí),通過代理裝置b從第二內(nèi)存模塊讀取數(shù)據(jù)或?qū)?shù)據(jù)寫入第二內(nèi)存模塊。因?yàn)檫M(jìn)行數(shù)據(jù)遷移的前后,第一內(nèi)存模塊的物理地址不變,所以該數(shù)據(jù)遷移過程對(duì)于os及os上運(yùn)行的應(yīng)用程序來說是不可見的。
可以理解的是,服務(wù)器中不止一個(gè)處于運(yùn)行狀態(tài)的內(nèi)存模塊和處于空閑狀態(tài)的內(nèi)存模塊,處理器可以為處于運(yùn)行狀態(tài)的內(nèi)存模塊選擇合適的處于空閑狀態(tài)的內(nèi)存模塊進(jìn)行數(shù)據(jù)遷移,處理器可以同時(shí)或依次完成多個(gè)處于運(yùn)行狀態(tài)的內(nèi)存模塊的數(shù)據(jù)遷移。
根據(jù)本發(fā)明實(shí)施例提供的一種服務(wù)器中內(nèi)存模塊的數(shù)據(jù)遷移方法,處理器通過在兩個(gè)內(nèi)存模塊的代理裝置之間建立鏡像關(guān)系,指示代理裝置在兩個(gè)內(nèi)存模塊間進(jìn)行數(shù)據(jù)遷移,從而完成一個(gè)內(nèi)存模塊到另一個(gè)內(nèi)存模塊的數(shù)據(jù)遷移,整個(gè)數(shù)據(jù)遷移過程無需操作系統(tǒng)參與,數(shù)據(jù)遷移過程耗時(shí)短,方便地實(shí)現(xiàn)了服務(wù)器中內(nèi)存模塊的數(shù)據(jù)遷移。
圖3為本發(fā)明提供的一種服務(wù)器中內(nèi)存模塊的數(shù)據(jù)遷移方法的另一個(gè)實(shí)施例的流程圖。如圖3所示,該方法包括以下步驟:
步驟s201,當(dāng)處理器接收到用戶對(duì)第一內(nèi)存模塊的數(shù)據(jù)遷移請(qǐng)求時(shí),所述處理器查找第二內(nèi)存模塊,并向第一代理裝置發(fā)送鏡像關(guān)系建立指令,所述第一內(nèi)存模塊處于運(yùn)行狀態(tài),所述第二內(nèi)存模塊處于空閑狀態(tài)。
步驟s202,所述第一代理裝置接收所述鏡像關(guān)系建立指令,與第二代理裝置建立鏡像關(guān)系。
如圖6a所示,服務(wù)器中包括多個(gè)內(nèi)存模塊,其中內(nèi)存模塊1、2和3為處于運(yùn)行狀態(tài)的內(nèi)存模塊,其中存儲(chǔ)有數(shù)據(jù),由處理器分配了物理地址并上報(bào)給了os,os可以在該內(nèi)存模塊中運(yùn)行程序或存放數(shù)據(jù);內(nèi)存模塊4為處于空閑狀態(tài)的內(nèi)存模塊,處理器僅對(duì)內(nèi)存模塊4進(jìn)行了內(nèi)存初始化,不為其分配物理地址,也不通知os該空閑內(nèi)存模塊的存在,因而os也不會(huì)用到該內(nèi)存模塊4。在該具有多個(gè)內(nèi)存模塊的服務(wù)器中,可以選取其中容量最大的一個(gè)內(nèi)存模塊作為空閑狀態(tài)的內(nèi)存模塊,同時(shí),不論設(shè)置為運(yùn)行狀態(tài)的內(nèi)存模塊和空閑狀態(tài)的內(nèi)存模塊,可以選擇插有相同容量的內(nèi)存條,這樣任何一個(gè)內(nèi)存模塊都可以成為空閑狀態(tài)的內(nèi)存模塊以方便進(jìn)行數(shù)據(jù)遷移。
當(dāng)用戶希望將服務(wù)器中某個(gè)處于運(yùn)行狀態(tài)的內(nèi)存模塊的數(shù)據(jù)全部遷移,以將該內(nèi)存模塊移除時(shí),用戶向處理器發(fā)出數(shù)據(jù)遷移請(qǐng)求。對(duì)服務(wù)器的內(nèi)存模塊進(jìn)行結(jié)構(gòu)設(shè)計(jì)時(shí)一般會(huì)有一個(gè)用戶的操作接口來接收用戶的熱插拔命令,并且能夠向用戶提示熱插拔的進(jìn)度。如圖4的內(nèi)存模塊熱移除流程圖和圖5的內(nèi)存模塊熱添加流程圖中,該用戶操作接口為一個(gè)按鈕。用戶按下該按鈕,即向處理器發(fā)出數(shù)據(jù)遷移和內(nèi)存模塊移除命令。
在本發(fā)明實(shí)施例中,與內(nèi)存模塊連接的代理裝置為如圖7a所示的本地代理(homeagent,ha),ha是英特爾(intel)的快速通道互聯(lián)(quick-pathinterconnect,qpi)協(xié)議中的一個(gè)組件,現(xiàn)代的intel處理器之間使用qpi總線進(jìn)行互聯(lián)。ha負(fù)責(zé)接收來自qpi的對(duì)內(nèi)存模塊的訪問請(qǐng)求,并將從內(nèi)存模塊返回的結(jié)果送回原內(nèi)存訪問的請(qǐng)求者。
圖7a展示了兩個(gè)intel處理器的互聯(lián)方法,每個(gè)處理器內(nèi)部可以劃分為許多單元,這里僅畫出計(jì)算單元和互聯(lián)單元,計(jì)算單元發(fā)出對(duì)地址的訪問請(qǐng)求,互聯(lián)單元將地址請(qǐng)求分配到對(duì)應(yīng)的子模塊,比如ha,或者通過qpi轉(zhuǎn)發(fā)到其他處理器的互聯(lián)單元。ha是互聯(lián)單元的一個(gè)子模塊,它接收來自互聯(lián)單元的對(duì)它所掛內(nèi)存的訪問請(qǐng)求,這個(gè)請(qǐng)求可以來自它自身所在處理器的計(jì)算單元,也可以來自的其他處理器的計(jì)算單元。
與內(nèi)存模塊連接的代理裝置還可以是圖7b所示的擴(kuò)展節(jié)點(diǎn)控制器(extendednodecontroller,xnc)/節(jié)點(diǎn)控制器(nodecontroller,nc)。如圖7b所示,處理器之間的互聯(lián)除了使用qpi以外,還可以使用xnc/nc,每個(gè)處理器的qpi先連接到xnc上,再由xnc的互聯(lián)網(wǎng)絡(luò)將所有處理器組合成一個(gè)大服務(wù)器。每個(gè)xnc下面的所有處理器、內(nèi)存、i/o等統(tǒng)稱一個(gè)節(jié)點(diǎn)(node),所以xnc的眾多功能中有一個(gè)是類似于ha的,那就是接收從互聯(lián)組織發(fā)來的對(duì)自身node內(nèi)的內(nèi)存的訪問請(qǐng)求。
概括來說,ha和xnc/nc在本發(fā)明實(shí)施例中都有相同的功能,即:接收這樣內(nèi)存地址訪問請(qǐng)求,這些內(nèi)存地址是其所代理的本地的內(nèi)存模塊的地址。
如圖8a所示,處理器接收到用戶對(duì)一個(gè)處于運(yùn)行狀態(tài)的內(nèi)存模塊的數(shù)據(jù)遷移請(qǐng)求時(shí),查找一個(gè)處于空閑狀態(tài)的內(nèi)存模塊,向與處于運(yùn)行狀態(tài)的內(nèi)存模塊連接的代理裝置ha0發(fā)送鏡像關(guān)系建立指令,代理裝置ha0接收該鏡像關(guān)系建立指令,與連接于該處于空閑狀態(tài)的內(nèi)存模塊的代理裝置ha1建立鏡像關(guān)系。所謂鏡像關(guān)系是指,處于空閑狀態(tài)的內(nèi)存模塊在初始化時(shí)不具有物理地址,當(dāng)代理裝置ha0和代理裝置ha1建立了鏡像關(guān)系后,處于空閑狀態(tài)的內(nèi)存模塊就具有了與處于運(yùn)行狀態(tài)的內(nèi)存模塊相同的物理地址pa0-pa1,代理裝置ha0在從處理器接收到寫入處于運(yùn)行狀態(tài)的內(nèi)存模塊的某物理地址的數(shù)據(jù)后,除了將該數(shù)據(jù)寫入該處于運(yùn)行狀態(tài)的內(nèi)存模塊的該物理地址,還將該數(shù)據(jù)寫入代理裝置ha1,再由ha1將數(shù)據(jù)寫入處于空閑狀態(tài)的內(nèi)存模塊中的相同的物理地址中。
步驟s203,所述處理器向所述第一代理裝置發(fā)送數(shù)據(jù)遷移指令。
步驟s204,所述第一代理裝置接收所述處理器發(fā)送的數(shù)據(jù)讀取指令,讀取所述第一內(nèi)存模塊中的數(shù)據(jù)并將所述第一內(nèi)存模塊中的數(shù)據(jù)返回給所述處理器。
步驟s205,所述第一代理裝置接收所述處理器寫入的所述第一內(nèi)存模塊中的數(shù)據(jù),將所述第一內(nèi)存模塊中的數(shù)據(jù)發(fā)送至所述第二代理裝置。
步驟s206,所述第二代理裝置將所述第一內(nèi)存模塊中的數(shù)據(jù)寫入所述第二內(nèi)存模塊中。
如圖6b所示,將處于運(yùn)行狀態(tài)的內(nèi)存模塊3中的數(shù)據(jù)逐步遷移至處于空閑狀態(tài)的內(nèi)存模塊4,該數(shù)據(jù)遷移的過程包括數(shù)據(jù)讀取和數(shù)據(jù)寫入的過程。處理器向ha0發(fā)送數(shù)據(jù)讀取指令,ha0接收該數(shù)據(jù)讀取指令,讀取處于運(yùn)行狀態(tài)的內(nèi)存模塊中的數(shù)據(jù)并將該處于運(yùn)行狀態(tài)的內(nèi)存模塊中的數(shù)據(jù)返回給處理器。處理器將該處于運(yùn)行狀態(tài)的內(nèi)存模塊中的數(shù)據(jù)寫入ha0,然后ha0將該處于運(yùn)行狀態(tài)的內(nèi)存模塊中的數(shù)據(jù)轉(zhuǎn)發(fā)給ha1,由ha1將該處于運(yùn)行狀態(tài)的內(nèi)存模塊中的數(shù)據(jù)寫入處于空閑狀態(tài)的內(nèi)存模塊4中。
具體地,ha0和ha1的工作原理為:ha0和ha1建立鏡像關(guān)系后,服務(wù)器中的兩個(gè)ha組成鏡像對(duì),如圖7a所示。這兩個(gè)ha組成鏡像對(duì)后,會(huì)有一個(gè)ha是主鏡像端(mirroredmasterside),另一個(gè)是從鏡像端(mirroredslaveside)。在內(nèi)存模塊數(shù)據(jù)遷移這個(gè)應(yīng)用實(shí)例中,主鏡像端就是一直在服務(wù)器中使用的ha,而從鏡像端是用來備份等待遷移的ha。在建立起臨時(shí)鏡像對(duì)的一開始,從ha便具有與主ha相同的物理地址,但是它們當(dāng)中的數(shù)據(jù)并不一致,所以就要進(jìn)行數(shù)據(jù)遷移。
具體的數(shù)據(jù)遷移過程是處理器從低地址到高地址把ha的所有地址進(jìn)行遍歷,每次執(zhí)行一部分地址:
1.從內(nèi)存模塊中將某個(gè)地址pa0的數(shù)據(jù)讀到處理器;
2.將數(shù)據(jù)原樣寫回原地址pa0;
3.主ha收到這個(gè)地址寫請(qǐng)求,會(huì)做兩件事,一件是把數(shù)據(jù)寫到自己內(nèi)存的pa0地址上;
4.主ha知道此時(shí)服務(wù)器有一個(gè)它的鏡像ha存在,所以另一件事是它將這個(gè)數(shù)據(jù)包轉(zhuǎn)發(fā)給從ha;
5.從ha收到數(shù)據(jù)包,將數(shù)據(jù)寫到自己內(nèi)存的pa0地址上。
到此,地址pa0在兩個(gè)ha里都有了相同的副本,相當(dāng)于完成了將主ha的pa0上的數(shù)據(jù)遷移到了從ha的pa0地址上。
當(dāng)處理器完成對(duì)整個(gè)主ha的地址遍歷,也就完成了ha內(nèi)存數(shù)據(jù)遷移。
步驟s207,所述處理器向所述第一代理裝置的第一物理地址寫入第一數(shù)據(jù)。
步驟s208,所述第一代理裝置接收所述第一數(shù)據(jù),并將所述第一數(shù)據(jù)轉(zhuǎn)發(fā)給所述第二代理裝置。
步驟s209,所述第二代理裝置將所述第一數(shù)據(jù)寫入所述第二內(nèi)存模塊中的所述第一物理地址。
內(nèi)存模塊的數(shù)據(jù)遷移不是一個(gè)瞬間就能完成的任務(wù),需要消耗一段時(shí)間,這個(gè)時(shí)間長(zhǎng)度與待遷移的內(nèi)存模塊的容量成正比。在遷移的一段時(shí)間里有兩個(gè)主設(shè)備可能會(huì)對(duì)處于運(yùn)行狀態(tài)的內(nèi)存模塊3進(jìn)行讀寫操作:一個(gè)是處于運(yùn)行狀態(tài)的內(nèi)存模塊3上的ha0,它在逐漸遍歷處于運(yùn)行狀態(tài)的內(nèi)存模塊3的地址,將數(shù)據(jù)拷貝到處于空閑狀態(tài)的內(nèi)存模塊4;另一個(gè)是服務(wù)器總線(比如qpi)上發(fā)來的讀寫請(qǐng)求,這是服務(wù)器正常運(yùn)行時(shí)對(duì)處于運(yùn)行狀態(tài)的內(nèi)存模塊3的讀寫請(qǐng)求。如果沒有鏡像關(guān)系存在,那么當(dāng)ha0遷移了一部分地址的數(shù)據(jù),而qpi上又發(fā)來對(duì)這些地址的寫操作修改了這里內(nèi)存的值,這樣當(dāng)遷移完成時(shí),兩個(gè)內(nèi)存模塊的數(shù)據(jù)不一致,就不可能倒換。鏡像使得所有寫操作會(huì)將數(shù)據(jù)同時(shí)寫到兩個(gè)內(nèi)存模塊上,因此保證了一致性。
在遷移過程中,如果os需要對(duì)主ha的地址pa1進(jìn)行寫操作,實(shí)際上就是以上步驟的2~5步,因此依然可以保證兩個(gè)ha的數(shù)據(jù)一致性。
步驟s210,所述處理器向所述第一代理裝置發(fā)送鏡像關(guān)系解除指令,將所述第一內(nèi)存模塊和所述第二內(nèi)存模塊分別設(shè)置為空閑狀態(tài)和運(yùn)行狀態(tài)。
步驟s211,所述第一代理裝置接收所述鏡像關(guān)系解除指令,解除與所述第二代理裝置的所述鏡像關(guān)系處于空閑狀態(tài)的內(nèi)存模塊處于運(yùn)行狀態(tài)的內(nèi)存模塊。
如圖6c所示,全部遷移完處于運(yùn)行狀態(tài)的內(nèi)存模塊中的數(shù)據(jù)后,向ha0發(fā)送鏡像關(guān)系解除指令,ha0和ha1解除鏡像關(guān)系,并且將接收該段物理地址的讀寫指令的代理裝置由ha0修改為ha1,這樣原來的處于運(yùn)行狀態(tài)的內(nèi)存模塊轉(zhuǎn)為空閑狀態(tài),其物理地址失效,處理器不能往該物理地址中寫入或從該物理地址中讀取數(shù)據(jù),原來的處于空閑狀態(tài)的內(nèi)存模塊轉(zhuǎn)為運(yùn)行狀態(tài),該原來的處于空閑狀態(tài)的內(nèi)存模塊具有與原來處于運(yùn)行狀態(tài)的內(nèi)存模塊相同的物理地址pa0-pa1,接收處理器對(duì)該段物理地址的讀寫操作,也即如圖8b所示,處于空閑狀態(tài)的內(nèi)存模塊和處于運(yùn)行狀態(tài)的內(nèi)存模塊的角色發(fā)生了轉(zhuǎn)換。但因?yàn)檫M(jìn)行數(shù)據(jù)遷移及角色倒換的前后,物理地址不變,所以對(duì)于os及os上運(yùn)行的應(yīng)用程序來說是不可見的。也因?yàn)槠洳豢梢娦?,?duì)于ha0對(duì)應(yīng)的內(nèi)存模塊,無論上面是否有os的內(nèi)核態(tài)數(shù)據(jù),以及無論上面的數(shù)據(jù)是否被應(yīng)用程序(比如數(shù)據(jù)庫)頻繁占用,遷移都是可以完成的,因此大大提高了內(nèi)存熱移除的可行性。
步驟s212,所述處理器斷開所述第一內(nèi)存模塊的電源,以移除所述第一內(nèi)存模塊。
由于原來的處于運(yùn)行狀態(tài)的內(nèi)存模塊完成了數(shù)據(jù)遷移以及角色倒換后,實(shí)際上轉(zhuǎn)為空閑狀態(tài),可以斷開該內(nèi)存模塊的電源,以移除該內(nèi)存模塊。
現(xiàn)有的內(nèi)存模塊熱移除的流程如圖4所示,其包括以下步驟:
a)按下按鈕,表示發(fā)起命令;
b)按鈕led開始閃爍,表示命令已經(jīng)收到;
c)bios轉(zhuǎn)發(fā)命令到os,通知os對(duì)要移除的內(nèi)存進(jìn)行遷移;
d)與上一步同時(shí),電源led開始閃爍,表示熱移除的流程開始進(jìn)行;
e)os進(jìn)行內(nèi)存遷移,將這部分內(nèi)存地址上運(yùn)行的業(yè)務(wù)遷移到其他內(nèi)存地址上;
f)與上一步同時(shí),bios開始不斷查詢os是否已完成數(shù)據(jù)遷移;
g)如果os遷移數(shù)據(jù)成功,則通知bios遷移成功的結(jié)果;
h)如果os遷移數(shù)據(jù)失敗,則將電源led恢復(fù)到常亮狀態(tài),表示熱移除過程停止,并將按鈕led設(shè)為常亮,通知用戶熱添加失敗(led的操作實(shí)際是bios的行為,bios因?yàn)槭詹坏給s的通知而出現(xiàn)超時(shí),從而判斷os數(shù)據(jù)遷移失敗);
i)如果bios收到了os的通知,則刪除物理地址,實(shí)際是禁用到被移除內(nèi)存模塊的地址請(qǐng)求;
j)如果bios操作成功,則對(duì)內(nèi)存板停止供電,并將電源led設(shè)為常滅,表示熱移除完成;
k)如果bios操作失敗,則對(duì)將電源led恢復(fù)到常亮狀態(tài),表示熱移除過程停止,并將按鈕led設(shè)為常亮,通知用戶熱添加失敗。
與圖4所示的內(nèi)存模塊熱移除流程不同的是,采用本發(fā)明實(shí)施例提供的數(shù)據(jù)遷移方法進(jìn)行內(nèi)存模塊熱移除,不需要os的參與,全部由處理器也即其上的bios程序控制主ha完成,也即將上述步驟c)-步驟i)替換為本發(fā)明實(shí)施例的步驟s201-步驟s211。
步驟s213,當(dāng)所述處理器接收到用戶的內(nèi)存模塊添加請(qǐng)求時(shí),所述處理器給添加的內(nèi)存模塊供電,并對(duì)所述添加的內(nèi)存模塊進(jìn)行初始化,所述添加的內(nèi)存模塊進(jìn)入空閑狀態(tài)處于空閑狀態(tài)的內(nèi)存模塊。
如圖6d所示,將圖6c中的處于空閑狀態(tài)的內(nèi)存模塊3移除后,可以熱添加新內(nèi)存模塊5,用戶通過操作接口比如按鍵來發(fā)起對(duì)新內(nèi)存模塊的熱添加操作,該熱添加操作的流程與現(xiàn)有技術(shù)相同。
如圖5為現(xiàn)有技術(shù)的內(nèi)存模塊熱添加流程,其包括以下步驟:
a.按下按鈕,表示發(fā)起命令;
b.按鈕led開始閃爍,表示命令已經(jīng)收到;
c.給內(nèi)存卡(內(nèi)存板)供電;
d.電源led開始閃爍,在熱添加完成之前會(huì)一直閃爍;
e.bios進(jìn)行內(nèi)存初始化;
f.為初始化好的內(nèi)存分配地址;
g.通知os新添加的內(nèi)存可用,并同時(shí)上報(bào)新添加內(nèi)存的地址和容量;
h.os完成其內(nèi)存上線(online)操作;
i.整個(gè)過程如果成功完成,則將電源led變?yōu)槌A?,表示熱添加結(jié)束;
j.如果出現(xiàn)添加失敗,則將電源led設(shè)為常滅,并給內(nèi)存板斷電,同時(shí)將按鈕led設(shè)為常亮,通知用戶熱添加失敗。
然而,在本發(fā)明實(shí)施例中,將新內(nèi)存模塊添加為處于空閑狀態(tài)的內(nèi)存模塊時(shí),不需要執(zhí)行上述流程中的步驟f)至步驟h),即對(duì)圖6d中的內(nèi)存模塊5供電并進(jìn)行初始化,但是不為其分配物理地址,使之成為這個(gè)服務(wù)器中的處于空閑狀態(tài)的內(nèi)存模塊(如圖6e所示),為其他處于運(yùn)行狀態(tài)的內(nèi)存模塊(1,2,4)的熱移除提供了ha到ha地址遷移的條件。
根據(jù)本發(fā)明實(shí)施例提供的一種服務(wù)器中內(nèi)存模塊的數(shù)據(jù)遷移方法,處理器通過在兩個(gè)內(nèi)存模塊的代理裝置之間建立鏡像關(guān)系,指示代理裝置在兩個(gè)內(nèi)存模塊間進(jìn)行數(shù)據(jù)遷移,從而完成一個(gè)內(nèi)存模塊到另一個(gè)內(nèi)存模塊的數(shù)據(jù)遷移,整個(gè)數(shù)據(jù)遷移過程無需操作系統(tǒng)參與,數(shù)據(jù)遷移過程耗時(shí)短,方便地實(shí)現(xiàn)了服務(wù)器中內(nèi)存模塊的數(shù)據(jù)遷移,能方便地對(duì)處于運(yùn)行狀態(tài)的內(nèi)存模塊進(jìn)行熱移除,且在數(shù)據(jù)遷移過程中,仍然可以接收處理器對(duì)運(yùn)行的內(nèi)存模塊的讀寫操作,不會(huì)造成數(shù)據(jù)錯(cuò)誤。
圖9為本發(fā)明一種服務(wù)器的一個(gè)實(shí)施例的結(jié)構(gòu)示意圖。如圖9所示,該服務(wù)器1000包括:
處理器11、連接處理器11的第一代理裝置12和第二代理裝置13、與第一代理裝置12連接的第一內(nèi)存模塊14、以及與第二代理裝置13連接的第二內(nèi)存模塊15;
處理器11,用于當(dāng)接收到用戶對(duì)第一內(nèi)存模塊14的數(shù)據(jù)遷移請(qǐng)求后,并且第一內(nèi)存模塊14為運(yùn)行狀態(tài),第二內(nèi)存模塊15為空閑狀態(tài)時(shí),查找第二內(nèi)存模塊15,并向第一代理裝置12發(fā)送鏡像關(guān)系建立指令;
第一代理裝置12,用于接收所述鏡像關(guān)系建立指令,在接收到所述鏡像關(guān)系建立指令后,與第二代理裝置13建立鏡像關(guān)系;
處理器11,還用于在所述鏡像關(guān)系建立完成后,向第一代理裝置12發(fā)送數(shù)據(jù)遷移指令;
第一代理裝置12,還用于接收所述數(shù)據(jù)遷移指令,在接收到所述數(shù)據(jù)遷移指令后,將第一內(nèi)存模塊14中的數(shù)據(jù)發(fā)送至第二代理裝置13;
第二代理裝置13,用于接收第一代理裝置12發(fā)出的所述數(shù)據(jù),將所述數(shù)據(jù)寫入第二內(nèi)存模塊15中;
處理器11,還用于在所述數(shù)據(jù)遷移完后,向第一代理裝置12發(fā)送鏡像關(guān)系解除指令,以及在發(fā)出所述鏡像關(guān)系解除指令后,將所述第一內(nèi)存模塊和所述第二內(nèi)存模塊分別設(shè)置為空閑狀態(tài)和運(yùn)行狀態(tài);
第一代理裝置12,還用于接收到所述鏡像關(guān)系解除指令后,解除與第二代理裝置13的所述鏡像關(guān)系。
根據(jù)本發(fā)明實(shí)施例提供的一種服務(wù)器,其中的處理器通過在兩個(gè)內(nèi)存模塊的代理裝置之間建立鏡像關(guān)系,指示代理裝置在兩個(gè)內(nèi)存模塊間進(jìn)行數(shù)據(jù)遷移,從而完成一個(gè)內(nèi)存模塊到另一個(gè)內(nèi)存模塊的數(shù)據(jù)遷移,整個(gè)數(shù)據(jù)遷移過程無需操作系統(tǒng)參與,數(shù)據(jù)遷移過程耗時(shí)短,方便地實(shí)現(xiàn)了服務(wù)器中內(nèi)存模塊的數(shù)據(jù)遷移。
本發(fā)明還提供了一種服務(wù)器的另一個(gè)實(shí)施例。該服務(wù)器包括:
處理器、連接所述處理器的第一代理裝置和第二代理裝置、與所述第一代理裝置連接的第一內(nèi)存模塊、以及與所述第二代理裝置連接的第二內(nèi)存模塊;
所述處理器,用于當(dāng)接收到用戶對(duì)第一內(nèi)存模塊的數(shù)據(jù)遷移請(qǐng)求后,并且所述第一內(nèi)存模塊為運(yùn)行狀態(tài),所述第二內(nèi)存模塊為空閑狀態(tài)時(shí),查找第二內(nèi)存模塊,并向第一代理裝置發(fā)送鏡像關(guān)系建立指令;
所述第一代理裝置,用于接收所述鏡像關(guān)系建立指令,在接收到所述鏡像關(guān)系建立指令后,與第二代理裝置建立鏡像關(guān)系;
所述處理器,還用于在所述鏡像關(guān)系建立完成后,向所述第一代理裝置發(fā)送數(shù)據(jù)遷移指令;
所述第一代理裝置,還用于接收所述處理器發(fā)送的數(shù)據(jù)讀取指令,,在接收到所述數(shù)據(jù)讀取指令后,讀取所述第一內(nèi)存模塊中的數(shù)據(jù)并將所述第一內(nèi)存模塊中的數(shù)據(jù)返回給所述處理器;
所述第一代理裝置,還用于接收所述處理器寫入的所述第一內(nèi)存模塊中的數(shù)據(jù),將所述第一內(nèi)存模塊中的數(shù)據(jù)發(fā)送至所述第二代理裝置;
所述第二代理裝置,用于接收所述第一代理裝置發(fā)出的所述數(shù)據(jù),將所述數(shù)據(jù)寫入所述第二內(nèi)存模塊中;
所述處理器,還用于向所述第一代理裝置的第一物理地址寫入第一數(shù)據(jù);
所述第一代理裝置,還用于接收到所述第一數(shù)據(jù)后,將所述第一數(shù)據(jù)轉(zhuǎn)發(fā)給所述第二代理裝置;
所述第二代理裝置,還用于在接收到所述第二代理裝置轉(zhuǎn)發(fā)的所述第一數(shù)據(jù)后,將所述第一數(shù)據(jù)寫入所述第二內(nèi)存模塊中的所述第一物理地址;
所述處理器,還用于在所述數(shù)據(jù)遷移完后,向所述第一代理裝置發(fā)送鏡像關(guān)系解除指令,以及在發(fā)出所述鏡像關(guān)系解除指令后,將所述第一內(nèi)存模塊和所述第二內(nèi)存模塊分別設(shè)置為空閑狀態(tài)和運(yùn)行狀態(tài);
所述第一代理裝置,還用于接收到所述鏡像關(guān)系解除指令后,解除與所述第二代理裝置的所述鏡像關(guān)系。
所述處理器,還用于在所述數(shù)據(jù)遷移完以及向所述第一代理裝置發(fā)送鏡像關(guān)系解除指令后,斷開所述第一內(nèi)存模塊的電源,以移除所述第一內(nèi)存模塊;
所述處理器,還用于當(dāng)接收到用戶的內(nèi)存模塊添加請(qǐng)求時(shí),給添加的內(nèi)存模塊供電,并對(duì)所述添加的內(nèi)存模塊進(jìn)行初始化,所述添加的內(nèi)存模塊成為空閑內(nèi)存模塊。
根據(jù)本發(fā)明實(shí)施例提供的一種服務(wù)器,其中的處理器通過在兩個(gè)內(nèi)存模塊的代理裝置之間建立鏡像關(guān)系,指示代理裝置在兩個(gè)內(nèi)存模塊間進(jìn)行數(shù)據(jù)遷移,從而完成一個(gè)內(nèi)存模塊到另一個(gè)內(nèi)存模塊的數(shù)據(jù)遷移,整個(gè)數(shù)據(jù)遷移過程無需操作系統(tǒng)參與,數(shù)據(jù)遷移過程耗時(shí)短,方便地實(shí)現(xiàn)了服務(wù)器中內(nèi)存模塊的數(shù)據(jù)遷移,能方便地對(duì)處于運(yùn)行狀態(tài)的內(nèi)存模塊進(jìn)行熱移除,且在數(shù)據(jù)遷移過程中,仍然可以接收處理器對(duì)運(yùn)行的內(nèi)存模塊的讀寫操作,不會(huì)造成數(shù)據(jù)錯(cuò)誤。
所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡(jiǎn)潔,上述描述的設(shè)備和模塊的具體工作過程,可以參考前述方法實(shí)施例中的對(duì)應(yīng)過程描述,在此不再贅述。
在本申請(qǐng)所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的設(shè)備和方法,可以通過其它的方式實(shí)現(xiàn)。例如,以上所描述的裝置實(shí)施例僅僅是示意性的,例如,所述模塊的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)模塊或組件可以結(jié)合或者可以集成到另一個(gè)設(shè)備中,或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些通信接口,裝置或模塊的間接耦合或通信連接,可以是電性,機(jī)械或其它的形式。
所述作為分離部件說明的模塊可以是或者也可以不是物理上分開的,作為模塊顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部,模塊來實(shí)現(xiàn)本實(shí)施例方案的目的。
另外,在本發(fā)明各個(gè)實(shí)施例中的各功能模塊可以集成在一個(gè)處理模塊中,也可以是各個(gè)模塊單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上模塊集成在一個(gè)模塊中。
通過以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到各實(shí)施方式可借助軟件加必需的通用硬件平臺(tái)的方式來實(shí)現(xiàn),當(dāng)然也可以通過硬件?;谶@樣的理解,上述技術(shù)方案本質(zhì)上或者說對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件設(shè)備的形式體現(xiàn)出來,該計(jì)算機(jī)軟件設(shè)備可以存儲(chǔ)在計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,如rom/ram、磁碟、光盤等,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行各個(gè)實(shí)施例或者實(shí)施例的某些部分所述的方法。
以上所述的實(shí)施方式,并不構(gòu)成對(duì)該技術(shù)方案保護(hù)范圍的限定。任何在上述實(shí)施方式的精神和原則之內(nèi)所作的修改、等同替換和改進(jìn)等,均應(yīng)包含在該技術(shù)方案的保護(hù)范圍之內(nèi)。