一種伺服器中內存模塊的數據遷移方法及伺服器與流程
2023-07-26 09:51:46 1

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