專利名稱:一種多核處理器共享緩存分配方法
技術(shù)領(lǐng)域:
本發(fā)明屬于計(jì)算機(jī)軟件領(lǐng)域,具體涉及到一種多核CPU共享緩存分配方法。
背景技術(shù):
隨著處理器頻率逐漸逼近瓶頸,體系結(jié)構(gòu)研究者與工業(yè)界都轉(zhuǎn)向了多核領(lǐng)域,利用多個(gè)處理器核來提升計(jì)算機(jī)系統(tǒng)的整體性能,從而緩解了計(jì)算機(jī)系統(tǒng)對高頻率的需求。 位于處理器核與內(nèi)存之間有一層高速緩存結(jié)構(gòu),它的讀寫速度要比內(nèi)存快。數(shù)據(jù)被緩存到 CPU緩存中,當(dāng)CPU讀寫數(shù)據(jù)時(shí),可避免從較慢的內(nèi)存中存取數(shù)據(jù),而直接從高速緩存中操作數(shù)據(jù),從而提升了計(jì)算機(jī)系統(tǒng)的性能。當(dāng)前市場的計(jì)算機(jī)體系結(jié)構(gòu)有兩種緩存設(shè)計(jì)方式,共享緩存和私有緩存。私有緩存是每個(gè)處理器核擁有自己的一塊私有的緩存,這種結(jié)構(gòu)不利于核之間的通信,并且因?yàn)榇嬖跀?shù)據(jù)副本而降低了緩存利用率。共享緩存結(jié)構(gòu)是多個(gè)核共享一塊緩存,這種架構(gòu)提升了緩存利用率并降低了核之間的通信開銷。因此,許多處理器廠商選擇了共享最后一級緩存的體系結(jié)構(gòu),比如htel Core, IBM Power5和Sun Niagara等等。但是,共享的緩存結(jié)構(gòu)帶來了緩存競爭的問題。一般處理器緩存采用最近最少使用LRU替換算法,LRU替換算法平等對待并行執(zhí)行的多個(gè)應(yīng)用,當(dāng)一個(gè)應(yīng)用的緩存失效時(shí), 可能替換另外一個(gè)應(yīng)用在緩存中的數(shù)據(jù),反之亦然,最終導(dǎo)致雙方性能下降。因此共享緩存的管理問題成為當(dāng)前研究熱點(diǎn)。當(dāng)前,共享緩存分配方法主要有(1)靜態(tài)的緩存分配方法,這種方法在程序運(yùn)行之前就確定緩存管理的策略。或者是通過編譯時(shí)的信息,標(biāo)記它的數(shù)據(jù)的局部性、訪存類型等特征,對標(biāo)記的數(shù)據(jù)區(qū)域?qū)嵤┨囟ǖ墓芾聿呗?;或者是由用戶自己定制;或者由操作系統(tǒng)為應(yīng)用制定緩存管理計(jì)劃,賦予應(yīng)用不同的優(yōu)先級,優(yōu)先級高的應(yīng)用獲取較多緩存且不易被替換。(2)基于反饋信息的動(dòng)態(tài)緩存分配方法,這是一種利用運(yùn)行時(shí)信息動(dòng)態(tài)管理緩存的方法。根據(jù)程序運(yùn)行時(shí)的反饋信息,比如緩存缺失率,動(dòng)態(tài)分配應(yīng)用緩存大小,以達(dá)到要求的性能指標(biāo)。這種方法需要添加額外的性能監(jiān)控硬件。這些方法都是需要改變現(xiàn)有的硬件結(jié)構(gòu),添加額外的硬件才能達(dá)到管理緩存的目標(biāo)?,F(xiàn)在還僅僅在學(xué)術(shù)界被用來研究,還沒有在真實(shí)機(jī)器上實(shí)現(xiàn)。
發(fā)明內(nèi)容
本發(fā)明提供一種多核處理器體系結(jié)構(gòu)下的共享緩存分配方法,該方法不需要添加額外的硬件資源,能很好的應(yīng)用在真實(shí)機(jī)器上。一種多核處理器共享緩存分配方法,涉及兩個(gè)共享CPU緩存的應(yīng)用程序a和b,該方法具體為(1)缺失率曲線預(yù)測(11)收集應(yīng)用程序i的采樣點(diǎn)的缺失間距數(shù)據(jù),i = a,b;
(12)依據(jù)缺失間距數(shù)據(jù)獲取累計(jì)缺失次數(shù)-累計(jì)訪問次數(shù)曲線;(13)對累計(jì)缺失次數(shù)-累計(jì)訪問次數(shù)曲線作線性擬合,擬合得到的曲線的斜率記為分維Qi,擬合得到的曲線的截距記為截距Ai;(14)計(jì)算缺失率曲線Mi^. =4^"^,其中C為緩存大??;(2)分配緩存程序a 的緩存 Alloc_a = min{MRCa(χ) +MRCb(C-χ), χ e [1,C_l]}程序b 的緩存 Alloc_b = c-Alloc_a,其中,C為CPU的總緩存。本發(fā)明方法主要應(yīng)用在兩個(gè)程序競爭使用緩存的場景中。共享緩存的處理器體系結(jié)構(gòu)中,兩程序會(huì)競爭地使用緩存,互相驅(qū)逐對方的數(shù)據(jù),最終導(dǎo)致雙方的性能都下降。本發(fā)明隔離程序?qū)彺娴氖褂茫峙浣o不同的程序不同的緩存區(qū)域,運(yùn)行時(shí)分析程序?qū)彺娲笮〉男枨?,制定緩存劃分策略。本發(fā)明的特點(diǎn)主要有個(gè)方面(1)實(shí)用性這種緩存管理方法不需要添加硬件,利用真實(shí)機(jī)器上普遍存在的硬件計(jì)數(shù)器部件,就可以在真實(shí)機(jī)器上實(shí)現(xiàn)。(2)透明性不需要修改程序源代碼或者可執(zhí)行文件,也不需要對可執(zhí)行文件進(jìn)行插樁。(3)開銷小利用硬件計(jì)數(shù)器實(shí)現(xiàn)對程序的監(jiān)控,最小化了緩存管理單元對程序性能的影響。并通過分形預(yù)測模型預(yù)測程序?qū)彺娴男枨?,只需要運(yùn)行一次程序就能得到程序的緩存缺失率曲線。
圖1為本發(fā)明的總體框架圖;圖2為獲取累計(jì)缺失次數(shù)-累計(jì)訪問次數(shù)數(shù)據(jù)的方法。
具體實(shí)施例方式下面結(jié)合附圖和實(shí)例對本發(fā)明作進(jìn)一步詳細(xì)的說明。一般存在兩個(gè)應(yīng)用程序共享使用CPU緩存,本發(fā)明所述的CPU共享緩存分配方法就是合理的給該兩個(gè)應(yīng)用程序劃分緩存。為了實(shí)現(xiàn)本發(fā)明目的,本發(fā)明首先對兩個(gè)應(yīng)用程序進(jìn)行缺失率曲線預(yù)測,再依據(jù)這兩個(gè)缺失率曲線預(yù)測結(jié)果獲取對應(yīng)的最小平均缺失率, 進(jìn)而依據(jù)獲得最小平均缺失率時(shí)的劃分點(diǎn)制定緩存劃分策略,最終實(shí)現(xiàn)全軟件形式的共享
緩存管理。圖1給出了本發(fā)明整體流程圖(1)對兩應(yīng)用程序按照相同方式進(jìn)行缺失率曲線預(yù)測,具體為(11)收集應(yīng)用程序各采樣點(diǎn)的缺失間距數(shù)據(jù);收集缺失間距數(shù)據(jù)可采用插樁法、模擬器收集法、硬件計(jì)數(shù)器等等方式,本發(fā)明優(yōu)選硬件計(jì)數(shù)器,其開銷小,適用于運(yùn)行時(shí)的預(yù)測。具體說明如下在程序運(yùn)行的時(shí)候收集程序的緩存訪問信息,即缺失間距數(shù)據(jù)。為了不修改程序源代碼并降低信息收集的開銷,利用硬件計(jì)數(shù)器記錄這一數(shù)據(jù)。利用硬件計(jì)數(shù)器的采樣功能,監(jiān)控 LAST_LEVEL_CACHE_MISSES,LAST_LEVEL_CACHE_REFERENCES 這兩個(gè)事件。設(shè)置 LAST_LEVEL_CACHE_MISSES事件的閥值為1,因此每一次最后一級緩存缺失都會(huì)記錄一次 LAST_LEVEL_CACHE_REFERENCES數(shù)值,這個(gè)數(shù)值就是缺失間距。利用硬件計(jì)數(shù)器的PEBS功能記錄缺失間距,缺失間距被記錄在一塊內(nèi)存緩沖中,當(dāng)緩沖填滿時(shí)發(fā)出溢出中斷通知讀線程讀取緩沖數(shù)據(jù),清空緩沖。具體實(shí)現(xiàn)時(shí)是通過Iibpfm庫的接口設(shè)置事件并讀取硬件計(jì)數(shù)器。(12)依據(jù)缺失間距數(shù)據(jù)獲取累計(jì)缺失次數(shù)-累計(jì)訪問次數(shù)曲線;累計(jì)缺失次數(shù)就是指被采樣的缺失間距個(gè)數(shù),累計(jì)訪問次數(shù)是缺失間距的和值。 通過缺失間距數(shù)據(jù),可以得到累計(jì)缺失次數(shù)與累計(jì)訪問次數(shù)數(shù)據(jù),通過統(tǒng)計(jì)應(yīng)用程序中所有采樣點(diǎn)的累計(jì)缺失次數(shù)與累計(jì)訪問次數(shù)獲得程序的累計(jì)缺失次數(shù)-累計(jì)訪問次數(shù)曲線。 圖2給出一個(gè)示例,缺失間距數(shù)據(jù)集G = {1,4,5},缺失間距個(gè)數(shù)為3,則累計(jì)缺失次數(shù)為 3+1 = 4,累計(jì)訪問次數(shù)為1+4+5 = 10。(13)計(jì)算分形模型預(yù)測參數(shù);分形模型預(yù)測參數(shù)包括分維θ和截距Α。對累計(jì)缺失次數(shù)-累計(jì)訪問次數(shù)曲線作線性擬合,擬合得到的曲線的斜率即為分維θ,擬合得到的曲線的截距即為截距A。(14)計(jì)算缺失率曲線MRC = A0C(1_0)/ θ,其中C為緩存大?。?2)制定緩存劃分分配策略本發(fā)明提出一種簡單的緩存劃分策略,目的是達(dá)到最低的平均緩存缺失率。對于兩應(yīng)用程序a和b的緩存缺失率曲線MRCa和MRCb,緩存的全部緩存大小為C, 劃分給程序a 的緩存大小為 Alloc_a,則 Alloc_a = min {MRCa (χ) +MRCb (C-χ),χ e [1,C_l]}, 剩余的緩存都劃分給程序b即Alloc_b = C-All0C_a。實(shí)例在一個(gè)雙核處理器上分別運(yùn)行兩個(gè)應(yīng)用,應(yīng)用運(yùn)行時(shí)讀取硬件計(jì)數(shù)器記錄缺失間距,并通過缺失間距數(shù)據(jù)轉(zhuǎn)化成累計(jì)缺失次數(shù)-累計(jì)訪問次數(shù)。當(dāng)數(shù)據(jù)量達(dá)到足以代表程序行為時(shí),我們這里取64M緩存訪問次數(shù),對數(shù)據(jù)進(jìn)行線性擬合,得到模型的兩個(gè)參數(shù),分維和截距。將兩個(gè)參數(shù)代入分形預(yù)測模型,便可得到程序運(yùn)行在某一緩存大小時(shí),程序的緩存缺失率,即緩存缺失率曲線。為了達(dá)到最低的平均緩存缺失率,取使平均緩存缺失率最小的劃分點(diǎn)分配緩存。由上分析可以發(fā)現(xiàn)本發(fā)明方法隔離程序使用緩存區(qū)域,不同的程序使用不同的緩存區(qū)域,雙方不會(huì)相互影響對方的性能。利用硬件計(jì)數(shù)器在運(yùn)行時(shí)分析程序?qū)彺娴男枨螅?動(dòng)態(tài)決定分配給程序的緩存大小,達(dá)到最低的平均緩存缺失率,提升共享緩存系統(tǒng)的平均性能。
權(quán)利要求
1.一種多核處理器共享緩存分配方法,涉及兩個(gè)共享CPU緩存的應(yīng)用程序a和b,該方法具體為(1)缺失率曲線預(yù)測(11)收集應(yīng)用程序i的采樣點(diǎn)的缺失間距數(shù)據(jù),i=a,b;(12)依據(jù)缺失間距數(shù)據(jù)獲取累計(jì)缺失次數(shù)-累計(jì)訪問次數(shù)曲線;(13)對累計(jì)缺失次數(shù)-累計(jì)訪問次數(shù)曲線作線性擬合,擬合得到的曲線的斜率記為分維Qi,擬合得到的曲線的截距記為截距Ai;(14)計(jì)算缺失率曲線WM,其中C為緩存大?。?2)分配緩存程序 a 的緩存 Alloc_a = min {MRCa(x)+MRCb (C-χ),χ e [1,C_l]} 程序 b 的緩存 Alloc_b = c-Alloc_a, 其中,C為CPU的總緩存。
2.根據(jù)權(quán)利要求1所述的多核處理器共享緩存分配方法,其特征在于,所述步驟(11) 采用插樁法、模擬器收集法和硬件計(jì)數(shù)器中的任意一種進(jìn)行缺失間距數(shù)據(jù)統(tǒng)計(jì)。
全文摘要
本發(fā)明提供了一種多核處理器共享緩存分配方法,具體為首先對兩應(yīng)用程序進(jìn)行缺失率曲線預(yù)測,再依據(jù)這兩個(gè)缺失率曲線預(yù)測結(jié)果分別獲取對應(yīng)的最小平均缺失率,進(jìn)而依據(jù)獲得最小平均缺失率時(shí)的劃分點(diǎn)制定緩存分配策略,最終實(shí)現(xiàn)全軟件形式的共享緩存管理,有效提升共享緩存系統(tǒng)的平均性能。
文檔編號G06F12/08GK102521153SQ201110402029
公開日2012年6月27日 申請日期2011年12月7日 優(yōu)先權(quán)日2011年12月7日
發(fā)明者喻之斌, 賀露露, 金海 申請人:華中科技大學(xué)