本發(fā)明涉及一種內(nèi)存庫劃分技術(shù),尤其涉及一種基于數(shù)據(jù)對象感知的內(nèi)存庫劃分方法和裝置。
背景技術(shù):
在對存儲性能進(jìn)行分析評測時,往往需要獲取數(shù)據(jù)流或指令流。然而,用來獲取的數(shù)據(jù)流或指令流的傳統(tǒng)工具或模擬器存在多種問題。首先,模擬器不能提供真實的運行環(huán)境,因此無法嚴(yán)格保證數(shù)據(jù)的真實性和精確性,特別是時間的準(zhǔn)確性無法嚴(yán)格保證。其次,傳統(tǒng)工具可能需要對應(yīng)用或硬件進(jìn)行修改,才能獲取所需的數(shù)據(jù)流或指令流,而這種方法在很多種情況下是不適用的。
主存由多個內(nèi)存庫(bank)組成,例如主流的單條DDR2/3內(nèi)存條會包含8或16個bank。bank數(shù)量會隨主存的容量同步增長。每個bank是一個二位矩陣,包含多個行,每個行又劃分為多列。在bank內(nèi)部又包含一個獨立的行緩存結(jié)構(gòu),用于保存最近一次被訪問的整行數(shù)據(jù)。
采用上述結(jié)構(gòu)的主存能同時利用并行性和局部性來提高訪存性能。訪存并行性是指主存能夠利用多bank結(jié)構(gòu)同時響應(yīng)多個訪存請求,而多個訪存請求重疊執(zhí)行,能夠隱藏部分訪存延遲。訪存局部性是指處理器能直接從行緩沖器(row buffer)讀取之前被緩存的數(shù)據(jù),避免額外的預(yù)充電、行選以及列選等操作。
一旦多個訪存請求同時訪問相同的bank,產(chǎn)生的訪存沖突會導(dǎo)致兩方面的負(fù)面影響。首先,bank沖突會使并行的訪存請求串行執(zhí)行,使訪存延遲成倍增長。其次,行緩存沖突使得原本空間局部性較強的數(shù)據(jù)回寫陣列,而頻繁的換行操作會進(jìn)一步增加訪存的延遲,使處理器的訪存性能惡化。
單芯片多處理器(Chip multiprocessors,CMP,也指多核心)通過復(fù)用傳統(tǒng)的單核處理器設(shè)計,利用并行的方式進(jìn)一步推進(jìn)計算機系統(tǒng)的性能提升。但是,一旦CMP發(fā)起的并行訪存操作爭搶共享bank資源,會導(dǎo)致訪存沖突并降低訪存性能。相關(guān)研究工作在進(jìn)程間對bank進(jìn)行劃分,緩解線程級并行(Thread Level Parallelism,TLP)導(dǎo)致的訪存沖突。但該類方法忽視了指令級并行(Instruction Level Parallelism,ILP)引入的訪存沖突。當(dāng)單個進(jìn)程中共享bank資源的數(shù)據(jù)對象被同時訪問時,仍然會產(chǎn)生訪存沖突。
除處理器外,計算機系統(tǒng)中還存在多種訪存設(shè)備(例如:顯卡,磁盤和網(wǎng)卡等)。雖然這些設(shè)備的訪存行為不僅存在巨大的差異,但訪存設(shè)備之間都會共享主存。
因此,這更需要通過操作系統(tǒng)來靈活調(diào)整數(shù)據(jù)布局,在達(dá)到性能優(yōu)化的同時,兼顧通用性、靈活性和準(zhǔn)確性。
技術(shù)實現(xiàn)要素:
本發(fā)明涉及計算機系統(tǒng)的內(nèi)存管理技術(shù),特別是涉及在不修改硬件和應(yīng)用的前提下,利用缺頁異常在真實機器上準(zhǔn)確地獲取訪存蹤跡的方法,評估應(yīng)用在各執(zhí)行階段的訪存行為,并指導(dǎo)內(nèi)存分配。
本發(fā)明所要解決的技術(shù)問題是克服目前在進(jìn)程間對bank進(jìn)行劃分緩解線程級并行訪存沖突時所忽視的指令級并行所引入的訪存沖突的不足。
為了解決上述技術(shù)問題,本發(fā)明提供了一種基于數(shù)據(jù)對象感知的內(nèi)存庫劃分方法,包括:
根據(jù)數(shù)據(jù)對象的規(guī)模標(biāo)識待分析的數(shù)據(jù)對象;
根據(jù)獲取的子數(shù)據(jù)流,從待分析的數(shù)據(jù)對象中標(biāo)識被并行訪問的數(shù)據(jù)對象,并結(jié)合性能監(jiān)視單元PMU分析被并行訪問的數(shù)據(jù)對象的訪存沖突開銷,確定沖突源,并量化沖突源對性能的負(fù)面影響;
根據(jù)偽缺頁異常的分析,獲取在多個時間片段內(nèi)密集訪問主存的數(shù)據(jù)對象組合,通過操作系統(tǒng)調(diào)整已經(jīng)標(biāo)識出的被并行訪問的數(shù)據(jù)對象在主存中的分布。
優(yōu)選地,獲取子數(shù)據(jù)流包括:利用偽缺頁異常機制捕獲所述子數(shù)據(jù)流。
優(yōu)選地,利用偽缺頁異常機制捕獲所述子數(shù)據(jù)流之后還包括:利用偽缺頁異常機制分析所述子數(shù)據(jù)流。
優(yōu)選地,利用偽缺頁異常機制捕獲所述子數(shù)據(jù)流,包括以下至少之一:
進(jìn)程創(chuàng)建階段,通過未分配物理內(nèi)存獲得所述子數(shù)據(jù)流;
通過數(shù)據(jù)對象內(nèi)存初始化分配獲得所述子數(shù)據(jù)流;
設(shè)置偽缺頁狀態(tài),通過標(biāo)記待分析的數(shù)據(jù)對象獲得所述子數(shù)據(jù)流;
通過觸發(fā)偽缺頁異常獲得所述子數(shù)據(jù)流;
通過無異常數(shù)據(jù)訪問獲得所述子數(shù)據(jù)流。
優(yōu)選地,利用偽缺頁異常機制分析所述子數(shù)據(jù)流包括:
收集偽缺缺頁異常產(chǎn)生的異常地址;
結(jié)合PMU分析當(dāng)前代碼片段所訪問的數(shù)據(jù)對象對性能的負(fù)面影響
采用瞬時的主存訪問頻度和/或次數(shù)和/或時間跨度判斷訪存的性能。
優(yōu)選地,所述數(shù)據(jù)對象包括靜態(tài)數(shù)據(jù)對象或動態(tài)數(shù)據(jù)對象;
通過讀取編譯器生成的符號表來獲取所述靜態(tài)數(shù)據(jù)對象的規(guī)模,通過捕獲操作系統(tǒng)的動態(tài)內(nèi)存分配操作來獲取所述動態(tài)數(shù)據(jù)對象的規(guī)模。
優(yōu)選地,標(biāo)識待分析的數(shù)據(jù)對象,包括:
保存所述待分析的數(shù)據(jù)對象的起始地址和結(jié)束地址。
為了解決上述技術(shù)問題,本發(fā)明還提供了一種基于數(shù)據(jù)對象感知的內(nèi)存庫劃分裝置,包括:
標(biāo)識模塊,設(shè)置為根據(jù)數(shù)據(jù)對象的規(guī)模標(biāo)識待分析的數(shù)據(jù)對象;
數(shù)據(jù)流模塊,設(shè)置為根據(jù)獲取的子數(shù)據(jù)流,從待分析的數(shù)據(jù)對象中標(biāo)識被并行訪問的數(shù)據(jù)對象,并結(jié)合PMU分析被并行訪問的數(shù)據(jù)對象的訪存沖突開銷,確定沖突源,并量化沖突源對性能的負(fù)面影響;
劃分模塊,設(shè)置為根據(jù)偽缺頁異常的分析,獲取在多個時間片段內(nèi)密集訪問主存的數(shù)據(jù)對象組合,通過操作系統(tǒng)調(diào)整已經(jīng)標(biāo)識出的被并行訪問的數(shù)據(jù)對象在主存中的分布。
優(yōu)選地,所述數(shù)據(jù)流模塊還設(shè)置為利用偽缺頁異常機制捕獲所述子數(shù)據(jù)流。
優(yōu)選地,所述數(shù)據(jù)流模塊還設(shè)置為利用偽缺頁異常機制分析所述子數(shù)據(jù)流。
優(yōu)選地,所述數(shù)據(jù)流模塊利用偽缺頁異常機制捕獲所述子數(shù)據(jù)流,包括以下至少之一:
進(jìn)程創(chuàng)建階段,通過未分配物理內(nèi)存獲得所述子數(shù)據(jù)流;
通過數(shù)據(jù)對象內(nèi)存初始化分配獲得所述子數(shù)據(jù)流;
設(shè)置偽缺頁狀態(tài),通過標(biāo)記待分析的數(shù)據(jù)對象獲得所述子數(shù)據(jù)流;
通過觸發(fā)偽缺頁異常獲得所述子數(shù)據(jù)流;
通過無異常數(shù)據(jù)訪問獲得所述子數(shù)據(jù)流。
優(yōu)選地,所述數(shù)據(jù)流模塊利用偽缺頁異常機制分析所述子數(shù)據(jù)流包括:
收集偽缺缺頁異常產(chǎn)生的異常地址;
結(jié)合PMU分析當(dāng)前代碼片段所訪問的數(shù)據(jù)對象對性能的負(fù)面影響
采用瞬時的主存訪問頻度和/或次數(shù)和/或時間跨度判斷訪存的性能。
優(yōu)選地,所述標(biāo)識模塊通過讀取編譯器生成的符號表來獲取所述靜態(tài)數(shù)據(jù)對象的規(guī)模,通過捕獲操作系統(tǒng)的動態(tài)內(nèi)存分配操作來獲取所述動態(tài)數(shù)據(jù)對象的規(guī)模。
與現(xiàn)有技術(shù)相比,本申請的實施例不修改硬件和應(yīng)用,利用缺頁異常在真實機器上評估應(yīng)用在各執(zhí)行階段的訪存行為并指導(dǎo)內(nèi)存分配,能夠準(zhǔn)確地獲取訪存蹤跡,可以獲得更高的真實性和精確性。
本發(fā)明的其它特征和優(yōu)點將在隨后的說明書中闡述,并且,部分地從說明書中變得顯而易見,或者通過實施本發(fā)明而了解。本發(fā)明的目的和其他優(yōu)點可通過在說明書、權(quán)利要求書以及附圖中所特別指出的結(jié)構(gòu)來實現(xiàn)和獲得。
附圖說明
附圖用來提供對本發(fā)明技術(shù)方案的進(jìn)一步理解,并且構(gòu)成說明書的一部分,與本申請的實施例一起用于解釋本發(fā)明的技術(shù)方案,并不構(gòu)成對本發(fā)明技術(shù)方案的限制。
圖1是本發(fā)明實施例的基于數(shù)據(jù)對象感知的bank劃分方法的流程圖;
圖2是本發(fā)明實施例的基于數(shù)據(jù)對象感知的bank劃分裝置的結(jié)構(gòu)示意圖;
圖3是本發(fā)明實施例使用偽缺頁異常獲取子數(shù)據(jù)流,并標(biāo)識被并行訪問數(shù)據(jù)對象的方法的示意圖;
圖4是本發(fā)明實施例的基于數(shù)據(jù)對象感知的bank劃分裝置實例的結(jié)構(gòu)示意圖。
具體實施方式
以下將結(jié)合附圖及實施例來詳細(xì)說明本發(fā)明的實施方式,借此對本發(fā)明如何應(yīng)用技術(shù)手段來解決技術(shù)問題,并達(dá)成技術(shù)效果的實現(xiàn)過程能充分理解并據(jù)以實施。本申請實施例以及實施例中的各個特征在不相沖突前提下的相互結(jié)合,均在本發(fā)明的保護(hù)范圍之內(nèi)。
另外,在附圖的流程圖示出的步驟可以在諸如一組計算機可執(zhí)行指令的計算機系統(tǒng)中執(zhí)行。并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。
本申請的實施例利用缺頁異常機制來分析進(jìn)程在各時間片段內(nèi)的訪存行為,標(biāo)識時間段內(nèi)被并行訪問的數(shù)據(jù)對象,并確定數(shù)據(jù)對象之間的訪存沖突開銷。通過修改操作系統(tǒng)的內(nèi)存分配器,將沖突開銷較大的數(shù)據(jù)對象分散到不同的bank中,避免頻繁訪存沖突對性能的負(fù)面影響。
如圖1所示,本申請實施例提供的基于數(shù)據(jù)對象感知的bank劃分方法主要包括如下內(nèi)容。
步驟S110,根據(jù)數(shù)據(jù)對象的規(guī)模標(biāo)識待分析的數(shù)據(jù)對象,減少分析過程的復(fù)雜度和開銷。
上述數(shù)據(jù)對象的規(guī)模,是指數(shù)據(jù)對象占據(jù)內(nèi)存單元的多少個字節(jié)。
可以有兩種方式來獲取數(shù)據(jù)對象的規(guī)模,而這兩種方式分別針對的是靜態(tài)數(shù)據(jù)對象和動態(tài)數(shù)據(jù)對象。
對于靜態(tài)數(shù)據(jù)對象,其所占據(jù)的內(nèi)存單元的數(shù)量在編譯階段已經(jīng)確定。例如,全局變量(Global Variable)和靜態(tài)變量(Static Variable)。因此,通過讀取編譯器生成的符號表即可以確定靜態(tài)數(shù)據(jù)對象的規(guī)模。本申請的實施例中,如果靜態(tài)數(shù)據(jù)對象在符號的起始地址和結(jié)束地址之間的差值大于某個閾值,則相應(yīng)的靜態(tài)數(shù)據(jù)對象被標(biāo)識。
對于動態(tài)數(shù)據(jù)對象,其所占據(jù)的內(nèi)存單元的數(shù)量在運行階段才能被確定。例如,隨用戶輸入的變化,動態(tài)數(shù)據(jù)對象的規(guī)模會出現(xiàn)變化。因此,本申請的實施例,通過捕獲操作系統(tǒng)的動態(tài)內(nèi)存分配(malloc)操作來獲取被申請的內(nèi)存大小,如果被申請的內(nèi)存大小超過某個閾值,則相應(yīng)的動態(tài)數(shù)據(jù)對象被標(biāo)識。
所述的規(guī)模是根據(jù)高速緩沖存儲器(Cache)的容量來判斷的,數(shù)據(jù)規(guī)模超過Cache的容量,無法在Cache中裝載,所以對這些數(shù)據(jù)的操作會導(dǎo)致頻繁的主存訪問。相反,如果數(shù)據(jù)能夠在Cache中駐留,由于不訪問主存,也就不會發(fā)生訪存沖突。
標(biāo)識的方式,是保存待分析的數(shù)據(jù)對象的起始地址和結(jié)束地址(這個地址是虛擬地址,數(shù)據(jù)對象虛擬地址連續(xù))。例如數(shù)據(jù)對象O,Os和Oe分別代表起始地址和結(jié)束地址。要對[Os,…,Oe]地址段的訪問,就是在訪問數(shù)據(jù)對象O。
為了明確訪存沖突源,需要知道在各時間段內(nèi)被處理器同時訪問的數(shù)據(jù)對象組合。無論對于單進(jìn)程,還是多進(jìn)程,只有多個數(shù)據(jù)對象被同時訪問,并且產(chǎn)生頻繁的訪存沖突,才會對性能造成負(fù)面的影響。操作系統(tǒng)會為數(shù)據(jù)對象分配私有的物理頁幀。多個進(jìn)程之間不共享物理內(nèi)存,因此來自不同進(jìn)程的數(shù)據(jù)對象會分散在不同的物理頁幀中。而單進(jìn)程內(nèi)部的數(shù)據(jù)對象,當(dāng)其規(guī)模超過基頁的大小,由于基頁無法同時容納這些數(shù)據(jù)對象,因此這些數(shù)據(jù)對象同樣會分散在不同的頁幀中。因此,需要操作系統(tǒng)去捕獲內(nèi)存申請操作,有針對性地分析規(guī)模較大的數(shù)據(jù)對象的訪存行為。其中,規(guī)模較大的數(shù)據(jù)對象,比如是超過預(yù)設(shè)規(guī)模的數(shù)據(jù)對象。
步驟S120,根據(jù)在程序執(zhí)行過程中獲取的子數(shù)據(jù)流,從待分析的數(shù)據(jù)對象中標(biāo)識被并行訪問的數(shù)據(jù)對象,并結(jié)合PMU(Performance Monitor Unit,性能監(jiān)視單元)分析被并行訪問的數(shù)據(jù)對象的訪存沖突開銷,確定沖突源,并量化沖突源對性能的負(fù)面影響。
數(shù)據(jù)流是處理器訪問內(nèi)存地址的序列。而地址與數(shù)據(jù)對象有一一對應(yīng)的關(guān)系,因此,子數(shù)據(jù)流中的地址可以用來標(biāo)識數(shù)據(jù)對象。
本申請的實施例中,處理器在一個預(yù)設(shè)時間段內(nèi)訪問過的數(shù)據(jù)對象,被認(rèn)為是被處理器并行訪問的數(shù)據(jù)對象。
其中,確定沖突源是根據(jù)子數(shù)據(jù)流中的地址,就能夠確定處理器在某個時間段所操作的數(shù)據(jù)對象。在量化沖突源對性能的負(fù)面影響時,是根據(jù)預(yù)設(shè)時間段內(nèi)處理器訪問主存的次數(shù)來進(jìn)行判斷的。只有多個數(shù)據(jù)對象被同時訪問,并且頻繁訪存的時候,才會產(chǎn)生較大的負(fù)面影響。
在單位時間段內(nèi)處理器訪問主存的次數(shù),比如每個時鐘周期完成多少次訪存(access/time),表示處理器瞬時的訪問頻度。頻度越高,說明單位時間段內(nèi)的訪問主存的次數(shù)越多,那么對性能的負(fù)面影響也就越大。
本發(fā)明使用偽缺頁異常的方法來捕獲并分析子數(shù)據(jù)流。
數(shù)據(jù)流是指進(jìn)程的訪存序列,其會因訪問不同的數(shù)據(jù)對象而發(fā)生變化。為了捕獲沖突對象子集,需要對子數(shù)據(jù)流進(jìn)行分析。從進(jìn)程瞬時的訪存特征判斷處理器當(dāng)前所訪問的數(shù)據(jù)是否會導(dǎo)致頻繁的訪存沖突。如果把數(shù)據(jù)流的處理器的訪存序列看成一個集合,則子數(shù)據(jù)流就是訪存序列這個集合的子集。
對于會導(dǎo)致頻繁訪存沖突的經(jīng)過標(biāo)識的被并行訪問的數(shù)據(jù)對象,為其分配特定的物理內(nèi)存。將不同的數(shù)據(jù)對象所獲得的物理內(nèi)存分散在不同的bank中,那么這些數(shù)據(jù)對象就不再共享bank資源。即使數(shù)據(jù)對象被同時訪問,也不會產(chǎn)生訪存沖突。
現(xiàn)有技術(shù)基于模擬器和編譯器來對訪存的行為進(jìn)行分析,并沒有在操作系統(tǒng)層開展工作。而使用模擬器和編譯器進(jìn)行分析,畢竟不屬于真實環(huán)境,因此分析所獲得的結(jié)果存在較大的偏差。
步驟S130,根據(jù)偽缺頁異常的分析,獲取在多個時間片段內(nèi)密集訪問主存的數(shù)據(jù)對象組合,通過操作系統(tǒng)調(diào)整已經(jīng)標(biāo)識出的被并行訪問的數(shù)據(jù)對象在主存中的分布,避免沖突開銷較大的數(shù)據(jù)對象共享使用bank。
本發(fā)明根據(jù)rank地址和bank地址將部分物理內(nèi)存劃分為多個鏈表,即同一鏈表中的頁幀屬于同一bank。由于僅有部分頁幀被放入bank列表(list),剩余的頁幀仍然采用伙伴(buddy)系統(tǒng)管理。這是為了滿足應(yīng)用和設(shè)備對物理內(nèi)存的不同需求。本申請的實施例,同一鏈表中的頁幀在bank位上的取值相同。
同時,本申請的實施例還修改了物理內(nèi)存分配接口,通過參數(shù)來指定期望分區(qū)的頁幀所對應(yīng)的鏈表。對于多道程序,需要首先保證并行的程序之間會均分bank資源。例如雙核處理器,各個處理器會獲得二分之一的bank資源。單個進(jìn)程內(nèi)部的數(shù)據(jù)對象根據(jù)染色結(jié)果來指導(dǎo)bank劃分,并且各個進(jìn)程已經(jīng)獲取bank資源會在不同類型的顏色之間均分。不同顏色的數(shù)據(jù)對象,可能會被同時訪問,所以為這些數(shù)據(jù)對象分配來自不同鏈表的頁幀。
操作系統(tǒng)的傳統(tǒng)內(nèi)存分器,只有一個參數(shù),該參數(shù)是指定應(yīng)該分配的內(nèi)存的數(shù)量,也就是說傳統(tǒng)的內(nèi)存分配器只要在內(nèi)存池不為空時,就會從內(nèi)存池中隨機選取一個頁幀。而在本專利中對內(nèi)存分配借口進(jìn)行了修改,加入了另一個參數(shù),用于指定期望分區(qū)的頁幀屬于哪個鏈表,也就是也真會分布在哪個bank中。
如圖2所示,本申請的實施例中利用偽缺頁異常捕獲子數(shù)據(jù)流主要包括如下內(nèi)容。
步驟S210,進(jìn)程創(chuàng)建階段,未分配物理內(nèi)存。
本申請的實施例利用頁表項的保留位來區(qū)分正常的缺頁異常和偽缺頁異常。由于進(jìn)程創(chuàng)建階段沒有虛擬地址和物理地址之間的映射關(guān)系,即對應(yīng)的頁表項為空。此時,頁表項的當(dāng)前(present)位和保留(reserve)位均為0。
步驟S220,數(shù)據(jù)對象內(nèi)存初始化分配。當(dāng)處理器發(fā)出內(nèi)存請求時,內(nèi)存管理單元(MMU)會檢查相應(yīng)頁表項的present位。如果present位是0,缺頁異常會在初始階段通知操作系統(tǒng)去分配一個新的物理頁幀。當(dāng)數(shù)據(jù)對象對應(yīng)頁表項中的present位為1時,處理器對該物理頁幀的訪問不會觸發(fā)異常,但是PMU會記錄訪問的數(shù)據(jù)是否直接在cache中命中,或者需要發(fā)起片外存儲訪問。
步驟S230,設(shè)置偽缺頁狀態(tài),標(biāo)記待分析的數(shù)據(jù)對象。一旦完成內(nèi)存分配,操作系統(tǒng)在空閑內(nèi)存充足的情況下不會主動回收進(jìn)程的頁幀,即操作系統(tǒng)無法明確處理器所訪問的數(shù)據(jù)對象。因此,在異常處理函數(shù)(中斷和系統(tǒng)調(diào)用)內(nèi)要清除數(shù)據(jù)對象對應(yīng)頁表項的present位,將值為1的present位重置為0。
本申請的實施例,到操作系統(tǒng)完成物理內(nèi)存分配,也就是給某個虛擬頁建立好虛實地址的映射關(guān)系時,會將present位置1。之后,處理器對這個虛擬頁的訪問不再觸發(fā)異常,因為present位始終保持為1。只有present位變?yōu)?,處理器對該頁的訪問才會觸發(fā)異常。通常情況下,只有系統(tǒng)中的空閑頁幀較少時,操作系統(tǒng)才會回收物理頁幀,并將present位置0。本申請的實施例是讓采用偽缺頁異常的方式,主動將present位置0,強制處理器向操作系統(tǒng)報告其所訪問的地址。通過獲取的異常地址,來判斷數(shù)據(jù)對象。
本申請的實施例,需要嚴(yán)格區(qū)分偽缺頁異常與正常缺頁異常。如果不加以區(qū)分,每一次缺頁異常都會分配新的頁幀,導(dǎo)致應(yīng)用原有正確的數(shù)據(jù)丟失而產(chǎn)生錯誤的計算結(jié)果。如圖3所示,本申請的實施例使用頁表項中的保留位(reserve)位來對二者進(jìn)行區(qū)分。在執(zhí)行階段操作系統(tǒng)定期清除步驟S110中通過閾值篩選出來的數(shù)據(jù)對象對應(yīng)頁表項的present位,同時會將頁表項中的保留位置1。
步驟S240,觸發(fā)偽缺頁異常。當(dāng)處理器再次訪問這些頁表項的present位被置為0的數(shù)據(jù)對象時,會產(chǎn)生偽缺頁異常,并向操作系統(tǒng)報告異常地址。數(shù)據(jù)對象在內(nèi)存中表現(xiàn)為一組物理頁幀。
然后,根據(jù)異常地址來分析所訪問的數(shù)據(jù)對象。當(dāng)處理器訪問頁幀時,發(fā)現(xiàn)present位為0并觸發(fā)異常。同時操作系統(tǒng)會讀取保留位的值,如果保留位為0表示正常缺頁異常,由操作系統(tǒng)分配頁幀。如果保留位為1表示偽缺頁異常,此時操作系統(tǒng)僅記錄發(fā)生異常的地址。
步驟S250,無異常數(shù)據(jù)訪問。當(dāng)數(shù)據(jù)對象對應(yīng)頁表項中的present位為1時,處理器對該頁幀的訪問不會觸發(fā)異常,但是PMU會記錄訪問的數(shù)據(jù)是否直接在cache中命中,或者需要發(fā)起片外存儲訪問。
如圖3所示,本申請的實施例中基于偽缺頁異常的訪存沖突分析主要包括如下內(nèi)容。
步驟S310,收集偽缺缺頁異常產(chǎn)生的異常地址。根據(jù)內(nèi)存申請階段記錄的虛擬地址表示捕獲的異常地址所屬的數(shù)據(jù)對象,確定預(yù)設(shè)時間段內(nèi)所訪問的數(shù)據(jù)對象組合。上述異常地址,用來標(biāo)識所訪問的數(shù)據(jù)對象。對象和地址之間存在一一對應(yīng)的關(guān)系,通過異常地址就能知道所訪問的數(shù)據(jù)對象。
步驟S320,結(jié)合PMU分析當(dāng)前代碼片段所訪問的數(shù)據(jù)對象對性能的負(fù)面影響。PMU記錄每1000次偽缺頁異常的時間跨度,以及該時間跨度內(nèi)處理器訪問主存的次數(shù)。本申請的實施例中,訪問頻度頻度高,并且越接近閾值,說明對性能的負(fù)面影響越大。只有接近該閾值,才說明性能差。
步驟S330,采用瞬時的主存訪問頻度(主存訪問次數(shù)/時間跨度)判斷訪存性能的高低。訪存頻度越高,說明訪存操作對性能的影響越大,將對應(yīng)的數(shù)據(jù)對象標(biāo)識為沖突數(shù)據(jù)對象子集。將該信息提供給操作系統(tǒng),避免子集中的數(shù)據(jù)對象共享相同的bank。
本申請的實施例基于數(shù)據(jù)對象感知的bank劃分方法,可以同時消除TLP和ILP技術(shù)產(chǎn)生的訪存沖突。本申請的實施例以時間切片的方式捕獲進(jìn)程的子數(shù)據(jù)流,并通過分析子數(shù)據(jù)流的訪存特征選取訪存沖突密集階段所訪問的數(shù)據(jù)對象組合,作為沖突數(shù)據(jù)對象集。然后,基于剖視結(jié)果為沖突數(shù)據(jù)對象分配不同的bank資源。無論是TLP還是ILP技術(shù),所產(chǎn)生的并行主存訪問操作都不會爭搶bank,因此能進(jìn)一步提高CMP處理器的訪存性能。
本申請的實施例利用缺頁異常來分析進(jìn)程的瞬時訪存行為,能在多種處理器中實用。所有的剖視分析工作均基于真實處理器,保證數(shù)據(jù)的準(zhǔn)確性。使用操作系統(tǒng)來調(diào)整數(shù)據(jù)對象的布局,無需對源碼修改。
本發(fā)明根據(jù)上述方法實施例,相應(yīng)地還提供了一種基于數(shù)據(jù)對象感知的bank劃分裝置實施例,如圖2所示,包括:
標(biāo)識模塊,設(shè)置為根據(jù)數(shù)據(jù)對象的規(guī)模標(biāo)識待分析的數(shù)據(jù)對象;
數(shù)據(jù)流模塊,設(shè)置為根據(jù)獲取的子數(shù)據(jù)流,從待分析的數(shù)據(jù)對象中標(biāo)識被并行訪問的數(shù)據(jù)對象,并結(jié)合PMU分析被并行訪問的數(shù)據(jù)對象的訪存沖突開銷,確定沖突源,并量化沖突源對性能的負(fù)面影響;
劃分模塊,設(shè)置為根據(jù)偽缺頁異常的分析,獲取在多個時間片段內(nèi)密集訪問主存的數(shù)據(jù)對象組合,通過操作系統(tǒng)調(diào)整已經(jīng)標(biāo)識出的被并行訪問的數(shù)據(jù)對象在主存中的分布。
所述數(shù)據(jù)流模塊還設(shè)置為利用偽缺頁異常機制捕獲所述子數(shù)據(jù)流。
所述數(shù)據(jù)流模塊還設(shè)置為利用偽缺頁異常機制分析所述子數(shù)據(jù)流。
所述數(shù)據(jù)流模塊利用偽缺頁異常機制捕獲所述子數(shù)據(jù)流,包括以下至少之一:
進(jìn)程創(chuàng)建階段,通過未分配物理內(nèi)存獲得所述子數(shù)據(jù)流;
通過數(shù)據(jù)對象內(nèi)存初始化分配獲得所述子數(shù)據(jù)流;
設(shè)置偽缺頁狀態(tài),通過標(biāo)記待分析的數(shù)據(jù)對象獲得所述子數(shù)據(jù)流;
通過觸發(fā)偽缺頁異常獲得所述子數(shù)據(jù)流;
通過無異常數(shù)據(jù)訪問獲得所述子數(shù)據(jù)流。
所述數(shù)據(jù)流模塊利用偽缺頁異常機制分析所述子數(shù)據(jù)流包括:
收集偽缺缺頁異常產(chǎn)生的異常地址;
結(jié)合PMU分析當(dāng)前代碼片段所訪問的數(shù)據(jù)對象對性能的負(fù)面影響
采用瞬時的主存訪問頻度和/或次數(shù)和/或時間跨度判斷訪存的性能。
所述標(biāo)識模塊通過讀取編譯器生成的符號表來獲取所述靜態(tài)數(shù)據(jù)對象的規(guī)模,通過捕獲操作系統(tǒng)的動態(tài)內(nèi)存分配操作來獲取所述動態(tài)數(shù)據(jù)對象的規(guī)模。
實施例一
結(jié)合圖4,說明基于數(shù)據(jù)對象感知的bank劃分裝置實例:
主要包括內(nèi)存申請捕獲模塊410、數(shù)據(jù)對象監(jiān)測狀態(tài)設(shè)定模塊420、子數(shù)據(jù)流捕獲模塊430、子數(shù)據(jù)流分析模塊440以及數(shù)據(jù)對象染色模塊450。
內(nèi)存申請捕獲模塊410,用于確定待分析的數(shù)據(jù)對象。進(jìn)程數(shù)據(jù)對象的數(shù)目較多,但是大部分的數(shù)據(jù)可以駐留與cache中,因此需要挑選那些可能導(dǎo)致頻繁訪存的數(shù)據(jù)對象并進(jìn)行分析。該模塊將選定的數(shù)據(jù)對象傳遞給對象檢測狀態(tài)設(shè)定模塊。
數(shù)據(jù)對象監(jiān)測狀態(tài)設(shè)定模塊420,與內(nèi)存申請捕獲模塊410相連,用于定期將數(shù)據(jù)對象對應(yīng)的頁表項中的present位置0。同時為了區(qū)分正常的缺頁異常和偽缺頁異常,在將present位置0的過程中,同時還將頁表項中的reserved位置1。
子數(shù)據(jù)流捕獲模塊430,與數(shù)據(jù)對象監(jiān)測狀態(tài)設(shè)定模塊420相連,用于標(biāo)識被并行訪問的數(shù)據(jù)對象。當(dāng)處理器訪問數(shù)據(jù)對象時,如果present位為0,處理器會觸發(fā)異常。缺頁異常處理程序會根據(jù)reserved位的取值進(jìn)行對應(yīng)的操作。如果reserved位為0,說明是正常的缺頁異常,為進(jìn)程分配物理頁幀;否則,說明是偽缺頁異常,在記錄異常地址后返回用戶態(tài)。
子數(shù)據(jù)流分析模塊440,與數(shù)據(jù)對象監(jiān)測狀態(tài)設(shè)定模塊420相連,用于分析當(dāng)前訪問的數(shù)據(jù)對象是否產(chǎn)生頻繁的訪存沖突。該模塊記錄每一千次偽缺頁異常的時間跨度,并記錄該時間段內(nèi)的片外存儲訪問的次數(shù)。然后用二者的比值來表示處理器的瞬時訪問頻度,頻度越高說明該時間段內(nèi)的訪存操作對性能的負(fù)面影響也越大。因此,挑選訪存頻度較高的數(shù)據(jù)對象組合作為待優(yōu)化的數(shù)據(jù)對象。
數(shù)據(jù)對象染色模塊450,與子數(shù)據(jù)流捕獲模塊430及子數(shù)據(jù)流分析模塊440相連,用于指導(dǎo)內(nèi)存分配。通過獲取子數(shù)據(jù)流捕獲和分析模塊的輸出,該模塊將所有存在沖突的數(shù)據(jù)對象染成不同的顏色,并通知操作系統(tǒng)在下次進(jìn)程執(zhí)行時,避免不同顏色的數(shù)據(jù)共享使用bank資源。
本發(fā)明所要解決如何減少CMP多核處理器的并行訪存請求對bank資源的爭搶,包含三個方面:1.)根據(jù)應(yīng)用的訪存行為來標(biāo)識沖突源,這需要明確進(jìn)程各執(zhí)行片段所訪問的數(shù)據(jù)對象;2.)準(zhǔn)確量化多個數(shù)據(jù)對象被同時訪問時的訪存性能,明確這些數(shù)據(jù)對象是否存在優(yōu)化的價值;3.)根據(jù)分析的結(jié)果調(diào)整數(shù)據(jù)布局,避免被同時訪問并導(dǎo)致頻繁訪存沖突的數(shù)據(jù)對象共享bank資源。
本申請的實施例中,無論對于單進(jìn)程,還是多進(jìn)程,只要多個數(shù)據(jù)對象被處理器同時訪問,并且產(chǎn)生頻繁的訪存沖突,才會導(dǎo)致對性能的負(fù)面影響。因此,首先要明確進(jìn)程所包含的哪些數(shù)據(jù)對象有可能會頻繁產(chǎn)生訪存沖突。
本申請的實施例中,數(shù)據(jù)對象是程序的重要組成部分,其僅僅是一個靜態(tài)的概念,而在進(jìn)程執(zhí)行過程中可能存在多種并行訪問的數(shù)據(jù)對象組合。因此,必須標(biāo)識進(jìn)程實際執(zhí)行過程中的并行訪問數(shù)據(jù)對象。
本申請的實施例中,由于處理器設(shè)計的差異會表現(xiàn)出相異的訪存行為,例如高速緩沖存儲器(cache)容量,相聯(lián)度和替換算法等。因此,需要根據(jù)真實處理器的訪存行為來分析并行訪問數(shù)據(jù)對象的訪存開銷,通過內(nèi)存分配的方式避免開銷較大的數(shù)據(jù)對象共享bank。
本申請的實施例以數(shù)據(jù)對象為中心對bank資源進(jìn)行劃分,目的是為了同時消除線程級并行(thread level parallelism,TLP)和指令級并行(instruction level parallelism,ILP)技術(shù)產(chǎn)生的訪存沖突。本發(fā)明提出的偽缺頁異常的方法,以時間切片的方式捕獲進(jìn)程的子數(shù)據(jù)流,基于子數(shù)據(jù)流中的訪存地址來標(biāo)識所訪問的數(shù)據(jù)對象。同時,結(jié)合PMU分析子數(shù)據(jù)流的訪存特征,并選取訪存沖突密集階段所訪問的數(shù)據(jù)對象組合,作為沖突數(shù)據(jù)對象集。最后,基于剖視結(jié)果為沖突數(shù)據(jù)對象分配不同的bank資源。無論是TLP還是ILP技術(shù),它們產(chǎn)生的并行主存訪問操作都不會爭搶bank,因此能進(jìn)一步提高CMP處理器的訪存性能。本申請的實施例利用缺頁異常來分析進(jìn)程的瞬時訪存行為,能在多種處理器中使用。本申請實施例中所有的剖視分析工作均基于真實處理器,保證分析的準(zhǔn)確性和真實性。使用操作系統(tǒng)來調(diào)整數(shù)據(jù)對象的布局,不依賴特殊的底層硬件,也無需對源碼修改。
本領(lǐng)域的技術(shù)人員應(yīng)該明白,上述的本申請實施例所提供的裝置和/或系統(tǒng)的各組成部分,以及方法中的各步驟,它們可以集中在單個的計算裝置上,或者分布在多個計算裝置所組成的網(wǎng)絡(luò)上。可選地,它們可以用計算裝置可執(zhí)行的程序代碼來實現(xiàn)。從而,可以將它們存儲在存儲裝置中由計算裝置來執(zhí)行,或者將它們分別制作成各個集成電路模塊,或者將它們中的多個模塊或步驟制作成單個集成電路模塊來實現(xiàn)。這樣,本發(fā)明不限制于任何特定的硬件和軟件結(jié)合。
雖然本發(fā)明所揭露的實施方式如上,但所述的內(nèi)容僅為便于理解本發(fā)明而采用的實施方式,并非用以限定本發(fā)明。任何本發(fā)明所屬領(lǐng)域內(nèi)的技術(shù)人員,在不脫離本發(fā)明所揭露的精神和范圍的前提下,可以在實施的形式及細(xì)節(jié)上進(jìn)行任何的修改與變化,但本發(fā)明的專利保護(hù)范圍,仍須以所附的權(quán)利要求書所界定的范圍為準(zhǔn)。