本發(fā)明涉及存儲(chǔ)器設(shè)計(jì)技術(shù)領(lǐng)域,特別涉及一種面向近似應(yīng)用的低開銷dram刷新方法及系統(tǒng)。
背景技術(shù):
當(dāng)前處理器系統(tǒng)的很大一部分功耗都由dram主存儲(chǔ)器產(chǎn)生,而且該趨勢(shì)還在愈演愈烈。近期有研究表明,現(xiàn)代服務(wù)器系統(tǒng)中,主存系統(tǒng)產(chǎn)生的功耗占據(jù)了多達(dá)30~40%的比例,而主存功耗可以分為內(nèi)存控制器功耗、背景功耗和動(dòng)態(tài)功耗,背景功耗的產(chǎn)生和訪存活動(dòng)無(wú)關(guān),它主要來(lái)源于主存外圍電路,晶體管漏電以及刷新功耗,其中刷新功耗是由dram存儲(chǔ)單元電容漏電導(dǎo)致的,dram控制器必須通過(guò)周期性的刷新操作補(bǔ)償電容漏電電荷,從而保正存儲(chǔ)數(shù)據(jù)的正確性。bhati等人的研究表明,超過(guò)20%的主存功耗是由dram的刷新操作產(chǎn)生的,因此,減少dram主存的刷新功耗對(duì)于系統(tǒng)能效優(yōu)化非常重要。
盡管jedec規(guī)定了64ms的刷新間隔標(biāo)準(zhǔn),但是實(shí)際研究表明,99%的dram單元保持時(shí)間能夠達(dá)到將近10s,如圖1所示,因此,傳統(tǒng)內(nèi)存系統(tǒng)的刷新機(jī)制還有很大的設(shè)計(jì)空間。
近似計(jì)算作為一種降低能耗的思路越來(lái)越多地受到重視,特別是當(dāng)前移動(dòng)和嵌入式設(shè)備的興起,很多計(jì)算任務(wù)如媒體處理(視頻、音頻和圖像等)、識(shí)別以及數(shù)據(jù)挖掘等并不要求計(jì)算結(jié)果完全正確,擁有著一定程度的差錯(cuò)容忍能力,然而,傳統(tǒng)的內(nèi)存系統(tǒng)所表現(xiàn)出來(lái)的“長(zhǎng)尾效應(yīng)”即將99%的努力花費(fèi)在了消除1%的差錯(cuò)率上是對(duì)能耗的極大浪費(fèi)。
在dram中,對(duì)存儲(chǔ)單元的讀寫操作可以代替刷新操作,如果對(duì)同一個(gè)地址單元的連續(xù)兩次讀寫時(shí)間間隔小于該單元的保持時(shí)間,就意味著該單元可以不進(jìn)行刷新操作,從而節(jié)省刷新功耗,典型近似計(jì)算應(yīng)用例如多媒體、游戲、音視頻,只有一小部分與程序控制流相關(guān)的數(shù)據(jù)對(duì)程序執(zhí)行的正確性起到關(guān)鍵性作用,這部分?jǐn)?shù)據(jù)被稱為關(guān)鍵數(shù)據(jù),這部分?jǐn)?shù)據(jù)中發(fā)生的保持時(shí)間故障對(duì)輸出正確性影響很大,而其他的大量數(shù)據(jù)集,對(duì)包含保持時(shí)間故障在內(nèi)的故障并不敏感,這一部分?jǐn)?shù)據(jù)通常被稱為非關(guān)鍵數(shù)據(jù),因此為了盡量減少存儲(chǔ)器的刷新操作,可以利用近似計(jì)算中非關(guān)鍵數(shù)據(jù)的訪存模式對(duì)其在dram中的存儲(chǔ)進(jìn)行重映射,因此,結(jié)合dram存儲(chǔ)器中保持時(shí)間偏差的分布,通過(guò)合理的數(shù)據(jù)重映射,可以在不影響應(yīng)用用戶體驗(yàn)的前提下,減少數(shù)據(jù)刷新操作,降低刷新功耗。
以下為現(xiàn)有技術(shù),如下所示:
smartrefresh:由于內(nèi)存單元存儲(chǔ)數(shù)據(jù)的電容電荷的不斷流失,內(nèi)存單元每隔一段時(shí)間就要進(jìn)行刷新以防止電荷流失過(guò)度造成數(shù)據(jù)錯(cuò)誤,jedec制定了dram每隔64ms刷新一次的標(biāo)準(zhǔn),當(dāng)前的內(nèi)存芯片遵循了這一標(biāo)準(zhǔn),在dram內(nèi)存控制器中設(shè)置了計(jì)數(shù)器,當(dāng)計(jì)數(shù)器遞減為零時(shí)表明已經(jīng)過(guò)64ms時(shí)間,內(nèi)存控制器將會(huì)重置計(jì)數(shù)器并發(fā)送刷新命令,如圖2所示行刷新(rowrefresh)命令是固定發(fā)送的。
為保證數(shù)據(jù)正確的刷新操作,本質(zhì)上則是對(duì)dram單元的讀出和重新寫回以恢復(fù)存儲(chǔ)電容的電荷水平,而對(duì)內(nèi)存的讀出和寫入操作本身就會(huì)將對(duì)應(yīng)內(nèi)存行單元的數(shù)據(jù)進(jìn)行刷新,因此在訪存操作之后的刷新操作是可以避免的,圖2行訪問(rowaccess)所示是smartrefresh最好情況,在每個(gè)行rk的刷新命令發(fā)送之前,該行均收到了訪存請(qǐng)求ak,因此所有訪存之后的刷新操作均可以取消從而節(jié)省能耗。
smartrefresh的基本思路是為bank中的每行設(shè)置一個(gè)2比特或3比特大小的關(guān)聯(lián)計(jì)數(shù)器,計(jì)數(shù)器的值都在內(nèi)存控制器中進(jìn)行存儲(chǔ)和更新,在一個(gè)刷新間隔內(nèi)計(jì)數(shù)器的值將從最大值遞減到零,并且當(dāng)內(nèi)存行被讀寫時(shí)相應(yīng)計(jì)數(shù)器的值要重置到最大值重新開始遞減,內(nèi)存控制器只會(huì)對(duì)計(jì)數(shù)器為零的內(nèi)存行進(jìn)行刷新,如果計(jì)數(shù)器的值遞減到零,此時(shí)意味該內(nèi)存行必須要被刷新,因此訪存操作通過(guò)引發(fā)計(jì)數(shù)器重置而將刷新操作推遲,最好情況如圖2所示,內(nèi)存中不會(huì)有刷新命令產(chǎn)生。
圖3所示探討了smartrefresh工作機(jī)制,如,圖3中(a)圖所示,使用2-bit大小的計(jì)數(shù)器,并且刷新間隔為64ms,假設(shè)整個(gè)過(guò)程中,沒有任何程序?qū)ram發(fā)起訪存請(qǐng)求,內(nèi)存控制器將會(huì)自動(dòng)更新計(jì)數(shù)器的值,每隔16ms將其遞減,當(dāng)計(jì)數(shù)器遞減為零時(shí),相應(yīng)內(nèi)存行需要被刷新,此時(shí)所有內(nèi)存行的計(jì)數(shù)器值都為零,內(nèi)存控制器需要對(duì)所有行進(jìn)行刷新,由于刷新命令無(wú)法并行執(zhí)行,因此此時(shí)內(nèi)存系統(tǒng)的性能將會(huì)受到嚴(yán)重的影響,圖3中(b)圖中計(jì)數(shù)器的值初始化時(shí)從0到3交錯(cuò)排列,可以一定程度上避免大量?jī)?nèi)存行同時(shí)需要被刷新的情況,然而這樣的方案還是有一些問題,首先,將計(jì)數(shù)器隨機(jī)初始化意味著每次都會(huì)有1/4的內(nèi)存行需要被刷新,甚至是剛開始初始化時(shí)就有1/4的計(jì)數(shù)器值為0,其次,在運(yùn)行過(guò)程中,由于訪存的讀寫請(qǐng)求會(huì)將寄存器重置成最大值,因此會(huì)有可能面臨圖3中(a)圖所示的情形。
為了解決以上問題,smartrefresh采取了將計(jì)數(shù)器初始值和遞減操作同時(shí)錯(cuò)開的思路,如圖3中(b)圖中將內(nèi)存行分為n組(n的大小取決于內(nèi)存刷新隊(duì)列的大小,圖中n=4,每組包含16個(gè)內(nèi)存行的計(jì)數(shù)器),原來(lái)的方案在0ms、16ms、32ms和48ms更新計(jì)數(shù)器,當(dāng)前方案則是將之前的每次更新進(jìn)一步分散,如原來(lái)在0ms時(shí)刻的計(jì)數(shù)器更新對(duì)應(yīng):
在0ms更新所有4個(gè)分組中第1個(gè)內(nèi)存行的計(jì)數(shù)器,
在1ms更新所有4個(gè)分組中第2個(gè)內(nèi)存行的計(jì)數(shù)器,
……
在15ms更新所有4個(gè)分組中第16個(gè)內(nèi)存行的計(jì)數(shù)器。
上述方案的本質(zhì)是將更新計(jì)數(shù)器的時(shí)間間隔粒度變小,從而將更新操作分散,同時(shí)需要刷新的行數(shù)目也相應(yīng)減少,如圖3所示每1ms都會(huì)有n個(gè)內(nèi)存行需要刷新,而n是根據(jù)dram內(nèi)存控制器的刷新命令請(qǐng)求隊(duì)列的大小設(shè)置的,因此避免了大量刷新操作阻塞正常請(qǐng)求造成的性能下降。
flikker:flikker技術(shù)基于應(yīng)用本身對(duì)差錯(cuò)的容忍性,將應(yīng)用數(shù)據(jù)中對(duì)差錯(cuò)具有容忍能力的非關(guān)鍵數(shù)據(jù)分離出來(lái)并進(jìn)行低頻刷新從而降低功耗,flikker通過(guò)軟件和硬件結(jié)合完成非關(guān)鍵數(shù)據(jù)的低頻刷新。
硬件方面,flikker將每個(gè)drambank分成為了保證關(guān)鍵數(shù)據(jù)正確的正常刷新區(qū)域和為節(jié)省功耗針對(duì)非關(guān)鍵數(shù)據(jù)的低頻刷新區(qū)域,如圖4所示。
軟件方面主要分為以下步驟,首先程序員在編寫應(yīng)用時(shí)需要對(duì)關(guān)鍵數(shù)據(jù)進(jìn)行標(biāo)注;其次,在程序運(yùn)行過(guò)程中系統(tǒng)需要將關(guān)鍵數(shù)據(jù)和非關(guān)鍵數(shù)據(jù)分別存儲(chǔ)到內(nèi)存中的正常刷新區(qū)域和低頻刷新區(qū)域;然后操作系統(tǒng)配置自主刷新計(jì)數(shù)器并將dram切換自主刷新模式(在移動(dòng)操作系統(tǒng)中,處理器為節(jié)省功耗進(jìn)入休眠時(shí)操作系統(tǒng)將刷新控制權(quán)交給dram自身的機(jī)制);最后,自主刷新控制器根據(jù)操作系統(tǒng)配置參數(shù)對(duì)dram不同區(qū)域分別進(jìn)行不同頻率的刷新。軟件方面需要對(duì)應(yīng)用程序源碼、運(yùn)行時(shí)系統(tǒng)和操作系統(tǒng)進(jìn)行修改以協(xié)同工作,具體如圖5所示。
針對(duì)近似計(jì)算應(yīng)用的動(dòng)態(tài)存儲(chǔ)器dram刷新控制優(yōu)化方法,國(guó)內(nèi)外的研究成果較少,現(xiàn)有的研究成果主要存在以下問題:第一,如何在降低刷新頻率減少刷新操作的前提下,保證計(jì)算機(jī)應(yīng)用的正確運(yùn)行并保證其服務(wù)質(zhì)量;第二,如何設(shè)計(jì)動(dòng)態(tài)存儲(chǔ)器的dram不同地址區(qū)塊的刷新頻率,最小化刷新開銷;第三,無(wú)法通過(guò)數(shù)據(jù)地址與存儲(chǔ)器地址空間的一一匹配,結(jié)合內(nèi)存地址分配,最小化刷新次數(shù)。以上三點(diǎn)直接導(dǎo)致現(xiàn)有的成果有三大缺陷:第一,刷新頻率過(guò)高,不能充分利用近似應(yīng)用的容錯(cuò)能力;第二,刷新方案不可靠,導(dǎo)致應(yīng)用出現(xiàn)錯(cuò)誤或影響輸出質(zhì)量;第三,較高的面積與功耗開銷。
以下為現(xiàn)有技術(shù)中存在的技術(shù)問題,如下所示:
smartrefresh:1)smartrefresh為每一個(gè)edram(embeddeddram)行引入一個(gè)計(jì)時(shí)器,通過(guò)為每一個(gè)edram行記錄其上一次刷新/訪問時(shí)間戳,避免對(duì)edram行的多余刷新,但是該方法主要針對(duì)于片上edram,對(duì)于大容量的dram存儲(chǔ)器,則引入的計(jì)數(shù)器開銷過(guò)大;2)smartrefresh平均能夠節(jié)省52.6%的刷新功耗,而本發(fā)明可以節(jié)省99%以上的刷新功耗。
flikker:flikker需要程序員標(biāo)記非關(guān)鍵數(shù)據(jù),并結(jié)合編譯器操作系統(tǒng)等協(xié)同工作,技術(shù)過(guò)于復(fù)雜,應(yīng)用難度較大。flikker對(duì)非關(guān)鍵數(shù)據(jù)降低刷新率,在dram中設(shè)置地刷新率區(qū)域,節(jié)省刷新功耗有限,本技術(shù)幾乎可以節(jié)省絕大部分刷新功耗。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)現(xiàn)有技術(shù)的不足,本發(fā)明提出一種面向近似應(yīng)用的低開銷dram刷新方法及系統(tǒng)。
本發(fā)明提出一種面向近似應(yīng)用的低開銷dram刷新方法,包括:
靜態(tài)匹配映射步驟,離線獲取應(yīng)用的全局訪存信息,分析所述全局訪存信息中每個(gè)內(nèi)存行的最大重用距離,將每個(gè)內(nèi)存行中的內(nèi)容遷移到保存時(shí)間大于所述最大重用距離的內(nèi)存行中;
動(dòng)態(tài)閾值調(diào)整步驟,每隔一段時(shí)間,周期性的根據(jù)歷史映射結(jié)果預(yù)測(cè)每個(gè)映射周期的最大重用距離,并在dram保持時(shí)間分布中匹配相應(yīng)的內(nèi)存行。
所述靜態(tài)匹配映射步驟包括
(1)所述全局訪存信息包括:訪存地址,訪存類型,時(shí)間戳,并形成集合d,集合d中的每個(gè)元素為一個(gè)二元組(pi,tij),
(2)對(duì)于dram的保持時(shí)間分布信息,通過(guò)集合r表示,其中每個(gè)元素為一個(gè)二元組(rk,rtk),
(3)為了給集合v中的每個(gè)pi在集合r中找到相應(yīng)的內(nèi)存行rk,對(duì)于某個(gè)頁(yè)pi有集合(pi,vij),
所述動(dòng)態(tài)閾值調(diào)整步驟包括:
1.在每個(gè)映射周期結(jié)束時(shí),預(yù)測(cè)頁(yè)面的閾值,其中獲取頁(yè)面當(dāng)前映射周期的最大重用距離,評(píng)估上次映射周期預(yù)測(cè)的閾值錯(cuò)誤率;
2.根據(jù)所述閾值,在所有保持時(shí)間大于所述閾值的內(nèi)存行中,找出未分配并且保持時(shí)間最小的內(nèi)存行;
3.將頁(yè)面與所述保持時(shí)間最小的內(nèi)存行進(jìn)行匹配。
4.如權(quán)利要求1所述的面向近似應(yīng)用的低開銷dram刷新方法,其特征在于,還包括對(duì)所述動(dòng)態(tài)閾值調(diào)整步驟進(jìn)行差錯(cuò)控制。
所述差錯(cuò)控制具體包括:首先設(shè)置差錯(cuò)控制水平e,在每個(gè)控制周期中,統(tǒng)計(jì)所有頁(yè)的錯(cuò)誤率,假定當(dāng)前為第k個(gè)控制周期tk,則頁(yè)i的錯(cuò)誤率為eik。在tk結(jié)束時(shí),遍歷評(píng)估所有頁(yè)的統(tǒng)計(jì)信息決定是否遷移,其中對(duì)于頁(yè)i,首先計(jì)算其在當(dāng)前時(shí)間片段的相對(duì)錯(cuò)誤率為reik=eik-e,然后獲取控制權(quán)重值,如下
cwik=p*reik+i*(reik+rei(k-1))+d*(reik-rei(k-1))
根據(jù)控制權(quán)重值cwik的大小決定頁(yè)i是否被遷移。
本發(fā)明還提出一種面向近似應(yīng)用的低開銷dram刷新系統(tǒng),包括:
靜態(tài)匹配映射模塊,用于離線獲取應(yīng)用的全局訪存信息,分析所述全局訪存信息中每個(gè)內(nèi)存行的最大重用距離,將每個(gè)內(nèi)存行中的內(nèi)容遷移到保存時(shí)間大于所述最大重用距離的內(nèi)存行中;
動(dòng)態(tài)閾值調(diào)整模塊,用于每隔一段時(shí)間,周期性的根據(jù)歷史映射結(jié)果預(yù)測(cè)每個(gè)映射周期的最大重用距離,并在dram保持時(shí)間分布中匹配相應(yīng)的內(nèi)存行。
所述靜態(tài)匹配映射模塊包括
(1)所述全局訪存信息包括:訪存地址,訪存類型,時(shí)間戳,并形成集合d,集合d中的每個(gè)元素為一個(gè)二元組(pi,tij),
(2)對(duì)于dram的保持時(shí)間分布信息,通過(guò)集合r表示,其中每個(gè)元素為一個(gè)二元組(rk,rtk),
(3)為了給集合v中的每個(gè)pi在集合r中找到相應(yīng)的內(nèi)存行rk,對(duì)于某個(gè)頁(yè)pi有集合(pi,vij),
所述動(dòng)態(tài)閾值調(diào)整模塊包括:
1.在每個(gè)映射周期結(jié)束時(shí),預(yù)測(cè)頁(yè)面的閾值,其中獲取頁(yè)面當(dāng)前映射周期的最大重用距離,評(píng)估上次映射周期預(yù)測(cè)的閾值錯(cuò)誤率;
2.根據(jù)所述閾值,在所有保持時(shí)間大于所述閾值的內(nèi)存行中,找出未分配并且保持時(shí)間最小的內(nèi)存行;
3.將頁(yè)面與所述保持時(shí)間最小的內(nèi)存行進(jìn)行匹配。
還包括對(duì)所述動(dòng)態(tài)閾值調(diào)整步驟進(jìn)行差錯(cuò)控制。
所述差錯(cuò)控制具體包括:首先設(shè)置差錯(cuò)控制水平e,在每個(gè)控制周期中,統(tǒng)計(jì)所有頁(yè)的錯(cuò)誤率,假定當(dāng)前為第k個(gè)控制周期tk,則頁(yè)i的錯(cuò)誤率為eik。在tk結(jié)束時(shí),遍歷評(píng)估所有頁(yè)的統(tǒng)計(jì)信息決定是否遷移,其中對(duì)于頁(yè)i,首先計(jì)算其在當(dāng)前時(shí)間片段的相對(duì)錯(cuò)誤率為reik=eik-e,然后獲取控制權(quán)重值,如下
cwik=p*reik+i*(reik+rei(k-1))+d*(reik-rei(k-1))
根據(jù)控制權(quán)重值cwik的大小決定頁(yè)i是否被遷移。
由以上方案可知,本發(fā)明的優(yōu)點(diǎn)在于:
本發(fā)明在進(jìn)行程序數(shù)據(jù)在內(nèi)存中存儲(chǔ)的映射和遷移之后,靜態(tài)匹配映射方法的錯(cuò)誤率幾乎為零,動(dòng)態(tài)匹配映射方法的錯(cuò)誤率可以控制在0.7%以內(nèi),兩種方法均能夠?qū)⒃兴⑿履芎墓?jié)省99%以上。
附圖說(shuō)明
圖1是dram保持時(shí)間分布圖;
圖2是smartrefresh示意圖;
圖3是smartrefresh計(jì)數(shù)器工作機(jī)制圖;
圖4是flikkerdrambank結(jié)構(gòu)圖;
圖5是flikker系統(tǒng)框架圖;
圖6是考慮差錯(cuò)容忍特性的dram刷新控制方法總體思路圖;
圖7是基于靜態(tài)/動(dòng)態(tài)匹配映射的dram刷新控制方法總體結(jié)構(gòu)圖;
圖8是pid差錯(cuò)控制器結(jié)構(gòu)圖。
具體實(shí)施方式
發(fā)明人在進(jìn)行基于差錯(cuò)容忍的dram刷新控制研究時(shí)發(fā)現(xiàn),dram的讀寫請(qǐng)求本身就會(huì)對(duì)被訪存單元進(jìn)行刷新,基于以上觀察,發(fā)明人嘗試?yán)米x寫請(qǐng)求代替刷新操作,提出靜態(tài)、動(dòng)態(tài)匹配映射方法將應(yīng)用訪問內(nèi)存的間隔(重用距離)和dram的保持時(shí)間分布進(jìn)行匹配,最終達(dá)到減少甚至消除刷新的目的,此時(shí)dram成為“非易失性”設(shè)備,即nv-dram。由于動(dòng)態(tài)匹配映射無(wú)法保證匹配后的所有內(nèi)存行在發(fā)生保持時(shí)間故障之前都會(huì)被訪存,因此會(huì)出現(xiàn)一定的差錯(cuò)率,傳統(tǒng)的應(yīng)用會(huì)因?yàn)闆]有容忍能力最終導(dǎo)致程序崩潰或結(jié)果錯(cuò)誤,近年來(lái),隨著近似計(jì)算以及大數(shù)據(jù)的出現(xiàn),應(yīng)用對(duì)于輸出質(zhì)量并不要求完全正確,而只需要控制差錯(cuò)在一定范圍內(nèi),因此為讀寫請(qǐng)求代替刷新操作的思路提供了可能性,同時(shí),為了確保匹配映射方法的差錯(cuò)率在可控范圍內(nèi),發(fā)明人提出了基于工業(yè)控制理論的pid差錯(cuò)控制器。
對(duì)于一個(gè)正在運(yùn)行的應(yīng)用而言,能夠搜集到其歷史訪存信息,經(jīng)過(guò)簡(jiǎn)單的處理得到該應(yīng)用的重用距離信息(連續(xù)兩次訪問同一內(nèi)存行的時(shí)間間隔),同時(shí)可以離線獲取dram不同行的保持時(shí)間分布信息,經(jīng)過(guò)靜態(tài)、動(dòng)態(tài)匹配映射方法,將重用距離和保持時(shí)間分布進(jìn)行匹配,即將訪問間隔為t的內(nèi)存行所存儲(chǔ)的內(nèi)容遷移到保持時(shí)間大于t的內(nèi)存行進(jìn)行保存,由于dram的讀寫操作均可以認(rèn)為是對(duì)被讀寫行單元的刷新,因此在匹配之后,正常的讀寫操作取代了原有刷新機(jī)制,在完成讀寫請(qǐng)求的同時(shí)保證了數(shù)據(jù)的正確性,原有刷新機(jī)制的能耗也將會(huì)相應(yīng)消失,如圖6所示整個(gè)系統(tǒng)的輸入對(duì)應(yīng)重用距離和保持時(shí)間分布,經(jīng)過(guò)靜態(tài)、動(dòng)態(tài)匹配映射方法,最終給出匹配映射結(jié)果指導(dǎo)應(yīng)用在內(nèi)存中的存儲(chǔ)。
圖7所示分別是基于靜態(tài)匹配映射和動(dòng)態(tài)匹配映射的dram刷新控制結(jié)構(gòu)圖,基于靜態(tài)匹配映射的dram刷新控制結(jié)構(gòu)的主要部件是smp(staticmapping)單元,其作用是通過(guò)離線獲取的應(yīng)用訪存信息memorytrace和dram保持時(shí)間分布retentiontime在程序運(yùn)行前給出其運(yùn)行過(guò)程中數(shù)據(jù)在dram中存儲(chǔ)的映射方案,如,圖7中(a)圖所示,圖7中(b)圖中基于動(dòng)態(tài)匹配映射的dram刷新控制結(jié)構(gòu)主要有三個(gè)部件,分別是dtp(dynamicthresholdmapping)、pid-ec以及遷移頁(yè)/修改頁(yè)表。dtp即動(dòng)態(tài)閾值調(diào)整方法,其作用是結(jié)合應(yīng)用運(yùn)行過(guò)程中搜集的訪存信息訪存trace及以往的匹配映射效果(即圖7中的錯(cuò)誤率統(tǒng)計(jì)單元)動(dòng)態(tài)地調(diào)整匹配映射結(jié)果,每當(dāng)dtp給出匹配映射結(jié)果時(shí),migration單元?jiǎng)t要將對(duì)應(yīng)的內(nèi)容遷移到被匹配的行中去,進(jìn)一步通過(guò)修改頁(yè)表,從而保證操作系統(tǒng)能夠通過(guò)原有的虛擬頁(yè)地址找到遷移后的內(nèi)存物理地址。pid-ec(piderrorcontrollor)即pid差錯(cuò)控制器,借鑒了工業(yè)界廣泛使用的控制理論,pid-ec的目的是找出匹配映射過(guò)程中差錯(cuò)率較高的頁(yè),再通過(guò)遷移頁(yè)單元將差錯(cuò)率較高的頁(yè)遷移到正常刷新的區(qū)域,從而降低錯(cuò)誤率并且保證應(yīng)用輸出質(zhì)量。
以下為本發(fā)明的實(shí)施例,如下所示:
1.基于靜態(tài)匹配映射的dram刷新控制方法
對(duì)于嵌入式等沒有虛擬內(nèi)存并且線性地址空間和物理地址空間的對(duì)應(yīng)關(guān)系固定的系統(tǒng)中,由于運(yùn)行的應(yīng)用相對(duì)固定,應(yīng)用的訪存模式也具有很大的確定性,因此匹配映射的思路相對(duì)簡(jiǎn)單。首先離線獲取應(yīng)用的全局訪存trace,分析每個(gè)內(nèi)存行的最大重用距離,將每個(gè)內(nèi)存行匹配到保持時(shí)間大于最大重用距離的dram行中。
靜態(tài)匹配映射方法分為profiling和mapping兩個(gè)階段。profiling階段我們首先需要離線運(yùn)行目標(biāo)應(yīng)用并搜集其訪存trace,進(jìn)一步處理得到重用距離信息,其次要獲取dram保持時(shí)間分布;mapping階段將應(yīng)用的重用距離信息和dram保持時(shí)間分布進(jìn)行匹配。
a.profiling前期程序分析階段
(1)應(yīng)用重用距離信息。假設(shè)每次訪問的trace格式(即全局訪存信息)為:訪存地址,訪存類型(讀/寫),時(shí)間戳。那么離線搜集的應(yīng)用訪存trace為集合d,集合中的每個(gè)元素為一個(gè)二元組(pi,tij),
(2)dram保持時(shí)間分布。對(duì)于dram的保持時(shí)間分布信息,我們通過(guò)集合r表示,其中的每個(gè)元素為一個(gè)二元組(rk,rtk),
b.mapping存儲(chǔ)對(duì)象映射階段
靜態(tài)匹配映射方法的思路是,為集合v中的每個(gè)頁(yè)pi在集合r中找到合適的內(nèi)存行rk,進(jìn)行匹配,最終指導(dǎo)程序在運(yùn)行過(guò)程中對(duì)應(yīng)數(shù)據(jù)的存儲(chǔ),以達(dá)到“無(wú)刷新”的目的。
為了給集合v中的每個(gè)頁(yè)pi在集合r中找到合適的內(nèi)存行rk,對(duì)于某個(gè)頁(yè)pi有集合(pi,vij),
為了避免某個(gè)頁(yè)pi的最大重用距離maxv遠(yuǎn)遠(yuǎn)大于其它重用距離導(dǎo)致匹配效果變差,因此在找出maxv之后首先會(huì)對(duì)其合理性進(jìn)行判斷,如果不合理就會(huì)丟棄并重新搜索最大重用距離。盡管這會(huì)導(dǎo)致部分錯(cuò)誤,但是由于近似計(jì)算應(yīng)用擁有一定的差錯(cuò)容忍能力,因此對(duì)應(yīng)用輸出質(zhì)量不會(huì)有本質(zhì)的影響。
2.基于動(dòng)態(tài)匹配映射的dram刷新控制方法
(1).動(dòng)態(tài)閾值調(diào)整
在靜態(tài)匹配映射方法中,首先找出頁(yè)面的最大重用距離,然后將該頁(yè)匹配到dram中保持時(shí)間大于該頁(yè)面最大重用距離的內(nèi)存行,就能夠保證頁(yè)面的讀寫操作在保持時(shí)間故障發(fā)生前刷新內(nèi)存單元,原有的刷新操作可以完全消除。相應(yīng)的,在動(dòng)態(tài)匹配映射的每個(gè)映射周期如何預(yù)測(cè)隨后映射周期內(nèi)的最大重用距離,并在dram保持時(shí)間分布中匹配合適的內(nèi)存行就成為關(guān)鍵問題,這個(gè)預(yù)測(cè)的最大重用距離稱為閾值。
基于動(dòng)態(tài)閾值調(diào)整的匹配映射主要分為以下幾個(gè)步驟:
(以單個(gè)頁(yè)面的匹配映射流程進(jìn)行說(shuō)明,實(shí)際運(yùn)行過(guò)程中,需要對(duì)每個(gè)訪問到的頁(yè)面遍歷重復(fù)以下映射過(guò)程)
1.在每個(gè)映射周期結(jié)束時(shí),預(yù)測(cè)出頁(yè)面的閾值。具體包括獲取該頁(yè)面當(dāng)前映射周期的最大重用距離,評(píng)估上次映射周期預(yù)測(cè)的閾值錯(cuò)誤率(匹配失效的次數(shù)占總訪問次數(shù)的比例),結(jié)合以上信息分析預(yù)測(cè)頁(yè)面的閾值。
2.利用上一步中得到的閾值,在所有保持時(shí)間大于閾值的內(nèi)存行中,找出未分配并且保持時(shí)間最小的內(nèi)存行。
3.將該頁(yè)面和以上找到的內(nèi)存行進(jìn)行匹配。具體做法是:首先將該虛擬頁(yè)對(duì)應(yīng)的物理地址的數(shù)據(jù)遷移到匹配后的物理地址中去,然后修改頁(yè)表使得原有虛擬頁(yè)地址映射到新的物理地址以保證程序正常運(yùn)行。
假設(shè)每次訪問的trace格式為:訪存地址,訪存類型(讀/寫),時(shí)間戳。我們每隔一段時(shí)間tslot(稱為映射周期)統(tǒng)計(jì)當(dāng)前映射周期內(nèi)的程序訪存信息,評(píng)估映射的匹配效果,然后預(yù)測(cè)每個(gè)頁(yè)的重用距離閾值走勢(shì)從而進(jìn)行匹配。假定在時(shí)刻t(t=n*tslot,n=1,2…),搜集到的應(yīng)用訪存trace為集合t,集合中的每個(gè)元素為一個(gè)二元組(pi,tij),
動(dòng)態(tài)匹配映射的思路是,根據(jù)當(dāng)前時(shí)間段tslot的統(tǒng)計(jì)信息,為每個(gè)頁(yè)pi在集合r中匹配相應(yīng)的內(nèi)存行rk,而在匹配的過(guò)程中,根據(jù)當(dāng)前映射周期和上一映射周期閾值效果的變化趨勢(shì)進(jìn)行預(yù)測(cè),最終給出內(nèi)存映射指導(dǎo)信息。
動(dòng)態(tài)預(yù)測(cè)方法采用了一個(gè)簡(jiǎn)單的爬山算法來(lái)進(jìn)行閾值的調(diào)整。具體來(lái)講,每次當(dāng)前映射周期tslot結(jié)束時(shí),我們會(huì)統(tǒng)計(jì)上次映射周期閾值lastthresh在當(dāng)前周期內(nèi)的效果,計(jì)算錯(cuò)誤率(errorrate=#(vij>lastthresh)/#tij,其中#(vij>lastthresh)表示訪問距離超出閾值的次數(shù),#tij表示該頁(yè)面的總訪問次數(shù)),如果錯(cuò)誤率大于上次映射周期的錯(cuò)誤率previouserrorrate,證明lastthresh效果較差,采用當(dāng)前時(shí)間段的閾值。如果錯(cuò)誤率小于previouserrorrate則需要根據(jù)閾值變化趨勢(shì)進(jìn)行抉擇,具體流程如algorithm1所示。
(2).pid差錯(cuò)控制器
在實(shí)際的運(yùn)行過(guò)程中,絕大部分的錯(cuò)誤都會(huì)集中在某部分頁(yè)之上。因此考慮將這些錯(cuò)誤率較高的頁(yè)遷移出去,進(jìn)行正常刷新以保證數(shù)據(jù)正確。如果直接統(tǒng)計(jì)所有頁(yè)的錯(cuò)誤率,在每個(gè)映射周期結(jié)束時(shí),將錯(cuò)誤率最高的頁(yè)遷移出去,對(duì)錯(cuò)誤率的控制并不精確,這樣造成的結(jié)果可能是錯(cuò)誤率遠(yuǎn)小于給出的錯(cuò)誤率控制上限,但同時(shí)由于過(guò)度地遷移內(nèi)存頁(yè),造成遷移開銷超過(guò)避免刷新而節(jié)省的功耗而最終得不償失。
如圖8所示是pid差錯(cuò)控制器結(jié)構(gòu),在pid的每個(gè)控制周期內(nèi),錯(cuò)誤率統(tǒng)計(jì)部件將會(huì)統(tǒng)計(jì)當(dāng)前所有頁(yè)的差錯(cuò)率,根據(jù)以上差錯(cuò)率信息和給定的差錯(cuò)率控制器水平計(jì)算出每個(gè)頁(yè)的相對(duì)錯(cuò)誤率并交給pid差錯(cuò)控制器進(jìn)行處理,pid差錯(cuò)控制器根據(jù)計(jì)算出的控制量決定哪些頁(yè)需要被遷移,然后給dram發(fā)送遷移命令。
首先給出差錯(cuò)控制水平e,意味著pid要將系統(tǒng)的差錯(cuò)率控制在e附近。在每個(gè)控制周期中,統(tǒng)計(jì)所有頁(yè)的錯(cuò)誤率。假定當(dāng)前為第k個(gè)控制周期tk,則頁(yè)i的錯(cuò)誤率為eik。在tk結(jié)束時(shí),遍歷評(píng)估所有頁(yè)的統(tǒng)計(jì)信息決定是否遷移。例如,對(duì)于頁(yè)i,首先計(jì)算其在當(dāng)前時(shí)間片段的相對(duì)錯(cuò)誤率為reik=eik-e,然后得到pid控制器的權(quán)重值,如下
cwik=p*reik+i*(reik+rei(k-1))+d*(reik-rei(k-1))
根據(jù)控制權(quán)重值cwik的大小決定頁(yè)i是否被遷移。
本發(fā)明還提出一種面向近似應(yīng)用的低開銷dram刷新系統(tǒng),包括:
靜態(tài)匹配映射模塊,用于離線獲取應(yīng)用的全局訪存信息,分析所述全局訪存信息中每個(gè)內(nèi)存行的最大重用距離,將每個(gè)內(nèi)存行中的內(nèi)容遷移到保存時(shí)間大于所述最大重用距離的內(nèi)存行中;
動(dòng)態(tài)閾值調(diào)整模塊,用于每隔一段時(shí)間,周期性的根據(jù)歷史映射結(jié)果預(yù)測(cè)每個(gè)映射周期的最大重用距離,并在dram保持時(shí)間分布中匹配相應(yīng)的內(nèi)存行。
所述靜態(tài)匹配映射模塊包括
(1)所述全局訪存信息包括:訪存地址,訪存類型,時(shí)間戳,并形成集合d,集合d中的每個(gè)元素為一個(gè)二元組(pi,tij),
(2)對(duì)于dram的保持時(shí)間分布信息,通過(guò)集合r表示,其中每個(gè)元素為一個(gè)二元組(rk,rtk),
(3)為了給集合v中的每個(gè)pi在集合r中找到相應(yīng)的內(nèi)存行rk,對(duì)于某個(gè)頁(yè)pi有集合(pi,vij),
所述動(dòng)態(tài)閾值調(diào)整模塊包括:
1.在每個(gè)映射周期結(jié)束時(shí),預(yù)測(cè)頁(yè)面的閾值,其中獲取頁(yè)面當(dāng)前映射周期的最大重用距離,評(píng)估上次映射周期預(yù)測(cè)的閾值錯(cuò)誤率;
2.根據(jù)所述閾值,在所有保持時(shí)間大于所述閾值的內(nèi)存行中,找出未分配并且保持時(shí)間最小的內(nèi)存行;
3.將頁(yè)面與所述保持時(shí)間最小的內(nèi)存行進(jìn)行匹配。
還包括對(duì)所述動(dòng)態(tài)閾值調(diào)整步驟進(jìn)行差錯(cuò)控制。
所述差錯(cuò)控制具體包括:首先設(shè)置差錯(cuò)控制水平e,在每個(gè)控制周期中,統(tǒng)計(jì)所有頁(yè)的錯(cuò)誤率,假定當(dāng)前為第k個(gè)控制周期tk,則頁(yè)i的錯(cuò)誤率為eik。在tk結(jié)束時(shí),遍歷評(píng)估所有頁(yè)的統(tǒng)計(jì)信息決定是否遷移,其中對(duì)于頁(yè)i,首先計(jì)算其在當(dāng)前時(shí)間片段的相對(duì)錯(cuò)誤率為reik=eik-e,然后獲取控制權(quán)重值,如下
cwik=p*reik+i*(reik+rei(k-1))+d*(reik-rei(k-1))
其中,p和i分別為pid控制算法中的比例參數(shù)和積分參數(shù),改參數(shù)的經(jīng)驗(yàn)值可以通過(guò)實(shí)際情況,手動(dòng)調(diào)整找尋錯(cuò)誤率最低的值加以設(shè)置,k為時(shí)間參數(shù),具體表示當(dāng)前所在的控制周期數(shù)。
根據(jù)控制權(quán)重值cwik的大小決定頁(yè)i是否被遷移。