章鐵飛,徐 斌
浙江工商大學(xué) 計(jì)算機(jī)與信息工程學(xué)院,杭州310018
動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)在商業(yè)計(jì)算機(jī)系統(tǒng)中被廣泛用作主存,其由一個(gè)電容器和一個(gè)晶體管構(gòu)成,通過電容器的充放電來存儲(chǔ)一位信息。DRAM通過減小存儲(chǔ)單元尺寸來持續(xù)增加容量,但也導(dǎo)致芯片易受到干擾誤差的影響,當(dāng)某DRAM內(nèi)存行中的存儲(chǔ)單元因?yàn)樵L問被激活時(shí),相鄰行的存儲(chǔ)單元易受到干擾,導(dǎo)致相鄰行的數(shù)據(jù)錯(cuò)誤[1-2],因?yàn)閬碜韵噜徯械鸟詈辖档烷撝惦妷翰⒃黾哟鎯?chǔ)單元的漏電流,較高的漏電流引起更快的電荷從DRAM存儲(chǔ)單元的電容器泄漏,導(dǎo)致存儲(chǔ)單元丟失數(shù)據(jù)。這種相鄰行因?yàn)閿?shù)據(jù)訪問、頻繁激活而導(dǎo)致存儲(chǔ)單元數(shù)據(jù)錯(cuò)誤的現(xiàn)象稱之為行擾動(dòng)(Row Hammering)。
當(dāng)某DRAM內(nèi)存行被訪問時(shí),它必須先被激活后,才能讀寫數(shù)據(jù)。一內(nèi)存行越頻繁地被訪問,則被激活的次數(shù)越多。圖1顯示攻擊行(aggressive row)頻繁地激活,導(dǎo)致其相鄰的兩個(gè)受害行(victim row)出現(xiàn)行擾動(dòng)問題。由于漏電效應(yīng),DRAM單元默認(rèn)地周期性刷新補(bǔ)充電荷。在刷新間隔內(nèi),如果相鄰行數(shù)據(jù)頻繁的激活次數(shù)超過閾值,則大概率地會(huì)導(dǎo)致DRAM單元出現(xiàn)行擾動(dòng)問題。該激活的閾值,稱之為行擾動(dòng)閾值(RHth)。隨著DRAM存儲(chǔ)單元尺寸的進(jìn)一步縮小,行擾動(dòng)閾值不斷降低,使得行擾動(dòng)問題日益嚴(yán)重。此外,專門設(shè)計(jì)的惡意程序[3-4]可能會(huì)故意頻繁地將緩存的內(nèi)容刷新回內(nèi)存,存儲(chǔ)單元更容易地達(dá)到行擾動(dòng)閾值。為保護(hù)數(shù)據(jù)的完整性和安全性,未來的DRAM必須有針對(duì)性地解決行擾動(dòng)問題。
圖1 行擾動(dòng)問題Fig.1 Row hammering problem
為緩解行擾動(dòng)問題,在受害行達(dá)到行擾動(dòng)閾值之前,內(nèi)存控制器主動(dòng)向受害行發(fā)送內(nèi)存行刷新操作,以補(bǔ)充受害內(nèi)存行存儲(chǔ)單元的電荷,防止受害行出現(xiàn)行擾動(dòng)問題,這種方法稱為主動(dòng)激活。與主動(dòng)激活相對(duì)應(yīng),被動(dòng)激活發(fā)生在受害行被激活以服務(wù)數(shù)據(jù)請(qǐng)求時(shí),即受害行發(fā)生讀寫數(shù)據(jù)操作而被激活。與主動(dòng)激活相比,被動(dòng)激活具有相同的防止數(shù)據(jù)丟失的效果。與被動(dòng)激活發(fā)生在正常的數(shù)據(jù)讀寫不同,主動(dòng)激活需將刷新操作插入到數(shù)據(jù)請(qǐng)求隊(duì)列,干擾到正常的數(shù)據(jù)讀寫,影響內(nèi)存讀寫的性能。因此利用被動(dòng)激活,可以在不影響內(nèi)存性能的情況下,規(guī)避主動(dòng)激活對(duì)性能的不利影響。
本文提出一種基于內(nèi)存行的最近激活信息的解決DRAM內(nèi)存行擾動(dòng)的方法(RACPR),該方法保護(hù)受害行免受行擾動(dòng)影響。RACPR大大減少額外的數(shù)據(jù)跟蹤結(jié)構(gòu),避免傳統(tǒng)的基于計(jì)數(shù)器的策略所需的存儲(chǔ)開銷[5]。利用被動(dòng)激活對(duì)行擾動(dòng)具有相同的保護(hù)作用,RACPR使用行激活計(jì)數(shù)器(RAC)結(jié)構(gòu)來記錄受害行的被動(dòng)激活信息,消除不必要的主動(dòng)激活操作,因此RACPR以可忽略的存儲(chǔ)和性能開銷,提供可靠的行擾動(dòng)解決方案。本文針對(duì)行擾動(dòng)問題做出以下貢獻(xiàn):
(1)本文證明被動(dòng)激活與主動(dòng)激活具有相同的抗行擾動(dòng)效果,且對(duì)內(nèi)存訪問性能沒有不利影響。
(2)本文引入最近激活計(jì)數(shù)器(RAC)結(jié)構(gòu)來記錄受害行的被動(dòng)激活信息,利用被動(dòng)激活來防止行擾動(dòng)。
(3)基于內(nèi)存行的RAC信息,本文引入概率刷新方法,以較小的概率向行發(fā)出主動(dòng)激活操作。本文的概率刷新方法不是直接發(fā)起主動(dòng)激活,而是基于RAC的值充分利用被動(dòng)激活,消除不必要的主動(dòng)激活操作,將對(duì)性能的影響降至最低。
給定一攻擊行,其激活次數(shù)超過行擾動(dòng)閾值,系統(tǒng)無需發(fā)出保護(hù)受害行免受行擾動(dòng)的主動(dòng)激活操作,因?yàn)楣粜袛?shù)千次的激活期間,受害行可能會(huì)同時(shí)經(jīng)歷幾次被動(dòng)激活。從電路的角度看,刷新內(nèi)存行和激活內(nèi)存行是相同的操作,因此受害行的單元在被動(dòng)激活過程中完全地充滿電荷,避免行擾動(dòng)的數(shù)據(jù)錯(cuò)誤。因此必須額外地檢查受害行是否在攻擊行超過行擾動(dòng)閾值的同一時(shí)間間隔內(nèi)發(fā)生被動(dòng)激活,而不是只關(guān)注攻擊行的激活次數(shù)是否超過行擾動(dòng)閾值。圖2顯示在攻擊行超過行擾動(dòng)閾值的時(shí)間間隔內(nèi),受害行發(fā)生被動(dòng)激活的比例,基準(zhǔn)測(cè)試程序是PARSEC和SPEC,其中的行擾動(dòng)閾值為32 000。
圖2 受害行的被動(dòng)激活百分比Fig.2 Passive activation percentage of victim rows
定位所有超過行擾動(dòng)閾值的攻擊行,確定達(dá)到擾動(dòng)閾值的時(shí)間間隔,并在相同的時(shí)間間隔內(nèi)收集所有受害行的被動(dòng)激活信息。圖2中所示,隸屬于不同基準(zhǔn)程序的受害行的被動(dòng)激活模式相異,一個(gè)極端是comm2的所有受害行都存在被動(dòng)激活,另一個(gè)極端是fluid,其所有受害行都不存在被動(dòng)激活。然而數(shù)據(jù)顯示應(yīng)用程序中超過75%的受害行存在被動(dòng)激活。由于受害行存儲(chǔ)單元隨著被動(dòng)激活而充電,可以避免行擾動(dòng)問題。下一章將描述基于這一觀察的RACPR方法。
利用被動(dòng)激活操作,可取消一些不必要的主動(dòng)激活來提升存儲(chǔ)器性能,本文利用最近激活計(jì)數(shù)器(RAC)來記錄受害行的最近被動(dòng)激活信息,然后提出一種基于最近激活計(jì)數(shù)器的概率刷新方法,以可忽略不計(jì)的開銷來解決行擾動(dòng)問題。
要記錄受害行的最近激活信息,如果簡單地使用計(jì)數(shù)器[5]來存儲(chǔ)該信息,將導(dǎo)致不可接受的存儲(chǔ)開銷。針對(duì)8 GB容量的DRAM存儲(chǔ)器,按每行配以16位計(jì)數(shù)器(每行按8 KB)計(jì)算,累積需要數(shù)十兆字節(jié)的額外存儲(chǔ)空間。此外,計(jì)數(shù)器僅記錄激活的累計(jì)次數(shù),而不記錄每次激活在時(shí)間間隔內(nèi)分布的具體時(shí)間信息,因此本文使用一位的最近激活計(jì)數(shù)器(RAC)來記錄信息。值為1表示該行最近已被激活,而值為0表示該行在預(yù)定的時(shí)間間隔內(nèi)未被激活。當(dāng)最近激活計(jì)數(shù)器值為1時(shí),可避免主動(dòng)激活操作,因?yàn)槟繕?biāo)行最近被激活并重新充電。
為利用被動(dòng)激活,本文解決以下的問題:何時(shí)以及如何設(shè)置RAC,以及在哪里設(shè)置存儲(chǔ)最近激活計(jì)數(shù)器。每次讀取、寫入或刷新行時(shí),內(nèi)存行的RAC都設(shè)置為1。在一個(gè)重置時(shí)間間隔(RTI)后,隨機(jī)存取存儲(chǔ)器被重置為0,在該時(shí)間間隔內(nèi),給定行的數(shù)據(jù)通過最近的被動(dòng)激活被保護(hù)免受行擾動(dòng)的影響,因此主動(dòng)刷新是不必要的。RTI的時(shí)間長度以行擾動(dòng)閾值達(dá)到所需的最少時(shí)間決定。因?yàn)橹挥挟?dāng)給定行受到的擾動(dòng)次數(shù)超過閾值時(shí),才會(huì)出現(xiàn)數(shù)據(jù)錯(cuò)誤。
最近激活計(jì)數(shù)器RAC的值反映內(nèi)存行是否達(dá)到其重置時(shí)間間隔。當(dāng)RAC的值為1時(shí),表示目標(biāo)內(nèi)存行還在最近一次被動(dòng)激活操作的保護(hù)時(shí)間范圍內(nèi);當(dāng)RAC的值為0時(shí),表示目標(biāo)內(nèi)存行不在最近一次被動(dòng)激活操作的保護(hù)時(shí)間范圍內(nèi),即它的重置時(shí)間到。要設(shè)置RAC的值,一個(gè)方法是為目標(biāo)內(nèi)存行附加一個(gè)計(jì)時(shí)器。當(dāng)目標(biāo)行被激活時(shí),其RAC值被設(shè)置為1,并且計(jì)時(shí)器開始計(jì)時(shí)。當(dāng)計(jì)時(shí)器達(dá)到重置時(shí)間間隔時(shí),實(shí)時(shí)時(shí)鐘被重置為0。然而,給每一行指定一個(gè)定時(shí)器是不切實(shí)際的,將導(dǎo)致不可接受的開銷。因此,本文對(duì)所有行的RAC以周期性方式更新,只需要單個(gè)定時(shí)器控制,避免每行所需的大量獨(dú)立定時(shí)器的開銷。
如圖3(a)所示,給定行的RAC在RTI內(nèi)從狀態(tài)1切換到狀態(tài)0。當(dāng)RTI內(nèi)沒有被動(dòng)激活操作時(shí),RAC的值表示正確的RTI。然而如圖3(b)所示,如果在RTI期間出現(xiàn)被動(dòng)激活,t2時(shí)的被動(dòng)激活將RTI延長至t4。但是默認(rèn)的定期更新操作會(huì)在t3將RAC重置為0。因此,偶然的被動(dòng)激活會(huì)導(dǎo)致RAC所指示的RTI小于實(shí)際值。這種給RTI引入錯(cuò)誤的現(xiàn)象稱為偶然更新效應(yīng)。在t2非常接近t3的情況下,由偶然更新效應(yīng)引起的最大誤差可能與周期RTI一樣大。假設(shè)被動(dòng)激活隨機(jī)分布在RTI上,那么偶然更新效應(yīng)的期望誤差是RTI/2。不能消除偶然更新效應(yīng),因?yàn)楸粍?dòng)激活的發(fā)生無法預(yù)先預(yù)測(cè),但是可以通過將一位RAC更新為二位的RAC來減少誤差值。
圖3 一位RAC和偶然更新效應(yīng)Fig.3 One-bit RAC and accidental update effect
與一位RAC不同,二位RAC有四種狀態(tài),即11、10、01和00。當(dāng)發(fā)生內(nèi)存行被動(dòng)激活時(shí),RAC設(shè)置為11,并且RAC按一定的周期降序依次遞減。二位RAC與一位RAC的不同之處在于其更新周期的時(shí)間長度。二位RAC的更新周期不是一個(gè)實(shí)時(shí)時(shí)間間隔,而是設(shè)置為實(shí)時(shí)時(shí)間間隔的1/3,偶然更新效應(yīng)的誤差與更新周期成正比,所以此時(shí)的偶然更新效應(yīng)的最大誤差變?yōu)橹刂脮r(shí)間間隔的1/3,如圖4所示。較小的更新周期有助于減少偶然更新效應(yīng)的誤差,但增加更新操作的頻率會(huì)產(chǎn)生成本問題。
圖4 兩位RAC的偶然更新效應(yīng)Fig.4 Accidental update effect of two-bit RAC
算法1以重置時(shí)間間隔的1/3為周期更新,操作的開銷可以忽略,原因以下兩點(diǎn):首先,內(nèi)存行的RAC可以按塊粒度組織,每個(gè)塊由數(shù)百個(gè)RAC組成,更新操作作為一個(gè)整體對(duì)每個(gè)塊執(zhí)行,這意味著數(shù)百個(gè)RAC在一次更新操作進(jìn)行狀態(tài)切換,所以RAC更新的成本被分?jǐn)偛⒋蟠蠼档?。?yīng)用程序訪問內(nèi)存時(shí),具有時(shí)間、空間局部性[6],在一定的時(shí)間間隔內(nèi),只有部分DRAM行經(jīng)常被訪問和激活。只有這些激活的DRAM行的相應(yīng)RAC需要更新操作,因此開銷可以忽略不計(jì)。
算法1兩位RAC更新方法
輸入:內(nèi)存行的RAC值
輸出:無
1.i(frow[i]發(fā)生被動(dòng)激活)
2.{rac(row[i])=11;
3.}
4.fo(revery RTI/3)
5.{i(frac(row[i])>00)
6.{ rac(row[i])遞減1;
7.}
8.}
傳統(tǒng)的基于計(jì)數(shù)器的主動(dòng)激活方法[5,7],主要思想是每個(gè)內(nèi)存行分配計(jì)數(shù)器,每次激活則計(jì)數(shù)器累加1,根據(jù)計(jì)數(shù)器的值是否超過行擾動(dòng)值,來決定是否對(duì)相鄰受害行發(fā)起主動(dòng)激活操作。所有基于計(jì)數(shù)器的主動(dòng)激活方法的代價(jià)在于大量計(jì)數(shù)器產(chǎn)生的存儲(chǔ)空間開銷。本文采用概率的方法來避免這種不可接受的存儲(chǔ)開銷。
當(dāng)特定內(nèi)存行被訪問激活時(shí),以很小的概率向其相鄰行發(fā)起主動(dòng)激活操作。如果主動(dòng)激活概率為1%,則每次內(nèi)存行被激活時(shí),存儲(chǔ)器控制器都會(huì)訪問隨機(jī)數(shù)發(fā)生器,以確定是否對(duì)相鄰受害行,發(fā)出主動(dòng)激活操作。如果是,則對(duì)被訪問行的相鄰行執(zhí)行主動(dòng)激活操作。一內(nèi)存行被激活的頻率越高,就越有可能向其相鄰行發(fā)出主動(dòng)激活操作,讓接近行擾動(dòng)閾值的攻擊行的相鄰受害行有接近概率1的主動(dòng)激活機(jī)會(huì)。
假設(shè)每次目標(biāo)行被訪問時(shí),都以概率N向其相鄰的行發(fā)出主動(dòng)激活操作。假設(shè)M為行擾動(dòng)閾值,系統(tǒng)的生命周期內(nèi)M的實(shí)例數(shù)為k。在系統(tǒng)的整個(gè)生命周期中,因?yàn)闆]有主動(dòng)激活,至少有一次失敗的概率如下所示[3]:
面向未來的DRAM技術(shù),假設(shè)M低至32 000。10年的運(yùn)行時(shí)間里,k≈250億。如果N分別設(shè)置為0.1%、0.2%和0.5%,相應(yīng)的Pfailure分別為3.166×10-4、4.0×10-18和8.14×10-60。經(jīng)實(shí)驗(yàn)表明,當(dāng)N的值設(shè)定為0.2%時(shí),主動(dòng)激活操作在內(nèi)存性能和行擾動(dòng)問題的緩解之間取得良好的平衡。
圖5表示RACPR的總體設(shè)計(jì),基于傳統(tǒng)內(nèi)存控制器的擴(kuò)展,其中CBA存儲(chǔ)內(nèi)存行的RAC,而PRL是隨機(jī)刷新邏輯電路。內(nèi)存控制器的主要功能是將存儲(chǔ)器命令調(diào)度到存儲(chǔ)器,完成讀或?qū)懻?qǐng)求。當(dāng)其目標(biāo)內(nèi)存行被訪問或刷新時(shí),二位RAC按RTI值的1/3周期遞減。RTI的下限值理論上分別由默認(rèn)激活間隔(AI)和默認(rèn)刷新間隔(RI)決定。默認(rèn)間隔內(nèi)的最大激活次數(shù)是RI/AI。給定行擾動(dòng)值的情況下,RTI的下限為AI×RHth。此外,這種下限是在極端情況下獲得的,在這種情況下,特定的行被連續(xù)且直接地激活RHth次。實(shí)驗(yàn)結(jié)果顯示實(shí)際應(yīng)用中RTI的值遠(yuǎn)遠(yuǎn)大于理論值。
圖5 RACPR結(jié)構(gòu)Fig.5 Architecture of RACPR
對(duì)于8 GB的DRAM存儲(chǔ)器芯片,RAC的總存儲(chǔ)空間僅為256 KB,僅占DRAM存儲(chǔ)器空間的0.006%,與基于計(jì)數(shù)器的方案相比,這是一個(gè)顯著的減少。對(duì)內(nèi)存行的每次讀取、寫入和刷新都會(huì)對(duì)其二位RAC進(jìn)行設(shè)置操作,并且RAC上的周期性遞減操作會(huì)進(jìn)一步增加對(duì)RAC的訪問次數(shù),因此RAC的訪問容易成為瓶頸。為保證對(duì)RAC的快速訪問,將RAC存儲(chǔ)在內(nèi)存控制器中。如果出于減少其存儲(chǔ)開銷的目的,RAC也可以使用計(jì)數(shù)器緩存結(jié)構(gòu),并存儲(chǔ)在DRAM的保留區(qū)域[5]。
算法2RACPR方法
輸入:內(nèi)存行的RAC值
輸出:無
1.i(f讀寫內(nèi)存行row[i])
2.{產(chǎn)生0~n之間的隨機(jī)數(shù)r;
3.i(fr≤nN)
4.{if(rac(row[i+1])==00)
5.向row[i+1]發(fā)送刷新請(qǐng)求;
6.i(frac(row[i?1])==00)
7.向row[i?1]發(fā)送刷新請(qǐng)求;
8.}
9.}
算法2顯示RACPR的操作流程。受害行的RAC值,如果等于00,則主動(dòng)激活操作以概率N發(fā)出。算法在[0,n]的范圍內(nèi)產(chǎn)生一個(gè)隨機(jī)數(shù),r小于nN的概率就是概率N。如果r小于nN,則PRL檢查RAC模塊,然后決定是否向存儲(chǔ)器控制器的發(fā)送命令以插入主動(dòng)激活命令。如果r大于nN,則不滿足概率N,所以不需要發(fā)送主動(dòng)激活命令。
本文使用USIMM[8]內(nèi)存模擬器和來自于PARSEC、BIOBENCH和商業(yè)基準(zhǔn)程序來評(píng)估提出的方案。內(nèi)存模擬器的存儲(chǔ)芯片配置為8 GB芯片。表1顯示模擬的內(nèi)存系統(tǒng)的配置。為體現(xiàn)未來一代技術(shù)的發(fā)展,實(shí)驗(yàn)中的行擾動(dòng)閾值RHth設(shè)置為32 000。
表1 系統(tǒng)配置Table 1 Setup of system
攻擊行的激活次數(shù)超過RHth所需的最短時(shí)間稱為閾值時(shí)間間隔(TTI)。實(shí)驗(yàn)跟蹤不同基準(zhǔn)的攻擊行,并分別記錄每行的TTI。圖6顯示TTI的分布,其中X軸代表以毫秒為單位的TTI,Y軸顯示低于特定值的TTI的百分比值。點(diǎn)A表示62%的TTI小于54.3 ms。實(shí)際上,TTI決定RTI的值,因?yàn)镽TI的長度是攻擊行激活RHth次的最短時(shí)間。圖6中,3.5%的TTI小于27 ms,6.9%的TTI小于30 ms,本文中的默認(rèn)RTI設(shè)定為30 ms,主要基于如下的考慮:
圖6 閾值時(shí)間間隔的百分比Fig.6 Percentage of different threshold time interval
(1)由于偶然激活更新效應(yīng)引入的誤差,實(shí)際的RTI比實(shí)際值平均小16.7%。測(cè)得的RTI為25 ms(默認(rèn)RTI為30 ms),而25 ms以下的TTI不存在。
(2)大部分的TTI值大于30 ms。
圖7根據(jù)執(zhí)行時(shí)間顯示主動(dòng)激活對(duì)性能的影響,主動(dòng)激活的概率值Pfailure從0.1%到0.5%不等。對(duì)于大多數(shù)基準(zhǔn)測(cè)試程序,更高的主動(dòng)刷新概率會(huì)降低更多性能:主動(dòng)刷新的概率為0.5%,會(huì)導(dǎo)致執(zhí)行時(shí)間增加2.5%,而主動(dòng)刷新的概率為0.2%,只會(huì)導(dǎo)致執(zhí)行時(shí)間增加1%。平均而言,0.2%的主動(dòng)刷新概率會(huì)使執(zhí)行時(shí)間增加約0.4%,這是一個(gè)可以忽略的性能影響。
圖7 不同主動(dòng)刷新概率對(duì)性能的影響Fig.7 Performance impact with active refresh
圖8顯示RACPR與以往的PARA[2]方法的性能對(duì)比,采用的主動(dòng)激活概率均為0.2%,利用被動(dòng)激活信息的RACPR可以大大減少主動(dòng)刷新的次數(shù),平均75%的主動(dòng)刷新被消除。主動(dòng)刷新的減少導(dǎo)致執(zhí)行時(shí)間的減少。例如,MT-cannel將執(zhí)行時(shí)間減少0.3%。通過探索被動(dòng)激活信息,平均內(nèi)存訪問時(shí)間減少0.1%。請(qǐng)注意性能優(yōu)勢(shì)只是基準(zhǔn)程序運(yùn)行一段的收益,長期來看,累積的性能絕對(duì)優(yōu)勢(shì)顯著,尤其是對(duì)于應(yīng)用程序領(lǐng)域,如web服務(wù)器。
圖8 RACPR與基本概率刷新方法的性能比較Fig.8 Performance comparison of RACPR and baseline
隨著DRAM存儲(chǔ)器容量的增大,節(jié)點(diǎn)更小化,行擾動(dòng)問題成為一個(gè)關(guān)鍵問題,不僅降低系統(tǒng)的可靠性,還暴露安全漏洞。奧努等人分析行攻擊問題的根本原因,并研究各種解決方案[2,9-11],數(shù)據(jù)表明只需139 000次訪問就能引發(fā)一個(gè)錯(cuò)誤,每1 700個(gè)單元中最多有一個(gè)單元容易出錯(cuò),并進(jìn)一步提出概率鄰近行激活(PARA)方法。PARA策略以很小的概率對(duì)當(dāng)前訪問行的相鄰行執(zhí)行額外的刷新。作為一種概率機(jī)制,它不能保證沒有負(fù)面效果。另一方面,基于計(jì)數(shù)器的主動(dòng)激活[5,12-13]在每一個(gè)動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器行中使用一個(gè)計(jì)數(shù)器來記錄每行的激活次數(shù),并且只對(duì)計(jì)數(shù)器值大于行錘擊閾值的目標(biāo)行的相鄰行執(zhí)行額外的刷新。這種設(shè)計(jì)保證沒有負(fù)面效果,但代價(jià)是巨大的存儲(chǔ)開銷。為減少跟蹤結(jié)構(gòu)的存儲(chǔ)開銷,計(jì)數(shù)器可以組織成樹形結(jié)構(gòu)[6-8,14],每個(gè)計(jì)數(shù)器跟蹤一組動(dòng)態(tài)組大小的行。由于可導(dǎo)致相對(duì)濕度的行數(shù)受到行激活頻率和動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器單元保持時(shí)間的最大值的限制,兩次機(jī)制[1]僅使用少量計(jì)數(shù)器就可以準(zhǔn)確檢測(cè)潛在的相對(duì)濕度攻擊。PRoHIT[15]提供一個(gè)概率管理的表,它以概率的方式跟蹤受害者行候選,并且最上面的條目被額外刷新以緩解行攻擊問題。
本文的方法主要是解決已有的PARA[2,5]方法的不足。PARA方法隨機(jī)選擇潛在的受害行,并對(duì)這些行執(zhí)行主動(dòng)激活操作。PARA方法沒有考慮被動(dòng)激活受害行,因此可能會(huì)對(duì)受害行進(jìn)行不必要的刷新,從而導(dǎo)致性能開銷。本文方法利用受害行的被動(dòng)激活信息,克服PARA的限制,并有效解決行擾動(dòng)問題。
本文提出一種基于內(nèi)存行最近激活信息來解決DRAM存儲(chǔ)器行擾動(dòng)問題的方法。本文使用RAC結(jié)構(gòu)跟蹤內(nèi)存行的被動(dòng)激活信息,并提出優(yōu)化RAC的結(jié)構(gòu)和操作,以降低其復(fù)雜性和開銷。本文進(jìn)一步在存儲(chǔ)器控制器中實(shí)現(xiàn)基于RAC的概率刷新模塊,以可忽略的性能開銷以及0.006%的面積成本,解決行擾動(dòng)攻擊問題。實(shí)驗(yàn)結(jié)果表明,與以前的概率方法相比,本方法平均減少75%的主動(dòng)激活操作,占用0.006%的存儲(chǔ)容量,平均提升0.1%的內(nèi)存訪問性能。