一種內(nèi)存遷移方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及存儲(chǔ)技術(shù)領(lǐng)域,尤其涉及一種內(nèi)存遷移方法及裝置。
【背景技術(shù)】
[0002] 在非一致性內(nèi)存訪問(wèn)(Non-Uniform Memory Access,NUMA)架構(gòu)中,系統(tǒng)分為多個(gè) 節(jié)點(diǎn)(Node),每個(gè)節(jié)點(diǎn)有自己的中央處理器(Central Processing Unit, CPU)和內(nèi)存,節(jié) 點(diǎn)和節(jié)點(diǎn)之間通過(guò)互聯(lián)模塊進(jìn)行連接和通信,如圖1所示的NUMA架構(gòu)的全互聯(lián)示意圖。故 對(duì)每個(gè)節(jié)點(diǎn)內(nèi)的CPU而言,它訪問(wèn)的內(nèi)存就存在兩種距離:一種是本節(jié)點(diǎn)內(nèi)的內(nèi)存,即近端 內(nèi)存;另一種就是其他節(jié)點(diǎn)內(nèi)的內(nèi)存,即遠(yuǎn)端內(nèi)存。拿NUMA架構(gòu)全互聯(lián)機(jī)器的兩個(gè)節(jié)點(diǎn)的 連接和交互來(lái)看,如圖2所示的NUMA架構(gòu)上兩個(gè)節(jié)點(diǎn)的連接示意圖,節(jié)點(diǎn)1上的CPU訪問(wèn) 節(jié)點(diǎn)2上的內(nèi)存(遠(yuǎn)端訪問(wèn))時(shí),需要通過(guò)互聯(lián)模塊進(jìn)行傳輸,而訪問(wèn)節(jié)點(diǎn)1自己內(nèi)存(近 端訪問(wèn))則只需要通過(guò)內(nèi)存通道進(jìn)行訪問(wèn),兩者訪問(wèn)時(shí)間明顯不同。
[0003] 對(duì)于全互聯(lián)的NUMA架構(gòu),其訪存只存在上述兩種距離。而對(duì)非全互聯(lián)的情況而 言,其訪存就會(huì)多出很多距離,就是遠(yuǎn)端訪問(wèn)的距離有不同,如跨越2個(gè)互聯(lián)模塊到達(dá)目的 結(jié)點(diǎn)內(nèi)存的。一般的,NUM架構(gòu)的節(jié)點(diǎn)分為三類,如下:
[0004] 本地結(jié)點(diǎn)(Local Node):對(duì)于一個(gè)節(jié)點(diǎn)內(nèi)的所有CPU而言,此節(jié)點(diǎn)稱為本地節(jié)點(diǎn);
[0005] 鄰居結(jié)點(diǎn)(Buddy Node):與本地節(jié)點(diǎn)直接通過(guò)互聯(lián)模塊相連的節(jié)點(diǎn);
[0006] 遠(yuǎn)端結(jié)點(diǎn)(Remote Node):與本地節(jié)點(diǎn)間接相連、需要跨多個(gè)互聯(lián)模塊的節(jié)點(diǎn)。
[0007] -般情況下,訪存開(kāi)銷的關(guān)系為:本地節(jié)點(diǎn)〈鄰居節(jié)點(diǎn)〈遠(yuǎn)端節(jié)點(diǎn)。
[0008] 在多核處理器中,為進(jìn)行內(nèi)核的負(fù)載均衡,需要將某些處理上過(guò)多的進(jìn)程遷移到 運(yùn)行隊(duì)列較短的處理器上,對(duì)大型應(yīng)用特別是聯(lián)機(jī)事務(wù)處理系統(tǒng)(On-Line Transaction Processing,OLTP)而言,因?yàn)檫M(jìn)程/線程數(shù)多,且運(yùn)行的時(shí)間不同,內(nèi)核的負(fù)載均衡會(huì)使很 多進(jìn)程/線程在不同的處理器上切換,與一開(kāi)始分配到處理器處于不同的位置上。特別是 NUM架構(gòu)的系統(tǒng),當(dāng)進(jìn)程/線程因?yàn)樨?fù)載均衡的原因在不同節(jié)點(diǎn)進(jìn)行切換時(shí),會(huì)促使進(jìn)程/ 線程進(jìn)行大量的遠(yuǎn)端訪問(wèn),增加了訪問(wèn)延時(shí),如圖3所示的示例的NUM架構(gòu)的負(fù)載均衡引 起的遠(yuǎn)端訪問(wèn)示意圖;在進(jìn)行內(nèi)存熱移除時(shí),也需要將熱移除內(nèi)存上的內(nèi)存頁(yè)搬遷到其它 節(jié)點(diǎn)上。
[0009] 但不管是進(jìn)程的內(nèi)存遷移還是內(nèi)存熱移除,在搬遷頁(yè)時(shí),都是一頁(yè)一頁(yè)的搬遷,利 用內(nèi)核頁(yè)遷移觸發(fā)多次上下文切換,不僅大大占用了 CPU利用率,同時(shí)還由于頻繁的切換 導(dǎo)致申請(qǐng)的目的內(nèi)存不夠連續(xù),降低了命中率。
[0010] 綜上所述,需要提供一種內(nèi)存遷移方法及裝置,減少遷移時(shí)的上下文切換,提高內(nèi) 存遷移的效率。
【發(fā)明內(nèi)容】
[0011] 本發(fā)明實(shí)施例提供一種內(nèi)存遷移方法及裝置,以在內(nèi)存遷移過(guò)程中,減少遷移時(shí) 的上下文切換,提高內(nèi)存遷移的效率。
[0012] 第一方面,提供了一種內(nèi)存遷移方法,包括:
[0013] 當(dāng)接收到對(duì)存儲(chǔ)系統(tǒng)中的任意一個(gè)源節(jié)點(diǎn)的內(nèi)存數(shù)據(jù)遷移請(qǐng)求時(shí),根據(jù)待遷移數(shù) 據(jù)的物理地址的連續(xù)性,將所述待遷移數(shù)據(jù)按內(nèi)存塊進(jìn)行劃分,每個(gè)內(nèi)存塊中所述待遷移 數(shù)據(jù)的物理地址是連續(xù)的,確定所述待遷移數(shù)據(jù)劃分后所占用的源節(jié)點(diǎn)的內(nèi)存塊數(shù);
[0014] 獲取所述存儲(chǔ)系統(tǒng)中的目的節(jié)點(diǎn)上與所述待遷移數(shù)據(jù)劃分后所占用的源節(jié)點(diǎn)的 內(nèi)存塊數(shù)一致的內(nèi)存塊;
[0015] 將所述待遷移數(shù)據(jù)按劃分后的內(nèi)存塊遷移到所述目的節(jié)點(diǎn)上的內(nèi)存塊中。
[0016] 在第一種可能的實(shí)現(xiàn)方式中,所述將所述待遷移數(shù)據(jù)按劃分后的內(nèi)存塊遷移到所 述目的節(jié)點(diǎn)上的內(nèi)存塊中,具體為:
[0017] 當(dāng)所述源節(jié)點(diǎn)和目的節(jié)點(diǎn)不為同一個(gè)節(jié)點(diǎn)時(shí),根據(jù)所述待遷移數(shù)據(jù)劃分后所占用 的源節(jié)點(diǎn)的內(nèi)存塊數(shù)和獲取的目的節(jié)點(diǎn)的內(nèi)存塊數(shù),由所述源節(jié)點(diǎn)和目的節(jié)點(diǎn)之間的硬件 加速引擎BE控制將所述待遷移數(shù)據(jù)從所述源節(jié)點(diǎn)遷移到所述目的節(jié)點(diǎn);其中,所述存儲(chǔ)系 統(tǒng)包括至少兩個(gè)節(jié)點(diǎn),所述至少兩個(gè)節(jié)點(diǎn)通過(guò)互聯(lián)模塊連接,每個(gè)所述互聯(lián)模塊中包含一 個(gè)BE。
[0018] 結(jié)合第一方面的第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,所述當(dāng)所 述源節(jié)點(diǎn)和目的節(jié)點(diǎn)不為同一個(gè)節(jié)點(diǎn)時(shí),根據(jù)所述待遷移數(shù)據(jù)劃分后所占用的源節(jié)點(diǎn)的內(nèi) 存塊數(shù)和獲取的目的節(jié)點(diǎn)的內(nèi)存塊數(shù),由所述源節(jié)點(diǎn)和目的節(jié)點(diǎn)之間的硬件加速引擎BE 控制將所述待遷移數(shù)據(jù)從所述源節(jié)點(diǎn)遷移到所述目的節(jié)點(diǎn),包括:
[0019] 根據(jù)所述待遷移數(shù)據(jù)劃分后所占用的源節(jié)點(diǎn)的內(nèi)存塊數(shù)和獲取的目的節(jié)點(diǎn)的內(nèi) 存塊數(shù),生成至少一個(gè)遷移信息,所述至少一個(gè)遷移信息包括進(jìn)行遷移的源節(jié)點(diǎn)的每一個(gè) 內(nèi)存塊的起始地址、目的節(jié)點(diǎn)的每一個(gè)內(nèi)存塊的起始地址、進(jìn)行遷移的源節(jié)點(diǎn)或目的節(jié)點(diǎn) 的每一個(gè)內(nèi)存塊的塊長(zhǎng)度以及所述源節(jié)點(diǎn)或目的節(jié)點(diǎn)中當(dāng)前進(jìn)行遷移的內(nèi)存塊是否是最 后一塊的標(biāo)識(shí),其中,所述BE包括至少一個(gè)區(qū),所述至少一個(gè)區(qū)中的每個(gè)區(qū)包括至少一個(gè) 內(nèi)存塊;
[0020] 將所述至少一個(gè)遷移信息寫入所述BE中的至少一個(gè)區(qū)中的至少一個(gè)內(nèi)存塊中, 以使所述BE根據(jù)所述至少一個(gè)遷移信息控制將所述待遷移數(shù)據(jù)遷移到所述目的節(jié)點(diǎn)上的 內(nèi)存塊中;
[0021] 當(dāng)所述BE中具有所述最后一塊的標(biāo)識(shí)的內(nèi)存塊遷移完成后,接收所述BE通過(guò)基 本輸入輸出系統(tǒng)BIOS發(fā)送的遷移完成通知。
[0022] 結(jié)合第一方面的第二種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,所述將所 述至少一個(gè)遷移信息寫入所述BE中的至少一個(gè)區(qū)中的至少一個(gè)內(nèi)存塊中,以使所述BE根 據(jù)所述至少一個(gè)遷移信息控制將所述待遷移數(shù)據(jù)遷移到所述目的節(jié)點(diǎn)上的內(nèi)存塊中,包 括:
[0023] 根據(jù)所述至少一個(gè)遷移信息以及所述BE的區(qū)的個(gè)數(shù)和每個(gè)區(qū)中內(nèi)存塊的個(gè)數(shù), 確定進(jìn)行所述遷移所需的區(qū)的個(gè)數(shù)和/或輪流使用每個(gè)所述區(qū)進(jìn)行遷移的次數(shù);
[0024] 獲取所述BE的至少一個(gè)區(qū)中每個(gè)區(qū)的工作狀態(tài);
[0025] 將所述至少一個(gè)遷移信息依次寫入所述BE中的所述工作狀態(tài)為空閑狀態(tài)的一個(gè) 區(qū)的至少一個(gè)內(nèi)存塊中,以使所述BE根據(jù)所述空閑狀態(tài)的區(qū)的至少一個(gè)內(nèi)存塊中的至少 一個(gè)遷移信息,依次將所述待遷移數(shù)據(jù)遷移到所述目的節(jié)點(diǎn)上的內(nèi)存塊中。
[0026] 結(jié)合第一方面的第二種可能的實(shí)現(xiàn)方式或第一方面的第三種可能的實(shí)現(xiàn)方式,在 第四種可能的實(shí)現(xiàn)方式中,所述將所述至少一個(gè)遷移信息寫入所述BE中的至少一個(gè)區(qū)中 的至少一個(gè)內(nèi)存塊中,以使所述BE根據(jù)所述至少一個(gè)遷移信息控制將所述待遷移數(shù)據(jù)遷 移到所述目的節(jié)點(diǎn)上的內(nèi)存塊中,還包括:
[0027] 將所述數(shù)據(jù)遷移請(qǐng)求劃分為一個(gè)遷移任務(wù);
[0028] 當(dāng)所述存儲(chǔ)系統(tǒng)中存在至少一個(gè)遷移任務(wù)時(shí),所述至少一個(gè)遷移任務(wù)由至少一個(gè) BE依次或同時(shí)進(jìn)行遷移。
[0029] 第二方面,提供了一種內(nèi)存遷移方法,包括:
[0030] 當(dāng)接收到將存儲(chǔ)系統(tǒng)中的任意一個(gè)源節(jié)點(diǎn)中的待遷移數(shù)據(jù)進(jìn)行劃分的指令時(shí),根 據(jù)所述待遷移數(shù)據(jù)的物理地址的連續(xù)性,將所述待遷移數(shù)據(jù)按內(nèi)存塊進(jìn)行劃分,每個(gè)內(nèi)存 塊中所述待遷移數(shù)據(jù)的物理地址是連續(xù)的,確定所述待遷移數(shù)據(jù)劃分后所占用的源節(jié)點(diǎn)的 內(nèi)存塊數(shù);
[0031] 接收獲取對(duì)應(yīng)所述待遷移數(shù)據(jù)的目的節(jié)點(diǎn)的內(nèi)存塊的指令,在所述目的節(jié)點(diǎn)上保 留與所述待遷移數(shù)據(jù)劃分后所占用的源節(jié)點(diǎn)的內(nèi)存塊數(shù)一致的內(nèi)存塊;
[0032] 當(dāng)接收到內(nèi)存遷移指令時(shí),將所述待遷移數(shù)據(jù)按劃分后的內(nèi)存塊遷移到所述目的 節(jié)點(diǎn)上的內(nèi)存塊中。
[0033] 在第一種可能的實(shí)現(xiàn)方式中,所述存儲(chǔ)系統(tǒng)包括至少兩個(gè)節(jié)點(diǎn),所述至少兩個(gè)節(jié) 點(diǎn)通過(guò)互聯(lián)模塊連接,每個(gè)所述互聯(lián)模塊中包含一個(gè)BE ;
[0034] 所述當(dāng)接收到內(nèi)存遷移指令時(shí),將所述待遷移數(shù)據(jù)按劃分后的內(nèi)存塊遷移到所述 目的節(jié)點(diǎn)上的內(nèi)存塊中,包括:
[0035] 當(dāng)所述源節(jié)點(diǎn)和目的節(jié)點(diǎn)不為同一個(gè)節(jié)點(diǎn)時(shí),根據(jù)所述待遷移數(shù)據(jù)劃分后所占用 的源節(jié)點(diǎn)的內(nèi)存塊數(shù)和保留的目的節(jié)點(diǎn)的內(nèi)存塊數(shù),所述源節(jié)點(diǎn)和目的節(jié)點(diǎn)之間的硬件加 速引擎BE控制將所述待遷移數(shù)據(jù)從所述源節(jié)點(diǎn)遷移到所述目的節(jié)點(diǎn)。
[0036] 結(jié)合第二方面的第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,所述當(dāng)所 述源節(jié)點(diǎn)和目的節(jié)點(diǎn)不為同一個(gè)節(jié)點(diǎn)時(shí),根據(jù)所述待遷移數(shù)據(jù)劃分后所占用的源節(jié)點(diǎn)的內(nèi) 存塊數(shù)和保留的目的節(jié)點(diǎn)的內(nèi)存塊數(shù),所述源節(jié)點(diǎn)和目的節(jié)點(diǎn)之間的硬件加速引擎BE控 制將所述待遷移數(shù)據(jù)從所述源節(jié)點(diǎn)遷移到所述目的節(jié)點(diǎn),包括:
[0037] 當(dāng)接收到至少一個(gè)遷移信息的寫入指令時(shí),所述BE將所述至少一個(gè)遷移信息寫 入所述BE中的至少一個(gè)區(qū)中的至少一個(gè)內(nèi)存塊中,所述至少一個(gè)遷移信息包括進(jìn)行遷移 的源節(jié)點(diǎn)的每一個(gè)內(nèi)存塊的起始地址、目的節(jié)點(diǎn)的每一個(gè)內(nèi)存塊的起始地址、進(jìn)行遷移的 源節(jié)點(diǎn)或目的節(jié)點(diǎn)的每一個(gè)內(nèi)存塊的塊長(zhǎng)度以及所述源節(jié)點(diǎn)或目的節(jié)點(diǎn)中當(dāng)前進(jìn)行遷移 的內(nèi)存塊是否是最后一塊的標(biāo)識(shí),其中,所述BE包括至少一個(gè)區(qū),所述至少一個(gè)區(qū)中的每 個(gè)區(qū)包括至少一個(gè)內(nèi)存塊;
[0038] 所述BE根據(jù)所述至少一個(gè)遷移信息控制將所述待遷移數(shù)據(jù)遷移到所述目的節(jié)點(diǎn) 上的內(nèi)存塊中;
[0039] 當(dāng)所述BE中具有所述至少一個(gè)區(qū)的最后一塊標(biāo)識(shí)的內(nèi)存塊遷移完成后,所述BE 通過(guò)基本輸入輸出系統(tǒng)BIOS發(fā)送遷移完成通知。
[0040] 結(jié)合第二方面的第二種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,所述當(dāng)接 收到至少一個(gè)遷移信息的寫入指令時(shí),所述BE將所述至少一個(gè)遷移信息寫入所述BE中的 至少一個(gè)區(qū)中的至少一個(gè)內(nèi)存塊中,包括:
[0041] 根據(jù)確定的進(jìn)行所述遷移所需的區(qū)的個(gè)數(shù)和/或輪流使用每個(gè)所述區(qū)進(jìn)行遷移 的次數(shù),所述BE將所述至少一個(gè)遷移信息依次寫入所述BE中的所述工作狀態(tài)為空閑狀態(tài) 的一個(gè)區(qū)的至少一個(gè)內(nèi)存塊中;
[0042] 所述BE根據(jù)所述至少一個(gè)遷移信息控制將所述待遷移數(shù)據(jù)遷移到所述目的節(jié)點(diǎn) 上的內(nèi)存塊中,包括:
[0043] 所述BE根據(jù)所述空閑狀態(tài)的區(qū)的至少一個(gè)內(nèi)存塊中的至少一個(gè)遷移信息,依次 將所述待遷移數(shù)據(jù)遷移到所述目的節(jié)點(diǎn)上的內(nèi)存塊中。
[0044] 第三方面,提供了一種內(nèi)存遷移裝置,包括:
[0045] 第一確定單元,用于當(dāng)接收到對(duì)存儲(chǔ)系統(tǒng)中的任意一個(gè)源節(jié)點(diǎn)的內(nèi)存數(shù)據(jù)遷移請(qǐng) 求時(shí),根據(jù)待遷移數(shù)據(jù)的物理地址的連續(xù)性,將所述待遷移數(shù)據(jù)按內(nèi)存塊進(jìn)行劃分,每個(gè)內(nèi) 存塊中所述待遷移數(shù)據(jù)的物理地址是連續(xù)的,確定所述待遷移數(shù)據(jù)劃分后所占用的源節(jié)點(diǎn) 的內(nèi)存塊數(shù);
[0046] 第一獲取單元,用于獲取所述存儲(chǔ)系統(tǒng)中的目的節(jié)點(diǎn)上與所述待遷移數(shù)據(jù)劃分后 所占用的源節(jié)點(diǎn)的內(nèi)存塊數(shù)一致的內(nèi)存塊;
[0047] 遷移單元,用于將所述待遷移數(shù)據(jù)按劃分后的內(nèi)存塊遷移到所述目的節(jié)點(diǎn)上的內(nèi) 存塊中。
[0048] 在第一種可能的實(shí)現(xiàn)方式中,所述遷移單元具體用于:
[0049] 當(dāng)所述源節(jié)點(diǎn)和目的節(jié)點(diǎn)不為同一個(gè)節(jié)點(diǎn)時(shí),根據(jù)所述待遷移數(shù)據(jù)劃分后所占用 的源節(jié)點(diǎn)的內(nèi)存塊數(shù)和獲取的目的節(jié)點(diǎn)的內(nèi)存塊數(shù),由所述源節(jié)點(diǎn)和目的節(jié)點(diǎn)之間的硬件 加速引擎BE控制將所述待遷移數(shù)據(jù)從所述源節(jié)點(diǎn)遷移到所述目的節(jié)點(diǎn);其中,所述存儲(chǔ)系 統(tǒng)包括至少兩個(gè)節(jié)點(diǎn),所述至少兩個(gè)節(jié)點(diǎn)通過(guò)互聯(lián)模塊連接,每個(gè)所述互聯(lián)模塊中包含一 個(gè)BE。
[0050] 結(jié)合第三方面的第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,所述遷移 單元包括:
[0051] 生成單元,用于根據(jù)所述待遷移數(shù)據(jù)劃分后所占用的源節(jié)點(diǎn)的內(nèi)存塊數(shù)和獲取的 目的節(jié)點(diǎn)的內(nèi)存塊數(shù),生成至少一個(gè)遷移信息,所述至少一個(gè)遷移信息包括進(jìn)行遷移的源 節(jié)點(diǎn)的每一個(gè)內(nèi)存塊的起始地址、目的節(jié)點(diǎn)的每一個(gè)內(nèi)存塊的起始地址、進(jìn)行遷移的源節(jié) 點(diǎn)或目的節(jié)點(diǎn)的每一個(gè)內(nèi)存塊的塊長(zhǎng)度以及所述源節(jié)點(diǎn)或目的節(jié)點(diǎn)中當(dāng)前進(jìn)行遷移的內(nèi) 存塊是否是最后一塊的標(biāo)識(shí),其中,所述BE包括至少一個(gè)區(qū),所述至少一個(gè)區(qū)中的每個(gè)區(qū) 包括至少一個(gè)內(nèi)存塊;
[0052] 第一寫入單元,用于將所述至少一個(gè)遷移信息寫入所述BE中的至少一個(gè)區(qū)中的 至少一個(gè)內(nèi)存塊中,以使所述BE根據(jù)所述至少一個(gè)遷移信息控制將所述待遷移數(shù)據(jù)遷移 到所述目的節(jié)點(diǎn)上的內(nèi)存塊中;
[0053] 接收單元,用于當(dāng)所述BE中具有所述最后一塊的標(biāo)識(shí)的內(nèi)存塊遷移完成后,接收 所述BE通過(guò)基本輸入輸出系統(tǒng)BIOS發(fā)送的遷移完成通知。
[0054] 結(jié)合第三方面的第二種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,所述第一 寫入單元包括:
[0055] 第二確定單元,用于根據(jù)所述至少一個(gè)遷移信息以及所述BE的區(qū)的個(gè)數(shù)和每個(gè) 區(qū)中內(nèi)存塊的個(gè)數(shù),確定進(jìn)行所述遷移所需的區(qū)的個(gè)數(shù)和/或輪流使用每個(gè)所述區(qū)進(jìn)行遷 移的次數(shù);
[0056] 第二獲取單元,用于獲取所述BE的至少一個(gè)區(qū)中每個(gè)區(qū)的工作狀態(tài);
[0057] 第二寫入單元,用于將所述至少一個(gè)遷移信息依次寫入所述BE中的所述工作狀 態(tài)為空閑狀態(tài)的一個(gè)區(qū)的至少一個(gè)內(nèi)存塊中,以使所述BE根據(jù)所述空閑狀態(tài)的區(qū)的至少 一個(gè)內(nèi)存塊中的至少一個(gè)遷移信息,依次將所述待遷移數(shù)據(jù)遷移到所述目的節(jié)點(diǎn)上的內(nèi)存 塊中。
[0058] 結(jié)合第三方面的第二種可能的實(shí)現(xiàn)方式或第三方面的第三種可能的實(shí)現(xiàn)方式,在 第四種可能的實(shí)現(xiàn)方式中,所述裝置還包括:
[0059] 劃分單元,用于將所述數(shù)據(jù)遷移請(qǐng)求劃分為一個(gè)遷移任務(wù);
[0060] 所述遷移單元用于當(dāng)所述存儲(chǔ)系統(tǒng)中存在至少一個(gè)遷移任務(wù)時(shí),所述至少一個(gè)遷 移任務(wù)由至少一個(gè)BE依次或同時(shí)進(jìn)行遷移。
[0061] 第四方面,提供了一種內(nèi)存遷移裝置,所述內(nèi)存遷移裝置位于存儲(chǔ)系統(tǒng)中,所述存 儲(chǔ)系統(tǒng)包括至少一個(gè)節(jié)點(diǎn),所述裝置包括:
[0062] 確定單元,用于當(dāng)接收到將存儲(chǔ)系統(tǒng)中的任意一個(gè)源節(jié)點(diǎn)中的待遷移數(shù)據(jù)進(jìn)行劃 分的指令時(shí),根據(jù)所述待遷移數(shù)據(jù)的物理地址的連續(xù)性,將所述待遷移數(shù)據(jù)按內(nèi)存塊進(jìn)行 劃分,每個(gè)內(nèi)存塊中所述待遷移數(shù)據(jù)的物理地址是連續(xù)的,確定所述待遷移數(shù)據(jù)劃分后所 占用的源節(jié)點(diǎn)的內(nèi)存塊數(shù);
[0063] 保留單元,用于接收獲取對(duì)應(yīng)所述待遷移數(shù)據(jù)的目的節(jié)點(diǎn)的內(nèi)存塊的指令,在所 述目的節(jié)點(diǎn)上保留與所述待遷移數(shù)據(jù)劃分后所占用的源節(jié)點(diǎn)的內(nèi)存塊數(shù)一致的內(nèi)存塊;
[0064] 遷移單元,用于當(dāng)接收到內(nèi)存遷移指令時(shí),將所述待遷移數(shù)據(jù)按劃分后的內(nèi)存塊 遷移到所述目的節(jié)點(diǎn)上的內(nèi)存塊中。
[0065] 在第一種可能的實(shí)現(xiàn)方式中,所述存儲(chǔ)系統(tǒng)包括至少兩個(gè)節(jié)點(diǎn),所述至少兩個(gè)節(jié) 點(diǎn)通過(guò)互聯(lián)模塊連接,每個(gè)所述互聯(lián)模塊中包含一個(gè)硬件加速引擎BE ;
[0066] 所述遷移單元為所述BE,所述BE用于當(dāng)所述源節(jié)點(diǎn)和目的節(jié)點(diǎn)不為同一個(gè)節(jié)點(diǎn) 時(shí),根據(jù)所述待遷移數(shù)據(jù)劃分后所占用的源節(jié)點(diǎn)的內(nèi)存塊數(shù)和保留的目的節(jié)點(diǎn)的內(nèi)存塊 數(shù),所述源節(jié)點(diǎn)和目的節(jié)點(diǎn)之間的BE控制將所述待遷移數(shù)據(jù)從所述源節(jié)點(diǎn)遷移到所述目 的節(jié)點(diǎn)。
[0067] 結(jié)合第四方面的第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,所述BE用 于:
[0068] 當(dāng)接收到至少一個(gè)遷移信息的寫入指令時(shí),將所述至少一個(gè)遷移信息寫入所述BE 中的至少一個(gè)區(qū)中的至少一個(gè)內(nèi)存塊中,所述至少一個(gè)遷移信息包括進(jìn)行遷移的源節(jié)點(diǎn)的 每一個(gè)內(nèi)存塊的起始地址、目的節(jié)點(diǎn)的每一個(gè)內(nèi)存塊的起始地址、進(jìn)行遷移的源節(jié)點(diǎn)或目 的節(jié)點(diǎn)的每一個(gè)內(nèi)存塊的塊長(zhǎng)度以及所述源節(jié)點(diǎn)或目的節(jié)點(diǎn)中當(dāng)前進(jìn)行遷移的內(nèi)存塊是 否是最后一塊的標(biāo)識(shí),其中,所述BE包括至少一個(gè)區(qū),所述至少一個(gè)區(qū)中的每個(gè)區(qū)包括至 少一個(gè)內(nèi)存塊;以及
[0069] 根據(jù)所述至少一個(gè)遷移信息控制將所述待遷移數(shù)據(jù)遷移到所述目的節(jié)點(diǎn)上的內(nèi) 存塊中;以及
[0070] 當(dāng)所述BE中具有所述最后一塊的標(biāo)識(shí)的內(nèi)存塊遷移完成后,通過(guò)基本輸入輸出 系統(tǒng)BIOS發(fā)送遷移完成通知。
[0071] 可見(jiàn),采用本發(fā)明實(shí)施例提供的一種內(nèi)存遷移方法及裝置的技術(shù)方案,通過(guò)在源 節(jié)點(diǎn)將待遷移數(shù)據(jù)按照內(nèi)存塊進(jìn)行合并劃分,在目的節(jié)點(diǎn)上獲取物理地址連續(xù)的內(nèi)存塊, 按照內(nèi)存塊將待遷移數(shù)據(jù)從源節(jié)點(diǎn)遷移到目的節(jié)點(diǎn)的內(nèi)存塊中,可以在內(nèi)存遷移過(guò)程中, 減少遷移時(shí)的上下文切換,提商內(nèi)存遷移的效率。
【附圖說(shuō)明】
[0072] 為了更清楚地說(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ù)這些附圖獲得其他的附圖。
[0073] 圖1為非一致性內(nèi)存訪問(wèn)NUMA架構(gòu)的全互聯(lián)示意圖;
[0074] 圖2為NUM架構(gòu)上兩個(gè)節(jié)點(diǎn)的連接示意圖;
[0075] 圖3為示例的NUM架構(gòu)的負(fù)載均衡引起的遠(yuǎn)端訪問(wèn)示意圖;
[0076] 圖4為本發(fā)明實(shí)施例提供的一種內(nèi)存遷移方法的流程圖;
[0077] 圖5為本發(fā)明實(shí)施例提供的另一種內(nèi)存遷移方法的流程圖;
[0078] 圖6為對(duì)圖5所示的步驟S203進(jìn)一步細(xì)化的實(shí)施例的流程圖;
[0079] 圖7為本發(fā)明實(shí)施例提供的又一種內(nèi)存遷移方法的流程圖;
[0080] 圖8為硬件加速引擎BE單任務(wù)管理流程圖;
[0081] 圖9為BE的多任務(wù)管理示意圖;
[0082] 圖10為本發(fā)明實(shí)施例提供的又一種內(nèi)存遷移方法的流程圖;
[