一種基于i/o去重的多任務(wù)圖處理方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種基于I/O去重的多任務(wù)圖處理方法及其系統(tǒng),屬于計(jì)算機(jī)存儲領(lǐng)域。該方法采用專用I/O線程通過異步方式從外存中讀取圖數(shù)據(jù),并加載到內(nèi)存的共享緩沖區(qū);并行執(zhí)行圖處理任務(wù),在任務(wù)執(zhí)行過程中從共享緩沖區(qū)訪問圖數(shù)據(jù)。本發(fā)明通過提供統(tǒng)一訪問外存圖數(shù)據(jù)的方法實(shí)現(xiàn)了I/O重用,通過共享緩存的設(shè)計(jì)協(xié)調(diào)了并行任務(wù)的執(zhí)行速度,解決了當(dāng)前外存模式圖處理系統(tǒng)在處理并發(fā)多任務(wù)時,請求圖數(shù)據(jù)出現(xiàn)I/O沖突和數(shù)據(jù)重復(fù)的問題,優(yōu)化了并行任務(wù)的數(shù)據(jù)等待時間。
【專利說明】
一種基于I /0去重的多任務(wù)圖處理方法及系統(tǒng)
技術(shù)領(lǐng)域
[0001]本發(fā)明屬于計(jì)算機(jī)存儲技術(shù)領(lǐng)域,更具體的,涉及一種基于I/O去重的多任務(wù)圖處理方法及其系統(tǒng),可減少I/o重復(fù)。
【背景技術(shù)】
[0002]作為計(jì)算機(jī)科學(xué)中一種抽象的數(shù)據(jù)結(jié)構(gòu),圖適合描述大規(guī)模、無規(guī)律、稀疏的關(guān)聯(lián)信息,被廣泛應(yīng)用于各領(lǐng)域的數(shù)據(jù)分析之中。而自然圖數(shù)據(jù)往往是不規(guī)則、非結(jié)構(gòu)化的,并且圖算法在數(shù)據(jù)訪問上缺乏局部性、隨機(jī)性突出,又常常需要重復(fù)迭代,造成傳統(tǒng)的大數(shù)據(jù)計(jì)算框架如Hadoop、MapReduce在處理圖數(shù)據(jù)時效率不高。
[0003]為了從圖數(shù)據(jù)中挖掘出有用信息,近年產(chǎn)生了專門針對圖計(jì)算領(lǐng)域的圖處理系統(tǒng)?;痉譃閮深?一種是基于共享內(nèi)存的分布式圖處理系統(tǒng),另一種是基于外存的圖處理系統(tǒng)。由于對圖數(shù)據(jù)的隨機(jī)訪問專門進(jìn)行了集中優(yōu)化,在執(zhí)行大多數(shù)圖算法時比原有的計(jì)算框架有更高的執(zhí)行效率。
[0004]現(xiàn)在的圖處理系統(tǒng)能夠有效執(zhí)行單個圖處理任務(wù),但是在處理同一數(shù)據(jù)集上的多個并行任務(wù)時,存在存儲資源的浪費(fèi)和執(zhí)行時間的延長?;诠蚕韮?nèi)存的分布式圖處理系統(tǒng)在處理并行任務(wù)時,交換數(shù)據(jù)為每個圖處理任務(wù)私有,圖處理任務(wù)在節(jié)點(diǎn)間傳遞消息時會競爭網(wǎng)絡(luò)帶寬,而外存模式圖處理系統(tǒng),并行圖處理任務(wù)時盡管可以共享訪問圖數(shù)據(jù),但是在訪問外存圖數(shù)據(jù)時會造成I/O爭用。而圖算法執(zhí)行過程中,其性能受數(shù)據(jù)訪問時間影響顯著,所以不管是內(nèi)存模式圖處理系統(tǒng)的網(wǎng)絡(luò)帶寬競爭還是外存模式的I/O競爭帶來的數(shù)據(jù)訪問延遲最終都會反映到圖處理任務(wù)的總執(zhí)行時間上。
【發(fā)明內(nèi)容】
[0005]本發(fā)明提供一種基于I/O去重的多任務(wù)圖處理方法及其系統(tǒng),通過提供統(tǒng)一訪問外存圖數(shù)據(jù)的方法實(shí)現(xiàn)了 I/O重用,通過共享緩存的設(shè)計(jì)協(xié)調(diào)了并行任務(wù)的執(zhí)行速度,解決了當(dāng)前外存模式圖處理系統(tǒng)在處理并發(fā)多任務(wù)時,請求圖數(shù)據(jù)出現(xiàn)I/O沖突和數(shù)據(jù)重復(fù)的問題,優(yōu)化了并行任務(wù)的數(shù)據(jù)等待時間。
[0006]—種基于I/O去重的多任務(wù)圖處理方法,具體為:
[0007]采用專用I/O線程通過異步方式從外存中讀取圖數(shù)據(jù),并加載到內(nèi)存的共享緩沖區(qū);
[0008]并行執(zhí)行圖處理任務(wù),在任務(wù)執(zhí)行過程中從共享緩沖區(qū)訪問圖數(shù)據(jù)。
[0009]進(jìn)一步地,在圖處理任務(wù)執(zhí)行過程中對共享緩沖區(qū)的圖數(shù)據(jù)進(jìn)行訪問標(biāo)識,將所有圖處理任務(wù)都訪問過的圖數(shù)據(jù)標(biāo)記為無效,然后將從外存中新讀入的圖數(shù)據(jù)替換共享緩沖區(qū)中的無效圖數(shù)據(jù)。
[0010]進(jìn)一步地,對于任務(wù)隊(duì)列中已完成的圖處理任務(wù),將其從任務(wù)單元隊(duì)列中移除,并刪除其對內(nèi)存共享緩沖區(qū)中數(shù)據(jù)的訪問標(biāo)識;對于任務(wù)隊(duì)列中未完成的圖處理任務(wù),如果未收到終止信號,則將其保存在任務(wù)隊(duì)列中進(jìn)入下一次迭代,否則,將其從任務(wù)隊(duì)列中移除。
[0011]進(jìn)一步地,將計(jì)算時間大于預(yù)定計(jì)算時間閾值且優(yōu)先級小于預(yù)定優(yōu)先級閾值的圖處理任務(wù)暫緩執(zhí)行,在系統(tǒng)空閑時再恢復(fù)執(zhí)行。
[0012]一種基于I/O去重的多任務(wù)圖處理系統(tǒng),包括工作引擎、內(nèi)存緩存和任務(wù)單元;
[0013]工作引擎,用于采用專用I/O線程通過異步方式從外存中讀取圖數(shù)據(jù),并加載到內(nèi)存緩沖區(qū);加載和卸載任務(wù)單元以及并行執(zhí)行任務(wù)單元,在執(zhí)行過程中從緩沖區(qū)訪問圖數(shù)據(jù);
[0014]內(nèi)存緩存,用于緩存圖數(shù)據(jù);
[0015]任務(wù)單元,用于執(zhí)行圖處理任務(wù)。
[0016]進(jìn)一步地,所述工作引擎還用于將圖處理任務(wù)對內(nèi)存緩沖區(qū)訪問過的圖數(shù)據(jù)進(jìn)行標(biāo)識,將所有圖處理任務(wù)都訪問過的圖數(shù)據(jù)標(biāo)記為無效,然后將從外存中新讀入的圖數(shù)據(jù)替換共享緩存中的無效圖數(shù)據(jù)。
[0017]進(jìn)一步地,所述工作引擎還用于對于任務(wù)隊(duì)列中已完成的圖處理任務(wù),將其從任務(wù)單元隊(duì)列中移除,并刪除其對內(nèi)存緩存中數(shù)據(jù)的訪問標(biāo)識;對于任務(wù)隊(duì)列中未完成的圖處理任務(wù),如果未收到終止信號,則將其保存在任務(wù)隊(duì)列中進(jìn)入下一次迭代,否則,將其從任務(wù)隊(duì)列中移除。
[0018]進(jìn)一步地,所述工作引擎還用于將計(jì)算時間大于預(yù)定計(jì)算時間閾值且優(yōu)先級小于預(yù)定優(yōu)先級閾值的圖處理任務(wù)暫緩執(zhí)行,在系統(tǒng)空閑時再恢復(fù)執(zhí)行。
[0019]本發(fā)明與當(dāng)前的多任務(wù)外存模式圖處理系統(tǒng)相比,通過提供統(tǒng)一訪問外存圖數(shù)據(jù)的方法實(shí)現(xiàn)了 I/o重用,通過共享緩存的設(shè)計(jì)協(xié)調(diào)了并行任務(wù)的執(zhí)行速度,優(yōu)化了并行任務(wù)的數(shù)據(jù)等待時間能夠有效的加快并行圖處理任務(wù)執(zhí)行速度。
[0020]在并發(fā)度為N的情況下,系統(tǒng)的總執(zhí)行時間為:Tg=max(Tc-max,Tw),而對當(dāng)前的外存模式圖處理系統(tǒng),系統(tǒng)的總執(zhí)行時間為:To = max (Tc-max,N*Tw),其中Tc-max = max (Tci,Tc2,...Tcn),Tci(i = I,2,...N)是每個圖處理任務(wù)的計(jì)算時間,Tw是數(shù)據(jù)訪問時間。
[0021]當(dāng)所有并行任務(wù)都是以I/O為主導(dǎo)的任務(wù)時,本系統(tǒng)的總執(zhí)行時間TC= TW,現(xiàn)有模型的總執(zhí)行時間To = N*IV,優(yōu)化了的總執(zhí)行時間(N-1)Tw;當(dāng)所有任務(wù)都是計(jì)算為主導(dǎo)的任務(wù)時,當(dāng) Tw〈Tc—max〈NTw 時,TG=Tc—MAx,To = NTwd;W<^AiC^NTw-Tc—MAx,iTc—MAx>NT\^,Tg = Tc—max= To0
【附圖說明】
[0022]圖1為本發(fā)明的流程示意圖;
[0023]圖2為圖處理任務(wù)加載的流程示意圖;
[0024]圖3為圖處理任務(wù)卸載的流程示意圖。
[0025]圖4為本發(fā)明實(shí)施例實(shí)施過程狀態(tài)示意圖,圖4a)為初始狀態(tài)圖,圖4b)為第一次迭代狀態(tài)圖,圖4c)為第二次迭代狀態(tài)圖。
【具體實(shí)施方式】
[0026]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。此外,下面所描述的本發(fā)明各個實(shí)施方式中所涉及到的技術(shù)特征只要彼此之間未構(gòu)成沖突就可以相互組合。
[0027]本發(fā)明提出一種基于I/O去重的多任務(wù)圖處理系統(tǒng),包括工作引擎、內(nèi)存緩存和多個任務(wù)單元。
[0028]工作引擎:負(fù)責(zé)內(nèi)存共享緩存的數(shù)據(jù)加載與替換和圖處理任務(wù)的卸載\掛載。
[0029]對于內(nèi)存緩存數(shù)據(jù)加載與替換,工作引擎屏蔽了系統(tǒng)內(nèi)圖處理任務(wù)向操作系統(tǒng)發(fā)起的讀寫請求,采用專門的線程統(tǒng)一負(fù)責(zé)1/0,該I/O線程通過異步的方式從外存中讀取圖數(shù)據(jù)加載到內(nèi)存中的一塊緩沖區(qū),該緩沖區(qū)為所有使用同一圖數(shù)據(jù)集的圖處理任務(wù)共享。工作引擎根據(jù)圖處理任務(wù)對圖數(shù)據(jù)的訪問標(biāo)識完成共享緩存中圖數(shù)據(jù)的加載與替換。更具體地說,將所有圖任務(wù)都訪問過的圖數(shù)據(jù)標(biāo)記為無效,然后用外存中讀入的圖信息替換緩存中無效的圖數(shù)據(jù),完成圖數(shù)據(jù)的加載。
[0030]對于圖處理任務(wù)的卸載\掛載,根據(jù)系統(tǒng)負(fù)載狀況和預(yù)設(shè)的調(diào)度算法在圖處理任務(wù)執(zhí)行過程中自由的卸載和掛載任務(wù)單元。并行執(zhí)行圖處理任務(wù),在任務(wù)執(zhí)行過程中從緩沖區(qū)訪問圖數(shù)據(jù)。按照一種優(yōu)化的實(shí)施方式,對于需要執(zhí)行大量的計(jì)算過程且優(yōu)先級較低的圖處理任務(wù),可以將其調(diào)出工作引擎,避免該圖處理任務(wù)影響了以I/o為主導(dǎo)的圖處理任務(wù)迭代的速度。在系統(tǒng)空閑時再讀取檢查點(diǎn)恢復(fù)工作,即掛載該任務(wù)單元,獲取任務(wù)實(shí)時性和平均執(zhí)行時間上的平衡。
[0031]共享緩存:用于緩存從外存讀入的圖數(shù)據(jù)。圖數(shù)據(jù)量非常大,這里采用分批讀入,首先從外存讀取部分圖數(shù)據(jù)加載于內(nèi)存共享緩存中,對于圖處理任務(wù)都訪問過的圖數(shù)據(jù),用外存中讀入的新的圖數(shù)據(jù)替換共享緩存中無效的圖數(shù)據(jù),完成圖數(shù)據(jù)的加載。共享緩沖區(qū)的數(shù)據(jù)替換不是一次性完成的,只要存在所有圖處理任務(wù)訪問過的無效圖數(shù)據(jù),就可以完成圖數(shù)據(jù)的替換。
[0032]任務(wù)單元:任務(wù)單元為用戶提供編程接口,包含用戶定義的圖處理任務(wù)的具體實(shí)現(xiàn),擁有自己的狀態(tài)集和更新集。其中,狀態(tài)集為圖處理任務(wù)提供與頂點(diǎn)相關(guān)聯(lián)的狀態(tài)信息和臨時變量的集合,更新集是圖處理任務(wù)執(zhí)行過程中傳遞的消息集合。
[0033]本發(fā)明提出一種基于I/O去重的多任務(wù)圖處理方法,如圖1所示,具體為:
[0034](I)工作引擎清理
[0035]工作引擎將任務(wù)單元訪問共享存儲的標(biāo)識重置,即將unit_map(任務(wù)單元到緩存偏移量的映射)中的每一項(xiàng)都置為0,并且調(diào)用reset函數(shù)重置任務(wù)單元隊(duì)列中每個任務(wù)單元對應(yīng)的緩沖區(qū)和更新集。
[0036](2)外存圖數(shù)據(jù)加載
[0037]工作引擎重啟磁盤1/0,重新讀取外存圖數(shù)據(jù)集,加載圖數(shù)據(jù)集到共享緩存。
[0038](3)圖處理任務(wù)加載
[0039]只有使用同一數(shù)據(jù)集的圖處理任務(wù),才能采用共享緩沖區(qū)的方式并行執(zhí)行。
[0040]如圖2所示,工作引擎遍歷任務(wù)單元隊(duì)列,對于已經(jīng)完成初始化的圖處理任務(wù),工作引擎為其scatter階段和gather階段分別建立一個線程,并將其加入到線程池中。任務(wù)單元隊(duì)列非空時,重復(fù)步驟(3),否則,執(zhí)行步驟(4)。
[0041 ] (4)圖處理任務(wù)執(zhí)行
[0042]任務(wù)單元中,scatter線程循環(huán)調(diào)用getNestEdge函數(shù)從內(nèi)存緩存中獲取邊信息,然后執(zhí)行用戶定義的算法,當(dāng)需要更新頂點(diǎn)狀態(tài)的時候調(diào)用addUpdate函數(shù)向更新集中添加消息,在共享緩存中圖數(shù)據(jù)集的所有邊被訪問完時結(jié)束。Gather階段循環(huán)調(diào)用getUpdate函數(shù)收集更新集中的消息,執(zhí)行用戶定義的算法,應(yīng)用更新修改頂點(diǎn)狀態(tài)集,在所有消息被訪問完時結(jié)束。
[0043](5)圖處理任務(wù)卸載
[0044]如圖3所示,工作引擎遍歷任務(wù)單元序列,對于已完成的圖處理任務(wù),將其結(jié)果寫到輸出文件中并將其從任務(wù)單元隊(duì)列中移除,并刪除其在共享緩存中的任務(wù)標(biāo)識;對于未完成的圖處理任務(wù),如果未收到終止信號,則將其保存在任務(wù)隊(duì)列中進(jìn)入下一次迭代,否則,將其從系統(tǒng)中移除。任務(wù)單元隊(duì)列非空時,重復(fù)步驟(5),否則,結(jié)束此次迭代過程。
[0045]下面結(jié)合實(shí)施例對本發(fā)明進(jìn)行進(jìn)一步說明,考慮一個并行度N=2的情況。
[0046]以單源最短路徑為例介紹圖處理任務(wù)的執(zhí)行過程,輸入的圖數(shù)據(jù)與各節(jié)點(diǎn)的初始狀態(tài)圖如圖4a)所示。
[0047]讀入圖數(shù)據(jù)之前,算法執(zhí)行初始化操作,將源點(diǎn)X的距離值設(shè)置為0,其余頂點(diǎn)距離值設(shè)置為正無窮。初始化完成后,scatter線程依次處理系統(tǒng)讀入的每一條邊,例如第一條邊(x,y,12),由于y頂點(diǎn)此時的距離為正無窮,貝Ij生成一條更新消息(id = y,distance = 12,pre_vertex = x)加入到更新集中,gather線程通過getUpdate函數(shù)從更新集中收到這一更新消息,發(fā)現(xiàn)更新中的距離小于當(dāng)前頂點(diǎn)狀態(tài)域中的正無窮,則更新y節(jié)點(diǎn)的距離與前驅(qū)頂點(diǎn);當(dāng)處理邊(z,y,3)時,由于此時z的距離值為正無窮,y.distance〈z.distance+(z_>y).weight,算法不產(chǎn)生更新操作;邊(x,z,7)會產(chǎn)生對z頂點(diǎn)的更新,第一輪迭代完成后系統(tǒng)的狀態(tài)如圖4b)所示。
[0048]在第二輪迭代中,邊(z,y,3)會為頂點(diǎn)y產(chǎn)生一條更新消息,將距離值從12修改為較小的10,而邊(x,y,12)和邊(x,z,7)都不會產(chǎn)生更新消息,視作對算法“無用”的邊,如圖4c)所示。
[0049]當(dāng)系統(tǒng)在下一次迭代中發(fā)現(xiàn)生成的更新消息數(shù)量為O時,中止算法,輸出結(jié)果。
[0050]工作引擎遍歷任務(wù)單元序列,對于已完成的圖處理任務(wù),將其結(jié)果寫到輸出文件中并將其從任務(wù)單元隊(duì)列中移除,并刪除其在共享緩存中的任務(wù)標(biāo)識;對于未完成的圖處理任務(wù),如果未收到終止信號,則將其保存在任務(wù)隊(duì)列中進(jìn)入下一次迭代,否則,將其從系統(tǒng)中移除。
[0051]本領(lǐng)域的技術(shù)人員容易理解,以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【主權(quán)項(xiàng)】
1.一種基于I/O去重的多任務(wù)圖處理方法,其特征在于,具體為: 采用專用I/O線程通過異步方式從外存中讀取圖數(shù)據(jù),并加載到內(nèi)存的共享緩沖區(qū); 并行執(zhí)行使用同一圖數(shù)據(jù)集的圖處理任務(wù),在圖處理任務(wù)執(zhí)行過程中從共享緩沖區(qū)訪問圖數(shù)據(jù)。2.根據(jù)權(quán)利要求1所述的基于I/O去重的多任務(wù)圖處理方法,其特征在于,在圖處理任務(wù)執(zhí)行過程中對共享緩沖區(qū)的圖數(shù)據(jù)進(jìn)行訪問標(biāo)識,將所有圖處理任務(wù)都訪問過的圖數(shù)據(jù)標(biāo)記為無效,然后將從外存中新讀入的圖數(shù)據(jù)替換共享緩沖區(qū)中的無效圖數(shù)據(jù)。3.根據(jù)權(quán)利要求1或2所述的基于I/O去重的多任務(wù)圖處理方法,其特征在于,對于任務(wù)隊(duì)列中已完成的圖處理任務(wù),將其從任務(wù)單元隊(duì)列中移除,并刪除其對內(nèi)存共享緩沖區(qū)中圖數(shù)據(jù)的訪問標(biāo)識;對于任務(wù)隊(duì)列中未完成的圖處理任務(wù),如果未收到終止信號,則將其保存在任務(wù)隊(duì)列中進(jìn)入下一次迭代,否則,將其從任務(wù)隊(duì)列中移除。4.根據(jù)權(quán)利要求1或2所述的基于I/O去重的多任務(wù)圖處理方法,其特征在于,將計(jì)算時間大于預(yù)定計(jì)算時間閾值且優(yōu)先級小于預(yù)定優(yōu)先級閾值的圖處理任務(wù)暫緩執(zhí)行,在系統(tǒng)空閑時再恢復(fù)執(zhí)行。5.—種基于I/O去重的多任務(wù)圖處理系統(tǒng),其特征在于,包括工作引擎、內(nèi)存緩存和任務(wù)單元; 工作引擎,用于采用專用I/o線程通過異步方式從外存中讀取圖數(shù)據(jù),并加載到內(nèi)存共享緩沖區(qū);加載和卸載任務(wù)單元以及并行執(zhí)行任務(wù)單元,在執(zhí)行過程中從共享緩沖區(qū)訪問圖數(shù)據(jù); 內(nèi)存緩存,用于緩存圖數(shù)據(jù); 任務(wù)單元,用于執(zhí)行圖處理任務(wù)。6.根據(jù)權(quán)利要求5所述的基于I/O去重的多任務(wù)圖處理系統(tǒng),其特征在于,所述工作引擎還用于將圖處理任務(wù)對內(nèi)存緩沖區(qū)訪問過的圖數(shù)據(jù)進(jìn)行標(biāo)識,將所有圖任務(wù)都訪問過的圖數(shù)據(jù)標(biāo)記為無效,然后將從外存中新讀入的圖數(shù)據(jù)替換共享緩存中的無效圖數(shù)據(jù)。7.根據(jù)權(quán)利要求5所述的基于I/O去重的多任務(wù)圖處理系統(tǒng),其特征在于,所述工作引擎還用于對于任務(wù)隊(duì)列中已完成的圖處理任務(wù),將其從任務(wù)單元隊(duì)列中移除,并刪除其對內(nèi)存緩存中數(shù)據(jù)的訪問標(biāo)識;對于任務(wù)隊(duì)列中未完成的圖處理任務(wù),如果未收到終止信號,則將其保存在任務(wù)隊(duì)列中進(jìn)入下一次迭代,否則,將其從任務(wù)隊(duì)列中移除。8.根據(jù)權(quán)利要求5所述的基于I/O去重的多任務(wù)圖處理系統(tǒng),其特征在于,所述工作引擎還用于將計(jì)算時間大于預(yù)定計(jì)算時間閾值且優(yōu)先級小于預(yù)定優(yōu)先級閾值的圖處理任務(wù)暫緩執(zhí)行,在系統(tǒng)空閑時再恢復(fù)執(zhí)行。
【文檔編號】G06F9/48GK106095552SQ201610399043
【公開日】2016年11月9日
【申請日】2016年6月7日
【發(fā)明人】施展, 馮丹, 彭亞妹, 鮑匡迪, 王子毅, 于瑞麗
【申請人】華中科技大學(xué)