一種異構(gòu)內(nèi)存管理方法及裝置制造方法
【專利摘要】本發(fā)明公開了一種異構(gòu)內(nèi)存管理方法及裝置,包括當(dāng)進(jìn)程被創(chuàng)建且有內(nèi)存請(qǐng)求時(shí),根據(jù)內(nèi)存請(qǐng)求中攜帶的標(biāo)識(shí)確定申請(qǐng)的內(nèi)存類型;按照確定的內(nèi)存類型分配相應(yīng)的內(nèi)存。通過本發(fā)明提供的技術(shù)方案,既保證系統(tǒng)級(jí)進(jìn)程分配到了速度較快的DRAM內(nèi)存進(jìn)行數(shù)據(jù)處理,而且,針對(duì)大數(shù)據(jù)處理的進(jìn)程也合理地放在了NVM內(nèi)存中運(yùn)行。通過本發(fā)明提供的技術(shù)方案,實(shí)現(xiàn)了不同類型的內(nèi)存進(jìn)行特定類型的數(shù)據(jù)處理,從而大大降低了由于DRAM內(nèi)存和NVM內(nèi)存訪存速度差異而帶來的對(duì)數(shù)據(jù)處理的影響。另一方面,本發(fā)明回收分配的NVM內(nèi)存時(shí),采用延遲回收的機(jī)制,增大了大數(shù)據(jù)處理進(jìn)程訪存的等待時(shí)間,從而避免了對(duì)于訪問DRAM內(nèi)存和NVM內(nèi)存可能造成的死鎖問題。
【專利說明】一種異構(gòu)內(nèi)存管理方法及裝置
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及大數(shù)據(jù)處理技術(shù),尤指一種異構(gòu)內(nèi)存管理方法及裝置。
【背景技術(shù)】
[0002] 隨著計(jì)算機(jī)技術(shù)的飛速發(fā)展,數(shù)據(jù)量也隨之增大,大數(shù)據(jù)處理的速度問題愈發(fā)突 出,為了保證其時(shí)效性,當(dāng)前國際學(xué)術(shù)界和工業(yè)界主要從系統(tǒng)軟件、體系結(jié)構(gòu)、分布式系統(tǒng) 等方面進(jìn)行改進(jìn)和優(yōu)化。其中,
[0003] 對(duì)系統(tǒng)軟件的優(yōu)化,主要提出了以內(nèi)存數(shù)據(jù)庫及編譯器優(yōu)化等技術(shù)來應(yīng)對(duì)大數(shù)據(jù) 處理問題。內(nèi)存數(shù)據(jù)庫將相關(guān)數(shù)據(jù)加載到內(nèi)存中,從而不需要引入磁盤I/O的開銷。但是, 由于內(nèi)存數(shù)據(jù)庫提供了 ACID保證,即原子性、一致性、隔離性和持久性保證,使得對(duì)一致性 要求較弱的應(yīng)用支付了不必要的開銷,從而限制了系統(tǒng)的可擴(kuò)展性。
[0004] 在系統(tǒng)結(jié)構(gòu)方面,主要通過采取增加內(nèi)存、增加處理器和協(xié)處理器以及增加 I/O 通道來緩解大數(shù)據(jù)處理帶來的挑戰(zhàn)。但是,這些增加又為體系結(jié)構(gòu)的改進(jìn)帶來了成本與能 耗的增加。
[0005] 對(duì)大數(shù)據(jù)處理的優(yōu)化都是基于傳統(tǒng)的內(nèi)存一磁盤訪問模式,數(shù)據(jù)處理的數(shù)據(jù)I/O 瓶頸一直存在。
[0006]目前,業(yè)界提出采用異構(gòu)內(nèi)存(即包括不同類型的內(nèi)存)來對(duì)大數(shù)據(jù)進(jìn)行處理,其 內(nèi)存管理方案對(duì)于系統(tǒng)內(nèi)存較小時(shí)能發(fā)揮較好的性能,但是,一旦系統(tǒng)中內(nèi)存達(dá)到TB級(jí), 現(xiàn)有內(nèi)存管理方法性能會(huì)大幅降低,可見,現(xiàn)有對(duì)于異構(gòu)內(nèi)存的內(nèi)存管理機(jī)制不能實(shí)現(xiàn)很 好的管理,也進(jìn)一步帶來了內(nèi)存申請(qǐng)與釋放效率降低進(jìn)而降低系統(tǒng)性能的問題。
[0007] 對(duì)于傳統(tǒng)的大數(shù)據(jù)處理,數(shù)據(jù)的處理是放在動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)中進(jìn)行 的,并且需要定時(shí)寫入磁盤,增加了開銷。
【發(fā)明內(nèi)容】
[0008] 為了解決上述技術(shù)問題,本發(fā)明提供了一種異構(gòu)內(nèi)存管理方法及裝置,能夠降低 由于不同類型內(nèi)存訪存速度差異而帶來的對(duì)數(shù)據(jù)處理的影響,從而實(shí)現(xiàn)對(duì)TB級(jí)內(nèi)存的有 效管理,從而提升異構(gòu)內(nèi)存系統(tǒng)整體吞吐量。
[0009] 為了達(dá)到本發(fā)明目的,本發(fā)明提供了一種異構(gòu)內(nèi)存管理方法,包括:當(dāng)進(jìn)程被創(chuàng)建 且有內(nèi)存請(qǐng)求時(shí),根據(jù)內(nèi)存請(qǐng)求中攜帶的標(biāo)識(shí)確定申請(qǐng)的內(nèi)存類型;
[0010] 按照確定的內(nèi)存類型分配相應(yīng)的內(nèi)存。
[0011] 該方法之前還包括:將所有內(nèi)存劃分為相等大小的頁框,對(duì)劃分后的頁框進(jìn)行標(biāo) 記:
[0012] 對(duì)于非易失性存儲(chǔ)器NVM類型的頁框標(biāo)記為LARGEMEM_FLAG,對(duì)于動(dòng)態(tài)隨機(jī)存取 存儲(chǔ)器DRAM類型的頁框標(biāo)記為NORMALMEM_FLAG。
[0013] 所述進(jìn)程運(yùn)行結(jié)束之后,該方法還包括釋放分配的內(nèi)存:
[0014] 根據(jù)所述頁框標(biāo)記確定內(nèi)存類型,如果所述頁框標(biāo)記顯示為LARGEMEM_FLAG,所述 lmem分配器通知伙伴系統(tǒng)回收分配的內(nèi)存;
[0015] 如果所述頁框標(biāo)記顯示為NORMALMEM_FLAG,所述slab分配器通知伙伴系統(tǒng)回收 分配的內(nèi)存。
[0016] 所述lmem分配器通知伙伴系統(tǒng)回收分配的內(nèi)存包括:
[0017] 當(dāng)所述進(jìn)程運(yùn)行結(jié)束釋放NVM內(nèi)存時(shí),通過建立的用于負(fù)責(zé)回收NVM內(nèi)存的內(nèi)核 級(jí)守護(hù)線程,在預(yù)先設(shè)置的時(shí)間戳內(nèi),對(duì)可回收的NVM內(nèi)存時(shí)間戳進(jìn)行輪詢,當(dāng)釋放延時(shí)時(shí) 長用盡后,由伙伴系統(tǒng)回收該段NVM內(nèi)存。
[0018] 所述按照確定的內(nèi)存類型分配相應(yīng)的內(nèi)存包括:
[0019] 如果所述內(nèi)存請(qǐng)求中攜帶有LARGEMEM_FLAG,則表明需要申請(qǐng)NVM內(nèi)存,調(diào)用lmem 分配器進(jìn)行NVM內(nèi)存分配,lmem分配器處理完成后由伙伴系統(tǒng)進(jìn)行內(nèi)存標(biāo)記,返回NVM內(nèi) 存的內(nèi)存首地址,以給所述創(chuàng)建的進(jìn)程使用;
[0020] 如果所述內(nèi)存請(qǐng)求中攜帶有NORMALMEM_FLAG,則表明需要申請(qǐng)DRAM內(nèi)存,調(diào)用 slab分配器或伙伴系統(tǒng)進(jìn)行DRAM內(nèi)存分配,slab分配器完成內(nèi)存分配后,由伙伴系統(tǒng)標(biāo)記 已使用的頁框,并返回DRAM內(nèi)存的內(nèi)存首地址,以給創(chuàng)建的進(jìn)程使用。
[0021] 當(dāng)所述內(nèi)存請(qǐng)求中攜帶有NORMALMEM_FLAG,且所述slab分配器不能分配到合適 的內(nèi)存時(shí),該方法還包括:
[0022] 由伙伴系統(tǒng)進(jìn)行DRAM內(nèi)存分配,分配完成后,在執(zhí)行所述標(biāo)記已使用的頁框,并 返回DRAM內(nèi)存的內(nèi)存首地址的步驟。
[0023] 所述lmem分配器用于對(duì)系統(tǒng)中NVM內(nèi)存進(jìn)行管理,位于伙伴系統(tǒng)之上,與slab分 配器處于同一層次;
[0024] 所述按照確定的內(nèi)存類型分配相應(yīng)的內(nèi)存包括:所述lmem分配器根據(jù)頁框標(biāo)記 為進(jìn)程分配連續(xù)多個(gè)NVM類型的頁框。
[0025] 本發(fā)明還提供了一種異構(gòu)內(nèi)存管理裝置,至少包括至少包括管理區(qū)分配器、頁分 配器、,以及兩種或兩種以上內(nèi)存分配器;其中,
[0026] 管理區(qū)分配器,用于在進(jìn)程被創(chuàng)建且接收到內(nèi)存請(qǐng)求,對(duì)內(nèi)存請(qǐng)求中攜帶的用于 標(biāo)識(shí)申請(qǐng)的內(nèi)存的類型的標(biāo)識(shí)進(jìn)行存儲(chǔ),并將內(nèi)存請(qǐng)求輸出給頁分配器;
[0027] 頁分配器,用于根據(jù)內(nèi)存請(qǐng)求中攜帶的用于標(biāo)識(shí)申請(qǐng)的內(nèi)存的類型的標(biāo)識(shí)確定申 請(qǐng)的內(nèi)存類型,并按照申請(qǐng)的內(nèi)存類型選擇相應(yīng)的內(nèi)存分配器;
[0028] 內(nèi)存分配器,用于按照確定的內(nèi)存類型分配相應(yīng)的內(nèi)存。
[0029] 所述內(nèi)存分配器包括:slab分配器、lmem分配器、伙伴系統(tǒng),以及DRAM內(nèi)存和NVM 內(nèi)存;
[0030] 所述頁分配器具體用于,在申請(qǐng)的內(nèi)存類型為DRAM內(nèi)存時(shí),選擇slab分配器;在 申請(qǐng)的內(nèi)存類型為NVM內(nèi)存時(shí),選擇lmem分配器;
[0031] slab分配器,用于進(jìn)行DRAM內(nèi)存的分配,分配完成后通知伙伴系統(tǒng);
[0032] lmem分配器,用于進(jìn)行NVM內(nèi)存分配,分配完成后通知伙伴系統(tǒng);
[0033] 伙伴系統(tǒng),用于標(biāo)記已使用的頁框,返回DRAM內(nèi)存的內(nèi)存首地址,以給創(chuàng)建的進(jìn) 程使用;
[0034] 其中,
[0035] DRAM內(nèi)存和NVM內(nèi)存統(tǒng)一編址,所有內(nèi)存被劃分為相等大小的頁框,對(duì)于NVM類型 的頁框標(biāo)記為LARGEMEM_FLAG,對(duì)于DRAM類型的頁框標(biāo)記為NORMALMEM_FLAG。
[0036] 所述slab分配器還用于,在不能分配到合適的內(nèi)存是通知伙伴系統(tǒng);
[0037] 相應(yīng)地,所述伙伴系統(tǒng)還用于,進(jìn)行DRAM內(nèi)存分配。
[0038] 與現(xiàn)有技術(shù)相比,本發(fā)明至少包括當(dāng)進(jìn)程被創(chuàng)建且有內(nèi)存請(qǐng)求時(shí),根據(jù)內(nèi)存請(qǐng)求 中攜帶的標(biāo)識(shí)確定申請(qǐng)的內(nèi)存類型;按照確定的內(nèi)存類型分配相應(yīng)的內(nèi)存。通過本發(fā)明 提供的技術(shù)方案,對(duì)于不同類型的內(nèi)存需求,分配相應(yīng)的內(nèi)存,這樣,既保證系統(tǒng)級(jí)進(jìn)程分 配到了速度較快的DRAM內(nèi)存進(jìn)行數(shù)據(jù)處理,而且,針對(duì)大數(shù)據(jù)處理的進(jìn)程也合理地放在了 NVM內(nèi)存中運(yùn)行,與傳統(tǒng)的大數(shù)據(jù)處理相比速度得到了大幅提升。通過本發(fā)明提供的技術(shù) 方案,實(shí)現(xiàn)了不同類型的內(nèi)存進(jìn)行特定類型的數(shù)據(jù)處理,從而大大降低了由于DRAM內(nèi)存和 NVM內(nèi)存訪存速度差異而帶來的對(duì)數(shù)據(jù)處理的影響,實(shí)現(xiàn)了對(duì)TB級(jí)內(nèi)存的有效管理,從而 提升了異構(gòu)內(nèi)存系統(tǒng)整體吞吐量。
[0039] 另一方面,由于DRAM內(nèi)存和NVM內(nèi)存具有不同的訪存速度,這樣內(nèi)核線程在對(duì)不 同類型的內(nèi)存操作的延遲會(huì)有所不同,由于大數(shù)據(jù)中的某個(gè)數(shù)據(jù)集可能會(huì)在后期被再次使 用,本發(fā)明回收分配的NVM內(nèi)存時(shí),采用延遲回收的機(jī)制,增大了大數(shù)據(jù)處理進(jìn)程訪存的等 待時(shí)間,從而避免了對(duì)于訪問DRAM內(nèi)存和NVM內(nèi)存可能造成的死鎖問題。
[0040] 本發(fā)明的其它特征和優(yōu)點(diǎn)將在隨后的說明書中闡述,并且,部分地從說明書中變 得顯而易見,或者通過實(shí)施本發(fā)明而了解。本發(fā)明的目的和其他優(yōu)點(diǎn)可通過在說明書、權(quán)利 要求書以及附圖中所特別指出的結(jié)構(gòu)來實(shí)現(xiàn)和獲得。
【專利附圖】
【附圖說明】
[0041] 附圖用來提供對(duì)本發(fā)明技術(shù)方案的進(jìn)一步理解,并且構(gòu)成說明書的一部分,與本 申請(qǐng)的實(shí)施例一起用于解釋本發(fā)明的技術(shù)方案,并不構(gòu)成對(duì)本發(fā)明技術(shù)方案的限制。
[0042] 圖1為本發(fā)明異構(gòu)內(nèi)存管理方法的流程圖;
[0043] 圖2為本發(fā)明異構(gòu)內(nèi)存管理裝置的組成結(jié)構(gòu)示意圖;
[0044] 圖3為本發(fā)明異構(gòu)內(nèi)存管理方法的實(shí)施例的流程示意圖。
【具體實(shí)施方式】
[0045] 為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明白,下文中將結(jié)合附圖對(duì)本發(fā)明 的實(shí)施例進(jìn)行詳細(xì)說明。需要說明的是,在不沖突的情況下,本申請(qǐng)中的實(shí)施例及實(shí)施例中 的特征可以相互任意組合。
[0046] 對(duì)于異構(gòu)內(nèi)存而言,發(fā)明人發(fā)現(xiàn)大數(shù)據(jù)可以放置于非易失性存儲(chǔ)器(NVM)內(nèi)存中 處理并存儲(chǔ),這樣能夠有效降低I/O開銷。
[0047] 圖1為本發(fā)明異構(gòu)內(nèi)存管理方法的流程圖,如圖1所示,包括:
[0048] 步驟100 :當(dāng)進(jìn)程被創(chuàng)建且有內(nèi)存請(qǐng)求時(shí),根據(jù)內(nèi)存請(qǐng)求中攜帶的標(biāo)識(shí)確定申請(qǐng) 的內(nèi)存類型。
[0049] 該方法之前還包括:將所有內(nèi)存劃分為相等大小的頁框,對(duì)這些頁框進(jìn)行不同 標(biāo)記。如,對(duì)于NVM類型的頁框標(biāo)記為LARGEMEM_FLAG,對(duì)于DRAM類型的頁框標(biāo)記為 NORMALMEM_FLAG。需要說明的是,NVM內(nèi)存和DRAM內(nèi)存是統(tǒng)一編址的,而本發(fā)明中通過不 同的標(biāo)記來區(qū)分不同類型的內(nèi)存。
[0050] 本步驟中,在內(nèi)存請(qǐng)求中,攜帶有用于標(biāo)識(shí)申請(qǐng)的內(nèi)存的類型的標(biāo)識(shí),S卩如果在 內(nèi)存請(qǐng)求中攜帶有LARGEMEM_FLAG則表明需要申請(qǐng)NVM內(nèi)存;如果在內(nèi)存請(qǐng)求中攜帶有 NORMALMEM_FLAG,則表明需要申請(qǐng)DRAM內(nèi)存。這里需要說明的是,在進(jìn)程創(chuàng)建時(shí)會(huì)根據(jù)所 申請(qǐng)內(nèi)存的大小進(jìn)行比對(duì),并為之分配不同類型的內(nèi)存標(biāo)簽,比如:當(dāng)申請(qǐng)的內(nèi)存大小大于 10G時(shí),則為之分配LARGEMEM_FLAG標(biāo)識(shí),當(dāng)小于或等于10G時(shí)則分配NORMALMEM_FLAG標(biāo) 識(shí)。也可以在編程時(shí)手動(dòng)指定所要申請(qǐng)的內(nèi)存類型。需要說明的是,用于劃分不同類型的 內(nèi)存的大小有可能隨著內(nèi)存數(shù)量級(jí)的變化而變化,具體數(shù)值是本領(lǐng)域技術(shù)人員根據(jù)實(shí)際情 況可以確定出的,這里10G并不用于限定本發(fā)明的保護(hù)范圍,這里不再贅述。
[0051] 步驟101 :按照確定的內(nèi)存類型分配相應(yīng)的內(nèi)存。
[0052] 本步驟中,如果申請(qǐng)的是NVM內(nèi)存,調(diào)用lmem分配器進(jìn)行NVM內(nèi)存分配,lmem分 配器完成分配后由伙伴系統(tǒng)對(duì)已使用(即分配的)內(nèi)存進(jìn)行標(biāo)記并返回分配的NVM內(nèi)存的 內(nèi)存首地址,以給創(chuàng)建的進(jìn)程使用。其中,
[0053] lmem分配器用于對(duì)系統(tǒng)中NVM內(nèi)存進(jìn)行管理,位于伙伴系統(tǒng)之上,與slab分配器 處于同一層次。本步驟中按照確定的內(nèi)存類型分配相應(yīng)的內(nèi)存包括:lmem分配器根據(jù)頁框 標(biāo)記為進(jìn)程分配連續(xù)多個(gè)NVM類型的頁框。其中l(wèi)mem分配器會(huì)預(yù)先將系統(tǒng)中常用的NVM 內(nèi)存頁框,這里的頁框大于傳統(tǒng)的頁框大小,大小在GB級(jí),lmem分配器將這些頁框組織成 雙向鏈表,當(dāng)有NVM內(nèi)存申請(qǐng)請(qǐng)求時(shí),lmem分配器通過查找預(yù)先建立的雙向鏈表,選擇合適 的連續(xù)的頁框進(jìn)行分配即可。lmem分配器管理的雙向鏈表類似于對(duì)像高帶緩存,快速的存 儲(chǔ)頻繁使用的對(duì)象類型。lmem分配器完成內(nèi)存分配后,由伙伴系統(tǒng)進(jìn)行內(nèi)存標(biāo)記并返回內(nèi) 存首地址。
[0054] 本步驟中,如果申請(qǐng)的是DRAM內(nèi)存,首先調(diào)用slab分配器進(jìn)行DRAM內(nèi)存分配,如 果能分配到合適的DRAM內(nèi)存,slab分配器完成內(nèi)存分配后,由伙伴系統(tǒng)進(jìn)行處理,伙伴系 統(tǒng)重新標(biāo)記已使用的頁框,并返回DRAM內(nèi)存的內(nèi)存首地址,以給創(chuàng)建的進(jìn)程使用;如果不 能分配到合適的內(nèi)存,由伙伴系統(tǒng)進(jìn)行DRAM內(nèi)存分配,分配完成后,伙伴系統(tǒng)重新標(biāo)記已 使用的頁框,并返回DRAM內(nèi)存的內(nèi)存首地址,以給創(chuàng)建的進(jìn)程使用。其中,slab分配器用于 對(duì)系統(tǒng)中DRAM內(nèi)存進(jìn)行管理,為本領(lǐng)域技術(shù)人員熟知的內(nèi)存分配器,其具體實(shí)現(xiàn)屬于本領(lǐng) 域技術(shù)人員的公知技術(shù),并不用于限定本發(fā)明的保護(hù)范圍,這里不再贅述。本步驟中的確定 的內(nèi)存類型分配相應(yīng)的內(nèi)存包括:slab分配器根據(jù)頁框標(biāo)記為進(jìn)程分配連續(xù)多個(gè)DRAM類 型的頁框。
[0055] 其中,伙伴系統(tǒng)是本領(lǐng)域技術(shù)人員熟知的,其具體實(shí)現(xiàn)屬于本領(lǐng)域技術(shù)人員的慣 用技術(shù)的手段,這里不再贅述。
[0056] 通過本發(fā)明圖1所提供的技術(shù)方案,對(duì)于不同類型的內(nèi)存需求,分配相應(yīng)的內(nèi)存, 這樣,既保證系統(tǒng)級(jí)進(jìn)程分配到了速度較快的DRAM內(nèi)存進(jìn)行數(shù)據(jù)處理,而且,針對(duì)大數(shù)據(jù) 處理的進(jìn)程也合理地放在了 NVM內(nèi)存中運(yùn)行,與傳統(tǒng)的大數(shù)據(jù)處理相比速度得到了大幅提 升。通過本發(fā)明提供的技術(shù)方案,實(shí)現(xiàn)了不同類型的內(nèi)存進(jìn)行特定類型的數(shù)據(jù)處理,從而大 大降低了由于DRAM內(nèi)存和NVM內(nèi)存訪存速度差異而帶來的對(duì)數(shù)據(jù)處理的影響。
[0057] 另一方面,由于DRAM內(nèi)存和NVM內(nèi)存具有不同的訪存速度,這樣內(nèi)核線程在對(duì)不 同類型的內(nèi)存操作的延遲會(huì)有所不同,即NVM內(nèi)存訪存延遲相對(duì)較大,這樣在內(nèi)核線程高 并發(fā)訪存過程中可能會(huì)導(dǎo)致死鎖的發(fā)生。對(duì)于訪問DRAM內(nèi)存和NVM內(nèi)存可能造成的死鎖問 題,本發(fā)明技術(shù)方案增加了大數(shù)據(jù)處理進(jìn)程在訪問內(nèi)存時(shí)的等待時(shí)間,即在大數(shù)據(jù)處理進(jìn) 程等待分配內(nèi)存之前,該方法還包括:大數(shù)據(jù)處理進(jìn)程進(jìn)入睡眠狀態(tài),比如在創(chuàng)建進(jìn)程時(shí)指 定進(jìn)程的優(yōu)先級(jí),使大數(shù)據(jù)處理進(jìn)程的優(yōu)先級(jí)不高,而優(yōu)先響應(yīng)DRAM類型內(nèi)存的進(jìn)程。在 這段睡眠時(shí)間內(nèi),優(yōu)先處理能快速執(zhí)行完的進(jìn)程,由于大數(shù)據(jù)處理進(jìn)程需要分配更多的內(nèi) 存,分配時(shí)間可能很長,按照本發(fā)明方法的處理,在大數(shù)據(jù)處理進(jìn)程進(jìn)入睡眠狀態(tài)的這段時(shí) 間其它輕量級(jí)進(jìn)程還可以得到處理,使得系統(tǒng)的交互性以及性能得到了答復(fù)提高。
[0058] 當(dāng)進(jìn)程運(yùn)行結(jié)束之后,該方法還包括釋放分配的內(nèi)存,具體包括:
[0059] 根據(jù)頁框標(biāo)記確定內(nèi)存類型,如果頁框標(biāo)記顯示為LARGEMEM_FLAG,lmem分配器 通知伙伴系統(tǒng)回收分配的內(nèi)存;如果頁框標(biāo)記顯示為NORMALMEM_FLAG,slab分配器會(huì)通知 伙伴系統(tǒng)回收分配的內(nèi)存,DRAM內(nèi)存回收的具體實(shí)現(xiàn)屬于本領(lǐng)域技術(shù)人員的公知技術(shù),這 里不再贅述。
[0060] 其中,由于大數(shù)據(jù)中的某個(gè)數(shù)據(jù)集可能會(huì)在后期被再次使用,本發(fā)明lmem分配器 通知伙伴系統(tǒng)回收分配的內(nèi)存包括:當(dāng)進(jìn)程運(yùn)行結(jié)束釋放NVM內(nèi)存時(shí),建立一個(gè)用于負(fù)責(zé) 回收NVM內(nèi)存的內(nèi)核級(jí)守護(hù)線程(類似于現(xiàn)有的ksoftirqd守護(hù)線程),在預(yù)先設(shè)置的釋 放延時(shí)時(shí)間(比如時(shí)間戳)內(nèi),對(duì)可回收的NVM內(nèi)存時(shí)間戳進(jìn)行輪詢,當(dāng)釋放延時(shí)時(shí)長用盡 后,通知伙伴系統(tǒng)回收該段NVM內(nèi)存。這里,如何建立內(nèi)核級(jí)守護(hù)線程屬于本領(lǐng)域技術(shù)人員 的慣用技術(shù)手段,其具體實(shí)現(xiàn)并不用于限定本發(fā)明的保護(hù)范圍,這里不再贅述。本發(fā)明這種 延遲回收的機(jī)制,增大了大數(shù)據(jù)處理進(jìn)程訪存的等待時(shí)間,從而避免了對(duì)于訪問DRAM內(nèi)存 和NVM內(nèi)存可能造成的死鎖問題。
[0061] 圖2為本發(fā)明異構(gòu)內(nèi)存管理裝置的組成結(jié)構(gòu)示意圖,如圖2所示,至少包括管理區(qū) 分配器、頁分配器、,以及兩種或兩種以上內(nèi)存分配器;其中,
[0062] 管理區(qū)分配器,用于在進(jìn)程被創(chuàng)建且接收到內(nèi)存請(qǐng)求,對(duì)內(nèi)存請(qǐng)求中攜帶的用于 標(biāo)識(shí)申請(qǐng)的內(nèi)存的類型的標(biāo)識(shí)進(jìn)行存儲(chǔ),并將內(nèi)存請(qǐng)求輸出給頁分配器;
[0063] 頁分配器,用于根據(jù)內(nèi)存請(qǐng)求中攜帶的用于標(biāo)識(shí)申請(qǐng)的內(nèi)存的類型的標(biāo)識(shí)確定申 請(qǐng)的內(nèi)存類型,并按照申請(qǐng)的內(nèi)存類型選擇相應(yīng)的內(nèi)存分配器。具體地:在申請(qǐng)的內(nèi)存類 型為DRAM內(nèi)存時(shí),選擇slab分配器,或者在申請(qǐng)的內(nèi)存類型為NVM內(nèi)存時(shí),選擇lmem分配 器;
[0064] 內(nèi)存分配器,用于按照確定的內(nèi)存類型分配相應(yīng)的內(nèi)存。
[0065] 本發(fā)明中,內(nèi)存分配器包括:slab分配器、lmem分配器、伙伴系統(tǒng),以及DRAM內(nèi)存 和NVM內(nèi)存;其中,
[0066] DRAM內(nèi)存和NVM內(nèi)存,統(tǒng)一編址,所有內(nèi)存被劃分為相等大小的頁框,這些頁框具 有不同標(biāo)記,比如,對(duì)于NVM類型的頁框標(biāo)記為LARGEMEM_FLAG,對(duì)于DRAM類型的頁框標(biāo)記 為 NORMALMEM_FLAG。
[0067] slab分配器,用于進(jìn)行DRAM內(nèi)存的分配,分配完成后通知伙伴系統(tǒng);
[0068] lmem分配器,用于進(jìn)行NVM內(nèi)存分配,分配完成后通知伙伴系統(tǒng)。
[0069] 伙伴系統(tǒng),用于重新標(biāo)記已使用的頁框,返回DRAM內(nèi)存的內(nèi)存首地址,以給創(chuàng)建 的進(jìn)程使用;
[0070] 進(jìn)一步地,slab分配器還用于,在不能分配到合適的內(nèi)存是通知伙伴系統(tǒng);相應(yīng) 地,伙伴系統(tǒng)還用于,進(jìn)行DRAM內(nèi)存分配,之后再重新標(biāo)記已使用的頁框,返回DRAM內(nèi)存的 內(nèi)存首地址,以給創(chuàng)建的進(jìn)程使用。
[0071] 圖3本發(fā)明異構(gòu)內(nèi)存管理方法的實(shí)施例的流程示意圖,如圖3所示,包括以下步 驟:
[0072] 步驟300 :確定提出的是否是內(nèi)存申請(qǐng)請(qǐng)求,如果是申請(qǐng)內(nèi)存,進(jìn)入步驟301 ;否 貝1J,進(jìn)入步驟311。
[0073] 本步驟中,當(dāng)進(jìn)程被創(chuàng)建且有內(nèi)存請(qǐng)求時(shí),會(huì)提出內(nèi)存申請(qǐng)請(qǐng)求。
[0074] 步驟301 :根據(jù)內(nèi)存請(qǐng)求中攜帶的標(biāo)識(shí)確定申請(qǐng)的內(nèi)存類型是否是DRAM內(nèi)存,如 果是,進(jìn)入步驟302 ;如果不是,進(jìn)入步驟306。
[0075] 步驟302 :判斷申請(qǐng)的DRAM內(nèi)存是否是小塊內(nèi)存,如果是,進(jìn)入步驟303,否則進(jìn)入 步驟304。
[0076] 本步驟中,如果申請(qǐng)的是小塊內(nèi)存,認(rèn)為是slab分配器能分配到合適的內(nèi)存,如 果不是小塊內(nèi)存,認(rèn)為slab分配器不能分配到合適的內(nèi)存。其中,舉例來說,小塊內(nèi)存可以 是申請(qǐng)的內(nèi)存是小于或等于10G的內(nèi)存。需要說明的是,小塊內(nèi)存的概念有可能隨著內(nèi)存 數(shù)量級(jí)的變化而變化,10G并不是固定不變的,具體數(shù)值是本領(lǐng)域技術(shù)人員根據(jù)實(shí)際情況可 以確定出的,并不用于限定本發(fā)明的保護(hù)范圍,這里不再贅述。
[0077] 步驟303 :由slab分配器分配DRAM內(nèi)存,之后進(jìn)入步驟403進(jìn)行后續(xù)處理。
[0078] 步驟304?步驟305 :由伙伴系統(tǒng)分配DRAM內(nèi)存,伙伴系統(tǒng)重新標(biāo)記已使用的頁 框,之后進(jìn)入步驟310。
[0079] 這里需要說明的是,如果是是由步驟302直接進(jìn)入本步驟的,則執(zhí)行伙伴系統(tǒng)分 配DRAM內(nèi)存的步驟,如果是由步驟303進(jìn)入本步驟的,則只執(zhí)行伙伴系統(tǒng)重新標(biāo)記已使用 的頁框的步驟。
[0080] 步驟306 :根據(jù)內(nèi)存請(qǐng)求中攜帶的標(biāo)識(shí)確定申請(qǐng)的內(nèi)存類型是否是NVM內(nèi)存,如果 是,進(jìn)入步驟307 ;如果不是,結(jié)束本流程。
[0081] 步驟307?步驟309 :由lmem分配器分配NVM內(nèi)存,伙伴系統(tǒng)進(jìn)行內(nèi)存標(biāo)記。
[0082] 步驟310 :返回DRAM內(nèi)存/NVM內(nèi)存的內(nèi)存首地址,以給創(chuàng)建的進(jìn)程使用。之后結(jié) 束本流程。
[0083] 步驟311 :確定是否是釋放內(nèi)存,如果是進(jìn)入步驟312 ;否則結(jié)束本流程。
[0084] 本步驟中,在進(jìn)程運(yùn)行結(jié)束之后,會(huì)提出內(nèi)存釋放請(qǐng)求。
[0085] 步驟312 :根據(jù)內(nèi)存釋放中攜帶的標(biāo)識(shí)確定釋放的內(nèi)存類型是否是DRAM內(nèi)存,如 果是,進(jìn)入步驟313 ;如果不是,進(jìn)入步驟315。
[0086] 步驟313?步驟314 :slab分配器通知伙伴系統(tǒng)回收分配的內(nèi)存,之后結(jié)束本流 程。
[0087] 步驟315 :根據(jù)內(nèi)存釋放中攜帶的標(biāo)識(shí)確定釋放的內(nèi)存類型是否是NVM內(nèi)存,如果 是,進(jìn)入步驟316 ;如果不是,結(jié)束本流程。
[0088] 步驟316 :標(biāo)記處內(nèi)存可回收并且通過內(nèi)核守護(hù)線程更新釋放延時(shí)時(shí)間如時(shí)間 戳。具體實(shí)現(xiàn)屬于辦呢領(lǐng)域技術(shù)人員的慣用技術(shù)手段,這里不再贅述。
[0089] 步驟317?步驟320 :在預(yù)先設(shè)置的釋放延時(shí)時(shí)間(比如時(shí)間戳)內(nèi),對(duì)可回收的 NVM內(nèi)存時(shí)間戳進(jìn)行輪詢,當(dāng)釋放延時(shí)時(shí)長用盡后,通知伙伴系統(tǒng)回收該段NVM內(nèi)存。之后 結(jié)束本流程。
[0090] 雖然本發(fā)明所揭露的實(shí)施方式如上,但所述的內(nèi)容僅為便于理解本發(fā)明而采用的 實(shí)施方式,并非用以限定本發(fā)明。任何本發(fā)明所屬領(lǐng)域內(nèi)的技術(shù)人員,在不脫離本發(fā)明所揭 露的精神和范圍的前提下,可以在實(shí)施的形式及細(xì)節(jié)上進(jìn)行任何的修改與變化,但本發(fā)明 的專利保護(hù)范圍,仍須以所附的權(quán)利要求書所界定的范圍為準(zhǔn)。
【權(quán)利要求】
1. 一種異構(gòu)內(nèi)存管理方法,其特征在于,包括:當(dāng)進(jìn)程被創(chuàng)建且有內(nèi)存請(qǐng)求時(shí),根據(jù)內(nèi) 存請(qǐng)求中攜帶的標(biāo)識(shí)確定申請(qǐng)的內(nèi)存類型; 按照確定的內(nèi)存類型分配相應(yīng)的內(nèi)存。
2. 根據(jù)權(quán)利要求1所述的異構(gòu)內(nèi)存管理方法,其特征在于,該方法之前還包括:將所有 內(nèi)存劃分為相等大小的頁框,對(duì)劃分后的頁框進(jìn)行標(biāo)記: 對(duì)于非易失性存儲(chǔ)器NVM類型的頁框標(biāo)記為LARGEMEM_FLAG,對(duì)于動(dòng)態(tài)隨機(jī)存取存儲(chǔ) 器DRAM類型的頁框標(biāo)記為NORMALMEM_FLAG。
3. 根據(jù)權(quán)利要求2所述的異構(gòu)內(nèi)存管理方法,其特征在于,所述進(jìn)程運(yùn)行結(jié)束之后,該 方法還包括釋放分配的內(nèi)存: 根據(jù)所述頁框標(biāo)記確定內(nèi)存類型,如果所述頁框標(biāo)記顯示為LARGEMEM_FLAG,所述 lmem分配器通知伙伴系統(tǒng)回收分配的內(nèi)存; 如果所述頁框標(biāo)記顯示為NORMALMEM_FLAG,所述slab分配器通知伙伴系統(tǒng)回收分配 的內(nèi)存。
4. 根據(jù)權(quán)利要求3所述的異構(gòu)內(nèi)存管理方法,其特征在于,所述lmem分配器通知伙伴 系統(tǒng)回收分配的內(nèi)存包括: 當(dāng)所述進(jìn)程運(yùn)行結(jié)束釋放NVM內(nèi)存時(shí),通過建立的用于負(fù)責(zé)回收NVM內(nèi)存的內(nèi)核級(jí)守 護(hù)線程,在預(yù)先設(shè)置的時(shí)間戳內(nèi),對(duì)可回收的NVM內(nèi)存時(shí)間戳進(jìn)行輪詢,當(dāng)釋放延時(shí)時(shí)長用 盡后,由伙伴系統(tǒng)回收該段NVM內(nèi)存。
5. 根據(jù)權(quán)利要求1或2或3所述的異構(gòu)內(nèi)存管理方法,其特征在于,所述按照確定的內(nèi) 存類型分配相應(yīng)的內(nèi)存包括: 如果所述內(nèi)存請(qǐng)求中攜帶有LARGEMEM_FLAG,則表明需要申請(qǐng)NVM內(nèi)存,調(diào)用lmem分配 器進(jìn)行NVM內(nèi)存分配,lmem分配器處理完成后由伙伴系統(tǒng)進(jìn)行內(nèi)存標(biāo)記,返回NVM內(nèi)存的 內(nèi)存首地址,以給所述創(chuàng)建的進(jìn)程使用; 如果所述內(nèi)存請(qǐng)求中攜帶有NORMALMEM_FLAG,則表明需要申請(qǐng)DRAM內(nèi)存,調(diào)用s 1 ab分 配器或伙伴系統(tǒng)進(jìn)行DRAM內(nèi)存分配,slab分配器完成內(nèi)存分配后,由伙伴系統(tǒng)標(biāo)記已使用 的頁框,并返回DRAM內(nèi)存的內(nèi)存首地址,以給創(chuàng)建的進(jìn)程使用。
6. 根據(jù)權(quán)利要求5所述的異構(gòu)內(nèi)存管理方法,其特征在于,當(dāng)所述內(nèi)存請(qǐng)求中攜帶有 NORMALMEM_FLAG,且所述slab分配器不能分配到合適的內(nèi)存時(shí),該方法還包括: 由伙伴系統(tǒng)進(jìn)行DRAM內(nèi)存分配,分配完成后,在執(zhí)行所述標(biāo)記已使用的頁框,并返回 DRAM內(nèi)存的內(nèi)存首地址的步驟。
7. 根據(jù)權(quán)利要求5所述的異構(gòu)內(nèi)存管理方法,其特征在于,所述lmem分配器用于對(duì)系 統(tǒng)中NVM內(nèi)存進(jìn)行管理,位于伙伴系統(tǒng)之上,與slab分配器處于同一層次; 所述按照確定的內(nèi)存類型分配相應(yīng)的內(nèi)存包括:所述lmem分配器根據(jù)頁框標(biāo)記為進(jìn) 程分配連續(xù)多個(gè)NVM類型的頁框。
8. -種異構(gòu)內(nèi)存管理裝置,其特征在于,至少包括至少包括管理區(qū)分配器、頁分配器、, 以及兩種或兩種以上內(nèi)存分配器;其中, 管理區(qū)分配器,用于在進(jìn)程被創(chuàng)建且接收到內(nèi)存請(qǐng)求,對(duì)內(nèi)存請(qǐng)求中攜帶的用于標(biāo)識(shí) 申請(qǐng)的內(nèi)存的類型的標(biāo)識(shí)進(jìn)行存儲(chǔ),并將內(nèi)存請(qǐng)求輸出給頁分配器; 頁分配器,用于根據(jù)內(nèi)存請(qǐng)求中攜帶的用于標(biāo)識(shí)申請(qǐng)的內(nèi)存的類型的標(biāo)識(shí)確定申請(qǐng)的 內(nèi)存類型,并按照申請(qǐng)的內(nèi)存類型選擇相應(yīng)的內(nèi)存分配器; 內(nèi)存分配器,用于按照確定的內(nèi)存類型分配相應(yīng)的內(nèi)存。
9. 根據(jù)權(quán)利要求8所述的異構(gòu)內(nèi)存管理裝置,其特征在于,所述內(nèi)存分配器包括:slab 分配器、lmem分配器、伙伴系統(tǒng),以及DRAM內(nèi)存和NVM內(nèi)存; 所述頁分配器具體用于,在申請(qǐng)的內(nèi)存類型為DRAM內(nèi)存時(shí),選擇slab分配器;在申請(qǐng) 的內(nèi)存類型為NVM內(nèi)存時(shí),選擇lmem分配器; slab分配器,用于進(jìn)行DRAM內(nèi)存的分配,分配完成后通知伙伴系統(tǒng); lmem分配器,用于進(jìn)行NVM內(nèi)存分配,分配完成后通知伙伴系統(tǒng); 伙伴系統(tǒng),用于標(biāo)記已使用的頁框,返回DRAM內(nèi)存的內(nèi)存首地址,以給創(chuàng)建的進(jìn)程使 用; 其中, DRAM內(nèi)存和NVM內(nèi)存統(tǒng)一編址,所有內(nèi)存被劃分為相等大小的頁框,對(duì)于NVM類型的頁 框標(biāo)記為LARGEMEM_FLAG,對(duì)于DRAM類型的頁框標(biāo)記為NORMALMEM_FLAG。
10. 根據(jù)權(quán)利要求9所述的異構(gòu)北村管理裝置,其特征在于, 所述slab分配器還用于,在不能分配到合適的內(nèi)存是通知伙伴系統(tǒng); 相應(yīng)地,所述伙伴系統(tǒng)還用于,進(jìn)行DRAM內(nèi)存分配。
【文檔編號(hào)】G06F12/06GK104102590SQ201410350393
【公開日】2014年10月15日 申請(qǐng)日期:2014年7月22日 優(yōu)先權(quán)日:2014年7月22日
【發(fā)明者】郭美思, 宋立偉, 吳楠 申請(qǐng)人:浪潮(北京)電子信息產(chǎn)業(yè)有限公司