一種并行計算系統(tǒng)中的磁盤緩存方法及裝置制造方法
【專利摘要】本發(fā)明提供了一種并行計算系統(tǒng)中的磁盤緩存方法及裝置。其中所述方法包括:預(yù)先分配記錄數(shù)據(jù)和消息數(shù)據(jù)在所述處理數(shù)據(jù)內(nèi)存區(qū)中各自所占的比例;在數(shù)據(jù)加載過程中若記錄數(shù)據(jù)在處理數(shù)據(jù)內(nèi)存區(qū)中的容量將要超過預(yù)先分配的比例時,則以Hash桶為單位將部分記錄數(shù)據(jù)緩存到磁盤空間;在計算任務(wù)對記錄數(shù)據(jù)的遍歷訪問過程中,若將要求訪問的Hash桶位于磁盤空間,并且處理數(shù)據(jù)內(nèi)存區(qū)中剩余的記錄數(shù)據(jù)空間不足以載入所述將要求訪問的Hash桶,則將處理數(shù)據(jù)內(nèi)存區(qū)中已訪問過的Hash桶逐個緩存到磁盤空間,直至釋放的空間能夠載入所述將要求訪問的Hash桶。本發(fā)明能在基于BSP模型的并行迭代計算系統(tǒng)中實(shí)現(xiàn)數(shù)據(jù)向磁盤的自動化緩存。
【專利說明】一種并行計算系統(tǒng)中的磁盤緩存方法及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種整體同步并行(BulkSynchronous Parallel Computing Model,簡稱BSP)計算模型【技術(shù)領(lǐng)域】,具體涉及一種基于BSP計算模型的并行計算系統(tǒng)中的磁盤緩存方法及裝置。
【背景技術(shù)】
[0002]BSP計算模型,又名大同步模型或BSP模型,由哈佛大學(xué)Viliant和牛津大學(xué)BillMcColl (1990)提出。一個BSP模型包括由網(wǎng)絡(luò)互聯(lián)的多個處理單元。每一個處理單元都有一個快速的本地內(nèi)存,并且可以啟動多個線程的計算任務(wù)。一個BSP計算過程包括一系列的全局超級步的迭代過程。如圖1所示,一個超級步包括以下三個順序的階段:
[0003](I)并發(fā)本地計算:在每一個處理單元上都進(jìn)行若干計算任務(wù)。每一個計算進(jìn)程只使用存儲于本地內(nèi)存中的數(shù)據(jù)。各單元、各計算進(jìn)程之間執(zhí)行的本地計算是相互獨(dú)立的,是異步發(fā)生的。
[0004](2)通信:在這一階段,進(jìn)程之間可交換數(shù)據(jù)。
[0005](3)路障同步:當(dāng)一個進(jìn)程完成上述本地計算和通信后,到達(dá)這個點(diǎn)(路障),等待所有其他進(jìn)程都完成它們的通信階段,稱為大同步。
[0006]圖1展示了超級步的具體過程,這些進(jìn)程間的排列是沒有順序的,可以任意方式映射到處理單元上?,F(xiàn)有的基于BSP模型的并行迭代處理系統(tǒng),主要包括:Google的Pregel系統(tǒng)、Apache開源的HAMA系統(tǒng)以及Giraph系統(tǒng),以下進(jìn)行簡單介紹。
[0007](I) Google 的 Pregel 系統(tǒng)
[0008]Pregel系統(tǒng)是為了解決云環(huán)境下大規(guī)模圖并行迭代計算而設(shè)計的一個可擴(kuò)展的、容錯的、基于BSP模型的并行計算平臺。
[0009]Pregel的計算過程是由一系列的迭代步驟組成,即超級步。在每一個超級步中,系統(tǒng)框架會并行的調(diào)用用戶自定義函數(shù)對存儲于本地的每個頂點(diǎn)處理,并將結(jié)果以消息形式發(fā)送給其他目標(biāo)頂點(diǎn)。該函數(shù)描述了每一個頂點(diǎn)在一個超級步中的行為。同時本地頂點(diǎn)可以接收和處理在上一個超級步中發(fā)送給該頂點(diǎn)的消息,并且向其他的頂點(diǎn)發(fā)送消息,而在本超級步中發(fā)送出去的消息會被接收的頂點(diǎn)在下一個超級步中進(jìn)行處理。頂點(diǎn)還可以更新自身及其出邊的狀態(tài)。消息則可以沿著出邊發(fā)送給能夠到達(dá)的頂點(diǎn),也可以發(fā)送給任意它已知標(biāo)識符的頂點(diǎn)。
[0010]Pregel的輸入是一個有向圖,其中每一個頂點(diǎn)都由一個全局ID進(jìn)行唯一的標(biāo)識。每一個頂點(diǎn)帶有一個值以及一個出邊的列表,每條邊也都帶有一個值以及它的到達(dá)頂點(diǎn)的ID0
[0011]Pregel將一個圖分成若干分片,每一分片包含一系列的頂點(diǎn)和它們自己的出邊。將某一個頂點(diǎn)劃分到哪一個分片中僅僅取決于頂點(diǎn)的ID,這就使得給定一個頂點(diǎn)就可以知道它所在的分片是哪一個,即使該分片在其他的機(jī)器上。系統(tǒng)默認(rèn)的分片函數(shù)是哈希函數(shù),同時允許用戶自定義的分配方式。[0012]目前的Pregel系統(tǒng),整個計算過程中的所有數(shù)據(jù)都是駐留在內(nèi)存中,因此,它是一個完全基于內(nèi)存運(yùn)行的BSP并行計算系統(tǒng)。
[0013](2) HAMA 系統(tǒng)
[0014]HAMA系統(tǒng)是一個基于Hadoop的針對大型矩陣和圖運(yùn)算的分布式框架。HAMA目標(biāo)是成為對不同科學(xué)應(yīng)用的有力工具,通過簡單的API接口為開發(fā)者和研究者提供基礎(chǔ)工具。HAMA目前已經(jīng)被歸為Hadoop的一個子項(xiàng)目。
[0015]HAMA采用了分層的架構(gòu)模式,其中包含了三個組件:HAMA Core為矩陣和圖運(yùn)算提供了原語,HAMA Shell提供了與用戶交互的控制臺,還有HAMA API。
[0016]HAMA作為一個開源項(xiàng)目,目前最新的發(fā)布版本是0.4.0(Feb,5,2012),在基于BSP模型的圖處理框架中仍然是一個完全基于內(nèi)存運(yùn)行的版本,和前面的Pregel系統(tǒng)一樣,在整個計算過程中的所有數(shù)據(jù)均駐留內(nèi)存存儲,當(dāng)數(shù)據(jù)量超過內(nèi)存容量時,將拋出內(nèi)存不足的異常而終止作業(yè)。
[0017](3) Giraph 系統(tǒng)
[0018]Giraph系統(tǒng)作為通用大規(guī)模數(shù)據(jù)處理平臺,基于MapReduce模型開發(fā)的Hadoop已廣泛使用,Giraph正是建立在Hadoop基礎(chǔ)之上的面向圖處理的算法庫。從計算模型上看,Giraph可以視為MapReduce模型和BSP模型的結(jié)合體。
[0019]在Giraph中,一個圖處理作業(yè)就是一個典型的只有Map任務(wù)的Hadoop作業(yè)。在Map任務(wù)中,參考Pregel設(shè)計思想,嵌入了 BSP模型以支持圖處理的特殊需求。Giraph利用了現(xiàn)有Hadoop框架,針對圖應(yīng)用的特點(diǎn)提供特有的計算模式:
[0020](I)作業(yè)啟動、初始化和任務(wù)的初始化、調(diào)度分配、運(yùn)行框架,沿用Hadoop機(jī)制;
[0021](2)通過Map任務(wù)中的內(nèi)置循環(huán)控制實(shí)現(xiàn)圖的迭代處理,整個圖處理過程只需要啟動一次MapRedcue作業(yè),載入一次原始數(shù)據(jù),消息和數(shù)據(jù)駐留內(nèi)存,避免了傳統(tǒng)Hadoop多次啟動作業(yè)、任務(wù)分配、數(shù)據(jù)反復(fù)重載和Shuffle過程的開銷。
[0022]Giraph同樣作為一個開源項(xiàng)目,目前最新的發(fā)布版本為0.1 (Feb, 6,2012),與PregeUHAMA—樣,在運(yùn)行計算任務(wù)的整個過程中也是數(shù)據(jù)全部駐留內(nèi)存,當(dāng)數(shù)據(jù)量超過內(nèi)存容量時,拋出內(nèi)存不足的異常而終止作業(yè)。
[0023]從以上所述可以看出,現(xiàn)有的基于BSP模型的并行迭代處理系統(tǒng),主要包括:Google的Pregel系統(tǒng)、Apache開源的HAMA系統(tǒng)以及Giraph系統(tǒng),運(yùn)行本地計算過程中將待計算數(shù)據(jù)(圖數(shù)據(jù))和消息數(shù)據(jù)均是完全駐留在內(nèi)存中,不具有緩存到外存的能力,當(dāng)在內(nèi)存資源有限的集群系統(tǒng)中運(yùn)行數(shù)據(jù)量超過內(nèi)存上限的作業(yè)時,均無法處理。
【發(fā)明內(nèi)容】
[0024]有鑒于此,本發(fā)明實(shí)施例的目的是提供一種基于BSP計算模型的并行計算系統(tǒng)中的磁盤緩存方法及裝置,在基于BSP模型的并行迭代計算系統(tǒng)中實(shí)現(xiàn)數(shù)據(jù)向磁盤的自動化緩存。
[0025]為解決上述技術(shù)問題,本發(fā)明實(shí)施例提供方案如下:
[0026]一種基于整體同步并行BSP計算模型的并行計算系統(tǒng)中的磁盤緩存方法,應(yīng)用于將計算任務(wù)的處理數(shù)據(jù)內(nèi)存區(qū)中的數(shù)據(jù)緩存到磁盤空間,預(yù)先分配記錄數(shù)據(jù)和消息數(shù)據(jù)在所述處理數(shù)據(jù)內(nèi)存區(qū)中各自所占的比例;[0027]該方法包括:
[0028]在計算任務(wù)的數(shù)據(jù)加載階段,根據(jù)各個記錄數(shù)據(jù)的記錄ID,為待處理的記錄數(shù)據(jù)建立Hash索引表,將載入的記錄數(shù)據(jù)存放到處理數(shù)據(jù)內(nèi)存區(qū)中對應(yīng)的Hash桶中,得到記錄數(shù)據(jù)的Hash表RHT,并在數(shù)據(jù)加載過程中若記錄數(shù)據(jù)在處理數(shù)據(jù)內(nèi)存區(qū)中的容量將要超過預(yù)先分配的比例時,則以Hash桶為單位將部分記錄數(shù)據(jù)緩存到磁盤空間;
[0029]在計算任務(wù)對記錄數(shù)據(jù)的遍歷訪問過程中,按照預(yù)設(shè)順序遍歷訪問RHT中的每個Hash桶,其中,若將要求訪問的Hash桶位于磁盤空間,并且處理數(shù)據(jù)內(nèi)存區(qū)中剩余的記錄數(shù)據(jù)空間不足以載入所述將要求訪問的Hash桶,則按照長度由大到小的順序,將處理數(shù)據(jù)內(nèi)存區(qū)中已訪問過的Hash桶逐個緩存到磁盤空間,直至釋放的空間能夠載入所述將要求訪問的Hash桶。
[0030]本發(fā)明實(shí)施例還提供了一種基于整體同步并行BSP計算模型的并行計算系統(tǒng)中的磁盤緩存裝置,應(yīng)用于將計算任務(wù)的處理數(shù)據(jù)內(nèi)存區(qū)中的數(shù)據(jù)緩存到磁盤空間,該裝置包括:
[0031]第一緩存單元,用于在計算任務(wù)的數(shù)據(jù)加載階段,根據(jù)各個記錄數(shù)據(jù)的記錄ID,為待處理的記錄數(shù)據(jù)建立Hash索引表,將載入的記錄數(shù)據(jù)存放到處理數(shù)據(jù)內(nèi)存區(qū)中對應(yīng)的Hash桶中,得到記錄數(shù)據(jù)的Hash表RHT,并在數(shù)據(jù)加載過程中若記錄數(shù)據(jù)在處理數(shù)據(jù)內(nèi)存區(qū)中的容量將要超過預(yù)先分配的比例時,則以Hash桶為單位將部分記錄數(shù)據(jù)緩存到磁盤空間;
[0032]遍歷單元,用于在計算任務(wù)對記錄數(shù)據(jù)的遍歷訪問過程中,按照預(yù)設(shè)順序遍歷訪問RHT中的每個Hash桶,其中,若將要求訪問的Hash桶位于磁盤空間,并且處理數(shù)據(jù)內(nèi)存區(qū)中剩余的記錄數(shù)據(jù)空間不足以載入所述將要求訪問的Hash桶,則按照長度由大到小的順序,將處理數(shù)據(jù)內(nèi)存區(qū)中已訪問過的Hash桶逐個緩存到磁盤空間,直至釋放的空間能夠載入所述將要求訪問的Hash桶。
[0033]從以上所述可以看出,本發(fā)明實(shí)施例提供的基于BSP計算模型的并行計算系統(tǒng)中的磁盤緩存方法及裝置,使得此類基于BSP模型的并行迭代處理系統(tǒng)打破了完全基于內(nèi)存運(yùn)行的限制,在處理數(shù)據(jù)量超過內(nèi)存限制時,能夠自動將溢出的部分緩存到磁盤文件,可以避免其他系統(tǒng)出現(xiàn)的拋出異常甚至作業(yè)失敗的問題,保證了系統(tǒng)的可運(yùn)行性和擴(kuò)展性。另夕卜,本實(shí)施例提出的數(shù)據(jù)磁盤緩存方法由于是基于內(nèi)存優(yōu)先的緩存策略,因此,在處理數(shù)據(jù)量少于內(nèi)存限制時可以實(shí)現(xiàn)完全基于內(nèi)存運(yùn)行的效果,所以性能也能達(dá)到其他內(nèi)存系統(tǒng)的水平;在處理數(shù)據(jù)量超過內(nèi)存限制時,能以較小的扇入扇出代價,快速地從磁盤讀入內(nèi)存進(jìn)行計算。
【專利附圖】
【附圖說明】
[0034]圖1為BSP模型中一個超級步包括的三個順序階段的示意圖;
[0035]圖2為本發(fā)明實(shí)施例的并行計算系統(tǒng)中的磁盤緩存方法的流程示意圖;
[0036]圖3為本發(fā)明實(shí)施例中本地計算任務(wù)槽的示意圖;
[0037]圖4為本發(fā)明實(shí)施例中每個Task對應(yīng)任務(wù)槽的可用內(nèi)存劃分示意圖;
[0038]圖5為本發(fā)明實(shí)施例中記錄數(shù)據(jù)和消息數(shù)據(jù)的Hash索引及Hash桶組織形式示意圖;[0039]圖6為本發(fā)明實(shí)施例中為記錄數(shù)據(jù)建立Hash的索引的過程示意圖;
[0040]圖7為本發(fā)明實(shí)施例中消息數(shù)據(jù)區(qū)生產(chǎn)消費(fèi)模型的示意圖;
[0041]圖8為本發(fā)明實(shí)施例的并行計算系統(tǒng)中的磁盤緩存裝置的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0042]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖及具體實(shí)施例對本發(fā)明進(jìn)行詳細(xì)描述。
[0043]本發(fā)明實(shí)施例所要解決的問題就是:如何在基于BSP模型的并行迭代計算系統(tǒng)中支持?jǐn)?shù)據(jù)向磁盤的自動化緩存,即:當(dāng)內(nèi)存能夠容納計算數(shù)據(jù)和消息數(shù)據(jù)時,仍在內(nèi)存中運(yùn)行;當(dāng)處理的數(shù)據(jù)量和消息量超出內(nèi)存容量時,能夠自動將溢出的部分緩存到磁盤文件。更進(jìn)一步的,本發(fā)明實(shí)施例還可以保證后續(xù)計算過程需要這些數(shù)據(jù)時,能以較小的扇入扇出代價,快速地從磁盤讀入內(nèi)存進(jìn)行計算,從而提供系統(tǒng)對大規(guī)模數(shù)據(jù)的可運(yùn)行性和擴(kuò)展性。
[0044]如圖2所示,本發(fā)明一個實(shí)施例提供了一種基于整體同步并行BSP計算模型的并行計算系統(tǒng)中的磁盤緩存方法,應(yīng)用于將計算任務(wù)的處理數(shù)據(jù)內(nèi)存區(qū)中的數(shù)據(jù)緩存到磁盤空間。這里,處理數(shù)據(jù)內(nèi)存區(qū)是指計算任務(wù)的可用內(nèi)存中可供任務(wù)存儲記錄數(shù)據(jù)(圖數(shù)據(jù))和收發(fā)消息數(shù)據(jù)的數(shù)據(jù)空間。本實(shí)施例所述方法預(yù)先分配記錄數(shù)據(jù)和消息數(shù)據(jù)在所述處理數(shù)據(jù)內(nèi)存區(qū)中各自所占的比例,假設(shè)?表示計算任務(wù)的處理數(shù)據(jù)內(nèi)存區(qū)的空間大小,β表示預(yù)先分配的記錄數(shù)據(jù)在處理數(shù)據(jù)內(nèi)存區(qū)所占的比例,則消息數(shù)據(jù)所占比例為1_β,則處理數(shù)據(jù)內(nèi)存區(qū)中用于存儲記錄數(shù)據(jù)的記錄數(shù)據(jù)空間的大小為β ?,用于存儲消息數(shù)據(jù)的消息數(shù)據(jù)空間的大小為(l-β ) O。如圖2所示,該方法具體包括:
[0045]步驟21,在計算任務(wù)的數(shù)據(jù)加載階段,根據(jù)各個記錄數(shù)據(jù)的記錄ID,為待處理的記錄數(shù)據(jù)建立Hash索引表,將載入的記錄數(shù)據(jù)存放到處理數(shù)據(jù)內(nèi)存區(qū)中對應(yīng)的Hash桶中,得到記錄數(shù)據(jù)的Hash表RHT,并在數(shù)據(jù)加載過程中若記錄數(shù)據(jù)在處理數(shù)據(jù)內(nèi)存區(qū)中的容量將要超過預(yù)先分配的比例時,則以Hash桶為單位將部分記錄數(shù)據(jù)緩存到磁盤空間;
[0046]本步驟中,計算當(dāng)前到來的記錄數(shù)據(jù)的記錄ID所對應(yīng)的Hash值,建立Hash索引表,確定處理數(shù)據(jù)內(nèi)存區(qū)中與所述HASH值對應(yīng)的HASH桶,并將當(dāng)前到來的記錄數(shù)據(jù)存放到所確定的HASH桶中。若當(dāng)前到來的記錄數(shù)據(jù)存放到處理數(shù)據(jù)內(nèi)存區(qū)將導(dǎo)致記錄數(shù)據(jù)的容量超出β ?,則按照HASH桶的長度由大到小的順序,將當(dāng)前處理數(shù)據(jù)內(nèi)存區(qū)中的HASH桶逐個緩存到磁盤空間,直至當(dāng)前到來的記錄數(shù)據(jù)緩存到處理數(shù)據(jù)內(nèi)存區(qū)時不會導(dǎo)致處理數(shù)據(jù)內(nèi)存區(qū)中的記錄數(shù)據(jù)的容量超出β ?。
[0047]步驟22,在計算任務(wù)對記錄數(shù)據(jù)的遍歷訪問過程中,按照預(yù)設(shè)順序遍歷訪問RHT中的每個Hash桶,其中,若將要求訪問的Hash桶位于磁盤空間,并且處理數(shù)據(jù)內(nèi)存區(qū)中剩余的記錄數(shù)據(jù)空間不足以載入所述將要求訪問的Hash桶,則按照長度由大到小的順序,將處理數(shù)據(jù)內(nèi)存區(qū)中已訪問過的Hash桶逐個緩存到磁盤空間,直至釋放的空間能夠載入所述將要求訪問的Hash桶。
[0048]上述步驟22中,在遍歷訪問RHT中的每個Hash桶的過程中,通常需要針對當(dāng)前訪問的HASH桶遍歷其中的記錄數(shù)據(jù)并執(zhí)行對應(yīng)的計算,進(jìn)而根據(jù)計算結(jié)果更新RHT中的HASH桶。
[0049]以上說明了本實(shí)施例對于記錄數(shù)據(jù)的載入及遍歷過程。上述過程中通過預(yù)先設(shè)置記錄數(shù)據(jù)在處理數(shù)據(jù)內(nèi)存區(qū)的比例,在記錄數(shù)據(jù)量超過預(yù)設(shè)比例限制時,能夠自動將溢出的部分緩存到磁盤文件,可以避免其他系統(tǒng)出現(xiàn)的拋出異常甚至作業(yè)失敗的問題,保證了系統(tǒng)的可運(yùn)行性和擴(kuò)展性。
[0050]更進(jìn)一步的,本實(shí)施例所述方法還可以針對消息數(shù)據(jù)執(zhí)行相應(yīng)的緩存處理,此時該方法還包括以下步驟:
[0051]步驟23,在每個超級步的執(zhí)行過程中,根據(jù)各個消息數(shù)據(jù)的目的記錄ID,為新加入的消息數(shù)據(jù)建立Hash索引表,將消息數(shù)據(jù)存放到處理數(shù)據(jù)內(nèi)存區(qū)中對應(yīng)的Hash桶中,并在消息數(shù)據(jù)在處理數(shù)據(jù)內(nèi)存區(qū)中的容量超過預(yù)先分配的比例時,以Hash桶為單位將處理數(shù)據(jù)內(nèi)存區(qū)中的部分消息數(shù)據(jù)緩存到磁盤空間。
[0052]本步驟23中,新加入的消息數(shù)據(jù)包括上一輪迭代過程中已接收的消息數(shù)據(jù)、當(dāng)前迭代過程中接收的消息數(shù)據(jù)或當(dāng)前迭代過程中新產(chǎn)生的待發(fā)送的消息數(shù)據(jù)。本步驟中,將部分消息數(shù)據(jù)緩存到磁盤空間具體可以包括:
[0053]在每個超級步的執(zhí)行過程中,在向處理數(shù)據(jù)內(nèi)存區(qū)中加入當(dāng)前迭代過程中接收的消息數(shù)據(jù)或新產(chǎn)生的待發(fā)送的消息數(shù)據(jù)時,若新加入的消息數(shù)據(jù)將導(dǎo)致消息數(shù)據(jù)在處理數(shù)據(jù)內(nèi)存區(qū)中的總量超出(ι-β) ?,將處理數(shù)據(jù)內(nèi)存區(qū)中的當(dāng)前迭代過程中接收的消息數(shù)據(jù)隊(duì)列和上一輪迭代過程中已接收的消息數(shù)據(jù)隊(duì)列中優(yōu)先級最高且最長的hash桶逐個緩存到磁盤空間,直至處理數(shù)據(jù)內(nèi)存區(qū)的空間滿足要求,其中,當(dāng)前迭代過程中接收的消息數(shù)據(jù)隊(duì)列的優(yōu)先級高于上一輪迭代過程中已接收的消息數(shù)據(jù)隊(duì)列。更進(jìn)一步的,若處理數(shù)據(jù)內(nèi)存區(qū)中的待發(fā)送的消息數(shù)據(jù)隊(duì)列占用的空間比例超出預(yù)設(shè)門限,則阻塞局部計算線程以避免產(chǎn)生新消息,直至所述空間比例低于所述預(yù)設(shè)門限。
[0054]以上步驟中,可以根據(jù)預(yù)先設(shè)置的Hash函數(shù)對記錄ID或目的記錄ID進(jìn)行計算,得到對應(yīng)的Hash值,建立Hash索引表,根據(jù)預(yù)設(shè)的Hash桶的映射策略,將記錄數(shù)據(jù)或消息數(shù)據(jù)存放到對應(yīng)的Hash桶中,形成Hash桶文件。其中,具體采用哪種Hash函數(shù),以及采用何種Hash桶的映射策略,本實(shí)施例不作限定。
[0055]可以看出,本實(shí)施例中,當(dāng)記錄數(shù)據(jù)或消息數(shù)據(jù)的容量超出預(yù)設(shè)門限(如β O或(1-β ) O)時,將把處理數(shù)據(jù)內(nèi)存區(qū)中的部分記錄數(shù)據(jù)或消息數(shù)據(jù)從內(nèi)存空間緩存到磁盤空間,以使得新載入的記錄數(shù)據(jù)或新加入的消息數(shù)據(jù)在存放到處理數(shù)據(jù)內(nèi)存區(qū)時不會超出預(yù)設(shè)門限,從而實(shí)現(xiàn)了基于BSP模型的并行迭代計算系統(tǒng)中數(shù)據(jù)向磁盤的自動化緩存。
[0056]為幫助更好地理解本發(fā)明實(shí)施例的上述步驟,以下通過更為詳盡的描述對本實(shí)施例的具體實(shí)施作進(jìn)一步的說明。
[0057]1.內(nèi)存劃分模型
[0058]本實(shí)施例基于BSP模型的并行迭代處理系統(tǒng)中完成計算任務(wù)的單位是本地計算任務(wù)進(jìn)程(即Task),每臺計算節(jié)點(diǎn)上允許啟動若干個Task,這個上限數(shù)量可以由系統(tǒng)管理員根據(jù)節(jié)點(diǎn)的計算資源(如內(nèi)存、CPU和磁盤等)進(jìn)行配置,即指定所謂的任務(wù)槽數(shù)量(maxTaskSlot)。當(dāng)用戶內(nèi)存大小確定后,每個本地計算Task即是一個應(yīng)用程序,配置了任務(wù)槽數(shù)量maxTaskSlot后,也就確定了每個Task所占用的內(nèi)存數(shù)量Ω。例如,Ω可以等于1GB.2GB或者4GB等。假設(shè)Ω =2GB,則一臺擁有16GB用戶內(nèi)存的計算節(jié)點(diǎn)的本地計算任務(wù)槽情況如圖3所示。
[0059]如圖4所示,每個Task對應(yīng)任務(wù)槽的可用內(nèi)存Ω中包含三部分的內(nèi)容:程序和棧及其他空間41、用于存放處理數(shù)據(jù)的空間43、用于存放輔助數(shù)據(jù)的空間42。程序和棧及其他空間41指的是一個應(yīng)用程序中必須包含的存放程序代碼、棧、常量及其他控制信息等內(nèi)容的內(nèi)存空間;用于存放處理數(shù)據(jù)的空間43指的就是可供任務(wù)存儲圖數(shù)據(jù)和收發(fā)消息數(shù)據(jù)的數(shù)據(jù)空間;用于存放輔助數(shù)據(jù)的空間42指的就是可供任務(wù)存儲圖和消息數(shù)據(jù)的一些控制信息和索引結(jié)構(gòu)數(shù)據(jù)的空間。這三者中能夠被本實(shí)施例提出的磁盤緩存技術(shù)中用到的真正數(shù)據(jù)內(nèi)存區(qū)(設(shè)為?)就是其中的處理數(shù)據(jù)空間43 了。因此,本實(shí)施例引進(jìn)一個參數(shù)Θ,表示可用的數(shù)據(jù)空間占Task的內(nèi)存空間Ω的比例,即每個任務(wù)的處理數(shù)據(jù)內(nèi)存區(qū)(數(shù)據(jù)空間)大小為?=θ □ Ω。
[0060]Task的處理數(shù)據(jù)內(nèi)存區(qū)Θ中所要管理暫存的數(shù)據(jù)包括:記錄數(shù)據(jù)(RecordsData,即待處理的原始數(shù)據(jù))和消息數(shù)據(jù)(Messages Data,即BSP模型中計算過程中的通信消息)。記錄數(shù)據(jù)中是一條條長短不一的由記錄ID和各個維度列表組成的類似鄰接表形式的多維數(shù)據(jù)記錄。根據(jù)BSP模型的迭代特點(diǎn)可知,消息數(shù)據(jù)(Messages Data)又具體包括三類消息隊(duì)列:當(dāng)前迭代過程中接收的消息隊(duì)列(Incoming Queue)、上輪迭代過程中已接收到的消息隊(duì)列(Incomed Queue)和待發(fā)送消息隊(duì)列(Outgoing Queue)。
[0061]考慮到把處理數(shù)據(jù)內(nèi)存區(qū)?看成一個整體,管理這么多種類型的數(shù)據(jù)在內(nèi)存和磁盤之間的置換關(guān)系將會既混亂又復(fù)雜,所以,為了簡化以后的數(shù)據(jù)調(diào)度模型,本實(shí)施例再引入一個參數(shù)β,它表示處理數(shù)據(jù)內(nèi)存區(qū)Θ中,記錄數(shù)據(jù)(Records Data)所占的比例系數(shù),則消息數(shù)據(jù)(Messages Data)所占的比例即為1-β。這樣,本實(shí)施例就把要管理的內(nèi)存區(qū)域劃分成了兩個部分。一個Task中的內(nèi)存劃分模型如圖4所示。
[0062]本實(shí)施例將處理數(shù)據(jù)內(nèi)存區(qū)劃分成兩個部分,這樣就無需再考慮記錄數(shù)據(jù)與消息數(shù)據(jù)之間的關(guān)系,而用一個比例系數(shù)β來調(diào)節(jié)兩者之間的比例。那么對于這兩者各自的內(nèi)存管理和調(diào)度策略就可遵循一條相同的原則:優(yōu)先將數(shù)據(jù)存放在內(nèi)存,當(dāng)數(shù)據(jù)量超出內(nèi)存容量時將多出的部分緩存到磁盤上即可。
[0063]2.數(shù)據(jù)索引模型
[0064]根據(jù)BSP模型可知,每個超步的本地并行計算過程中,需要遍歷每條記錄數(shù)據(jù),并對它接收到的所有消息,進(jìn)行遍歷、計算處理。如此,對每條記錄數(shù)據(jù),需要確定哪些消息是該記錄數(shù)據(jù)上一步迭代接收到的所有消息。如此,若不對記錄數(shù)據(jù)和消息數(shù)據(jù)進(jìn)行索引,每個超步中的數(shù)據(jù)查詢代價就是復(fù)雜度O(n*m)。這里,η表示記錄數(shù)據(jù)的數(shù)量,m表示每個記錄數(shù)據(jù)接收到的消息數(shù)據(jù)的平均數(shù)量。對于完全基于內(nèi)存的系統(tǒng)來說,這樣的查詢代價已經(jīng)很高,而對于帶有磁盤緩存的系統(tǒng)來說,不斷的掃描遍歷磁盤上的緩存數(shù)據(jù)更是難以容忍的開銷。因此,本實(shí)施例對記錄數(shù)據(jù)和消息數(shù)據(jù)分別建立索引。
[0065]實(shí)際上,對于記錄數(shù)據(jù)和消息數(shù)據(jù)的索引方式可以采用很多種:二叉樹、B+樹、Hash索引、順序表等等。如果記錄ID的值類型是連續(xù)編號的整數(shù)時,采用樹的結(jié)構(gòu)索引頂點(diǎn)可能會獲得較高的效率,但是考慮到方法的通用性,例如當(dāng)記錄的ID是URL字符串時,基于數(shù)值比較的樹形索引就不再適用,因此本實(shí)施例優(yōu)選地采用了對于多種情況下都能適用的Hash索引。
[0066]考慮BSP模型的特性,每個超步中記錄數(shù)據(jù)和消息數(shù)據(jù)要做的相當(dāng)于一次連接(join)操作,本實(shí)施例考慮將兩者都采用記錄ID值作為索引的鍵值,從而可以將兩者連接起來。本實(shí)施例在具體實(shí)現(xiàn)時:[0067]首先,在數(shù)據(jù)的加載階段為待處理數(shù)據(jù)記錄按照其ID值建立Hash索引表,將記錄數(shù)據(jù)組織成一系列的Hash桶,當(dāng)記錄數(shù)據(jù)需要緩存時,一部分存儲在內(nèi)存,另一部分以Hash桶文件形式緩存在磁盤上。
[0068]其次,在每個超步的執(zhí)行中,將接收到的消息數(shù)據(jù)(包括incoming、incomed、outgoing消息數(shù)據(jù))同樣按照其目的記錄ID的Hash值,劃分到不同的Hash桶中,當(dāng)消息數(shù)據(jù)的容量超過內(nèi)存時,消息數(shù)據(jù)將以Hash桶為單位緩存到磁盤上。
[0069]圖5展示了經(jīng)過上述步驟處理后,記錄數(shù)據(jù)和消息數(shù)據(jù)的Hash索引及Hash桶組織方式。
[0070]如此,每次超步的本地計算任務(wù)需要對某個數(shù)據(jù)記錄對應(yīng)的所有消息處理時,就只需按照Hash桶為單位遍歷數(shù)據(jù)記錄:給定某個目的記錄ID值,首先可以根據(jù)ID值的Hash值以0(1)的代價找到存放所有以此ID為目的記錄的消息的Hash桶,然后,再順序遍歷該Hash桶中的不同記錄ID,從而得到該目的記錄的消息,這個代價為O(Hd),Hd為平均每個Hash桶中不同記錄的數(shù)量。當(dāng)Hash桶的數(shù)量很多的時候,Hd趨向于1,則獲取消息的代價就趨向于0(1);當(dāng)Hash桶的數(shù)量很少的時候,Hd趨向于η,即只有一個Hash桶,退化到所有消息存放到一起,則獲取消息的代價就趨向于0(m),即每次都需要遍歷消息列表。
[0071]建立了 Hash索引后,記錄數(shù)據(jù)和消息數(shù)據(jù)在內(nèi)存和磁盤之間的讀入、寫出的調(diào)度單位就轉(zhuǎn)化成了 Hash桶,類似于內(nèi)存管理中的頁面文件扇入扇出。其調(diào)度方法決定緩存機(jī)制的有效性。
[0072]下面將詳細(xì)闡述本實(shí)施例中基于內(nèi)存劃分模型和Hash索引模型的記錄和消息數(shù)據(jù)索引的建立過程及其在超步迭代計算中的Hash桶調(diào)度算法。
[0073]3.記錄數(shù)據(jù)的磁盤緩存方法
[0074]記錄數(shù)據(jù)的磁盤緩存部分需要解決兩個問題:每個任務(wù)Task在載入數(shù)據(jù)的過程中如何建立對記錄的Hash索引并存儲這些Hash桶;在每個超級步的迭代計算中,如何根據(jù)Hash索引機(jī)制遍歷這些記錄。
[0075]3.1記錄數(shù)據(jù)Hash索引的建立
[0076]對于系統(tǒng)中的每個任務(wù)Task來說,待處理的記錄數(shù)據(jù)來自于數(shù)據(jù)劃分模塊從HDFS或者HBase等數(shù)據(jù)的存儲介質(zhì)中讀取出來,并根據(jù)一定的策略一條一條記錄數(shù)據(jù)發(fā)送給自己的。因此,原始記錄數(shù)據(jù)的加載階段,每條記錄數(shù)據(jù)不會按照定義的Hash索引的順序聚簇的到來,也就是在Task為本地所處理的記錄數(shù)據(jù)建立Hash索引的過程是一個動態(tài)的處理隨機(jī)數(shù)據(jù)的過程,如圖6所示,而且,在這個過程中,按照隨機(jī)順序到達(dá)的第i個記錄數(shù)據(jù)Ri被放到它所屬于的Hash桶Hj的時候,可能會出現(xiàn)當(dāng)前內(nèi)存中的數(shù)據(jù)總量假設(shè)當(dāng)前時間為t)已經(jīng)達(dá)到了記錄數(shù)據(jù)部分的內(nèi)存上限β Θ的情況,這時需要將某些Hash桶緩存到磁盤空間,為接下來可能到來的記錄數(shù)據(jù)釋放足夠的空間。
[0077]3.1.1MF-RHIC算法的動態(tài)建立部分
[0078]—條記錄數(shù)據(jù)由兩部分組成:記錄頭數(shù)據(jù)和各維度數(shù)據(jù)。其中,記錄頭數(shù)據(jù)一般包括記錄頭的ID值(也是記錄的整體ID值)和記錄頭的Value值;各維度數(shù)據(jù)列表則包含了若干條由ID值和Value值組成的元組。由于每一條記錄的維度列表長度可能大不相同,有些記錄可能只有幾條維度記錄,而有些記錄可能有數(shù)萬條維度記錄。例如,以社交網(wǎng)絡(luò)的用戶關(guān)注關(guān)系圖數(shù)據(jù)為例,facebook, twitter等網(wǎng)站上用戶之間的關(guān)注視為一條邊,則有些明星或知名機(jī)構(gòu)的關(guān)注者可能有數(shù)以萬計的關(guān)注者。因此,即使本實(shí)施例可以通過對記錄的ID值的Hash函數(shù)進(jìn)行均衡化,盡量使每個Hash桶中的頂點(diǎn)數(shù)均勻,但是,由于它們的邊數(shù)可能相差懸殊的原因,不同Hash桶的長度還是有可能相差很大。那么,當(dāng)&>/?時,本實(shí)施例選取當(dāng)前長度最長的Hash桶Hm緩存到磁盤其中,從而釋放最多的空間給后續(xù)到達(dá)的記錄數(shù)據(jù)。這里,length(Hm)、length(Hj)分別表示Hash桶Hm和Hj的長度,h表示記錄數(shù)據(jù)的Hash桶的數(shù)量,Nh表示所有的Hash桶的數(shù)量。
[0079]考慮到當(dāng)Hm被緩存到磁盤以后,有可能又到來了 Hash值屬于Hm的記錄數(shù)據(jù)Rk,本實(shí)施例進(jìn)一步維護(hù)一張所有記錄數(shù)據(jù)的Hash桶狀態(tài)的元數(shù)據(jù)表,該元數(shù)據(jù)表中記錄有各個記錄數(shù)據(jù)的HASH桶存放在處理數(shù)據(jù)內(nèi)存區(qū)和/或磁盤空間的信息。這樣,若根據(jù)所述元數(shù)據(jù)表,確定當(dāng)前到來的記錄數(shù)據(jù)對應(yīng)的HASH桶僅存在于磁盤空間,則在處理數(shù)據(jù)內(nèi)存區(qū)中重新建立當(dāng)前到來的記錄數(shù)據(jù)對應(yīng)的HASH桶,并將當(dāng)前到來的記錄數(shù)據(jù)存放于其中,并更新所述元數(shù)據(jù)表中對應(yīng)的HASH桶的元數(shù)據(jù);若根據(jù)所述元數(shù)據(jù)表,確定當(dāng)前需要緩存到磁盤空間的HASH桶在磁盤空間中已經(jīng)存在時,則將當(dāng)前需要緩存到磁盤空間的HASH桶中的數(shù)據(jù)合并至磁盤空間中已存在的該HASH桶中,并更新所述元數(shù)據(jù)表中對應(yīng)的HASH桶的元數(shù)據(jù)。
[0080]例如,在上述記錄Rk到來后,本實(shí)施例在內(nèi)存中重新建立Hash桶Hni,并更新元數(shù)據(jù)表中Hm桶對應(yīng)于Hm的元數(shù)據(jù)Metam的信息,記錄它有一部分在內(nèi)存中,另外一部分已經(jīng)被緩存到磁盤,還可以記錄各部分的長度等信息。當(dāng)這個Hash桶Hm再次需要從內(nèi)存空間被緩存到磁盤的時候,內(nèi)存中的新記錄直接與磁盤上的Hash桶文件合并,追加到文件的末尾即可。
[0081]因此,本實(shí)施例根據(jù)以上描述的思想提出了基于內(nèi)存優(yōu)先(MF)的記錄數(shù)據(jù)Hash索引建立算法(Memory First-Record Hash Index Creation,下文中簡稱為 MF-RHIC 算法)。MF-RHIC算法分為兩個部分:動態(tài)建立部分和靜態(tài)整理部分。其中動態(tài)建立部分的一種具體的算法實(shí)現(xiàn)可以參考 表1所示。
【權(quán)利要求】
1.一種基于整體同步并行BSP計算模型的并行計算系統(tǒng)中的磁盤緩存方法,應(yīng)用于將計算任務(wù)的處理數(shù)據(jù)內(nèi)存區(qū)中的數(shù)據(jù)緩存到磁盤空間,其特征在于,預(yù)先分配記錄數(shù)據(jù)和消息數(shù)據(jù)在所述處理數(shù)據(jù)內(nèi)存區(qū)中各自所占的比例; 該方法包括: 在計算任務(wù)的數(shù)據(jù)加載階段,根據(jù)各個記錄數(shù)據(jù)的記錄ID,為待處理的記錄數(shù)據(jù)建立Hash索引表,將載入的記錄數(shù)據(jù)存放到處理數(shù)據(jù)內(nèi)存區(qū)中對應(yīng)的Hash桶中,得到記錄數(shù)據(jù)的Hash表RHT,并在數(shù)據(jù)加載過程中若記錄數(shù)據(jù)在處理數(shù)據(jù)內(nèi)存區(qū)中的容量將要超過預(yù)先分配的比例時,則以Hash桶為單位將部分記錄數(shù)據(jù)緩存到磁盤空間; 在計算任務(wù)對記錄數(shù)據(jù)的遍歷訪問過程中,按照預(yù)設(shè)順序遍歷訪問RHT中的每個Hash桶,其中,若將要求訪問的Hash桶位于磁盤空間,并且處理數(shù)據(jù)內(nèi)存區(qū)中剩余的記錄數(shù)據(jù)空間不足以載入所述將要求訪問的Hash桶,則按照長度由大到小的順序,將處理數(shù)據(jù)內(nèi)存區(qū)中已訪問過的Hash桶逐個緩存到磁盤空間,直至釋放的空間能夠載入所述將要求訪問的Hash桶。
2.如權(quán)利要求1所述的方法,其特征在于,還包括: 在每個超級步的執(zhí)行過程中,根據(jù)各個消息數(shù)據(jù)的目的記錄ID,為新加入的消息數(shù)據(jù)建立Hash索引表,將消息數(shù)據(jù)存放到處理數(shù)據(jù)內(nèi)存區(qū)中對應(yīng)的Hash桶中,并在消息數(shù)據(jù)在處理數(shù)據(jù)內(nèi)存區(qū)中的容量超過預(yù)先分配的比例時,以Hash桶為單位將處理數(shù)據(jù)內(nèi)存區(qū)中的部分消息數(shù)據(jù)緩存到磁盤空間。
3.如權(quán)利要求1所述的方法,其特征在于,所述為待處理的記錄數(shù)據(jù)建立Hash索引表,將載入的記錄數(shù)據(jù)存放到處理數(shù)據(jù)內(nèi)存區(qū)中對應(yīng)的Hash桶中,包括: 計算當(dāng)前到來的記錄數(shù)據(jù)的記錄ID所對應(yīng)的Hash值,建立Hash索引表,確定處理數(shù)據(jù)內(nèi)存區(qū)中與所述HASH值對應(yīng)的HASH桶,并將當(dāng)前到來的記錄數(shù)據(jù)存儲到所確定的HASH桶中。
4.如權(quán)利要求1所述的方法,其特征在于,所述若記錄數(shù)據(jù)在處理數(shù)據(jù)內(nèi)存區(qū)中的容量將要超過預(yù)先分配的比例時,則以Hash桶為單位將部分記錄數(shù)據(jù)緩存到磁盤空間,包括: 若當(dāng)前到來的記錄數(shù)據(jù)存儲到處理數(shù)據(jù)內(nèi)存區(qū)將導(dǎo)致記錄數(shù)據(jù)的容量超出β ?,則按照長度由大到小的順序,將當(dāng)前處理數(shù)據(jù)內(nèi)存區(qū)中的HASH桶逐個緩存到磁盤空間,直至當(dāng)前到來的記錄數(shù)據(jù)存儲到處理數(shù)據(jù)內(nèi)存區(qū)時不會導(dǎo)致記錄數(shù)據(jù)的容量超出βθ,其中,Θ表示計算任務(wù)的處理數(shù)據(jù)內(nèi)存區(qū)的空間大小,β表示預(yù)先分配的記錄數(shù)據(jù)在處理數(shù)據(jù)內(nèi)存區(qū)所占的比例。
5.如權(quán)利要求4所述的方法,其特征在于,進(jìn)一步維護(hù)一張所有記錄數(shù)據(jù)的Hash桶狀態(tài)的元數(shù)據(jù)表,該元數(shù)據(jù)表中記錄有各個記錄數(shù)據(jù)對應(yīng)的HASH桶存放在處理數(shù)據(jù)內(nèi)存區(qū)和/或磁盤空間的信息; 若根據(jù)所述元數(shù)據(jù)表,確定當(dāng)前到來的記錄數(shù)據(jù)對應(yīng)的HASH桶僅存在于磁盤空間,則在處理數(shù)據(jù)內(nèi)存區(qū)中重新建立當(dāng)前到來的記錄數(shù)據(jù)對應(yīng)的HASH桶,并將當(dāng)前到來的記錄數(shù)據(jù)存放于其中; 若根據(jù)所述元數(shù)據(jù)表,確定當(dāng)前需要緩存到磁盤空間的HASH桶在磁盤空間中已經(jīng)存在時,則將當(dāng)前需要緩存到磁盤空間的HASH桶中的數(shù)據(jù)合并至磁盤空間中已存在的該HASH桶中。
6.如權(quán)利要求4所述的方法,其特征在于,還包括: 在計算任務(wù)的數(shù)據(jù)加載完畢后,按照處理數(shù)據(jù)內(nèi)存區(qū)中的HASH桶的長度由大到小的順序,逐個判斷處理數(shù)據(jù)內(nèi)存區(qū)中的HASH桶是否也存在于磁盤空間,若是,則進(jìn)一步判斷將該HASH桶在磁盤空間中的數(shù)據(jù)存放到處理數(shù)據(jù)內(nèi)存區(qū)時是否會導(dǎo)致記錄數(shù)據(jù)的容量超出β ?,如果不超出,則將該HASH桶在磁盤空間中的數(shù)據(jù)合并到處理數(shù)據(jù)內(nèi)存區(qū)中,如果超出,則將該HASH桶在處理數(shù)據(jù)內(nèi)存區(qū)中的數(shù)據(jù)合并到磁盤空間中。
7.如權(quán)利要求1所述的方法,其特征在于,在遍歷訪問RHT中的每個Hash桶的過程中,所述方法還包括: 針對當(dāng)前訪問的HASH桶遍歷其中的記錄數(shù)據(jù)并執(zhí)行對應(yīng)的計算,以及根據(jù)計算結(jié)果更新RHT中的HASH桶。
8.如權(quán)利要求2所述的方法,其特征在于,所述以Hash桶為單位將處理數(shù)據(jù)內(nèi)存區(qū)中的部分消息數(shù)據(jù)緩存到磁盤空間包括: 在每個超級步的執(zhí)行過程中,在向處理數(shù)據(jù)內(nèi)存區(qū)中加入當(dāng)前迭代過程中接收的消息數(shù)據(jù)或新產(chǎn)生的待發(fā)送的消息數(shù)據(jù)時,若新加入的消息數(shù)據(jù)將導(dǎo)致消息數(shù)據(jù)在處理數(shù)據(jù)內(nèi)存區(qū)中的總量超出(1-β) ?,將處理數(shù)據(jù)內(nèi)存區(qū)中的當(dāng)前迭代過程中接收的消息數(shù)據(jù)隊(duì)列和上一輪迭代過程中已接收的消息數(shù)據(jù)隊(duì)列中優(yōu)先級最高且最長的hash桶逐個緩存到磁盤空間,直至處理數(shù)據(jù)內(nèi)存區(qū)的空間滿足要求,其中,當(dāng)前迭代過程中接收的消息數(shù)據(jù)隊(duì)列的優(yōu)先級高于上一輪迭代過程中已接收的消息數(shù)據(jù)隊(duì)列。
9.如權(quán)利要求8所述的方法,其特征在于,還包括:若處理數(shù)據(jù)內(nèi)存區(qū)中的待發(fā)送的消息數(shù)據(jù)隊(duì)列占用的空間比例超出預(yù)設(shè)門限,則阻塞局部計算線程以避免產(chǎn)生新消息,直至所述空間比例低于所述預(yù)設(shè)門限。
10.如權(quán)利要求2所述的方法,其特征在于,若當(dāng)前迭代過程中接收的消息數(shù)據(jù)隊(duì)列中最長的hash桶的長度低于處理數(shù)據(jù)內(nèi)存區(qū)中消息數(shù)據(jù)的平均Hash桶的長度閾值,則在向處理數(shù)據(jù)內(nèi)存區(qū)新加入的消息數(shù)據(jù)將導(dǎo)致消息數(shù)據(jù)在處理數(shù)據(jù)內(nèi)存區(qū)中的總量超出(1-β)Θ時,按照HASH桶長度的由大到小的順序,將上一輪迭代過程中已接收的消息數(shù)據(jù)隊(duì)列中的hash桶逐個緩存到磁盤空間,直至處理數(shù)據(jù)內(nèi)存區(qū)的空間滿足要求,其中,Θ表示計算任務(wù)的處理數(shù)據(jù)內(nèi)存區(qū)的空間大小,β表示預(yù)先分配的記錄數(shù)據(jù)在處理數(shù)據(jù)內(nèi)存區(qū)所占的比例。
11.一種基于整體同步并行BSP計算模型的并行計算系統(tǒng)中的磁盤緩存裝置,應(yīng)用于將計算任務(wù)的處理數(shù)據(jù)內(nèi)存區(qū)中的數(shù)據(jù)緩存到磁盤空間,其特征在于,該裝置包括: 第一緩存單元,用于在計算任務(wù)的數(shù)據(jù)加載階段,根據(jù)各個記錄數(shù)據(jù)的記錄ID,為待處理的記錄數(shù)據(jù)建立Hash索引表,將載入的記錄數(shù)據(jù)存放到處理數(shù)據(jù)內(nèi)存區(qū)中對應(yīng)的Hash桶中,得到記錄數(shù)據(jù)的Hash表RHT,并在數(shù)據(jù)加載過程中若記錄數(shù)據(jù)在處理數(shù)據(jù)內(nèi)存區(qū)中的容量將要超過預(yù)先分配的比例時,則以Hash桶為單位將部分記錄數(shù)據(jù)緩存到磁盤空間; 遍歷單元,用于在計算任務(wù)對記錄數(shù)據(jù)的遍歷訪問過程中,按照預(yù)設(shè)順序遍歷訪問RHT中的每個Hash桶,其中,若將要求訪問的Hash桶位于磁盤空間,并且處理數(shù)據(jù)內(nèi)存區(qū)中剩余的記錄數(shù)據(jù)空間不足以載入所述將要求訪問的Hash桶,則按照長度由大到小的順序,將處理數(shù)據(jù)內(nèi)存區(qū)中已訪問過的Hash桶逐個緩存到磁盤空間,直至釋放的空間能夠載入所述將要求訪問的Hash桶。
12.如權(quán)利要求11所述的裝置,其特征在于,還包括: 第二緩存單元,用于在每個超級步的執(zhí)行過程中,根據(jù)各個消息數(shù)據(jù)的目的記錄ID,為新加入的消息數(shù)據(jù)建立Hash索引表,將消息數(shù)據(jù)存放到處理數(shù)據(jù)內(nèi)存區(qū)中對應(yīng)的Hash桶中,并在消息數(shù)據(jù)在處理數(shù)據(jù)內(nèi)存區(qū)中的容量超過預(yù)先分配的比例時,以Hash桶為單位將處理數(shù)據(jù)內(nèi)存區(qū)中的部分消息數(shù)據(jù)緩存到磁盤空間。
13.如權(quán)利要求11所述的裝置,其特征在于,所述第一緩存單元包括: 計算存放單元,用于計算當(dāng)前到來的記錄數(shù)據(jù)的記錄ID所對應(yīng)的Hash值,建立Hash索引表,確定處理數(shù)據(jù)內(nèi)存區(qū)中與所述HASH值對應(yīng)的HASH桶,并將當(dāng)前到來的記錄數(shù)據(jù)存放到所確定的HASH桶中。
14.如權(quán)利要求11所述的裝置,其特征在于,所述第一緩存單元還包括: 轉(zhuǎn)移單元,用于在當(dāng)前到來的記錄數(shù)據(jù)存儲到處理數(shù)據(jù)內(nèi)存區(qū)將導(dǎo)致記錄數(shù)據(jù)的容量超出β Θ時,按照長度由大到小的順序,將當(dāng)前處理數(shù)據(jù)內(nèi)存區(qū)中的HASH桶逐個緩存到磁盤空間,直至當(dāng)前到來的記錄數(shù)據(jù)存儲到處理數(shù)據(jù)內(nèi)存區(qū)時不會導(dǎo)致記錄數(shù)據(jù)的容量超出β O,其中,Θ表示計算任務(wù)的處理數(shù)據(jù)內(nèi)存區(qū)的空間大小,β表示預(yù)先分配的記錄數(shù)據(jù)在處理數(shù)據(jù)內(nèi)存區(qū)所占的比例。
15.如權(quán)利要求14所述的裝置,其特征在于,還包括: 表項(xiàng)維護(hù)單元,用于維護(hù)一張所有記錄數(shù)據(jù)的Hash桶狀態(tài)的元數(shù)據(jù)表,該元數(shù)據(jù)表中記錄有各個記錄數(shù)據(jù)對應(yīng)的HASH桶存放在處理數(shù)據(jù)內(nèi)存區(qū)和/或磁盤空間的信息; 所述計算存放單元,進(jìn)一步用于在根據(jù)所述元數(shù)據(jù)表,確定當(dāng)前到來的記錄數(shù)據(jù)對應(yīng)的HASH桶僅存在于磁盤空間時,在處理數(shù)據(jù)內(nèi)存區(qū)中重新建立當(dāng)前到來的記錄數(shù)據(jù)對應(yīng)的HASH桶,并將當(dāng)前到來的記錄數(shù)據(jù)存放于其中; 所述轉(zhuǎn)移單元,進(jìn)一步用于在根據(jù)所述元數(shù)據(jù)表,確定當(dāng)前需要緩存到磁盤空間的HASH桶在磁盤空間中已經(jīng)存在時,將當(dāng)前需要緩存到磁盤空間的HASH桶中的數(shù)據(jù)合并至磁盤空間中已存在的該HASH桶中。
16.如權(quán)利要求14所述的裝置,其特征在于,還包括: 靜態(tài)整理單元,用于在計算任務(wù)的數(shù)據(jù)加載完畢后,按照處理數(shù)據(jù)內(nèi)存區(qū)中的HASH桶的長度由大到小的順序,逐個判斷處理數(shù)據(jù)內(nèi)存區(qū)中的HASH桶是否也存在于磁盤空間,若是,則進(jìn)一步判斷將該HASH桶在磁盤空間中的數(shù)據(jù)存放到處理數(shù)據(jù)內(nèi)存區(qū)時是否會導(dǎo)致記錄數(shù)據(jù)的容量超出β ?,如果不超出,則將該HASH桶在磁盤空間中的數(shù)據(jù)合并到處理數(shù)據(jù)內(nèi)存區(qū)中,如果超出,則將該HASH桶在處理數(shù)據(jù)內(nèi)存區(qū)中的數(shù)據(jù)合并到磁盤空間中。
17.如權(quán)利要求11所述的裝置,其特征在于, 所述遍歷單元,還用于在遍歷訪問RHT中的每個Hash桶的過程中,針對當(dāng)前訪問的HASH桶遍歷其中的記錄數(shù)據(jù)并執(zhí)行對應(yīng)的計算,以及根據(jù)計算結(jié)果更新RHT中的HASH桶。
18.如權(quán)利要求12所述的裝置,其特征在于, 所述第二緩存單元,還用于在每個超級步的執(zhí)行過程中,在向處理數(shù)據(jù)內(nèi)存區(qū)中加入當(dāng)前迭代過程中接收的消息數(shù)據(jù)或新產(chǎn)生的待發(fā)送的消息數(shù)據(jù)時,若新加入的消息數(shù)據(jù)將導(dǎo)致消息數(shù)據(jù)在處理數(shù)據(jù)內(nèi)存區(qū)中的總量超出(ι-β) ?,將處理數(shù)據(jù)內(nèi)存區(qū)中的當(dāng)前迭代過程中接收的消息數(shù)據(jù)隊(duì)列和上一輪迭代過程中已接收的消息數(shù)據(jù)隊(duì)列中優(yōu)先級最高且最長的hash桶逐個緩存到磁盤空間,直至處理數(shù)據(jù)內(nèi)存區(qū)的空間滿足要求,其中,當(dāng)前迭代過程中接收的消息數(shù)據(jù)隊(duì)列的優(yōu)先級高于上一輪迭代過程中已接收的消息數(shù)據(jù)隊(duì)列。
19.如權(quán)利要求18所述的裝置,其特征在于,所述第二緩存單元,還用于在處理數(shù)據(jù)內(nèi)存區(qū)中的待發(fā)送的消息數(shù)據(jù)隊(duì)列占用的空間比例超出預(yù)設(shè)門限時,阻塞局部計算線程以避免產(chǎn)生新消息,直至所述空間比例低于所述預(yù)設(shè)門限。
20.如權(quán)利要求12所述的裝置,其特征在于, 所述第二緩存單元,還用于在當(dāng)前迭代過程中接收的消息數(shù)據(jù)隊(duì)列中最長的hash桶的長度低于處理數(shù)據(jù)內(nèi)存區(qū)中消息數(shù)據(jù)的平均Hash桶的長度閾值時,如果向處理數(shù)據(jù)內(nèi)存區(qū)新加入的消息數(shù)據(jù)將導(dǎo)致消息數(shù)據(jù)在處理數(shù)據(jù)內(nèi)存區(qū)中的總量超出(ι-β) ?,則按照HASH桶長度的由大到小的順序,將上一輪迭代過程中已接收的消息數(shù)據(jù)隊(duì)列中的hash桶逐個緩存到磁盤空間,直至處理數(shù) 據(jù)內(nèi)存區(qū)的空間滿足要求,其中,Θ表示計算任務(wù)的處理數(shù)據(jù)內(nèi)存區(qū)的空間大小,β表示預(yù)先分配的記錄數(shù)據(jù)在處理數(shù)據(jù)內(nèi)存區(qū)所占的比例。
【文檔編號】G06F12/08GK103914399SQ201210591659
【公開日】2014年7月9日 申請日期:2012年12月31日 優(yōu)先權(quán)日:2012年12月31日
【發(fā)明者】鄧超, 郭磊濤, 錢嶺, 孫少陵 申請人:中國移動通信集團(tuán)公司