一種內(nèi)存系統(tǒng)、內(nèi)存訪問請求的處理方法和計(jì)算機(jī)系統(tǒng)的制作方法
【專利摘要】本發(fā)明實(shí)施例公開了一種內(nèi)存系統(tǒng)、內(nèi)存訪問請求的處理方法和計(jì)算機(jī)系統(tǒng)。內(nèi)存系統(tǒng)包括:類型不同的第一類內(nèi)存和第二類內(nèi)存,分別用于存儲處理器的運(yùn)行數(shù)據(jù);內(nèi)存指示表,存儲有位于第一類內(nèi)存的數(shù)據(jù)單元塊的訪存地址;緩沖調(diào)度器,用于接收內(nèi)存控制器的內(nèi)存訪問請求;確定所訪存地址對應(yīng)的數(shù)據(jù)單元塊存儲于第一類內(nèi)存中還是第二類內(nèi)存中,并從確定內(nèi)存中完成內(nèi)存訪問請求的訪存操作;遷移調(diào)度器,用于更新所述數(shù)據(jù)單元塊的訪問信息;根據(jù)所述數(shù)據(jù)單元塊的訪問信息,確定是否將第二類內(nèi)存中的數(shù)據(jù)單元塊遷移到第一類內(nèi)存中,并在遷移后更新內(nèi)存指示表。
【專利說明】一種內(nèi)存系統(tǒng)、內(nèi)存訪問請求的處理方法和計(jì)算機(jī)系統(tǒng)
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明計(jì)算機(jī)存儲【技術(shù)領(lǐng)域】,尤其是一種內(nèi)存系統(tǒng)、內(nèi)存訪問請求的處理方法和 計(jì)算機(jī)系統(tǒng)。
【背景技術(shù)】
[0002] 隨著計(jì)算機(jī)技術(shù)的高速發(fā)展,對處理器的處理速度和數(shù)據(jù)存儲的讀取速度要求越 來越高。多核處理器是指在一枚處理器中集成兩個或多個完整的計(jì)算引擎(內(nèi)核)。參考 圖1,一種多核多內(nèi)存的計(jì)算機(jī)架構(gòu),包括CPU100和存儲模塊110 ;其中,CPU中包含多個處 理器核與高速緩存;內(nèi)存控制器通過I/O接口與存儲模塊連接。存儲模塊中包含多個內(nèi)存 模塊。
[0003] 隨著數(shù)據(jù)中心(Data Center)需要處理的數(shù)據(jù)規(guī)模不斷增大,為了盡可能將數(shù)據(jù) 都放在內(nèi)存中,從而加快處理速度,數(shù)據(jù)中心對內(nèi)存容量的需求不斷增大。在傳統(tǒng)的內(nèi)存 系統(tǒng)中可以存在一個或多個內(nèi)存通道,這些內(nèi)存通道由內(nèi)存控制器管理,每個內(nèi)存通道可 以支持一個或多個內(nèi)存槽,每個內(nèi)存槽上掛載內(nèi)存模塊與內(nèi)存模塊,內(nèi)存控制器與內(nèi)存通 道、內(nèi)存通道與內(nèi)存模塊間存在一條交互通路,不同內(nèi)存通道之間以及內(nèi)存模塊間相互獨(dú) 立。傳統(tǒng)的內(nèi)存使用基于同步時序的DDRx (如DDR3)協(xié)議的DRAM,但是DRAM具有位密度 低,靜態(tài)功耗高(需要定期刷新)等缺點(diǎn),研究表明數(shù)據(jù)中心中內(nèi)存消耗的功耗占整個系 統(tǒng)總功耗的25%以上。近年來,出現(xiàn)了多種新型內(nèi)存材料,如相變存儲器(Phase Change Memory, PCM),磁性隨機(jī)存儲器(Magnetic Random Access Memory, MRAM),快閃存儲器 (Flash)等非易失性存儲器(Non Volatile Memory, NVM),這些NVM具有位密度高,靜態(tài)功 耗低等優(yōu)點(diǎn),而且即使掉電,數(shù)據(jù)也會保持(非易失);盡管有些NVM(如PCM)的讀訪問延 遲可以只比DRAM差一點(diǎn),它們的寫訪問延遲要比DRAM高很多,而且NVM的寫壽命有限,這 些缺點(diǎn)使得NVM還無法完全替代DRAM作為內(nèi)存,而是作為DRAM的擴(kuò)展內(nèi)存,擴(kuò)展內(nèi)存包括 但不局限于NVM,還包括其它存儲類型。
[0004] 使用DRAM和擴(kuò)展內(nèi)存的混合內(nèi)存成為未來的趨勢,這時DRAM -般作為擴(kuò)展內(nèi)存 的高速緩存(Cache),將經(jīng)常訪問的數(shù)據(jù)放入DRAM以降低訪問延遲。但是傳統(tǒng)DDR同步訪 存時序無法直接處理這種異構(gòu)的非一致訪存延遲,需要軟件(如操作系統(tǒng)0S,虛擬機(jī)監(jiān)視 器VMM等)來負(fù)責(zé)處理,混合內(nèi)存對軟件不透明。
[0005] 現(xiàn)有的DDR內(nèi)存同步訪問接口要求訪問命令具有固定的時序延遲,因此無法直接 處理這種由于混合內(nèi)存帶來的非一致訪存延遲特性,而需要軟件(如操作系統(tǒng),虛擬機(jī)監(jiān) 視器等)來負(fù)責(zé)處理非一致延遲。圖2所示為一種軟件處理混合內(nèi)存訪問的流程,這里以 0S (操作系統(tǒng))為例,對VMM(虛擬機(jī)監(jiān)視器)為類似的機(jī)制。這時底層的混合內(nèi)存對0S是 不透明的,0S需要維護(hù)當(dāng)前哪些頁面(Page)位于DRAM中,哪些頁面只在擴(kuò)展內(nèi)存中,這一 般通過在頁表項(xiàng)中增加標(biāo)志位來實(shí)現(xiàn)。當(dāng)0S收到內(nèi)存訪問請求,先查詢頁表獲得訪問的數(shù) 據(jù)是否在DRAM中,如果是,則直接訪問DRAM;如果不是,需要產(chǎn)生缺頁中斷(Page Fault), 先將頁面從擴(kuò)展內(nèi)存遷移到DRAM中,并更新對應(yīng)頁表項(xiàng)中的標(biāo)志位,最后才能向DRAM發(fā)送 內(nèi)存訪問請求。
[0006] 為了優(yōu)化性能,軟件還負(fù)責(zé)收集頁面被訪問的頻次信息,這也一般放在頁表項(xiàng)中, 指導(dǎo)頁面遷移策略,比如將經(jīng)常被寫訪問的頁面放到DRAM中,軟件開銷較大。另外對于采 用混合內(nèi)存的大規(guī)模系統(tǒng),軟件還需要定期進(jìn)行Checkpoint保護(hù),將機(jī)器狀態(tài)寫回到擴(kuò)展 內(nèi)存中。
【發(fā)明內(nèi)容】
[0007] 本發(fā)明實(shí)施例的目的在于提供一種內(nèi)存系統(tǒng)和內(nèi)存訪問請求的方法,以提高內(nèi)存 訪問的速度。
[0008] 第一方面,提供一種內(nèi)存系統(tǒng),包括:
[0009] 第一類內(nèi)存和第二類內(nèi)存,分別用于存儲處理器的運(yùn)行數(shù)據(jù),其中第一類內(nèi)存和 第二類內(nèi)存類型不同;
[0010] 緩沖區(qū),用于存儲內(nèi)存指示表,該內(nèi)存指示表包含位于第一類內(nèi)存的數(shù)據(jù)單元塊 的訪存地址;
[0011] 緩沖調(diào)度器,用于接收內(nèi)存控制器發(fā)來的內(nèi)存訪問請求,該內(nèi)存請求包含訪存地 址和訪存操作;根據(jù)該訪存地址和內(nèi)存指示表確定該訪存地址對應(yīng)的數(shù)據(jù)單元塊存儲于第 一類內(nèi)存中還是第二類內(nèi)存中,并對確定的第一類內(nèi)存或第二類內(nèi)存完成該內(nèi)存訪問請求 的訪存操作,并將該內(nèi)存訪問請求的訪存操作結(jié)果向該內(nèi)存控制器返回。
[0012] 在第一種可能的實(shí)現(xiàn)方式中,該緩沖調(diào)度器還用于當(dāng)確定該訪存地址對應(yīng)的數(shù)據(jù) 單元塊存儲于第二類內(nèi)存時,發(fā)送更新該數(shù)據(jù)單元塊的訪問信息的通知;該內(nèi)存系統(tǒng)還包 括:
[0013] 遷移調(diào)度器,用于接收該遷移調(diào)度器發(fā)送的通知并更新該數(shù)據(jù)單元塊的訪問信 息;根據(jù)該數(shù)據(jù)單元塊的訪問信息,確定是否將第二類內(nèi)存中的數(shù)據(jù)單元塊遷移到該第一 類內(nèi)存中,并在遷移后更新該內(nèi)存指不表。
[0014] 結(jié)合第一方面或第一方面的第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式 中,該緩沖調(diào)度器具體用于:確定該數(shù)據(jù)單元塊位于第一類內(nèi)存中,則從第一類內(nèi)存中完成 該內(nèi)存訪問請求;確定該數(shù)據(jù)單元塊位于第二類內(nèi)存中,則從第二類內(nèi)存中完成該內(nèi)存訪 問請求。
[0015] 結(jié)合第一方面或第一方面的第一種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式 中,該緩沖調(diào)度器具體用于:確定該數(shù)據(jù)單元塊位于第一類內(nèi)存中,則從第一類內(nèi)存中完成 該內(nèi)存訪問請求;確定該數(shù)據(jù)單元塊位于第二類內(nèi)存中,則將第二類內(nèi)存中的數(shù)據(jù)單元塊 遷移到第一類內(nèi)存中,并從該第一類內(nèi)存中完成該內(nèi)存訪問請求。
[0016] 結(jié)合第一方面或第一方面的第二種可能的實(shí)現(xiàn)方式或第一方面的第三種可能的 實(shí)現(xiàn)方式,在第四種可能的實(shí)現(xiàn)方式中,該緩沖調(diào)度器包括:
[0017] 解析模塊,用于解析該內(nèi)存控制器發(fā)送過來的內(nèi)存訪問請求消息包,以提取出該 內(nèi)存訪問請求,該內(nèi)存請求包含訪存地址和訪存操作;
[0018] 第一請求隊(duì)列,用于存儲用于訪問該第一類內(nèi)存的內(nèi)存訪問請求;
[0019] 第二請求隊(duì)列,用于存儲用于訪問該第二類內(nèi)存的內(nèi)存訪問請求;
[0020] 判斷模塊,用于使用該訪存地址查詢該內(nèi)存指示表,判斷內(nèi)存訪問請求訪問的數(shù) 據(jù)單元塊是否在該第一類內(nèi)存中,如果在該第一類內(nèi)存中則將該內(nèi)存訪問請求存儲在該第 一請求隊(duì)列中,否則存儲在該第二請求隊(duì)列中;
[0021] 第一返回隊(duì)列,用于存儲第一類內(nèi)存的該內(nèi)存訪問請求的訪存操作結(jié)果;
[0022] 第二返回隊(duì)列,用于存儲第二類內(nèi)存的該內(nèi)存訪問請求的訪存操作結(jié)果;
[0023] 調(diào)度模塊,用于將第一請求隊(duì)列中的內(nèi)存訪問請求調(diào)度到第一類內(nèi)存中執(zhí)行該內(nèi) 存訪問請求對應(yīng)的訪存操作;將第二請求隊(duì)列中的內(nèi)存訪問請求調(diào)度到第二類內(nèi)存中執(zhí)行 該內(nèi)存訪問請求對應(yīng)的訪存操作;和
[0024] 打包模塊,用于將多個內(nèi)存訪問請求的的訪存操作結(jié)果打成消息包向該內(nèi)存控制 器返回。
[0025] 結(jié)合第一方面或第一方面的第二種可能的實(shí)現(xiàn)方式或第一方面的第三種可能的 實(shí)現(xiàn)方式或第一方面的第四種可能的實(shí)現(xiàn)方式,在第五種可能的實(shí)現(xiàn)方式中,該訪問信息 包括訪問操作次數(shù),該遷移調(diào)度器包括:
[0026] 寄存器,用于存放遷移閾值;
[0027] 遷移判定邏輯模塊,用于將該訪問操作次數(shù)和遷移閾值進(jìn)行比較,根據(jù)比較結(jié)果 確定是否將第二類內(nèi)存中的數(shù)據(jù)單元塊遷移到第一類內(nèi)存中;
[0028] 命令緩沖區(qū),用于當(dāng)遷移判定邏輯輸出需要遷移的結(jié)果時,用于存放遷移命令;和
[0029] 數(shù)據(jù)緩沖區(qū),用于緩存遷移命令對應(yīng)的數(shù)據(jù)單元塊在第二類內(nèi)存中的存儲數(shù)據(jù);
[0030] 更新模塊,用于更新該數(shù)據(jù)單元塊對應(yīng)的訪問操作次數(shù),以及當(dāng)遷移判定邏輯輸 出需要遷移的結(jié)果時,更新內(nèi)存指示表。
[0031] 結(jié)合第一方面或第一方面的第二種可能的實(shí)現(xiàn)方式或第一方面的第三種可能的 實(shí)現(xiàn)方式或第一方面的第四種可能的實(shí)現(xiàn)方式或第一方面的第五種可能的實(shí)現(xiàn)方式,在第 六種可能的實(shí)現(xiàn)方式中,該第一類內(nèi)存為易失性內(nèi)存模塊;第二類內(nèi)存為非易失性內(nèi)存模 塊。
[0032] 結(jié)合第一方面或第一方面的第二種可能的實(shí)現(xiàn)方式或第一方面的第三種可能的 實(shí)現(xiàn)方式或第一方面的第四種可能的實(shí)現(xiàn)方式或第一方面的第五種可能的實(shí)現(xiàn)方式,在第 七種可能的實(shí)現(xiàn)方式中,該第一類內(nèi)存的訪問速度比第二類內(nèi)存的訪問速度快。
[0033] 第二方面,提供一種內(nèi)存系統(tǒng),包括:
[0034] 易失性內(nèi)存和非易失性內(nèi)存,分別用于存儲處理器的運(yùn)行數(shù)據(jù);
[0035] 緩沖區(qū),用于存儲Tag表,該Tag表用于指示數(shù)據(jù)單元塊的訪問信息,其包含數(shù)據(jù) 單元塊的訪存地址、內(nèi)存位置和訪存操作的次數(shù);該內(nèi)存位置表示該數(shù)據(jù)單元塊存儲于易 失性內(nèi)存中還是非易失性內(nèi)存中;
[0036] 緩沖調(diào)度器,用于接收內(nèi)存控制器的內(nèi)存訪問請求,該內(nèi)存請求包含訪存地址和 訪存操作;利用該訪存地址查詢Tag表,確定該數(shù)據(jù)單元塊存儲于易失性內(nèi)存中還是非易 失性內(nèi)存中,并從確定的易失性內(nèi)存或非易失性內(nèi)存中完成該內(nèi)存訪問請求的訪存操作, 將內(nèi)存訪問請求的結(jié)果返回給內(nèi)存控制器。
[0037] 在第二方面的第一種可能的實(shí)現(xiàn)方式中,該緩沖調(diào)度器還用于發(fā)送更新該數(shù)據(jù)單 元塊的訪問信息的通知,該內(nèi)存系統(tǒng)還包括:
[0038] 遷移調(diào)度器,用于接收該通知并更新Tag表中該數(shù)據(jù)單元塊的訪問信息;根據(jù)該 數(shù)據(jù)單元塊的訪問信息,確定是否將非易失性內(nèi)存的數(shù)據(jù)單元塊遷移到易失性內(nèi)存中,并 在遷移后更新Tag表。
[0039] 在第二方面的第二種可能的實(shí)現(xiàn)方式中,該緩沖調(diào)度器包括:
[0040] 解析模塊,用于解析內(nèi)存控制器發(fā)送過來的內(nèi)存訪問請求消息包,提取出內(nèi)存訪 問請求;
[0041] 第一請求隊(duì)列,用于存儲訪問易失性內(nèi)存的內(nèi)存訪問請求;
[0042] 第二請求隊(duì)列,用于存儲訪問非易失性內(nèi)存的內(nèi)存訪問請求;
[0043] 判斷模塊,用于使用訪存地址查詢內(nèi)存指示表,判斷每一個內(nèi)存訪問請求訪問的 數(shù)據(jù)單元塊是否在易失性內(nèi)存中,如果在易失性內(nèi)存中則將該內(nèi)存訪問請求存儲在第一請 求隊(duì)列中,否則存儲在第二請求隊(duì)列中;并發(fā)送更新該數(shù)據(jù)單元塊的訪問信息的通知; [0044] 第一返回隊(duì)列,用于存儲易失性內(nèi)存的內(nèi)存訪問請求結(jié)果;
[0045] 第二返回隊(duì)列,用于存儲非易失性內(nèi)存的內(nèi)存訪問請求結(jié)果;
[0046] 調(diào)度模塊,用于將第一請求隊(duì)列中的內(nèi)存訪問請求調(diào)度到易失性內(nèi)存中執(zhí)行該內(nèi) 存訪問請求對應(yīng)的訪存操作;將第二請求隊(duì)列中的內(nèi)存訪問請求調(diào)度到非易失性內(nèi)存中執(zhí) 行該內(nèi)存訪問請求對應(yīng)的訪存操作;和
[0047] 打包模塊,用于將多個內(nèi)存訪問請求的結(jié)果打成消息包返回給內(nèi)存控制器。
[0048] 結(jié)合第二方面或第二方面的第一種可能的實(shí)現(xiàn)方式或第二方面的第二種可能的 實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,該訪問信息包括訪問操作次數(shù),該遷移調(diào)度器包 括:
[0049] 寄存器,用于存放遷移閾值;
[0050] 遷移判定邏輯模塊,用于將該訪問操作次數(shù)和遷移閾值進(jìn)行比較確定是否將非易 失性內(nèi)存中的頁面遷移到易失性內(nèi)存中;
[0051] 命令緩沖區(qū),當(dāng)遷移判定邏輯輸出需要遷移的結(jié)果時,用于存放遷移命令;和
[0052] 數(shù)據(jù)緩沖區(qū),用于緩存遷移命令對應(yīng)的數(shù)據(jù)單元塊在非易失性內(nèi)存中的存儲數(shù) 據(jù);
[0053] Tag更新模塊,用于更新該數(shù)據(jù)單元塊對應(yīng)的訪問操作次數(shù),以及當(dāng)遷移判定邏輯 輸出需要遷移的結(jié)果時,更新內(nèi)存指示表。
[0054] 結(jié)合第二方面或第二方面的第一種可能的實(shí)現(xiàn)方式或第二方面的第二種可能的 實(shí)現(xiàn)方式或第二方面的第三種可能的實(shí)現(xiàn)方式,在第四種可能的實(shí)現(xiàn)方式中,該易失性內(nèi) 存為DRAM(Dynamic Random Access Memory,動態(tài)隨機(jī)存取存儲器),該非易失性內(nèi)存為NVM (Non-Volatile Memory,非易失性存儲器)。
[0055] 第三方面,提供一種內(nèi)存訪問請求的處理方法,包括:
[0056] 接收內(nèi)存訪問請求包,從請求包中獲得內(nèi)存訪問請求的訪存地址和訪存操作;
[0057] 使用內(nèi)存訪問請求的訪存地址查詢內(nèi)存指示表,判斷該訪問請求對應(yīng)的數(shù)據(jù)單元 塊存儲于第一類內(nèi)存中還是第二類內(nèi)存中,并通知遷移調(diào)度器更新數(shù)據(jù)單元塊的訪問信 息;該第一類內(nèi)存與第二類內(nèi)存的類型不同;
[0058] 若該數(shù)據(jù)單元塊存儲在第一類內(nèi)存中,則從第一類內(nèi)存中完成該內(nèi)存訪問請求的 訪存操作,并將內(nèi)存訪問請求的結(jié)果返回給內(nèi)存訪問請求發(fā)起者;
[0059] 若該數(shù)據(jù)單元塊存儲在第二類內(nèi)存中,則從第二類內(nèi)存中完成該內(nèi)存訪問請求的 訪存操作,并將內(nèi)存訪問請求的結(jié)果返回給該內(nèi)存訪問請求的發(fā)起者。
[0060] 在第一種可能的實(shí)現(xiàn)方式中,若該數(shù)據(jù)單元塊存儲在第二類內(nèi)存中,則從第二類 內(nèi)存中完成該內(nèi)存訪問請求的訪存操作,并將內(nèi)存訪問請求的結(jié)果返回給內(nèi)存訪問請求發(fā) 起者包括:
[0061] 若數(shù)據(jù)單元塊存儲在第二類內(nèi)存中,將待訪問的數(shù)據(jù)單元塊遷移到第一類內(nèi)存 中,再從第一類內(nèi)存中完成該內(nèi)存訪問請求的訪存操作,并將內(nèi)存訪問請求的結(jié)果返回給 內(nèi)存訪問請求發(fā)起者。
[0062] 在第二種可能的實(shí)現(xiàn)方式中,若該數(shù)據(jù)單元塊存儲在第二類內(nèi)存中,則從第二類 內(nèi)存中完成該內(nèi)存訪問請求的訪存操作,并將內(nèi)存訪問請求的結(jié)果返回給內(nèi)存訪問請求發(fā) 起者包括:
[0063] 若數(shù)據(jù)單元塊在第二類內(nèi)存中,直接訪問第二類內(nèi)存完成該內(nèi)存訪問請求的訪存 操作,并將內(nèi)存訪問請求的結(jié)果返回給內(nèi)存訪問請求發(fā)起者。
[0064] 結(jié)合第三方面或第三方面的第一種可能的實(shí)現(xiàn)方式或第三方面的第二種可能的 實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,該方法還包括:
[0065] 遷移調(diào)度器根據(jù)數(shù)據(jù)單元塊的訪問信息確定是否將位于第二類內(nèi)存中的該數(shù)據(jù) 單元塊遷移到第一類內(nèi)存中。
[0066] 結(jié)合第三方面的第三種可能的實(shí)現(xiàn)方式,在第四種可能的實(shí)現(xiàn)方式中,該訪問信 息包括訪問操作次數(shù),遷移調(diào)度器根據(jù)數(shù)據(jù)單元塊的訪問信息確定是否將位于第二類內(nèi)存 中的該數(shù)據(jù)單元塊遷移到第一類內(nèi)存中包括:
[0067] 遷移調(diào)度器將記錄的該數(shù)據(jù)單元塊的訪問操作次數(shù)與遷移閾值相比較,如果訪問 操作次數(shù)大于等于遷移閾值,則確定需要進(jìn)行遷移;否則不遷移。
[0068] 結(jié)合第三方面的第四種可能的實(shí)現(xiàn)方式,在第五種可能的實(shí)現(xiàn)方式中,該方法還 包括:
[0069] 該遷移調(diào)度器在確定需要進(jìn)行遷移時更新內(nèi)存指示表信息。
[0070] 第四方面,提供一種內(nèi)存訪問請求的處理方法,包括:
[0071] 接收內(nèi)存訪問請求包,從請求包中獲得內(nèi)存訪問請求的訪存地址和訪存操作;
[0072] 使用內(nèi)存訪問請求的訪存地址查詢Tag表,判斷該訪問請求的對應(yīng)的數(shù)據(jù)單元塊 存儲于易失性內(nèi)存中還是非易失性內(nèi)存中;該Tag表用于指示數(shù)據(jù)單元塊的訪問信息,其 包含數(shù)據(jù)單元塊的訪存地址、內(nèi)存位置和訪存操作的次數(shù);該內(nèi)存位置表示該數(shù)據(jù)單元塊 存儲于易失性內(nèi)存中還是非易失性內(nèi)存中;
[0073] 若該數(shù)據(jù)單元塊存儲在易失性內(nèi)存中,則從易失性內(nèi)存中完成該內(nèi)存訪問請求的 訪存操作,并將內(nèi)存訪問請求的結(jié)果返回給內(nèi)存訪問請求發(fā)起者;
[0074] 若該數(shù)據(jù)單元塊存儲在非易失性內(nèi)存中,則從非易失性內(nèi)存中完成該內(nèi)存訪問請 求的訪存操作,并將內(nèi)存訪問請求的結(jié)果返回給內(nèi)存訪問請求發(fā)起者。
[0075] 在第一種可能的實(shí)現(xiàn)方式中,若該數(shù)據(jù)單元塊存儲在非易失性內(nèi)存中,則從非易 失性內(nèi)存中完成該內(nèi)存訪問請求的訪存操作,并將內(nèi)存訪問請求的結(jié)果返回給內(nèi)存訪問請 求發(fā)起者包括:
[0076] 若數(shù)據(jù)單元塊存儲在非易失性內(nèi)存中,將待訪問的數(shù)據(jù)單元塊遷移到易失性內(nèi)存 中,再從易失性內(nèi)存中完成該內(nèi)存訪問請求的訪存操作,并將內(nèi)存訪問請求的結(jié)果返回給 內(nèi)存訪問請求發(fā)起者。
[0077] 在第二種可能的實(shí)現(xiàn)方式中,若該數(shù)據(jù)單元塊存儲在非易失性內(nèi)存中,則從非易 失性內(nèi)存中完成該內(nèi)存訪問請求的訪存操作,并將內(nèi)存訪問請求的結(jié)果返回給內(nèi)存訪問請 求發(fā)起者包括:
[0078] 若數(shù)據(jù)單元塊在非易失性內(nèi)存中,直接訪問非易失性內(nèi)存完成該內(nèi)存訪問請求的 訪存操作,并將內(nèi)存訪問請求的結(jié)果返回給內(nèi)存訪問請求發(fā)起者。
[0079] 結(jié)合第四方面或第四方面的第一種可能的實(shí)現(xiàn)方式或第四方面的第二種可能的 實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,該訪問信息包括訪問操作次數(shù),根據(jù)數(shù)據(jù)單元塊的 訪問信息確定是否將位于非易失性內(nèi)存中的該數(shù)據(jù)單元塊遷移到易失性內(nèi)存中包括:
[0080] 將記錄的該數(shù)據(jù)單元塊的訪問操作次數(shù)與遷移閾值相比較,如果訪問操作次數(shù)大 于等于遷移閾值,則確定需要進(jìn)行遷移;否則不遷移。
[0081] 結(jié)合第四方面或第四方面的第一種可能的實(shí)現(xiàn)方式或第四方面的第二種可能的 實(shí)現(xiàn)方式或第四方面的第三種可能的實(shí)現(xiàn)方式,在第四種可能的實(shí)現(xiàn)方式中,該方法還包 括:
[0082] 在Tag表中更新該數(shù)據(jù)單元塊的訪問信息;
[0083] 根據(jù)數(shù)據(jù)單元塊的訪問信息,確定是否將位于非易失性內(nèi)存中的該數(shù)據(jù)單元塊遷 移到易失性內(nèi)存中,并在遷移后更新Tag表。
[0084] 第五方面,提供一種計(jì)算機(jī)系統(tǒng),包括:
[0085] 多核處理器,包括內(nèi)存控制器,用于發(fā)起內(nèi)存訪問請求;和
[0086] 根據(jù)第一方面或第二方面任一項(xiàng)可能的實(shí)現(xiàn)方式提供的內(nèi)存系統(tǒng)。
[0087] 本發(fā)明實(shí)施例,通過硬件實(shí)現(xiàn)對不同類型的內(nèi)存的管理,內(nèi)存系統(tǒng)中存在不同類 型的第一類內(nèi)存和第二類內(nèi)存,可以分別從第一類內(nèi)存和第二類內(nèi)存中完成內(nèi)存訪問請 求,對0S透明,不會產(chǎn)生頁面中斷,能夠提高內(nèi)存訪問的速度。
【專利附圖】
【附圖說明】
[0088] 為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本 發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可 以根據(jù)這些附圖獲得其他的附圖。
[0089] 圖1為一種多核多內(nèi)存的計(jì)算機(jī)架構(gòu)的示意圖;
[0090] 圖2為軟件處理混合內(nèi)存訪問的流程示意圖;
[0091] 圖3為本發(fā)明提供的內(nèi)存系統(tǒng)的一個實(shí)施例的結(jié)構(gòu)示意圖;
[0092] 圖4為本發(fā)明提供的緩沖調(diào)度器的一個實(shí)施例的結(jié)構(gòu)示意圖;
[0093] 圖5為本發(fā)明提供的遷移調(diào)度器的一個實(shí)施例的結(jié)構(gòu)示意圖;
[0094] 圖6為本發(fā)明提供的內(nèi)存系統(tǒng)的另一個實(shí)施例的結(jié)構(gòu)示意圖;
[0095] 圖7為本發(fā)明提供的緩沖調(diào)度器的另一個實(shí)施例的結(jié)構(gòu)示意圖;
[0096] 圖8為本發(fā)明提供的緩沖調(diào)度器處理內(nèi)存訪問請求的流程示意圖;
[0097] 圖9為本發(fā)明提供的Tag表的一個實(shí)施例的結(jié)構(gòu)示意圖;
[0098] 圖10為本發(fā)明提供的遷移調(diào)度器的另一個實(shí)施例的結(jié)構(gòu)示意圖;
[0099] 圖11為本發(fā)明提供的遷移調(diào)度器判斷頁面是否需要遷移的流程示意圖;
[0100]圖12為本發(fā)明實(shí)施例提供的計(jì)算機(jī)系統(tǒng)一個實(shí)施例的結(jié)構(gòu)示意圖;
[0101]圖13為本發(fā)明實(shí)施例提供的計(jì)算機(jī)系統(tǒng)另一個實(shí)施例的結(jié)構(gòu)示意圖;
[0102] 圖14為本發(fā)明實(shí)施例提供的內(nèi)存訪問請求處理方法的一個實(shí)施例的流程示意 圖;
[0103] 圖15為本發(fā)明實(shí)施例提供的內(nèi)存訪問請求處理方法的另一個實(shí)施例的流程示意 圖。
【具體實(shí)施方式】
[0104] 下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完 整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;?本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他 實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0105] 為了便于理解本發(fā)明的技術(shù)方案,首先介紹一些在本發(fā)明實(shí)施例中出現(xiàn)的技術(shù)術(shù) 語。本發(fā)明實(shí)施例中所提到的CPU (Central Processing Unit,中央處理器)是處理器的 一種,處理器還可以是 ASIC (Application Specific Integrated Circuit,應(yīng)用特定集成 電路),或者其它是被配置成實(shí)施本發(fā)明實(shí)施例的一個或多個集成電路,本領(lǐng)域技術(shù)人員可 以理解的是,處理器的其它實(shí)現(xiàn)方式也可以替代本發(fā)明實(shí)施例中的CPU。
[0106] 內(nèi)存控制器是計(jì)算機(jī)系統(tǒng)內(nèi)部控制內(nèi)存模塊(或稱之為內(nèi)存)并且通過內(nèi)存控制 器使內(nèi)存與處理器之間交換數(shù)據(jù)的重要組成部分。目前比較流行的是將內(nèi)存控制器嵌入到 CPU中,但也可以將內(nèi)存控制器與CPU分別獨(dú)立實(shí)現(xiàn),二者通過連接進(jìn)行通信。
[0107] 內(nèi)存模塊用于存儲處理器(例如CPU)的運(yùn)行數(shù)據(jù),一個內(nèi)存模塊通常包括一個或 多個存儲單元(或稱之為內(nèi)存芯片)。內(nèi)存通道接口是內(nèi)存模塊上用于連接內(nèi)存通道的接 口。內(nèi)存通道是內(nèi)存模塊與內(nèi)存控制器連接的通道。
[0108] 下面舉例說明幾種常用的內(nèi)存模塊。DIMM(Dual Inline Memory Modules,雙列直 插式存儲模塊)是在奔騰CPU推出后出現(xiàn)的新型內(nèi)存模塊,DIMM提供了 64位的數(shù)據(jù)通道, 因此它在奔騰主板上可以單條使用,它比SIMM (single in-line memory module,單邊接 觸內(nèi)存模組)插槽要長一些,并且它也支持新型的168線ED0RAM (Extended Data Output RAM,擴(kuò)展數(shù)據(jù)輸出內(nèi)存)存儲器。DRAM (Dynamic Random Access Memory,動態(tài)隨機(jī)存取存 儲器)為最常見的內(nèi)存芯片,一個DMM或SMM中可以包含一個或多個DRAM。DRAM只能將 數(shù)據(jù)保持很短的時間。為了保持?jǐn)?shù)據(jù),DRAM使用電容存儲,所以必須隔一段時間刷新一次, 如果存儲單元沒有被刷新,存儲的信息就會丟失。關(guān)機(jī)或掉電之后DRAM中存儲的數(shù)據(jù)也會 丟失。NVM (Non-Volatile Memory,非易失性存儲器)是另一種可做內(nèi)存芯片的存儲顆粒, 一個DI麗或SI麗中可以包含一個或多個NVM。NVM通常用來存放程序和數(shù)據(jù),不同于DRAM 的特性,關(guān)機(jī)或掉電之后NVM中存儲的數(shù)據(jù)不會丟失。內(nèi)存在每一次讀寫數(shù)據(jù)的時候按照 一定的數(shù)據(jù)單位進(jìn)行操作,一種數(shù)據(jù)單位為頁面或內(nèi)存頁面(page),一般代表4k的數(shù)據(jù)。
[0109] 另外,需說明的是,本發(fā)明實(shí)施例中所述的"連接"指的是兩個或兩個以上虛擬模 塊之間、兩個或兩個以上實(shí)體模塊之間、或者實(shí)體模塊與虛擬模塊之間具有通信連接,其具 體實(shí)現(xiàn)可以為一條或多條通信線路或信號線路。除非明確說明,否則該"連接"可以是直接 連接,可以是通過接口或端口連接,還可以是通過其它的虛擬模塊或?qū)嶓w模塊連接。本發(fā)明 實(shí)施例中所述的"第一"和"第二"等除非有明確說明,否則僅是為了區(qū)分而言,并非有特定 的順序關(guān)系。
[0110] 參照圖3, 一種內(nèi)存系統(tǒng)的一個實(shí)施例,包括:
[0111] 第一類內(nèi)存301,用于存儲處理器的運(yùn)行數(shù)據(jù);
[0112] 第二類內(nèi)存302,用于存儲處理器的運(yùn)行數(shù)據(jù),其中第一類內(nèi)存和第二類內(nèi)存類型 不同;
[0113] 緩沖區(qū)303,用于存儲內(nèi)存指示表,所述內(nèi)存指示表包含位于第一類內(nèi)存的數(shù)據(jù)單 元塊的訪存地址;
[0114] 緩沖調(diào)度器304,用于接收內(nèi)存控制器的內(nèi)存訪問請求,所述內(nèi)存請求包含訪存地 址和訪存操作;根據(jù)訪存地址和內(nèi)存指示表確定所訪存地址對應(yīng)的數(shù)據(jù)單元塊存儲于第一 類內(nèi)存中還是第二類內(nèi)存中,并從確定的第一類內(nèi)存或第二類內(nèi)存中完成所述內(nèi)存訪問請 求,并將內(nèi)存訪問請求的結(jié)果返回給內(nèi)存控制器。
[0115] 進(jìn)一步的,一個實(shí)施例中,緩沖調(diào)度器還用于當(dāng)確定所述訪存地址對應(yīng)的數(shù)據(jù)單 元塊存儲于第二類內(nèi)存時,發(fā)送更新所述數(shù)據(jù)單元塊的訪問信息的通知。該內(nèi)存系統(tǒng)還包 括:遷移調(diào)度器305,用于接收所述遷移調(diào)度器發(fā)送的通知并更新所述數(shù)據(jù)單元塊的訪問 信息;根據(jù)所述數(shù)據(jù)單元塊的訪問信息,確定是否將第二類內(nèi)存中的數(shù)據(jù)單元塊遷移到第 一類內(nèi)存中,并在遷移后更新內(nèi)存指不表。
[0116] 其中,第一類內(nèi)存和第二類內(nèi)存可以分別為內(nèi)存模塊,也可以分別為至少一個內(nèi) 存芯片,其粒度不限,只要可以存儲處理器的運(yùn)行數(shù)據(jù)就可以。而第一類內(nèi)存與第二類內(nèi)存 的類型不同,可以是兩者的存儲介質(zhì)類型不同或者兩者的存儲速度不同。一個實(shí)施例中,第 一類內(nèi)存為易失性內(nèi)存模塊,第二類內(nèi)存為非易失性內(nèi)存模塊(第一類內(nèi)存的讀寫速度快 于第二類內(nèi)存);另一個實(shí)施例中,第一類內(nèi)存和第二類內(nèi)存都為易失性內(nèi)存模塊,其中第 一類內(nèi)存的讀寫速度快于第二類內(nèi)存;另一個實(shí)施例中,第一類內(nèi)存和第二類內(nèi)存都為非 易失性內(nèi)存模塊,其中第一類內(nèi)存的讀寫速度快于第二類內(nèi)存。
[0117] 一個實(shí)施例中,緩沖調(diào)度器可以直接從第二類內(nèi)存中完成所述內(nèi)存訪問請求。該 緩沖調(diào)度器具體用于:確定該數(shù)據(jù)單元塊位于第一類內(nèi)存中,則從第一類內(nèi)存中完成該內(nèi) 存訪問請求;確定該數(shù)據(jù)單元塊位于第二類內(nèi)存中,則從第二類內(nèi)存中完成所述內(nèi)存訪問 請求。
[0118] 另一個實(shí)施例中,緩沖調(diào)度器不直接從第二類內(nèi)存中完成所述內(nèi)存訪問請求。該 緩沖調(diào)度器具體用于:確定該數(shù)據(jù)單元塊位于第一類內(nèi)存中,則從第一類內(nèi)存中完成該內(nèi) 存訪問請求;確定該數(shù)據(jù)單元塊位于第二類內(nèi)存中,則將第二類內(nèi)存中的數(shù)據(jù)單元塊遷移 到第一類內(nèi)存中,并從第一類內(nèi)存中完成所述內(nèi)存訪問請求。一個實(shí)施例中,可以將該數(shù)據(jù) 單元塊復(fù)制到第一類內(nèi)存中,在訪問完成后再將該數(shù)據(jù)單元塊刪除。
[0119] 一個實(shí)施例中,訪問信息包括訪問操作次數(shù);遷移調(diào)度器具體用于:將記錄的數(shù) 據(jù)單元塊的訪問操作次數(shù)與遷移閾值相比較,如果訪問操作次數(shù)大于等于遷移閾值,則確 定需要進(jìn)行遷移;否則不遷移。遷移閾值可以根據(jù)需要設(shè)置。
[0120] 內(nèi)存指示表,用于指示位于第一類內(nèi)存中的數(shù)據(jù)單元塊。一個實(shí)施例中,內(nèi)存指示 表僅存儲位于第一類內(nèi)存的數(shù)據(jù)單元塊的訪存地址。另一個實(shí)施例中,內(nèi)存指示表存儲所 有的內(nèi)存訪問請求對應(yīng)的數(shù)據(jù)單元塊的訪存地址,其包含數(shù)據(jù)單元塊的訪存地址、內(nèi)存位 置和訪存操作的次數(shù);該內(nèi)存位置表示所述數(shù)據(jù)單元塊存儲于第一類內(nèi)存中還是第二類內(nèi) 存中。另一個實(shí)施例中,內(nèi)存指示表存儲所有的內(nèi)存訪問請求對應(yīng)的數(shù)據(jù)單元塊的訪存地 址,其包含數(shù)據(jù)單元塊的訪存地址、內(nèi)存位置、訪存操作的次數(shù)和數(shù)據(jù)更新標(biāo)識;該內(nèi)存位 置表示所述數(shù)據(jù)單元塊存儲于第一類內(nèi)存中還是第二類內(nèi)存中;數(shù)據(jù)更新標(biāo)識表示該數(shù)據(jù) 單元塊的內(nèi)容進(jìn)行了更新,當(dāng)收到的內(nèi)存訪問請求的訪存操作為寫操作時,該數(shù)據(jù)單元塊 的內(nèi)容則進(jìn)行了更新。當(dāng)然內(nèi)存指示表還可以存儲其他信息。存儲內(nèi)存指示表的緩沖區(qū)在 物理上可以使用SRAM,DRAM等存儲介質(zhì)實(shí)現(xiàn)。使用SRAM,其存取速度更快。在物理位置上, 該緩沖區(qū)可以位于緩沖調(diào)度器內(nèi)部或外部,或者位于遷移調(diào)度器的內(nèi)部或外部。
[0121] 參考圖4, 一個實(shí)施例中,緩沖調(diào)度器包括:
[0122] 解析模塊401,用于解析內(nèi)存控制器發(fā)送過來的內(nèi)存訪問請求消息包,提取出內(nèi)存 訪問請求;
[0123] 第一請求隊(duì)列402,用于存儲訪問第一類內(nèi)存的內(nèi)存訪問請求;
[0124] 第二請求隊(duì)列403,用于存儲訪問第二類內(nèi)存的內(nèi)存訪問請求;
[0125] 判斷模塊404,用于使用內(nèi)存訪問請求中的訪存地址查詢內(nèi)存指示表,判斷每一個 內(nèi)存訪問請求訪問的數(shù)據(jù)單元塊是否在第一類內(nèi)存中,如果在第一類內(nèi)存中則將該內(nèi)存訪 問請求存儲在第一請求隊(duì)列中,否則存儲在第二請求隊(duì)列中;
[0126] 調(diào)度模塊405,用于將第一請求隊(duì)列中的內(nèi)存訪問請求調(diào)度到第一類內(nèi)存中執(zhí)行 該內(nèi)存訪問請求對應(yīng)的訪存操作;將第二請求隊(duì)列中的內(nèi)存訪問請求調(diào)度到第二類內(nèi)存中 執(zhí)行該內(nèi)存訪問請求對應(yīng)的訪存操作;
[0127] 第一返回隊(duì)列406,用于存儲第一類內(nèi)存的內(nèi)存訪問請求結(jié)果;
[0128] 第二返回隊(duì)列407,用于存儲第二類內(nèi)存的內(nèi)存訪問請求結(jié)果;和
[0129] 打包模塊408,用于將至少一個內(nèi)存訪問請求的結(jié)果打成消息包返回給內(nèi)存控制 器。
[0130] 參考圖5,-個實(shí)施例中,訪問信息包括訪問操作次數(shù),遷移調(diào)度器包括:
[0131] 寄存器501,用于存放遷移閾值;
[0132] 遷移判定邏輯502,用于將所述訪問操作次數(shù)和遷移閾值進(jìn)行比較確定是否將第 二類內(nèi)存中的頁面遷移到第一類內(nèi)存中;
[0133] 命令緩沖區(qū)503,當(dāng)遷移判定邏輯輸出需要遷移的結(jié)果時,用于存放遷移命令;和
[0134] 數(shù)據(jù)緩沖區(qū)504,用于緩存遷移命令對應(yīng)的數(shù)據(jù)單元塊在第二類內(nèi)存中的存儲數(shù) 據(jù);
[0135] 更新模塊505,用于更新所述數(shù)據(jù)單元塊對應(yīng)的訪問操作次數(shù),以及當(dāng)遷移判定邏 輯輸出需要遷移的結(jié)果時,更新內(nèi)存指示表。
[0136] 其中,當(dāng)訪問操作次數(shù)大于等于遷移閾值時,遷移判定邏輯503輸出需要將第二 類內(nèi)存中的頁面遷移到第一類內(nèi)存的結(jié)果;當(dāng)訪問操作次數(shù)小于遷移閾值時,遷移判定邏 輯503輸出不需要將第二類內(nèi)存中的頁面遷移到第一類內(nèi)存的結(jié)果。
[0137] 當(dāng)內(nèi)存指示表僅存儲位于第一類內(nèi)存的數(shù)據(jù)單元塊的訪存地址時,遷移調(diào)度器還 包括:第二寄存器,用于存放數(shù)據(jù)單元塊的操作信息,該操作信息包括訪問操作次數(shù)。另一 個實(shí)施例中,內(nèi)存指示表存儲所有的內(nèi)存訪問請求對應(yīng)的數(shù)據(jù)單元塊的訪存地址,則遷移 調(diào)度器直接在內(nèi)存指示表中更新該數(shù)據(jù)單元塊對應(yīng)的訪問操作次數(shù)。明顯的,寄存器和第 二寄存器在物理上可以是一個單元或者兩個單元;命令緩沖區(qū)與數(shù)據(jù)緩沖區(qū)在物理上也可 以是一個單元或者兩個單元。寄存器在物理上可以位于遷移判定邏輯內(nèi)部或者外部。
[0138] 其中,訪問操作包括讀操作和寫操作,寄存器可以分別存儲讀操作的遷移閾值和 寫操作的遷移閾值;第二寄存器可以分別存儲數(shù)據(jù)單元塊的讀操作次數(shù)和寫操作次數(shù)。遷 移判定邏輯503在判斷時分別對讀操作和寫操作進(jìn)行判斷。
[0139] 上述實(shí)施例中的遷移指內(nèi)存中的數(shù)據(jù)從一個內(nèi)存模塊移動到另一個內(nèi)存模塊,這 里的遷移也可以用移動或者復(fù)制代替。上述實(shí)施例中的數(shù)據(jù)單元塊,指一個內(nèi)存模塊存儲 數(shù)據(jù)的單位或內(nèi)存之前遷移數(shù)據(jù)的最小單位,在一個實(shí)施例中,數(shù)據(jù)單元塊為頁面(page), 一般一個頁面表不4k的內(nèi)存數(shù)據(jù)。
[0140] 上述實(shí)施例中,用硬件實(shí)現(xiàn)異構(gòu)的內(nèi)存系統(tǒng),實(shí)現(xiàn)對不同類型的內(nèi)存的管理,內(nèi)存 系統(tǒng)中存在不同類型的第一類內(nèi)存和第二類內(nèi)存,可以分別從第一類內(nèi)存和第二類內(nèi)存中 完成內(nèi)存訪問請求,無需0S或其他軟件處理,不會產(chǎn)生頁面中斷,能夠提高內(nèi)存訪問的速 度;同時由硬件實(shí)現(xiàn)可以節(jié)約軟件開銷。
[0141] 參考圖6, 一種內(nèi)存系統(tǒng)的另一個實(shí)施例,包括:
[0142] 易失性內(nèi)存601,用于存儲處理器的運(yùn)行數(shù)據(jù);
[0143] 非易失性內(nèi)存602,用于存儲處理器的運(yùn)行數(shù)據(jù);
[0144] 緩沖區(qū)603,用于存儲Tag (標(biāo)簽)表,該Tag表用于指示數(shù)據(jù)單元塊的訪問信息, 存儲有數(shù)據(jù)單元塊的訪存地址、內(nèi)存位置和訪存操作的次數(shù);所述內(nèi)存位置表示所述數(shù)據(jù) 單元塊存儲于易失性內(nèi)存中還是非易失性內(nèi)存中;
[0145] 緩沖調(diào)度器604,用于接收內(nèi)存控制器的內(nèi)存訪問請求,所述內(nèi)存請求包含訪存地 址和訪存操作;利用所述訪存地址查詢Tag表,確定所訪存地址對應(yīng)的頁面位于易失性內(nèi) 存中還是非易失性內(nèi)存中,并從確定的易失性內(nèi)存或者非易失性內(nèi)存中完成所述內(nèi)存訪問 請求的訪存操作,將內(nèi)存訪問請求的結(jié)果返回給內(nèi)存控制器。
[0146] 進(jìn)一步的,另一個實(shí)施例中,緩沖調(diào)度器還用于發(fā)送更新所述數(shù)據(jù)單元塊的訪問 信息的通知。該內(nèi)存系統(tǒng)還包括:遷移調(diào)度器605,用于接收該通知并更新Tag表中所述數(shù) 據(jù)單元塊的訪問信息;根據(jù)所述數(shù)據(jù)單元塊的訪問信息,確定是否將非易失性內(nèi)存的數(shù)據(jù) 單元塊遷移到易失性內(nèi)存中,并在遷移后更新Tag表。
[0147] 本實(shí)施例中,Tag表存儲所有的內(nèi)存訪問請求對應(yīng)的數(shù)據(jù)單元塊的訪存地址。一個 實(shí)施例中,其包含數(shù)據(jù)單元塊的訪存地址、內(nèi)存位置和訪存操作的次數(shù);該內(nèi)存位置表示所 述數(shù)據(jù)單元塊存儲于第一類內(nèi)存中還是第二類內(nèi)存中。另一個實(shí)施例中,Tag表包含數(shù)據(jù)單 元塊的訪存地址、內(nèi)存位置、訪存操作的次數(shù)和數(shù)據(jù)更新標(biāo)識;該內(nèi)存位置表示所述數(shù)據(jù)單 元塊存儲于第一類內(nèi)存中還是第二類內(nèi)存中;數(shù)據(jù)更新標(biāo)識表示該數(shù)據(jù)單元塊的內(nèi)容進(jìn)行 了更新,當(dāng)收到的內(nèi)存訪問請求的訪存操作為寫操作時,該數(shù)據(jù)單元塊的內(nèi)容則進(jìn)行了更 新。當(dāng)然Tag表還可以存儲其他信息。存儲Tag表的緩沖區(qū)在物理上可以使用SRAM,DRAM 等存儲介質(zhì)實(shí)現(xiàn)。使用SRAM,其存取速度更快。在物理位置上,該緩沖區(qū)可以獨(dú)立存在,也 可以位于緩沖調(diào)度器內(nèi)部或外部,或者位于遷移調(diào)度器的內(nèi)部或外部。
[0148] 一個實(shí)施例中數(shù)據(jù)單元塊為頁面。
[0149] 與上一個實(shí)施例相比,本實(shí)施例中的第一類內(nèi)存具體為易失性內(nèi)存,第二類內(nèi)存 具體為非易失性內(nèi)存;內(nèi)存指示表具體為Tag表,數(shù)據(jù)單元塊具體為頁面。明顯的,其中易 失性內(nèi)存和非易失性內(nèi)存可以分別為內(nèi)存模塊,也可以分別為至少一個內(nèi)存芯片,其粒度 不限。上一個實(shí)施例中緩沖調(diào)度器、遷移調(diào)度器的實(shí)施例也可以用在本實(shí)施例中,區(qū)別在于 其中的第一類內(nèi)存具體為易失性內(nèi)存,第二類內(nèi)存具體為非易失性內(nèi)存,數(shù)據(jù)單元塊具體 為頁面。
[0150] 一個實(shí)施例中,易失性內(nèi)存為DRAM,非易失性內(nèi)存為NVM。
[0151] 本實(shí)施例中,通過在內(nèi)存系統(tǒng)中用硬件實(shí)現(xiàn)混合內(nèi)存的管理。操作頻繁的頁面 存儲于易失性內(nèi)存中,操作不頻繁的頁面存儲于非易失性內(nèi)存中,可以分別從易失性內(nèi)存 和非易失性內(nèi)存中完成內(nèi)存訪問請求,減少隨機(jī)訪問的頁面干擾局部性好的頁面的訪問性 能,能夠提高內(nèi)存訪問的速度;可以實(shí)現(xiàn)從非易失性內(nèi)存到易失性內(nèi)存的頁面遷移,能夠提 高訪問性能。
[0152] 參考圖7,以易失性內(nèi)存為DRAM,非易失性內(nèi)存為NVM,數(shù)據(jù)單元塊具體為頁面;內(nèi) 存訪問請求為訪存請求消息為例;緩沖調(diào)度器的一個實(shí)施例,包括 :
[0153] 包解析模塊,打包模塊,判斷模塊,調(diào)度模塊,請求隊(duì)列和返回隊(duì)列。請求隊(duì)列和返 回隊(duì)列按不同的存儲介質(zhì)分開管理,本例中包含DRAM請求隊(duì)列、NVM請求隊(duì)列和DRAM返回 隊(duì)列、NVM返回隊(duì)列。其中,包解析模塊負(fù)責(zé)解析內(nèi)存控制器發(fā)送過來的內(nèi)存訪問請求消息 包,提取出內(nèi)存訪問請求,注意一個消息包內(nèi)可以包含多個讀寫請求,內(nèi)存訪問請求包括訪 存地址、訪存粒度、訪存操作(讀操作或者寫操作)、優(yōu)先級等信息。對于每個內(nèi)存訪問請 求,判斷模塊使用訪存地址查詢Tag表,判斷訪問的Page是否在DRAM中,如果在,將內(nèi)存訪 問請求放入到DRAM請求隊(duì)列;如果不在DRAM中,將請求放入NVM請求隊(duì)列。調(diào)度模塊負(fù)責(zé) 調(diào)度請求隊(duì)列中的內(nèi)存訪問請求,并通過各自的物理接口將請求調(diào)度到對應(yīng)的存儲芯片中 執(zhí)行:DRAM請求通過DRAM物理接口,而NVM請求通過NVM物理接口。讀請求完成后,將返 回的數(shù)據(jù)放入對應(yīng)的返回隊(duì)列,最后放入全局返回隊(duì)列,并通過打包模塊,將多個請求返回 的數(shù)據(jù)打成消息包返回給內(nèi)存控制器。
[0154] 參考圖8,上述緩沖調(diào)度器處理內(nèi)存訪問請求的流程,包括:
[0155] 1)緩沖調(diào)度器收到內(nèi)存訪問請求消息包后,解析消息包,獲得內(nèi)存訪問請求的地 址、讀寫信息;
[0156] 2)緩沖調(diào)度器使用地址查詢Tag表,判斷訪問的頁面是否在DRAM中,如果在,轉(zhuǎn)到 3);如果不在,轉(zhuǎn)到4);
[0157] 3)緩沖調(diào)度器向DRAM發(fā)送內(nèi)存訪問請求,并通知遷移調(diào)度器更新頁面的訪問信 息。從DRAM獲得數(shù)據(jù)后,緩沖調(diào)度器將其封裝成消息包,返回給處理器,處理請求結(jié)束;
[0158] 4)緩沖調(diào)度器向NVM發(fā)送內(nèi)存訪問請求,這時數(shù)據(jù)直接從NVM返回給緩沖調(diào)度器, 然后封裝成消息包返回給處理器;同時通知遷移調(diào)度器更新頁面訪問信息,然后遷移調(diào)度 器判斷是否需要將頁面從NVM遷移到DRAM中,如果為否,則處理內(nèi)存訪問請求結(jié)束,否則轉(zhuǎn) 到5);
[0159] 5)遷移調(diào)度器啟動頁面遷移操作,并更新Tag表,如果DRAM中還有空間,則直接將 頁面從NVM放入DRAM中;否則從DRAM中選擇一個頁面替換出去,將新的頁面放入DRAM中。 注意這里的頁面遷移與從NVM中返回數(shù)據(jù)可以并行。
[0160] Tag表存儲的信息包括:頁面的地址,頁面位于哪個內(nèi)存中,頁面訪問次數(shù)。進(jìn)一 步的,可以包括Tag表的主要作用是維護(hù)當(dāng)前哪些物理地址空間位于DRAM中,并維護(hù)每個 Page的訪問計(jì)數(shù)。Tag表可以采用直接尋址,也可以使用Hash表等其他的方式來加速查找 過程并降低空間開銷。Tag表的更新由遷移調(diào)度器完成,對軟件(如OS,Hypervisor)完全 透明。
[0161] 圖9為Tag表的一個實(shí)現(xiàn)例子,使用Hash表來維護(hù)每個Page的信息。訪存地址 用于Hash計(jì)算得到Hash表的索引,對于被Hash到同一個位置的多個Page (稱為Hash沖 突)使用鏈表將多個Page信息連起來。每個Hash表項(xiàng)包含對應(yīng)Page的訪問信息:TAG為 完整地址;P為Present位,代表當(dāng)前Page是否在DRAM中,如果為1表示在DRAM中,0為不 在DRAM中;D為Dirty位,代表是否被改寫過;Count代表被訪問的次數(shù),這個用于指導(dǎo)Page 的遷移。當(dāng)緩沖調(diào)度器接收到一個新的內(nèi)存訪問請求時,計(jì)算Hash得到索引,再與鏈表中 的TAG逐個比較,直到匹配找到指定Page的信息。
[0162] 參考圖10,以易失性內(nèi)存為DRAM,非易失性內(nèi)存為NVM;遷移調(diào)度器的一個實(shí)施 例,包括遷移判定邏輯,Tag表更新模塊,命令緩沖區(qū)和數(shù)據(jù)緩沖區(qū)。遷移判定邏輯用于判定 是否需要將被訪問的NVM Page遷移到DRAM中,遷移判定邏輯包含寄存器,用于存放讀寫訪 問次數(shù)的遷移閾值;命令緩沖區(qū)存放遷移NVM Page的命令(主要是需要遷移的Page地址, 放到DRAM中的地址);數(shù)據(jù)緩沖區(qū)作為NVM和DRAM數(shù)據(jù)遷移的中介。當(dāng)緩沖調(diào)度器收到一 個訪問NVM的請求(查詢Tag表后,訪問請求的頁面不在DRAM中),一方面緩沖調(diào)度器將 請求加入到NVM請求隊(duì)列,等待調(diào)度;同時,將這個請求輸入到遷移調(diào)度器,遷移判定邏輯 查詢Tag表中該P(yáng)age的訪問信息,主要是讀訪問、寫訪問次數(shù)信息,判斷是否超過遷移閾值 (閾值存放在遷移判定邏輯內(nèi)的寄存器中,可配置)。如果超過遷移閾值,就向命令緩沖區(qū) 內(nèi)添加一個將該P(yáng)age從NVM中遷移到DRAM的命令。遷移調(diào)度器首先將數(shù)據(jù)從NVM取到數(shù) 據(jù)緩沖區(qū)中,再從數(shù)據(jù)緩沖區(qū)放入到目標(biāo)DRAM中。遷移完成后,需要更新對應(yīng)Page在Tag 表中的信息。
[0163] 參考圖11,遷移調(diào)度器判斷頁面是否需要從NVM到DRAM遷移的流程??梢栽O(shè)置一 個簡單的遷移策略,統(tǒng)計(jì)最近一段時間頁面被讀寫訪問的次數(shù),設(shè)置讀寫訪問閾值分別為 ?;和Tw,當(dāng)頁面的最近一段時間的讀訪問次數(shù)超過?;,或者寫訪問次數(shù)超過Tw,就將頁面選 為遷移候選:
[0164] 1)對于發(fā)送到NVM中的訪存請求,判斷是否為讀請求,如果是,轉(zhuǎn)到2);否則轉(zhuǎn)到 3)。
[0165] 2)判斷頁面的最近一段時間讀訪問次數(shù)是否超過讀閾值?;,如果沒有,則不需要 遷移,結(jié)束;否則轉(zhuǎn)到4)。
[0166] 3)判斷頁面的最近一段時間寫訪問次數(shù)是否超過寫閾值Tw,如果沒有,則不需要 遷移,結(jié)束;否則轉(zhuǎn)到4)。
[0167] 4)將頁面選為遷移候選,并進(jìn)一步與DRAM中將被替換出去的頁面進(jìn)行比較,如果 訪問次數(shù)更多,則啟動頁面遷移,并更新Tag表信息。
[0168] 當(dāng)然,在步驟2)和3)中判斷寫訪問或者寫訪問超過閾值時,可以不執(zhí)行步驟4,直 接的啟動頁面遷移并更新Tag表信息。當(dāng)然也可以設(shè)置其他遷移策略。
[0169] 上述實(shí)施例中的內(nèi)存系統(tǒng)還能夠?qū)崿F(xiàn)對對軟件透明的檢查點(diǎn)(checkpoint)保 護(hù):如遷移調(diào)度器定期將DRAM中改寫過的數(shù)據(jù)備份到NVM中??梢栽贜VM中保留部分區(qū)域 專用于存放checkpoint,對于DRAM中的每個頁面,在Tag中對應(yīng)設(shè)置標(biāo)志位Dirty,指示頁 面是否被改寫過。緩沖調(diào)度器定期檢查DRAM中的頁面,只將DRAM中被改寫過的數(shù)據(jù)備份 至lj DRAM 中。
[0170] 進(jìn)一步,為了降低checkpoint的開銷,可以利用DRAM處于刷新(Refresh)或后臺 錯誤掃描(ECC Scrubbing)的時候,進(jìn)行checkpoint。刷新的時候,緩沖調(diào)度器需要將數(shù)據(jù) 從DRAM中讀出到行緩沖(Row Buffer),然后再寫回去;錯誤掃描的時候則需要將數(shù)據(jù)讀出 到緩沖調(diào)度器中,進(jìn)行錯誤校驗(yàn)后,如果出錯,將糾正過的數(shù)據(jù)寫回到DRAM中。這兩種操作 都需要從DRAM中讀出數(shù)據(jù),為了進(jìn)行定期checkpoint,可以利用這里讀出的數(shù)據(jù),從而降 低開銷,而且不影響DRAM的正常工作。
[0171] 對于DRAM和NVM混合內(nèi)存,還可以在緩沖調(diào)度器中對DRAM實(shí)現(xiàn)硬件預(yù)取 Prefetch,硬件學(xué)習(xí)訪問頁面的模式,產(chǎn)生Prefetch命令,將預(yù)測不久會被訪問的頁面提 前遷移到DRAM中,提高性能。還可以在緩沖調(diào)度器中實(shí)現(xiàn)硬件Victim,因?yàn)閺腄RAM中換 出的頁面很可能在不久會被再次訪問,因此將換出的頁面放入Victim緩沖中,能夠提高性 能。
[0172] 本發(fā)明還公開一種計(jì)算機(jī)系統(tǒng),包括:多核處理器,其包括內(nèi)存控制器,用于發(fā)起 內(nèi)存訪問請求;和內(nèi)存系統(tǒng)。該內(nèi)存系統(tǒng)可以為上述實(shí)施例中的任意一個內(nèi)存系統(tǒng)及其內(nèi) 部模塊組成,例如圖3到圖11對應(yīng)的實(shí)施例。例如參考圖12,內(nèi)存系統(tǒng)包括內(nèi)存指示表,遷 移調(diào)度器,緩沖調(diào)度器,第一類內(nèi)存,第二類內(nèi)存;其中各個模塊的功能及劃分參考前述實(shí) 施例。例如參考圖13,內(nèi)存系統(tǒng)包括Tag表,遷移調(diào)度器,緩沖調(diào)度器,DRAM,NVM (當(dāng)然在 另一個實(shí)施例中DRAM和NVM可以分別為易失性內(nèi)存和非易失性內(nèi)存);其中各個模塊的功 能及劃分參考前述實(shí)施例。
[0173] 參考圖14,內(nèi)存訪問請求的處理方法一個實(shí)施例,包括:
[0174] S1401 :接收內(nèi)存訪問請求包,從請求包中獲得內(nèi)存訪問請求的訪存地址和訪存操 作;
[0175] S1402 :使用內(nèi)存訪問請求的訪存地址查詢內(nèi)存指示表,判斷所述訪問請求對應(yīng)的 數(shù)據(jù)單元塊存儲于第一類內(nèi)存中還是第二類內(nèi)存中,并通知遷移調(diào)度器更新數(shù)據(jù)單元塊的 訪問信息;所述第一類內(nèi)存與第二類內(nèi)存的類型不同;
[0176] S1403:若所述數(shù)據(jù)單元塊存儲在第一類內(nèi)存中,則從第一類內(nèi)存中完成所述內(nèi)存 訪問請求的訪存操作,并將內(nèi)存訪問請求的結(jié)果返回給內(nèi)存訪問請求發(fā)起者;
[0177] S1404 :若所述數(shù)據(jù)單元塊存儲在第二類內(nèi)存中,則從第二類內(nèi)存中完成所述內(nèi)存 訪問請求的訪存操作,并將內(nèi)存訪問請求的結(jié)果返回給內(nèi)存訪問請求發(fā)起者。
[0178] 一個實(shí)施例中,步驟S1404包括:
[0179] 若數(shù)據(jù)單元塊存儲在第二類內(nèi)存中,將待訪問的數(shù)據(jù)單元塊遷移到第一類內(nèi)存 中,再從第一類內(nèi)存中完成所述內(nèi)存訪問請求的訪存操作,并將內(nèi)存訪問請求的結(jié)果返回 給內(nèi)存訪問請求發(fā)起者。
[0180] 另一個實(shí)施例中,步驟S1404包括:
[0181] 若數(shù)據(jù)單元塊在第二類內(nèi)存中,直接訪問第二類內(nèi)存完成所述內(nèi)存訪問請求的訪 存操作,并將內(nèi)存訪問請求的結(jié)果返回給內(nèi)存訪問請求發(fā)起者。
[0182] 一個實(shí)施例中,該方法還包括:
[0183] S1405 :遷移調(diào)度器更新數(shù)據(jù)單元塊的訪問信息;
[0184] S1406:遷移調(diào)度器根據(jù)數(shù)據(jù)單元塊的訪問信息確定是否將位于第二類內(nèi)存中的 所述數(shù)據(jù)單元塊遷移到第一類內(nèi)存中。
[0185] -個實(shí)施例中,訪問信息包括訪問操作次數(shù),步驟S1405包括:
[0186] 遷移調(diào)度器將記錄的所述數(shù)據(jù)單元塊的訪問操作次數(shù)與遷移閾值相比較,如果訪 問操作次數(shù)大于等于遷移閾值,則確定需要進(jìn)行遷移;否則不遷移。可選的,還包括:遷移 調(diào)度器在確定需要進(jìn)行遷移時更新內(nèi)存指示表信息。
[0187] 該實(shí)施例中,實(shí)現(xiàn)對包含不同類型的第一類內(nèi)存和第二類內(nèi)存的內(nèi)存系統(tǒng)進(jìn)行管 理,可以分別從第一類內(nèi)存和第二類內(nèi)存中完成內(nèi)存訪問請求,無需中斷處理,能夠提高內(nèi) 存訪問的速度。
[0188] 參考圖15,內(nèi)存訪問請求的處理方法的另一個實(shí)施例,包括:
[0189] S1501 :接收內(nèi)存訪問請求包,從請求包中獲得內(nèi)存訪問請求的訪存地址和訪存操 作;
[0190] S1502 :使用內(nèi)存訪問請求的訪存地址查詢Tag表,判斷所述訪問請求對應(yīng)的數(shù)據(jù) 單元塊存儲于易失性內(nèi)存中還是非易失性內(nèi)存中;所述Tag表用于指示數(shù)據(jù)單元塊的訪問 信息,其包含數(shù)據(jù)單元塊的訪存地址、內(nèi)存位置和訪存操作的次數(shù);所述內(nèi)存位置表示所述 數(shù)據(jù)單元塊存儲于易失性內(nèi)存中還是非易失性內(nèi)存中;
[0191] S1503 :若所述數(shù)據(jù)單元塊存儲在易失性內(nèi)存中,則從易失性內(nèi)存中完成所述內(nèi)存 訪問請求的訪存操作,并將內(nèi)存訪問請求的結(jié)果返回給內(nèi)存訪問請求發(fā)起者;
[0192] S1504:若所述數(shù)據(jù)單元塊存儲在非易失性內(nèi)存中,則從非易失性內(nèi)存中完成所述 內(nèi)存訪問請求的訪存操作,并將內(nèi)存訪問請求的結(jié)果返回給內(nèi)存訪問請求發(fā)起者。
[0193] 一個實(shí)施例中,步驟S1504包括:
[0194] 若數(shù)據(jù)單元塊存儲在非易失性內(nèi)存中,將待訪問的數(shù)據(jù)單元塊遷移到易失性內(nèi)存 中,再從易失性內(nèi)存中完成所述內(nèi)存訪問請求的訪存操作,并將內(nèi)存訪問請求的結(jié)果返回 給內(nèi)存訪問請求發(fā)起者。
[0195] 另一個實(shí)施例中,步驟S1504包括:
[0196] 若數(shù)據(jù)單元塊在非易失性內(nèi)存中,直接訪問非易失性內(nèi)存完成所述內(nèi)存訪問請求 的訪存操作,并將內(nèi)存訪問請求的結(jié)果返回給內(nèi)存訪問請求發(fā)起者。
[0197] 進(jìn)一步的,一個實(shí)施例中,該內(nèi)存訪問請求的處理方法還包括:
[0198] S1505 :在Tag表中更新數(shù)據(jù)單元塊的訪問信息;
[0199] S1506:根據(jù)數(shù)據(jù)單元塊的訪問信息確定是否將位于非易失性內(nèi)存中的所述數(shù)據(jù) 單元塊遷移到易失性內(nèi)存中,并在遷移后更新Tag表。
[0200] -個實(shí)施例中,訪問信息包括訪問操作次數(shù),步驟S1506包括:
[0201] 將記錄的所述數(shù)據(jù)單元塊的訪問操作次數(shù)與遷移閾值相比較,如果訪問操作次數(shù) 大于等于遷移閾值,則確定需要進(jìn)行遷移;否則不遷移。
[0202] 在確定需要遷移時,執(zhí)行將位于非易失性內(nèi)存中的所述數(shù)據(jù)單元塊遷移到易失性 內(nèi)存中的操作,并在遷移后更新Tag表。
[0203] -個實(shí)施例中,數(shù)據(jù)單元塊為頁面。
[0204] 該實(shí)施例中,實(shí)現(xiàn)對包含易失性內(nèi)存和非易失性內(nèi)存的內(nèi)存系統(tǒng)進(jìn)行管理,可以 分別從易失性內(nèi)存和非易失性內(nèi)存中完成內(nèi)存訪問請求,無需中斷處理,能夠提高內(nèi)存訪 問的速度。
[0205] 本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分流程,是可以 通過計(jì)算機(jī)程序來指令相關(guān)的硬件來完成,所述的程序可存儲于一計(jì)算機(jī)可讀取存儲介質(zhì) 中,該程序在執(zhí)行時,可包括如上述各方法的實(shí)施例的流程。其中,所述的存儲介質(zhì)可為磁 碟、光盤、只讀存儲記憶體(Read-Only Memory, ROM)或隨機(jī)存儲記憶體(Random Access Memory,RAM)等。
[0206] 以上所述僅為本發(fā)明的幾個實(shí)施例,本領(lǐng)域的技術(shù)人員依據(jù)申請文件公開的可以 對本發(fā)明進(jìn)行各種改動或變型而不脫離本發(fā)明的精神和范圍。
【權(quán)利要求】
1. 一種內(nèi)存系統(tǒng),其特征在于,包括: 第一類內(nèi)存和第二類內(nèi)存,分別用于存儲處理器的運(yùn)行數(shù)據(jù),其中第一類內(nèi)存和第二 類內(nèi)存類型不同; 緩沖區(qū),用于存儲內(nèi)存指示表,所述內(nèi)存指示表包含位于第一類內(nèi)存的數(shù)據(jù)單元塊的 訪存地址; 緩沖調(diào)度器,用于接收內(nèi)存控制器發(fā)來的內(nèi)存訪問請求,所述內(nèi)存請求包含訪存地址 和訪存操作;根據(jù)所述訪存地址和內(nèi)存指示表確定所述訪存地址對應(yīng)的數(shù)據(jù)單元塊存儲于 第一類內(nèi)存中還是第二類內(nèi)存中,并對確定的第一類內(nèi)存或第二類內(nèi)存完成所述內(nèi)存訪問 請求的訪存操作,并將所述內(nèi)存訪問請求的訪存操作結(jié)果向所述內(nèi)存控制器返回。
2. 根據(jù)權(quán)利要求1所述的內(nèi)存系統(tǒng),其特征在于,所述緩沖調(diào)度器還用于當(dāng)確定所述 訪存地址對應(yīng)的數(shù)據(jù)單元塊存儲于第二類內(nèi)存時,發(fā)送更新所述數(shù)據(jù)單元塊的訪問信息的 通知;所述內(nèi)存系統(tǒng)還包括: 遷移調(diào)度器,用于接收所述遷移調(diào)度器發(fā)送的通知并更新所述數(shù)據(jù)單元塊的訪問信 息;根據(jù)所述數(shù)據(jù)單元塊的訪問信息,確定是否將第二類內(nèi)存中的數(shù)據(jù)單元塊遷移到所述 第一類內(nèi)存中,并在遷移后更新所述內(nèi)存指示表。
3. 根據(jù)權(quán)利要求1或2所述的內(nèi)存系統(tǒng),其特征在于,所述緩沖調(diào)度器具體用于:確定 所述數(shù)據(jù)單元塊位于第一類內(nèi)存中,則從第一類內(nèi)存中完成所述內(nèi)存訪問請求;確定所述 數(shù)據(jù)單元塊位于第二類內(nèi)存中,則從第二類內(nèi)存中完成所述內(nèi)存訪問請求。
4. 根據(jù)權(quán)利要求1或2所述的內(nèi)存系統(tǒng),其特征在于,所述緩沖調(diào)度器具體用于:確定 所述數(shù)據(jù)單元塊位于第一類內(nèi)存中,則從第一類內(nèi)存中完成所述內(nèi)存訪問請求;確定所述 數(shù)據(jù)單元塊位于第二類內(nèi)存中,則將第二類內(nèi)存中的數(shù)據(jù)單元塊遷移到第一類內(nèi)存中,并 從所述第一類內(nèi)存中完成所述內(nèi)存訪問請求。
5. 根據(jù)權(quán)利要求1-4所述的任一內(nèi)存系統(tǒng),其特征在于,所述緩沖調(diào)度器包括: 解析模塊,用于解析所述內(nèi)存控制器發(fā)送過來的內(nèi)存訪問請求消息包,以提取出所述 內(nèi)存訪問請求,所述內(nèi)存請求包含訪存地址和訪存操作; 第一請求隊(duì)列,用于存儲用于訪問所述第一類內(nèi)存的內(nèi)存訪問請求; 第二請求隊(duì)列,用于存儲用于訪問所述第二類內(nèi)存的內(nèi)存訪問請求; 判斷模塊,用于使用所述訪存地址查詢所述內(nèi)存指示表,判斷內(nèi)存訪問請求訪問的數(shù) 據(jù)單元塊是否在所述第一類內(nèi)存中,如果在所述第一類內(nèi)存中則將該內(nèi)存訪問請求存儲在 所述第一請求隊(duì)列中,否則存儲在所述第二請求隊(duì)列中; 第一返回隊(duì)列,用于存儲第一類內(nèi)存的所述內(nèi)存訪問請求的訪存操作結(jié)果; 第二返回隊(duì)列,用于存儲第二類內(nèi)存的所述內(nèi)存訪問請求的訪存操作結(jié)果; 調(diào)度模塊,用于將第一請求隊(duì)列中的內(nèi)存訪問請求調(diào)度到第一類內(nèi)存中執(zhí)行該內(nèi)存訪 問請求對應(yīng)的訪存操作;將第二請求隊(duì)列中的內(nèi)存訪問請求調(diào)度到第二類內(nèi)存中執(zhí)行該內(nèi) 存訪問請求對應(yīng)的訪存操作;和 打包模塊,用于將多個內(nèi)存訪問請求的的訪存操作結(jié)果打成消息包向所述內(nèi)存控制器 返回。
6. 根據(jù)權(quán)利要求1-5所述的任一內(nèi)存系統(tǒng),其特征在于,所述訪問信息包括訪問操作 次數(shù),所述遷移調(diào)度器包括: 寄存器,用于存放遷移閾值; 遷移判定邏輯模塊,用于將所述訪問操作次數(shù)和遷移閾值進(jìn)行比較,根據(jù)比較結(jié)果確 定是否將第二類內(nèi)存中的數(shù)據(jù)單元塊遷移到第一類內(nèi)存中; 命令緩沖區(qū),用于當(dāng)遷移判定邏輯輸出需要遷移的結(jié)果時,用于存放遷移命令; 數(shù)據(jù)緩沖區(qū),用于緩存遷移命令對應(yīng)的數(shù)據(jù)單元塊在第二類內(nèi)存中的存儲數(shù)據(jù);和 更新模塊,用于更新所述數(shù)據(jù)單元塊對應(yīng)的訪問操作次數(shù),以及當(dāng)遷移判定邏輯輸出 需要遷移的結(jié)果時,更新內(nèi)存指示表。
7. 根據(jù)權(quán)利要求1-6所述的任一內(nèi)存系統(tǒng),其特征在于,所述第一類內(nèi)存為易失性內(nèi) 存模塊;第二類內(nèi)存為非易失性內(nèi)存模塊。
8. 根據(jù)權(quán)利要求1-6所述的任一內(nèi)存系統(tǒng),其特征在于,所述第一類內(nèi)存的訪問速度 比第二類內(nèi)存的訪問速度快。
9. 一種內(nèi)存系統(tǒng),其特征在于,包括: 易失性內(nèi)存和非易失性內(nèi)存,分別用于存儲處理器的運(yùn)行數(shù)據(jù); 緩沖區(qū),用于存儲Tag表,所述Tag表用于指示數(shù)據(jù)單元塊的訪問信息,其包含數(shù)據(jù)單 元塊的訪存地址、內(nèi)存位置和訪存操作的次數(shù);所述內(nèi)存位置表示所述數(shù)據(jù)單元塊存儲于 易失性內(nèi)存中還是非易失性內(nèi)存中; 緩沖調(diào)度器,用于接收內(nèi)存控制器的內(nèi)存訪問請求,所述內(nèi)存請求包含訪存地址和訪 存操作;利用所述訪存地址查詢Tag表,確定所述數(shù)據(jù)單元塊存儲于易失性內(nèi)存中還是非 易失性內(nèi)存中,并從確定的易失性內(nèi)存或非易失性內(nèi)存中完成所述內(nèi)存訪問請求的訪存操 作,將內(nèi)存訪問請求的結(jié)果返回給內(nèi)存控制器。
10. 根據(jù)權(quán)利要求9所述的內(nèi)存系統(tǒng),其特征在于,所述緩沖調(diào)度器還用于發(fā)送更新所 述數(shù)據(jù)單元塊的訪問信息的通知,所述內(nèi)存系統(tǒng)還包括: 遷移調(diào)度器,用于接收所述通知并更新Tag表中所述數(shù)據(jù)單元塊的訪問信息;根據(jù)所 述數(shù)據(jù)單元塊的訪問信息,確定是否將非易失性內(nèi)存的數(shù)據(jù)單元塊遷移到易失性內(nèi)存中, 并在遷移后更新Tag表。
11. 根據(jù)權(quán)利要求9或10所述的內(nèi)存系統(tǒng),其特征在于,所述緩沖調(diào)度器包括: 解析模塊,用于解析內(nèi)存控制器發(fā)送過來的內(nèi)存訪問請求消息包,提取出內(nèi)存訪問請 求; 第一請求隊(duì)列,用于存儲訪問易失性內(nèi)存的內(nèi)存訪問請求; 第二請求隊(duì)列,用于存儲訪問非易失性內(nèi)存的內(nèi)存訪問請求; 判斷模塊,用于使用訪存地址查詢內(nèi)存指示表,判斷每一個內(nèi)存訪問請求訪問的數(shù)據(jù) 單元塊是否在易失性內(nèi)存中,如果在易失性內(nèi)存中則將該內(nèi)存訪問請求存儲在第一請求隊(duì) 列中,否則存儲在第二請求隊(duì)列中;并發(fā)送更新所述數(shù)據(jù)單元塊的訪問信息的通知; 第一返回隊(duì)列,用于存儲易失性內(nèi)存的內(nèi)存訪問請求結(jié)果; 第二返回隊(duì)列,用于存儲非易失性內(nèi)存的內(nèi)存訪問請求結(jié)果; 調(diào)度模塊,用于將第一請求隊(duì)列中的內(nèi)存訪問請求調(diào)度到易失性內(nèi)存中執(zhí)行該內(nèi)存訪 問請求對應(yīng)的訪存操作;將第二請求隊(duì)列中的內(nèi)存訪問請求調(diào)度到非易失性內(nèi)存中執(zhí)行該 內(nèi)存訪問請求對應(yīng)的訪存操作;和 打包模塊,用于將多個內(nèi)存訪問請求的結(jié)果打成消息包返回給內(nèi)存控制器。
12. 根據(jù)權(quán)利要求9-11所述的任一內(nèi)存系統(tǒng),其特征在于,所述訪問信息包括訪問操 作次數(shù),所述遷移調(diào)度器包括: 寄存器,用于存放遷移閾值; 遷移判定邏輯模塊,用于將所述訪問操作次數(shù)和遷移閾值進(jìn)行比較確定是否將非易失 性內(nèi)存中的頁面遷移到易失性內(nèi)存中; 命令緩沖區(qū),當(dāng)遷移判定邏輯輸出需要遷移的結(jié)果時,用于存放遷移命令;和 數(shù)據(jù)緩沖區(qū),用于緩存遷移命令對應(yīng)的數(shù)據(jù)單元塊在非易失性內(nèi)存中的存儲數(shù)據(jù); Tag更新模塊,用于更新所述數(shù)據(jù)單元塊對應(yīng)的訪問操作次數(shù),以及當(dāng)遷移判定邏輯輸 出需要遷移的結(jié)果時,更新內(nèi)存指示表。
13. 根據(jù)權(quán)利要求9-12所述的任一內(nèi)存系統(tǒng),其特征在于,所述易失性內(nèi)存為DRAM (Dynamic Random Access Memory,動態(tài)隨機(jī)存取存儲器),所述非易失性內(nèi)存為NVM (Non-Volatile Memory,非易失性存儲器)。
14. 一種內(nèi)存訪問請求的處理方法,其特征在于,包括: 接收內(nèi)存訪問請求包,從請求包中獲得內(nèi)存訪問請求的訪存地址和訪存操作; 使用內(nèi)存訪問請求的訪存地址查詢內(nèi)存指示表,判斷所述訪問請求對應(yīng)的數(shù)據(jù)單元塊 存儲于第一類內(nèi)存中還是第二類內(nèi)存中,并通知遷移調(diào)度器更新數(shù)據(jù)單元塊的訪問信息; 所述第一類內(nèi)存與第二類內(nèi)存的類型不同; 若所述數(shù)據(jù)單元塊存儲在第一類內(nèi)存中,則從第一類內(nèi)存中完成所述內(nèi)存訪問請求的 訪存操作,并將內(nèi)存訪問請求的結(jié)果返回給內(nèi)存訪問請求發(fā)起者; 若所述數(shù)據(jù)單元塊存儲在第二類內(nèi)存中,則從第二類內(nèi)存中完成所述內(nèi)存訪問請求的 訪存操作,并將內(nèi)存訪問請求的結(jié)果返回給所述內(nèi)存訪問請求的發(fā)起者。
15. 根據(jù)權(quán)利要求14所述的方法,其特征在于,若所述數(shù)據(jù)單元塊存儲在第二類內(nèi)存 中,則從第二類內(nèi)存中完成所述內(nèi)存訪問請求的訪存操作,并將內(nèi)存訪問請求的結(jié)果返回 給內(nèi)存訪問請求發(fā)起者包括: 若數(shù)據(jù)單元塊存儲在第二類內(nèi)存中,將待訪問的數(shù)據(jù)單元塊遷移到第一類內(nèi)存中,再 從第一類內(nèi)存中完成所述內(nèi)存訪問請求的訪存操作,并將內(nèi)存訪問請求的結(jié)果返回給內(nèi)存 訪問請求發(fā)起者。
16. 根據(jù)權(quán)利要求14所述的方法,其特征在于,若所述數(shù)據(jù)單元塊存儲在第二類內(nèi)存 中,則從第二類內(nèi)存中完成所述內(nèi)存訪問請求的訪存操作,并將內(nèi)存訪問請求的結(jié)果返回 給內(nèi)存訪問請求發(fā)起者包括: 若數(shù)據(jù)單元塊在第二類內(nèi)存中,直接訪問第二類內(nèi)存完成所述內(nèi)存訪問請求的訪存操 作,并將內(nèi)存訪問請求的結(jié)果返回給內(nèi)存訪問請求發(fā)起者。
17. 根據(jù)權(quán)利要求14-16所述的任一方法,其特征在于,還包括: 遷移調(diào)度器根據(jù)數(shù)據(jù)單元塊的訪問信息確定是否將位于第二類內(nèi)存中的所述數(shù)據(jù)單 元塊遷移到第一類內(nèi)存中。
18. 根據(jù)權(quán)利要求17所述的方法,其特征在于,所述訪問信息包括訪問操作次數(shù),遷移 調(diào)度器根據(jù)數(shù)據(jù)單元塊的訪問信息確定是否將位于第二類內(nèi)存中的所述數(shù)據(jù)單元塊遷移 到第一類內(nèi)存中包括: 遷移調(diào)度器將記錄的所述數(shù)據(jù)單元塊的訪問操作次數(shù)與遷移閾值相比較,如果訪問操 作次數(shù)大于等于遷移閾值,則確定需要進(jìn)行遷移;否則不遷移。
19. 根據(jù)權(quán)利要求18所述的方法,其特征在于,還包括: 所述遷移調(diào)度器在確定需要進(jìn)行遷移時更新內(nèi)存指示表信息。
20. -種內(nèi)存訪問請求的處理方法,其特征在于,包括: 接收內(nèi)存訪問請求包,從請求包中獲得內(nèi)存訪問請求的訪存地址和訪存操作; 使用內(nèi)存訪問請求的訪存地址查詢Tag表,判斷所述訪問請求的對應(yīng)的數(shù)據(jù)單元塊存 儲于易失性內(nèi)存中還是非易失性內(nèi)存中;所述Tag表用于指示數(shù)據(jù)單元塊的訪問信息,其 包含數(shù)據(jù)單元塊的訪存地址、內(nèi)存位置和訪存操作的次數(shù);所述內(nèi)存位置表示所述數(shù)據(jù)單 元塊存儲于易失性內(nèi)存中還是非易失性內(nèi)存中; 若所述數(shù)據(jù)單元塊存儲在易失性內(nèi)存中,則從易失性內(nèi)存中完成所述內(nèi)存訪問請求的 訪存操作,并將內(nèi)存訪問請求的結(jié)果返回給內(nèi)存訪問請求發(fā)起者; 若所述數(shù)據(jù)單元塊存儲在非易失性內(nèi)存中,則從非易失性內(nèi)存中完成所述內(nèi)存訪問請 求的訪存操作,并將內(nèi)存訪問請求的結(jié)果返回給內(nèi)存訪問請求發(fā)起者。
21. 根據(jù)權(quán)利要求20所述的方法,其特征在于,若所述數(shù)據(jù)單元塊存儲在非易失性內(nèi) 存中,則從非易失性內(nèi)存中完成所述內(nèi)存訪問請求的訪存操作,并將內(nèi)存訪問請求的結(jié)果 返回給內(nèi)存訪問請求發(fā)起者包括: 若數(shù)據(jù)單元塊存儲在非易失性內(nèi)存中,將待訪問的數(shù)據(jù)單元塊遷移到易失性內(nèi)存中, 再從易失性內(nèi)存中完成所述內(nèi)存訪問請求的訪存操作,并將內(nèi)存訪問請求的結(jié)果返回給內(nèi) 存訪問請求發(fā)起者。
22. 根據(jù)權(quán)利要求20所述的方法,其特征在于,若所述數(shù)據(jù)單元塊存儲在非易失性內(nèi) 存中,則從非易失性內(nèi)存中完成所述內(nèi)存訪問請求的訪存操作,并將內(nèi)存訪問請求的結(jié)果 返回給內(nèi)存訪問請求發(fā)起者包括: 若數(shù)據(jù)單元塊在非易失性內(nèi)存中,直接訪問非易失性內(nèi)存完成所述內(nèi)存訪問請求的訪 存操作,并將內(nèi)存訪問請求的結(jié)果返回給內(nèi)存訪問請求發(fā)起者。
23. 根據(jù)權(quán)利要求20-22所述的任一方法,其特征在于,所述訪問信息包括訪問操作次 數(shù),根據(jù)數(shù)據(jù)單元塊的訪問信息確定是否將位于非易失性內(nèi)存中的所述數(shù)據(jù)單元塊遷移到 易失性內(nèi)存中包括: 將記錄的所述數(shù)據(jù)單元塊的訪問操作次數(shù)與遷移閾值相比較,如果訪問操作次數(shù)大于 等于遷移閾值,則確定需要進(jìn)行遷移;否則不遷移。
24. 根據(jù)權(quán)利要求20-23所述的任一方法,其特征在于,還包括: 在Tag表中更新所述數(shù)據(jù)單元塊的訪問信息; 根據(jù)數(shù)據(jù)單元塊的訪問信息,確定是否將位于非易失性內(nèi)存中的所述數(shù)據(jù)單元塊遷移 到易失性內(nèi)存中,并在遷移后更新Tag表。
25. -種計(jì)算機(jī)系統(tǒng),其特征在于,包括: 多核處理器,包括內(nèi)存控制器,用于發(fā)起內(nèi)存訪問請求;和 根據(jù)權(quán)利要求1至13任一項(xiàng)所述的內(nèi)存系統(tǒng)。
【文檔編號】G06F13/16GK104216837SQ201310213533
【公開日】2014年12月17日 申請日期:2013年5月31日 優(yōu)先權(quán)日:2013年5月31日
【發(fā)明者】陳荔城, 張立新, 陳明宇 申請人:華為技術(shù)有限公司, 中國科學(xué)院計(jì)算技術(shù)研究所