一種服務(wù)器中內(nèi)存模塊的數(shù)據(jù)遷移方法及服務(wù)器的制造方法
【專利摘要】本發(fā)明實(shí)施例公開了一種服務(wù)器中內(nèi)存模塊的數(shù)據(jù)遷移方法及服務(wù)器。本發(fā)明的處理器通過(guò)在兩個(gè)內(nèi)存模塊的代理裝置之間建立鏡像關(guān)系,指示代理裝置在兩個(gè)內(nèi)存模塊間進(jìn)行數(shù)據(jù)遷移,從而完成一個(gè)內(nèi)存模塊到另一個(gè)內(nèi)存模塊的數(shù)據(jù)遷移,整個(gè)數(shù)據(jù)遷移過(guò)程無(wú)需操作系統(tǒng)參與,數(shù)據(jù)遷移過(guò)程耗時(shí)短,方便地實(shí)現(xiàn)了服務(wù)器中內(nèi)存模塊的數(shù)據(jù)遷移。
【專利說(shuō)明】一種服務(wù)器中內(nèi)存模塊的數(shù)據(jù)遷移方法及服務(wù)器
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及存儲(chǔ)【技術(shù)領(lǐng)域】,尤其涉及一種服務(wù)器中內(nèi)存模塊的數(shù)據(jù)遷移方法及服務(wù)器。
【背景技術(shù)】
[0002]內(nèi)存熱插拔主要應(yīng)用在服務(wù)器領(lǐng)域,為服務(wù)器帶來(lái)了更高的可用性和可維護(hù)性。在內(nèi)存熱插拔時(shí),一個(gè)服務(wù)器涉及硬件層、基本輸入輸出服務(wù)器(Basic Input OutputSystem, BIOS)層、操作系統(tǒng)(Operating System, OS)(也可還包含虛擬機(jī)監(jiān)控器(VirtualMachine Monitor,VMM))層,硬件層包含至少兩個(gè)內(nèi)存模塊,其各層關(guān)系圖如圖1所示。在所示的邏輯結(jié)構(gòu)中,硬件層提供物理上實(shí)際可用的資源;B10S層對(duì)這些物理資源進(jìn)行配置并上報(bào)可用資源以及提供操作接口 ;0S可以直接使用BIOS上報(bào)的資源,也可以由VMM先對(duì)資源進(jìn)行虛擬化,再分配到OS使用,也就是OS是這些資源的最終使用者。在內(nèi)存熱插拔技術(shù)中,硬件層提供了實(shí)體的內(nèi)存模塊以及訪問(wèn)通道,BIOS層對(duì)內(nèi)存進(jìn)行初始化、分配地址、上報(bào)可用地址給OS或者VMM,最終OS在內(nèi)存中運(yùn)行程序或存放數(shù)據(jù)。內(nèi)存熱插拔包括內(nèi)存熱添加和內(nèi)存熱移除兩個(gè)過(guò)程。
[0003]現(xiàn)有技術(shù)在進(jìn)行內(nèi)存熱移除時(shí),需要OS先將準(zhǔn)備熱移除的內(nèi)存地址上的數(shù)據(jù)遷移到其他內(nèi)存地址上,然而,因?yàn)镺S每次搬移一個(gè)內(nèi)存頁(yè)都要先取得這個(gè)頁(yè)的控制權(quán),暫停其他程序的訪問(wèn)后才能開始搬移,所以如果要遷移的用戶態(tài)數(shù)據(jù)被其他程序頻繁訪問(wèn),那么OS每次都要花費(fèi)一定時(shí)間才能獲得內(nèi)存頁(yè)的控制權(quán),結(jié)果需要花費(fèi)很長(zhǎng)時(shí)間才能完成整個(gè)內(nèi)存模塊的數(shù)據(jù)遷移。
[0004]綜上,由于內(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ù)遷移成為目前迫切需要解決的問(wèn)題。
【發(fā)明內(nèi)容】
[0005]有鑒于此,本發(fā)明實(shí)施例提供一種服務(wù)器中內(nèi)存模塊的數(shù)據(jù)遷移方法及服務(wù)器,以期方便地實(shí)現(xiàn)服務(wù)器中內(nèi)存模塊的數(shù)據(jù)遷移。
[0006]第一方面,提供了一種服務(wù)器中內(nèi)存模塊的數(shù)據(jù)遷移方法,包括:
[0007]當(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);
[0008]所述第一代理裝置接收所述鏡像關(guān)系建立指令,與第二代理裝置建立鏡像關(guān)系;
[0009]所述處理器向所述第一代理裝置發(fā)送數(shù)據(jù)遷移指令;
[0010]所述第一代理裝置接收所述數(shù)據(jù)遷移指令,將所述第一內(nèi)存模塊中的數(shù)據(jù)發(fā)送至所述第二代理裝置;
[0011]所述第二代理裝置將所述第一內(nèi)存模塊中的數(shù)據(jù)寫入所述第二內(nèi)存模塊中;[0012]所述處理器向所述第一代理裝置發(fā)送鏡像關(guān)系解除指令,將所述第一內(nèi)存模塊和所述第二內(nèi)存模塊分別設(shè)置為空閑狀態(tài)和運(yùn)行狀態(tài);
[0013]所述第一代理裝置接收所述鏡像關(guān)系解除指令,解除與所述第二代理裝置的所述鏡像關(guān)系。
[0014]在第一種可能的實(shí)現(xiàn)方式中,所述第一代理裝置接收所述數(shù)據(jù)遷移指令,將所述第一內(nèi)存模塊中的數(shù)據(jù)發(fā)送至所述第二代理裝置,包括:
[0015]所述第一代理裝置接收所述處理器發(fā)送的數(shù)據(jù)讀取指令,讀取所述第一內(nèi)存模塊中的數(shù)據(jù)并將所述第一內(nèi)存模塊中的數(shù)據(jù)返回給所述處理器;
[0016]所述第一代理裝置接收所述處理器寫入的所述第一內(nèi)存模塊中的數(shù)據(jù),將所述第一內(nèi)存模塊中的數(shù)據(jù)發(fā)送至所述第二代理裝置。
[0017]結(jié)合第一方面或第一方面的第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,所述處理器向所述第一代理裝置發(fā)送鏡像關(guān)系解除指令之前,所述方法還包括:
[0018]所述處理器向所述第一代理裝置的第一物理地址寫入第一數(shù)據(jù);
[0019]所述第一代理裝置接收所述第一數(shù)據(jù),并將所述第一數(shù)據(jù)轉(zhuǎn)發(fā)給所述第二代理裝置;
[0020]所述第二代理裝置將所述第一數(shù)據(jù)寫入所述第二內(nèi)存模塊中的所述第一物理地址。
[0021]結(jié)合第一方面或第一方面的第一種可能的實(shí)現(xiàn)方式或第一方面的第二種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,所述第一代理裝置接收所述鏡像關(guān)系解除指令,解除與所述第二代理裝置的所述鏡像關(guān)系之后,所述方法還包括:
[0022]所述處理器斷開所述第一內(nèi)存模塊的電源,以移除所述第一內(nèi)存模塊。
[0023]結(jié)合第一方面或第一方面的第一種可能的實(shí)現(xiàn)方式或第一方面的第二種可能的實(shí)現(xiàn)方式或第一方面的第三種可能的實(shí)現(xiàn)方式,在第四種可能的實(shí)現(xiàn)方式中,所述方法還包括:
[0024]當(dāng)所述處理器接收到用戶的內(nèi)存模塊添加請(qǐng)求時(shí),所述處理器給添加的內(nèi)存模塊供電,并對(duì)所述添加的內(nèi)存模塊進(jìn)行初始化,所述添加的內(nèi)存模塊進(jìn)入空閑狀態(tài)。
[0025]第二方面,提供了一種服務(wù)器,包括:
[0026]處理器、連接所述處理器的第一代理裝置和第二代理裝置、與所述第一代理裝置連接的第一內(nèi)存模塊、以及與所述第二代理裝置連接的第二內(nèi)存模塊;
[0027]所述處理器,用于當(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)系建立指令;
[0028]所述第一代理裝置,用于接收所述鏡像關(guān)系建立指令,在接收到所述鏡像關(guān)系建立指令后,與第二代理裝置建立鏡像關(guān)系;
[0029]所述處理器,還用于在所述鏡像關(guān)系建立完成后,向所述第一代理裝置發(fā)送數(shù)據(jù)遷移指令;
[0030]所述第一代理裝置,還用于接收所述數(shù)據(jù)遷移指令,在接收到所述數(shù)據(jù)遷移指令后,將所述第一內(nèi)存模塊中的數(shù)據(jù)發(fā)送至所述第二代理裝置;
[0031]所述第二代理裝置,用于接收所述第一代理裝置發(fā)出的所述數(shù)據(jù),將所述數(shù)據(jù)寫入所述第二內(nèi)存模塊中;
[0032]所述處理器,還用于在所述數(shù)據(jù)遷移完后,向所述第一代理裝置發(fā)送鏡像關(guān)系解除指令,以及在發(fā)出所述鏡像關(guān)系解除指令后,將所述第一內(nèi)存模塊和所述第二內(nèi)存模塊分別設(shè)置為空閑狀態(tài)和運(yùn)行狀態(tài);
[0033]所述第一代理裝置,還用于接收到所述鏡像關(guān)系解除指令后,解除與所述第二代理裝置的所述鏡像關(guān)系。
[0034]在第一種可能的實(shí)現(xiàn)方式中,所述第一代理裝置還用于接收所述數(shù)據(jù)遷移指令,在接收到所述數(shù)據(jù)遷移指令后,將所述第一內(nèi)存模塊中的數(shù)據(jù)發(fā)送至所述第二代理裝置,包括:
[0035]所述第一代理裝置,還用于接收所述處理器發(fā)送的數(shù)據(jù)讀取指令,在接收到所述數(shù)據(jù)讀取指令后,讀取所述第一內(nèi)存模塊中的數(shù)據(jù)并將所述第一內(nèi)存模塊中的數(shù)據(jù)返回給所述處理器;
[0036]所述第一代理裝置,還用于接收所述處理器寫入的所述第一內(nèi)存模塊中的數(shù)據(jù),將所述第一內(nèi)存模塊中的數(shù)據(jù)發(fā)送至所述第二代理裝置。
[0037]結(jié)合第二方面或第二方面的第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,所述處理器,還用于向所述第一代理裝置的第一物理地址寫入第一數(shù)據(jù);
[0038]所述第一代理裝置,還用于接收到所述第一數(shù)據(jù)后,將所述第一數(shù)據(jù)轉(zhuǎn)發(fā)給所述第二代理裝置;
[0039]所述第二代理裝置,還用于在接收到所述第二代理裝置轉(zhuǎn)發(fā)的所述第一數(shù)據(jù)后,將所述第一數(shù)據(jù)寫入所述第二內(nèi)存模塊中的所述第一物理地址。
[0040]結(jié)合第二方面或第二方面的第一種可能的實(shí)現(xiàn)方式或第二方面的第二種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,所述處理器,還用于在所述數(shù)據(jù)遷移完以及向所述第一代理裝置發(fā)送鏡像關(guān)系解除指令后,斷開所述第一內(nèi)存模塊的電源,以移除所述第一內(nèi)存模塊。
[0041]結(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)存模塊。
[0042]采用本發(fā)明提供的一種服務(wù)器中內(nèi)存模塊的數(shù)據(jù)遷移方法及服務(wù)器的技術(shù)方案,處理器通過(guò)在兩個(gè)內(nèi)存模塊的代理裝置之間建立鏡像關(guān)系,指示代理裝置在兩個(gè)內(nèi)存模塊間進(jìn)行數(shù)據(jù)遷移,從而完成一個(gè)內(nèi)存模塊到另一個(gè)內(nèi)存模塊的數(shù)據(jù)遷移,整個(gè)數(shù)據(jù)遷移過(guò)程無(wú)需操作系統(tǒng)參與,數(shù)據(jù)遷移過(guò)程耗時(shí)短,方便地實(shí)現(xiàn)了服務(wù)器中內(nèi)存模塊的數(shù)據(jù)遷移。
【專利附圖】
【附圖說(shuō)明】
[0043]為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0044]圖1為現(xiàn)有技術(shù)中內(nèi)存熱插拔時(shí)涉及的服務(wù)器各層的關(guān)系示意圖;[0045]圖2為本發(fā)明提供的一種服務(wù)器中內(nèi)存模塊的數(shù)據(jù)遷移方法的一個(gè)實(shí)施例的流程圖;
[0046]圖3為本發(fā)明提供的一種服務(wù)器中內(nèi)存模塊的數(shù)據(jù)遷移方法的另一個(gè)實(shí)施例的流程圖;
[0047]圖4為現(xiàn)有技術(shù)中的內(nèi)存模塊熱移除流程圖;
[0048]圖5為現(xiàn)有技術(shù)中的內(nèi)存模塊熱添加流程圖;
[0049]圖6a為服務(wù)器包含的內(nèi)存模塊結(jié)構(gòu)示意圖;
[0050]圖6b為對(duì)服務(wù)器中的內(nèi)存模塊的數(shù)據(jù)遷移示意圖;
[0051]圖6c為服務(wù)器中的內(nèi)存模塊完成數(shù)據(jù)遷移后內(nèi)存模塊的角色轉(zhuǎn)換示意圖;
[0052]圖6d為對(duì)服務(wù)器中的空閑內(nèi)存模塊進(jìn)行替換的示意圖;
[0053]圖6e為服務(wù)器中的空閑內(nèi)存模塊替換后的示意圖;
[0054]圖7a為代理裝置HA和內(nèi)存模塊的結(jié)構(gòu)示意圖;
[0055]圖7b為節(jié)點(diǎn)控制器NC和內(nèi)存模塊的結(jié)構(gòu)示意圖;
[0056]圖8a為進(jìn)行內(nèi)存模塊數(shù)據(jù)遷移過(guò)程的服務(wù)器示意圖;
[0057]圖Sb為完成內(nèi)存模塊數(shù)據(jù)遷移過(guò)程后的服務(wù)器示意圖;
[0058]圖9為本發(fā)明的一種服務(wù)器的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0059]下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0060]圖2為本發(fā)明提供的一種服務(wù)器中內(nèi)存模塊的數(shù)據(jù)遷移方法的一個(gè)實(shí)施例的流程圖。如圖2所示,該方法包括以下步驟:
[0061]步驟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)。
[0062]步驟S102,所述第一代理裝置接收所述鏡像關(guān)系建立指令,與第二代理裝置建立鏡像關(guān)系。
[0063]在本發(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ǔ)模塊(Dual In-line Memory Module, 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)存模塊。
[0064]在本發(fā)明實(shí)施例中,參與數(shù)據(jù)遷移過(guò)程的每個(gè)內(nèi)存模塊都與一個(gè)代理裝置相連,該代理裝置負(fù)責(zé)接收處理器的內(nèi)存地址訪問(wèn)請(qǐng)求,這些內(nèi)存地址是其所代理的本地(Home/Local)的內(nèi)存模塊的地址,并將從內(nèi)存模塊返回的結(jié)果通過(guò)處理器送回原內(nèi)存訪問(wèn)的請(qǐng)求者。
[0065]當(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)存模塊中的相同的物理地址。
[0066]可以理解的是,本發(fā)明中處理器所執(zhí)行的操作實(shí)際上可以是由處理器上的BIOS程序來(lái)完成的。
[0067]步驟S103,所述處理器向所述第一代理裝置發(fā)送數(shù)據(jù)遷移指令。
[0068]步驟S104,所述第一代理裝置接收所述數(shù)據(jù)遷移指令,將所述第一內(nèi)存模塊中的數(shù)據(jù)發(fā)送至所述第二代理裝置。
[0069]步驟S105,所述第二代理裝置將所述第一內(nèi)存模塊中的數(shù)據(jù)寫入所述第二內(nèi)存模塊中。
[0070]代理裝置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)存模塊中的物理地址是完全一致的。
[0071]步驟S106,所述處理器向所述第一代理裝置發(fā)送鏡像關(guān)系解除指令,將所述第一內(nèi)存模塊和所述第二內(nèi)存模塊分別設(shè)置為空閑狀態(tài)和運(yùn)行狀態(tài)。
[0072]步驟S107,所述第一代理裝置接收所述鏡像關(guān)系解除指令,解除與所述第二代理裝置的所述鏡像關(guān)系。
[0073]全部遷移完第一內(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í),通過(guò)代理裝置B從第二內(nèi)存模塊讀取數(shù)據(jù)或?qū)?shù)據(jù)寫入第二內(nèi)存模塊。因?yàn)檫M(jìn)行數(shù)據(jù)遷移的前后,第一內(nèi)存模塊的物理地址不變,所以該數(shù)據(jù)遷移過(guò)程對(duì)于OS及OS上運(yùn)行的應(yīng)用程序來(lái)說(shuō)是不可見(jiàn)的。
[0074]可以理解的是,服務(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ù)遷移。
[0075]根據(jù)本發(fā)明實(shí)施例提供的一種服務(wù)器中內(nèi)存模塊的數(shù)據(jù)遷移方法,處理器通過(guò)在兩個(gè)內(nèi)存模塊的代理裝置之間建立鏡像關(guān)系,指示代理裝置在兩個(gè)內(nèi)存模塊間進(jìn)行數(shù)據(jù)遷移,從而完成一個(gè)內(nèi)存模塊到另一個(gè)內(nèi)存模塊的數(shù)據(jù)遷移,整個(gè)數(shù)據(jù)遷移過(guò)程無(wú)需操作系統(tǒng)參與,數(shù)據(jù)遷移過(guò)程耗時(shí)短,方便地實(shí)現(xiàn)了服務(wù)器中內(nèi)存模塊的數(shù)據(jù)遷移。
[0076]圖3為本發(fā)明提供的一種服務(wù)器中內(nèi)存模塊的數(shù)據(jù)遷移方法的另一個(gè)實(shí)施例的流程圖。如圖3所示,該方法包括以下步驟:
[0077]步驟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)。
[0078]步驟S202,所述第一代理裝置接收所述鏡像關(guān)系建立指令,與第二代理裝置建立鏡像關(guān)系。
[0079]如圖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ù)遷移。
[0080]當(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è)用戶的操作接口來(lái)接收用戶的熱插拔命令,并且能夠向用戶提示熱插拔的進(jìn)度。如圖4的內(nèi)存模塊熱移除流程圖和圖5的內(nèi)存模塊熱添加流程圖中,該用戶操作接口為一個(gè)按鈕。用戶按下該按鈕,即向處理器發(fā)出數(shù)據(jù)遷移和內(nèi)存模塊移除命令。
[0081]在本發(fā)明實(shí)施例中,與內(nèi)存模塊連接的代理裝置為如圖7a所示的本地代理(HomeAgent, HA), HA 是英特爾(Intel)的快速通道互聯(lián)(Quick-Path Interconnect, QPI)協(xié)議中的一個(gè)組件,現(xiàn)代的Intel處理器之間使用QPI總線進(jìn)行互聯(lián)。HA負(fù)責(zé)接收來(lái)自QPI的對(duì)內(nèi)存模塊的訪問(wèn)請(qǐng)求,并將從內(nèi)存模塊返回的結(jié)果送回原內(nèi)存訪問(wèn)的請(qǐng)求者。
[0082]圖7a展示了兩個(gè)Intel處理器的互聯(lián)方法,每個(gè)處理器內(nèi)部可以劃分為許多單元,這里僅畫出計(jì)算單元和互聯(lián)單元,計(jì)算單元發(fā)出對(duì)地址的訪問(wèn)請(qǐng)求,互聯(lián)單元將地址請(qǐng)求分配到對(duì)應(yīng)的子模塊,比如HA,或者通過(guò)QPI轉(zhuǎn)發(fā)到其他處理器的互聯(lián)單元。HA是互聯(lián)單元的一個(gè)子模塊,它接收來(lái)自互聯(lián)單元的對(duì)它所掛內(nèi)存的訪問(wèn)請(qǐng)求,這個(gè)請(qǐng)求可以來(lái)自它自身所在處理器的計(jì)算單元,也可以來(lái)自的其他處理器的計(jì)算單元。
[0083]與內(nèi)存模塊連接的代理裝置還可以是圖7b所示的擴(kuò)展節(jié)點(diǎn)控制器(ExtendedNode Controller,XNC)/節(jié)點(diǎn)控制器(Node Controller,NC)。如圖7b所示,處理器之間的互聯(lián)除了使用QPI以外,還可以使用XNC/NC,每個(gè)處理器的QPI先連接到XNC上,再由XNC的互聯(lián)網(wǎng)絡(luò)將所有處理器組合成一個(gè)大服務(wù)器。每個(gè)XNC下面的所有處理器、內(nèi)存、1/0等統(tǒng)稱一個(gè)節(jié)點(diǎn)(node),所以XNC的眾多功能中有一個(gè)是類似于HA的,那就是接收從互聯(lián)組織發(fā)來(lái)的對(duì)自身node內(nèi)的內(nèi)存的訪問(wèn)請(qǐng)求。
[0084]概括來(lái)說(shuō),HA和XNC/NC在本發(fā)明實(shí)施例中都有相同的功能,即:接收這樣內(nèi)存地址訪問(wèn)請(qǐng)求,這些內(nèi)存地址是其所代理的本地的內(nèi)存模塊的地址。
[0085]如圖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)存模塊連接的代理裝置HAO發(fā)送鏡像關(guān)系建立指令,代理裝置HAO接收該鏡像關(guān)系建立指令,與連接于該處于空閑狀態(tài)的內(nèi)存模塊的代理裝置HAl建立鏡像關(guān)系。所謂鏡像關(guān)系是指,處于空閑狀態(tài)的內(nèi)存模塊在初始化時(shí)不具有物理地址,當(dāng)代理裝置HAO和代理裝置HAl建立了鏡像關(guān)系后,處于空閑狀態(tài)的內(nèi)存模塊就具有了與處于運(yùn)行狀態(tài)的內(nèi)存模塊相同的物理地址PA0-PA1,代理裝置HAO在從處理器接收到寫入處于運(yùn)行狀態(tài)的內(nèi)存模塊的某物理地址的數(shù)據(jù)后,除了將該數(shù)據(jù)寫入該處于運(yùn)行狀態(tài)的內(nèi)存模塊的該物理地址,還將該數(shù)據(jù)寫入代理裝置HA1,再由HAl將數(shù)據(jù)寫入處于空閑狀態(tài)的內(nèi)存模塊中的相同的物理地址中。
[0086]步驟S203,所述處理器向所述第一代理裝置發(fā)送數(shù)據(jù)遷移指令。
[0087]步驟S204,所述第一代理裝置接收所述處理器發(fā)送的數(shù)據(jù)讀取指令,讀取所述第一內(nèi)存模塊中的數(shù)據(jù)并將所述第一內(nèi)存模塊中的數(shù)據(jù)返回給所述處理器。
[0088]步驟S205,所述第一代理裝置接收所述處理器寫入的所述第一內(nèi)存模塊中的數(shù)據(jù),將所述第一內(nèi)存模塊中的數(shù)據(jù)發(fā)送至所述第二代理裝置。
[0089]步驟S206,所述第二代理裝置將所述第一內(nèi)存模塊中的數(shù)據(jù)寫入所述第二內(nèi)存模塊中。
[0090]如圖6b所示,將處于運(yùn)行狀態(tài)的內(nèi)存模塊3中的數(shù)據(jù)逐步遷移至處于空閑狀態(tài)的內(nèi)存模塊4,該數(shù)據(jù)遷移的過(guò)程包括數(shù)據(jù)讀取和數(shù)據(jù)寫入的過(guò)程。處理器向HAO發(fā)送數(shù)據(jù)讀取指令,HAO接收該數(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ù)寫入ΗΑ0,然后HAO將該處于運(yùn)行狀態(tài)的內(nèi)存模塊中的數(shù)據(jù)轉(zhuǎn)發(fā)給HA1,由HAl將該處于運(yùn)行狀態(tài)的內(nèi)存模塊中的數(shù)據(jù)寫入處于空閑狀態(tài)的內(nèi)存模塊4中。
[0091]具體地,HAO和HAl的工作原理為:ΗΑ0和HAl建立鏡像關(guān)系后,服務(wù)器中的兩個(gè)HA組成鏡像對(duì),如圖7a所示。這兩個(gè)HA組成鏡像對(duì)后,會(huì)有一個(gè)HA是主鏡像端(MirroredMaster side),另一個(gè)是從鏡像端(Mirrored Slave side)。在內(nèi)存模塊數(shù)據(jù)遷移這個(gè)應(yīng)用實(shí)例中,主鏡像端就是一直在服務(wù)器中使用的HA,而從鏡像端是用來(lái)備份等待遷移的HA。在建立起臨時(shí)鏡像對(duì)的一開始,從HA便具有與主HA相同的物理地址,但是它們當(dāng)中的數(shù)據(jù)并不一致,所以就要進(jìn)行數(shù)據(jù)遷移。
[0092]具體的數(shù)據(jù)遷移過(guò)程是處理器從低地址到高地址把HA的所有地址進(jìn)行遍歷,每次執(zhí)行一部分地址:
[0093]1.從內(nèi)存模塊中將某個(gè)地址PAO的數(shù)據(jù)讀到處理器;
[0094]2.將數(shù)據(jù)原樣寫回原地址PAO ;
[0095]3.主HA收到這個(gè)地址寫請(qǐng)求,會(huì)做兩件事,一件是把數(shù)據(jù)寫到自己內(nèi)存的PAO地址上;
[0096]4.主HA知道此時(shí)服務(wù)器有一個(gè)它的鏡像HA存在,所以另一件事是它將這個(gè)數(shù)據(jù)包轉(zhuǎn)發(fā)給從HA ;
[0097]5.從HA收到數(shù)據(jù)包,將數(shù)據(jù)寫到自己內(nèi)存的PAO地址上。
[0098]到此,地址PAO在兩個(gè)HA里都有了相同的副本,相當(dāng)于完成了將主HA的PAO上的數(shù)據(jù)遷移到了從HA的PAO地址上。
[0099]當(dāng)處理器完成對(duì)整個(gè)主HA的地址遍歷,也就完成了 HA內(nèi)存數(shù)據(jù)遷移。[0100]步驟S207,所述處理器向所述第一代理裝置的第一物理地址寫入第一數(shù)據(jù)。
[0101]步驟S208,所述第一代理裝置接收所述第一數(shù)據(jù),并將所述第一數(shù)據(jù)轉(zhuǎn)發(fā)給所述
第二代理裝置。
[0102]步驟S209,所述第二代理裝置將所述第一數(shù)據(jù)寫入所述第二內(nèi)存模塊中的所述第一物理地址。
[0103]內(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上的ΗΑ0,它在逐漸遍歷處于運(yùn)行狀態(tài)的內(nèi)存模塊3的地址,將數(shù)據(jù)拷貝到處于空閑狀態(tài)的內(nèi)存模塊4 ;另一個(gè)是服務(wù)器總線(比如QPI)上發(fā)來(lái)的讀寫請(qǐng)求,這是服務(wù)器正常運(yùn)行時(shí)對(duì)處于運(yùn)行狀態(tài)的內(nèi)存模塊3的讀寫請(qǐng)求。如果沒(méi)有鏡像關(guān)系存在,那么當(dāng)HAO遷移了一部分地址的數(shù)據(jù),而QPI上又發(fā)來(lái)對(duì)這些地址的寫操作修改了這里內(nèi)存的值,這樣當(dāng)遷移完成時(shí),兩個(gè)內(nèi)存模塊的數(shù)據(jù)不一致,就不可能倒換。鏡像使得所有寫操作會(huì)將數(shù)據(jù)同時(shí)寫到兩個(gè)內(nèi)存模塊上,因此保證了一致性。
[0104]在遷移過(guò)程中,如果OS需要對(duì)主HA的地址PAl進(jìn)行寫操作,實(shí)際上就是以上步驟的2?5步,因此依然可以保證兩個(gè)HA的數(shù)據(jù)一致性。
[0105]步驟S210,所述處理器向所述第一代理裝置發(fā)送鏡像關(guān)系解除指令,將所述第一內(nèi)存模塊和所述第二內(nèi)存模塊分別設(shè)置為空閑狀態(tài)和運(yùn)行狀態(tài)。
[0106]步驟S211,所述第一代理裝置接收所述鏡像關(guān)系解除指令,解除與所述第二代理裝置的所述鏡像關(guān)系處于空閑狀態(tài)的內(nèi)存模塊處于運(yùn)行狀態(tài)的內(nèi)存模塊。
[0107]如圖6c所示,全部遷移完處于運(yùn)行狀態(tài)的內(nèi)存模塊中的數(shù)據(jù)后,向HAO發(fā)送鏡像關(guān)系解除指令,HAO和HAl解除鏡像關(guān)系,并且將接收該段物理地址的讀寫指令的代理裝置由HAO修改為HA1,這樣原來(lái)的處于運(yùn)行狀態(tài)的內(nèi)存模塊轉(zhuǎn)為空閑狀態(tài),其物理地址失效,處理器不能往該物理地址中寫入或從該物理地址中讀取數(shù)據(jù),原來(lái)的處于空閑狀態(tài)的內(nèi)存模塊轉(zhuǎn)為運(yùn)行狀態(tài),該原來(lái)的處于空閑狀態(tài)的內(nèi)存模塊具有與原來(lái)處于運(yùn)行狀態(tài)的內(nèi)存模塊相同的物理地址PA0-PA1,接收處理器對(duì)該段物理地址的讀寫操作,也即如圖Sb所示,處于空閑狀態(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)用程序來(lái)說(shuō)是不可見(jiàn)的。也因?yàn)槠洳豢梢?jiàn)性,對(duì)于HAO對(duì)應(yīng)的內(nèi)存模塊,無(wú)論上面是否有OS的內(nèi)核態(tài)數(shù)據(jù),以及無(wú)論上面的數(shù)據(jù)是否被應(yīng)用程序(比如數(shù)據(jù)庫(kù))頻繁占用,遷移都是可以完成的,因此大大提高了內(nèi)存熱移除的可行性。
[0108]步驟S212,所述處理器斷開所述第一內(nèi)存模塊的電源,以移除所述第一內(nèi)存模塊。
[0109]由于原來(lái)的處于運(yùn)行狀態(tài)的內(nèi)存模塊完成了數(shù)據(jù)遷移以及角色倒換后,實(shí)際上轉(zhuǎn)為空閑狀態(tài),可以斷開該內(nèi)存模塊的電源,以移除該內(nèi)存模塊。
[0110]現(xiàn)有的內(nèi)存模塊熱移除的流程如圖4所示,其包括以下步驟:
[0111]a)按下按鈕,表示發(fā)起命令;
[0112]b)按鈕LED開始閃爍,表示命令已經(jīng)收到;
[0113]c) BIOS轉(zhuǎn)發(fā)命令到OS,通知OS對(duì)要移除的內(nèi)存進(jìn)行遷移;
[0114]d)與上一步同時(shí),電源LED開始閃爍,表示熱移除的流程開始進(jìn)行;[0115]e)0S進(jìn)行內(nèi)存遷移,將這部分內(nèi)存地址上運(yùn)行的業(yè)務(wù)遷移到其他內(nèi)存地址上;
[0116]f)與上一步同時(shí),BIOS開始不斷查詢OS是否已完成數(shù)據(jù)遷移;
[0117]g)如果OS遷移數(shù)據(jù)成功,則通知BIOS遷移成功的結(jié)果;
[0118]h)如果OS遷移數(shù)據(jù)失敗,則將電源LED恢復(fù)到常亮狀態(tài),表示熱移除過(guò)程停止,并將按鈕LED設(shè)為常亮,通知用戶熱添加失敗(LED的操作實(shí)際是BIOS的行為,BIOS因?yàn)槭詹坏絆S的通知而出現(xiàn)超時(shí),從而判斷OS數(shù)據(jù)遷移失敗);
[0119]i)如果BIOS收到了 OS的通知,則刪除物理地址,實(shí)際是禁用到被移除內(nèi)存模塊的地址請(qǐng)求;
[0120]j)如果BIOS操作成功,則對(duì)內(nèi)存板停止供電,并將電源LED設(shè)為常滅,表示熱移除完成;
[0121]k)如果BIOS操作失敗,則對(duì)將電源LED恢復(fù)到常亮狀態(tài),表示熱移除過(guò)程停止,并將按鈕LED設(shè)為常亮,通知用戶熱添加失敗。
[0122]與圖4所示的內(nèi)存模塊熱移除流程不同的是,采用本發(fā)明實(shí)施例提供的數(shù)據(jù)遷移方法進(jìn)行內(nèi)存模塊熱移除,不需要OS的參與,全部由處理器也即其上的BIOS程序控制主HA完成,也即將上述步驟c)-步驟i)替換為本發(fā)明實(shí)施例的步驟S201-步驟S211。
[0123]步驟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)存模塊。
[0124]如圖6d所示,將圖6c中的處于空閑狀態(tài)的內(nèi)存模塊3移除后,可以熱添加新內(nèi)存模塊5,用戶通過(guò)操作接口比如按鍵來(lái)發(fā)起對(duì)新內(nèi)存模塊的熱添加操作,該熱添加操作的流程與現(xiàn)有技術(shù)相同。
[0125]如圖5為現(xiàn)有技術(shù)的內(nèi)存模塊熱添加流程,其包括以下步驟:
[0126]A.按下按鈕,表示發(fā)起命令;
[0127]B.按鈕LED開始閃爍,表示命令已經(jīng)收到;
[0128]C.給內(nèi)存卡(內(nèi)存板)供電;
[0129]D.電源LED開始閃爍,在熱添加完成之前會(huì)一直閃爍;
[0130]E.BIOS進(jìn)行內(nèi)存初始化;
[0131]F.為初始化好的內(nèi)存分配地址;
[0132]G.通知OS新添加的內(nèi)存可用,并同時(shí)上報(bào)新添加內(nèi)存的地址和容量;
[0133]H.0S完成其內(nèi)存上線(online)操作;
[0134]1.整個(gè)過(guò)程如果成功完成,則將電源LED變?yōu)槌A?,表示熱添加結(jié)束;
[0135]J.如果出現(xiàn)添加失敗,則將電源LED設(shè)為常滅,并給內(nèi)存板斷電,同時(shí)將
[0136]按鈕LED設(shè)為常亮,通知用戶熱添加失敗。
[0137]然而,在本發(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地址遷移的條件。
[0138]根據(jù)本發(fā)明實(shí)施例提供的一種服務(wù)器中內(nèi)存模塊的數(shù)據(jù)遷移方法,處理器通過(guò)在兩個(gè)內(nèi)存模塊的代理裝置之間建立鏡像關(guān)系,指示代理裝置在兩個(gè)內(nèi)存模塊間進(jìn)行數(shù)據(jù)遷移,從而完成一個(gè)內(nèi)存模塊到另一個(gè)內(nèi)存模塊的數(shù)據(jù)遷移,整個(gè)數(shù)據(jù)遷移過(guò)程無(wú)需操作系統(tǒng)參與,數(shù)據(jù)遷移過(guò)程耗時(shí)短,方便地實(shí)現(xiàn)了服務(wù)器中內(nèi)存模塊的數(shù)據(jù)遷移,能方便地對(duì)處于運(yùn)行狀態(tài)的內(nèi)存模塊進(jìn)行熱移除,且在數(shù)據(jù)遷移過(guò)程中,仍然可以接收處理器對(duì)運(yùn)行的內(nèi)存模塊的讀寫操作,不會(huì)造成數(shù)據(jù)錯(cuò)誤。
[0139]圖9為本發(fā)明一種服務(wù)器的一個(gè)實(shí)施例的結(jié)構(gòu)示意圖。如圖9所示,該服務(wù)器1000包括:
[0140]處理器11、連接處理器11的第一代理裝置12和第二代理裝置13、與第一代理裝置12連接的第一內(nèi)存模塊14、以及與第二代理裝置13連接的第二內(nèi)存模塊15 ;
[0141]處理器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)系建立指令;
[0142]第一代理裝置12,用于接收所述鏡像關(guān)系建立指令,在接收到所述鏡像關(guān)系建立指令后,與第二代理裝置13建立鏡像關(guān)系;
[0143]處理器11,還用于在所述鏡像關(guān)系建立完成后,向第一代理裝置12發(fā)送數(shù)據(jù)遷移指令;
[0144]第一代理裝置12,還用于接收所述數(shù)據(jù)遷移指令,在接收到所述數(shù)據(jù)遷移指令后,將第一內(nèi)存模塊14中的數(shù)據(jù)發(fā)送至第二代理裝置13 ;
[0145]第二代理裝置13,用于接收第一代理裝置12發(fā)出的所述數(shù)據(jù),將所述數(shù)據(jù)寫入第二內(nèi)存模塊15中;
[0146]處理器11,還用于在所述數(shù)據(jù)遷移完后,向第一代理裝置12發(fā)送鏡像關(guān)系解除指令,以及在發(fā)出所述鏡像關(guān)系解除指令后,將所述第一內(nèi)存模塊和所述第二內(nèi)存模塊分別設(shè)置為空閑狀態(tài)和運(yùn)行狀態(tài);
[0147]第一代理裝置12,還用于接收到所述鏡像關(guān)系解除指令后,解除與第二代理裝置13的所述鏡像關(guān)系。
[0148]根據(jù)本發(fā)明實(shí)施例提供的一種服務(wù)器,其中的處理器通過(guò)在兩個(gè)內(nèi)存模塊的代理裝置之間建立鏡像關(guān)系,指示代理裝置在兩個(gè)內(nèi)存模塊間進(jìn)行數(shù)據(jù)遷移,從而完成一個(gè)內(nèi)存模塊到另一個(gè)內(nèi)存模塊的數(shù)據(jù)遷移,整個(gè)數(shù)據(jù)遷移過(guò)程無(wú)需操作系統(tǒng)參與,數(shù)據(jù)遷移過(guò)程耗時(shí)短,方便地實(shí)現(xiàn)了服務(wù)器中內(nèi)存模塊的數(shù)據(jù)遷移。
[0149]本發(fā)明還提供了一種服務(wù)器的另一個(gè)實(shí)施例。該服務(wù)器包括:
[0150]處理器、連接所述處理器的第一代理裝置和第二代理裝置、與所述第一代理裝置連接的第一內(nèi)存模塊、以及與所述第二代理裝置連接的第二內(nèi)存模塊;
[0151]所述處理器,用于當(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)系建立指令;
[0152]所述第一代理裝置,用于接收所述鏡像關(guān)系建立指令,在接收到所述鏡像關(guān)系建立指令后,與第二代理裝置建立鏡像關(guān)系;
[0153]所述處理器,還用于在所述鏡像關(guān)系建立完成后,向所述第一代理裝置發(fā)送數(shù)據(jù)遷移指令;
[0154]所述第一代理裝置,還用于接收所述處理器發(fā)送的數(shù)據(jù)讀取指令,,在接收到所述數(shù)據(jù)讀取指令后,讀取所述第一內(nèi)存模塊中的數(shù)據(jù)并將所述第一內(nèi)存模塊中的數(shù)據(jù)返回給所述處理器;
[0155]所述第一代理裝置,還用于接收所述處理器寫入的所述第一內(nèi)存模塊中的數(shù)據(jù),將所述第一內(nèi)存模塊中的數(shù)據(jù)發(fā)送至所述第二代理裝置;
[0156]所述第二代理裝置,用于接收所述第一代理裝置發(fā)出的所述數(shù)據(jù),將所述數(shù)據(jù)寫入所述第二內(nèi)存模塊中;
[0157]所述處理器,還用于向所述第一代理裝置的第一物理地址寫入第一數(shù)據(jù);
[0158]所述第一代理裝置,還用于接收到所述第一數(shù)據(jù)后,將所述第一數(shù)據(jù)轉(zhuǎn)發(fā)給所述第二代理裝置;
[0159]所述第二代理裝置,還用于在接收到所述第二代理裝置轉(zhuǎn)發(fā)的所述第一數(shù)據(jù)后,將所述第一數(shù)據(jù)寫入所述第二內(nèi)存模塊中的所述第一物理地址;
[0160]所述處理器,還用于在所述數(shù)據(jù)遷移完后,向所述第一代理裝置發(fā)送鏡像關(guān)系解除指令,以及在發(fā)出所述鏡像關(guān)系解除指令后,將所述第一內(nèi)存模塊和所述第二內(nèi)存模塊分別設(shè)置為空閑狀態(tài)和運(yùn)行狀態(tài);
[0161]所述第一代理裝置,還用于接收到所述鏡像關(guān)系解除指令后,解除與所述第二代理裝置的所述鏡像關(guān)系。
[0162]所述處理器,還用于在所述數(shù)據(jù)遷移完以及向所述第一代理裝置發(fā)送鏡像關(guān)系解除指令后,斷開所述第一內(nèi)存模塊的電源,以移除所述第一內(nèi)存模塊;
[0163]所述處理器,還用于當(dāng)接收到用戶的內(nèi)存模塊添加請(qǐng)求時(shí),給添加的內(nèi)存模塊供電,并對(duì)所述添加的內(nèi)存模塊進(jìn)行初始化,所述添加的內(nèi)存模塊成為空閑內(nèi)存模塊。
[0164]根據(jù)本發(fā)明實(shí)施例提供的一種服務(wù)器,其中的處理器通過(guò)在兩個(gè)內(nèi)存模塊的代理裝置之間建立鏡像關(guān)系,指示代理裝置在兩個(gè)內(nèi)存模塊間進(jìn)行數(shù)據(jù)遷移,從而完成一個(gè)內(nèi)存模塊到另一個(gè)內(nèi)存模塊的數(shù)據(jù)遷移,整個(gè)數(shù)據(jù)遷移過(guò)程無(wú)需操作系統(tǒng)參與,數(shù)據(jù)遷移過(guò)程耗時(shí)短,方便地實(shí)現(xiàn)了服務(wù)器中內(nèi)存模塊的數(shù)據(jù)遷移,能方便地對(duì)處于運(yùn)行狀態(tài)的內(nèi)存模塊進(jìn)行熱移除,且在數(shù)據(jù)遷移過(guò)程中,仍然可以接收處理器對(duì)運(yùn)行的內(nèi)存模塊的讀寫操作,不會(huì)造成數(shù)據(jù)錯(cuò)誤。
[0165]所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡(jiǎn)潔,上述描述的設(shè)備和模塊的具體工作過(guò)程,可以參考前述方法實(shí)施例中的對(duì)應(yīng)過(guò)程描述,在此不再贅述。
[0166]在本申請(qǐng)所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的設(shè)備和方法,可以通過(guò)其它的方式實(shí)現(xiàn)。例如,以上所描述的裝置實(shí)施例僅僅是示意性的,例如,所述模塊的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)模塊或組件可以結(jié)合或者可以集成到另一個(gè)設(shè)備中,或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過(guò)一些通信接口,裝置或模塊的間接耦合或通信連接,可以是電性,機(jī)械或其它的形式。
[0167]所述作為分離部件說(shuō)明的模塊可以是或者也可以不是物理上分開的,作為模塊顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部,模塊來(lái)實(shí)現(xiàn)本實(shí)施例方案的目的。
[0168]另外,在本發(fā)明各個(gè)實(shí)施例中的各功能模塊可以集成在一個(gè)處理模塊中,也可以是各個(gè)模塊單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上模塊集成在一個(gè)模塊中。
[0169]通過(guò)以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到各實(shí)施方式可借助軟件加必需的通用硬件平臺(tái)的方式來(lái)實(shí)現(xiàn),當(dāng)然也可以通過(guò)硬件?;谶@樣的理解,上述技術(shù)方案本質(zhì)上或者說(shuō)對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件設(shè)備的形式體現(xiàn)出來(lái),該計(jì)算機(jī)軟件設(shè)備可以存儲(chǔ)在計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,如R0M/RAM、磁碟、光盤等,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行各個(gè)實(shí)施例或者實(shí)施例的某些部分所述的方法。
[0170]以上所述的實(shí)施方式,并不構(gòu)成對(duì)該技術(shù)方案保護(hù)范圍的限定。任何在上述實(shí)施方式的精神和原則之內(nèi)所作的修改、等同替換和改進(jìn)等,均應(yīng)包含在該技術(shù)方案的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.一種服務(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)系。
2.如權(quán)利要求1所述的方法,其特征在于,所述第一代理裝置接收所述數(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ā)送至所述第二代理裝置。
3.如權(quán)利要求1或2所述的方法,其特征在于,所述處理器向所述第一代理裝置發(fā)送鏡像關(guān)系解除指令之前,還包括: 所述處理器向所述第一代理裝置的第一物理地址寫入第一數(shù)據(jù); 所述第一代理裝置接收所述第一數(shù)據(jù),并將所述第一數(shù)據(jù)轉(zhuǎn)發(fā)給所述第二代理裝置; 所述第二代理裝置將所述第一數(shù)據(jù)寫入所述第二內(nèi)存模塊中的所述第一物理地址。
4.如權(quán)利要求1-3任意一項(xiàng)所述的方法,其特征在于,所述第一代理裝置接收所述鏡像關(guān)系解除指令,解除與所述第二代理裝置的所述鏡像關(guān)系之后,還包括: 所述處理器斷開所述第一內(nèi)存模塊的電源,以移除所述第一內(nèi)存模塊。
5.如權(quán)利要求1-4任意一項(xiàng)所述的方法,其特征在于,還包括: 當(dāng)所述處理器接收到用戶的內(nèi)存模塊添加請(qǐng)求時(shí),所述處理器給添加的內(nèi)存模塊供電,并對(duì)所述添加的內(nèi)存模塊進(jìn)行初始化,所述添加的內(nèi)存模塊進(jìn)入空閑狀態(tài)。
6.一種服務(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)系。
7.如權(quán)利要求6所述的服務(wù)器,其特征在于,所述第一代理裝置還用于接收所述數(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ā)送至所述第二代理裝置。
8.如權(quán)利要求6或7所述的服務(wù)器,其特征在于, 所述處理器,還用于向所述第一代理裝置的第一物理地址寫入第一數(shù)據(jù); 所述第一代理裝置,還用于接收到所述第一數(shù)據(jù)后,將所述第一數(shù)據(jù)轉(zhuǎn)發(fā)給所述第二代理裝置; 所述第二代理裝置,還用于在接收到所述第二代理裝置轉(zhuǎn)發(fā)的所述第一數(shù)據(jù)后,將所述第一數(shù)據(jù)寫入所述第二內(nèi)存模塊中的所述第一物理地址。
9.如權(quán)利要求6-8任意一項(xiàng)所述的服務(wù)器,其特征在于, 所述處理器,還用于在所述數(shù)據(jù)遷移完以及向所述第一代理裝置發(fā)送鏡像關(guān)系解除指令后,斷開所述第一內(nèi)存模塊的電源,以移除所述第一內(nèi)存模塊。
10.如權(quán)利要求6-9任意一項(xiàng)所述的服務(wù)器,其特征在于, 所述處理器,還用于當(dāng)接收到用戶的內(nèi)存模塊添加請(qǐng)求時(shí),給添加的內(nèi)存模塊供電,并對(duì)所述添加的內(nèi)存模塊進(jìn)行初始化,所述添加的內(nèi)存模塊成為空閑內(nèi)存模塊。
【文檔編號(hào)】G06F12/02GK103455372SQ201310390761
【公開日】2013年12月18日 申請(qǐng)日期:2013年8月31日 優(yōu)先權(quán)日:2013年8月31日
【發(fā)明者】陳奔, 劉鋼 申請(qǐng)人:華為技術(shù)有限公司