專(zhuān)利名稱(chēng):在用戶(hù)空間文件系統(tǒng)上實(shí)現(xiàn)聚合寫(xiě)文件臟頁(yè)的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及Linux操作系統(tǒng)的文件訪問(wèn)技術(shù),尤其涉及一種在用戶(hù)空間文件系統(tǒng) (fuse, filesystem in usese space)上實(shí)現(xiàn)聚合寫(xiě)文件臟頁(yè)的方法和裝置。
背景技術(shù):
在基于Linux操作系統(tǒng)實(shí)現(xiàn)的用戶(hù)態(tài)分布式文件系統(tǒng)應(yīng)用中,需要向用戶(hù)提供通常的標(biāo)準(zhǔn)的文件訪問(wèn)接口。用戶(hù)不需要知道底層是本地文件系統(tǒng)還是分布式文件系統(tǒng),都可以通過(guò)文件系統(tǒng)掛載點(diǎn)以統(tǒng)一的方式訪問(wèn)。這通常是由用戶(hù)態(tài)文件系統(tǒng)模塊fuse來(lái)實(shí)現(xiàn)的。fuse駐留在Linux內(nèi)核,接收用戶(hù)進(jìn)程的文件訪問(wèn)消息,封裝成fuse消息傳遞給用戶(hù)態(tài)文件系統(tǒng)的守護(hù)進(jìn)程。目前的fuse實(shí)現(xiàn)基本滿足了一般應(yīng)用的功能性需求,但難以滿足企業(yè)級(jí)、電信級(jí)分布式文件系統(tǒng)的性能需求,尤其在以?xún)?nèi)存映射方式(mmap)大批量寫(xiě)文件數(shù)據(jù)的時(shí)候。在用內(nèi)存映射方式寫(xiě)文件數(shù)據(jù)時(shí),用戶(hù)進(jìn)程首先打開(kāi)一個(gè)文件,然后把文件空間映射到內(nèi)存地址空間,接著向內(nèi)存地址空間寫(xiě)入數(shù)據(jù),最后解除映射和關(guān)閉文件。寫(xiě)入的數(shù)據(jù)首先存儲(chǔ)在Linux內(nèi)核的頁(yè)緩存里。Linux系統(tǒng)會(huì)自動(dòng)把更改過(guò)的數(shù)據(jù)頁(yè)標(biāo)記為臟頁(yè)。在解除內(nèi)存映射關(guān)閉文件時(shí)調(diào)用頁(yè)寫(xiě)(writepage)函數(shù)把每個(gè)臟頁(yè)封裝成一個(gè)fuse消息傳送給用戶(hù)態(tài)文件系統(tǒng)守護(hù)進(jìn)程。在這種方式下,每一頁(yè)大小的數(shù)據(jù)就會(huì)產(chǎn)生一個(gè)fuse消息。在Linux上,一個(gè)頁(yè)一般是4KB大小。在寫(xiě)幾十MB以上的大文件的時(shí)候,會(huì)產(chǎn)生非常多的fuse消息,增加了每次消息交互產(chǎn)生的附加代價(jià),極大地消耗系統(tǒng)的中央處理器(CPU)資源,傳輸效率極為低下。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明的主要目的在于提供一種在fuse上實(shí)現(xiàn)聚合寫(xiě)文件臟頁(yè)的方法和裝置,減少fuse消息數(shù)量,節(jié)省系統(tǒng)的CPU資源,提高傳輸效率。為達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的一種在用戶(hù)空間文件系統(tǒng)(fuse)上實(shí)現(xiàn)聚合寫(xiě)文件臟頁(yè)的方法,包括fuse獲取臟頁(yè)數(shù)組;檢查臟頁(yè)數(shù)組中連續(xù)的臟頁(yè),將連續(xù)的臟頁(yè)通過(guò)一個(gè)fuse消息傳遞給用戶(hù)態(tài)文件系統(tǒng)的守護(hù)進(jìn)程。所述fuse獲取臟頁(yè)數(shù)組為定義原型為頁(yè)寫(xiě)函數(shù)(writ印ages)的函數(shù)fuse_ writepages,函數(shù)fuse_Writ印ages根據(jù)輸入?yún)?shù),確定文件寫(xiě)的起始頁(yè)號(hào)和結(jié)束頁(yè)號(hào);清除文件寫(xiě)完成標(biāo)識(shí),調(diào)用查找函數(shù)(pagevecjookupjag),并輸入起始頁(yè)號(hào)和結(jié)束頁(yè)號(hào),將帶有臟頁(yè)標(biāo)志PAGEE_TAG_DCACHIRTY的頁(yè),按頁(yè)號(hào)從小到大的順序組成臟頁(yè)數(shù)組存儲(chǔ)在臟頁(yè)存儲(chǔ)數(shù)組(pvec)中。所述檢查臟頁(yè)數(shù)組中連續(xù)的臟頁(yè),將連續(xù)的臟頁(yè)通過(guò)一個(gè)fuse消息傳遞給用戶(hù)態(tài)文件系統(tǒng)的守護(hù)進(jìn)程為fuse依次檢查臟頁(yè)數(shù)組中的每一頁(yè),根據(jù)臟頁(yè)數(shù)組中第一個(gè)臟頁(yè)的頁(yè)號(hào)設(shè)置連續(xù)號(hào)變量,并在將第一個(gè)臟頁(yè)的頁(yè)地址加入到fuse消息的頁(yè)數(shù)組中之后,通過(guò)連續(xù)號(hào)變量確定與第一個(gè)臟頁(yè)連續(xù)的臟頁(yè),將確定的連續(xù)的臟頁(yè)也加入到所述fuse 消息的頁(yè)數(shù)組中,通過(guò)所述fuse消息將所述頁(yè)數(shù)組傳遞給用戶(hù)態(tài)文件系統(tǒng)的守護(hù)進(jìn)程。所述方法進(jìn)一步包括預(yù)先設(shè)置最大臟頁(yè)數(shù),當(dāng)fuse消息的頁(yè)數(shù)組中臟頁(yè)頁(yè)數(shù)達(dá)到最大臟頁(yè)數(shù)時(shí),不再繼續(xù)確定連續(xù)臟頁(yè),將該fuse消息傳遞給用戶(hù)態(tài)文件系統(tǒng)的守護(hù)進(jìn)程。一種在fuse上實(shí)現(xiàn)聚合 寫(xiě)文件臟頁(yè)的裝置,包括獲取模塊、檢查模塊、傳遞模塊;其中,獲取模塊,用于獲取臟頁(yè)數(shù)組;檢查模塊,用于檢查臟頁(yè)數(shù)組中連續(xù)的臟頁(yè),將連續(xù)的臟頁(yè)發(fā)送到傳遞模塊;傳遞模塊,用于將連續(xù)的臟頁(yè)通過(guò)一個(gè)fuse消息傳遞給用戶(hù)態(tài)文件系統(tǒng)的守護(hù)進(jìn)程。所述獲取模塊,具體用于定義原型為writ印ages的函數(shù)fuse_writ印ages,函數(shù)fuse_writepages根據(jù)輸入?yún)?shù)wbc,確定文件寫(xiě)的起始頁(yè)號(hào)和結(jié)束頁(yè)號(hào);清除文件寫(xiě)完成標(biāo)識(shí),調(diào)用pagevecjookupjag函數(shù),并輸入起始頁(yè)號(hào)和結(jié)束頁(yè)號(hào),將帶有臟頁(yè)標(biāo)志 PAGEE_TAG_DCACHIRTY的頁(yè),按頁(yè)號(hào)從小到大的順序組成臟頁(yè)數(shù)組存儲(chǔ)在pvec中。所述檢查模塊,具體用于依次檢查臟頁(yè)數(shù)組中的每一頁(yè),根據(jù)臟頁(yè)數(shù)組中第一個(gè)臟頁(yè)的頁(yè)號(hào)設(shè)置連續(xù)號(hào)變量,并將第一個(gè)臟頁(yè)的頁(yè)地址通知傳遞模塊,通過(guò)連續(xù)號(hào)變量確定與第一個(gè)臟頁(yè)連續(xù)的臟頁(yè),將確定的連續(xù)的臟頁(yè)的頁(yè)地址通知傳遞模塊。所述傳遞模塊,具體用于將所述檢查模塊通知的臟頁(yè)的頁(yè)地址加入到fuse消息的頁(yè)數(shù)組中,通過(guò)所述fuse消息將所述頁(yè)數(shù)組傳遞給用戶(hù)態(tài)文件系統(tǒng)的守護(hù)進(jìn)程。所述傳遞模塊,進(jìn)一步用于設(shè)置最大臟頁(yè)數(shù),當(dāng)fuse消息的頁(yè)數(shù)組中臟頁(yè)頁(yè)數(shù)達(dá)到最大臟頁(yè)數(shù)時(shí),通知檢查模塊不再繼續(xù)確定連續(xù)臟頁(yè),將所述fuse消息傳遞給用戶(hù)態(tài)文件系統(tǒng)的守護(hù)進(jìn)程。本發(fā)明提供了一種在fuse上實(shí)現(xiàn)聚合寫(xiě)文件臟頁(yè)的方法和裝置,fuse獲取臟頁(yè)數(shù)組;檢查臟頁(yè)數(shù)組中連續(xù)的臟頁(yè),將連續(xù)的臟頁(yè)通過(guò)一個(gè)fuse消息傳遞給用戶(hù)態(tài)文件系統(tǒng)的守護(hù)進(jìn)程;如此,能夠減少fuse消息數(shù)量,節(jié)省系統(tǒng)的CPU資源,提高傳輸效率。
圖1為本發(fā)明在fuse上實(shí)現(xiàn)聚合寫(xiě)文件臟頁(yè)的方法的流程示意圖;圖2為本發(fā)明在fuse上實(shí)現(xiàn)聚合寫(xiě)文件臟頁(yè)的方法中,步驟102的實(shí)例示意圖;圖3為本發(fā)明在fuse上實(shí)現(xiàn)聚合寫(xiě)文件臟頁(yè)的裝置的結(jié)構(gòu)示意圖。
具體實(shí)施例方式本發(fā)明的基本思想是fUSe獲取臟頁(yè)數(shù)組;檢查臟頁(yè)數(shù)組中連續(xù)的臟頁(yè),將連續(xù)的臟頁(yè)通過(guò)一個(gè)fuse消息傳遞給用戶(hù)態(tài)文件系統(tǒng)的守護(hù)進(jìn)程。下面通過(guò)附圖及具體實(shí)施例對(duì)本發(fā)明做進(jìn)一步的詳細(xì)說(shuō)明。本發(fā)明實(shí)現(xiàn)一種在fuse上實(shí)現(xiàn)聚合寫(xiě)文件臟頁(yè)的方法,如圖1所示,該方法包括以下幾個(gè)步驟步驟101 :fuse獲取臟頁(yè)數(shù)組;
具體的,在類(lèi)型為 address_space_operations 的結(jié)構(gòu)體 fuse_file_aops 添加成員賦值語(yǔ)句.writepages = fuse_writepages ;定義原型為writ印ages的函數(shù)fuse_writ印ages,其輸入?yún)?shù)為mapping 要操作的文件的地址空間結(jié)構(gòu)address_space ;wbc 寫(xiě)回控制結(jié)構(gòu) writeback_control ; 函數(shù)fuse_Writ印ages根據(jù)輸入?yún)?shù)wbc,確定文件寫(xiě)的起始頁(yè)號(hào)index和結(jié)束頁(yè)號(hào)end ;清除文件寫(xiě)完成標(biāo)識(shí),調(diào)用查找函數(shù)(pagevecjookupjag),并輸入起始頁(yè)號(hào) index和結(jié)束頁(yè)號(hào)end,將帶有臟頁(yè)標(biāo)志PAGEE_TAG_DCACHIRTY的頁(yè),按頁(yè)號(hào)從小到大的順序組成臟頁(yè)數(shù)組存儲(chǔ)在臟頁(yè)存儲(chǔ)數(shù)組(pvec,dirty page vector)中。步驟102 :fuse檢查臟頁(yè)數(shù)組中連續(xù)的臟頁(yè),將連續(xù)的臟頁(yè)通過(guò)一個(gè)fuse消息傳遞給用戶(hù)態(tài)文件系統(tǒng)的守護(hù)進(jìn)程;具體的,fuse根據(jù)臟頁(yè)數(shù)組中第一個(gè)臟頁(yè)的頁(yè)號(hào)設(shè)置連續(xù)號(hào)變量,并在將第一個(gè)臟頁(yè)的頁(yè)地址加入到fuse消息的頁(yè)數(shù)組中之后,通過(guò)連續(xù)號(hào)變量確定與第一個(gè)臟頁(yè)連續(xù)的臟頁(yè),將確定的連續(xù)的臟頁(yè)也加入到fuse消息的頁(yè)數(shù)組中,通過(guò)所述fuse消息將所述頁(yè)數(shù)組傳遞給用戶(hù)態(tài)文件系統(tǒng)的守護(hù)進(jìn)程;下面對(duì)本步驟的流程進(jìn)行詳細(xì)描述fuse調(diào)用fuse_get_req函數(shù)申請(qǐng)一個(gè)req消息對(duì)象,設(shè)置其屬性in. argpages =l,page_offset = 0 ;設(shè)置連續(xù)號(hào)變量 seq 為 pvec. pages
- > indexf-l,其中 indexf 為臟頁(yè)數(shù)組中的第一個(gè)臟頁(yè)的頁(yè)號(hào),臟頁(yè)數(shù)組中最后一頁(yè)的頁(yè)號(hào)用endf表示;從pvec. pages
開(kāi)始依次檢查pvec中臟頁(yè)數(shù)組的每一頁(yè),對(duì)檢查的當(dāng)前頁(yè)做下列操作a、判斷頁(yè)號(hào)是否大于endf,如果大于endf,則設(shè)置文件寫(xiě)完成標(biāo)識(shí),執(zhí)行步驟h ; 否則執(zhí)行步驟b ;b、調(diào)用loCk_page鎖住當(dāng)前頁(yè),根據(jù)是否有臟頁(yè)標(biāo)志PAGEE_TAG_DCACHIRTY判斷當(dāng)前頁(yè)是否已不是臟頁(yè),如果已不是臟頁(yè),解除鎖定當(dāng)前頁(yè)并執(zhí)行步驟h ;否則執(zhí)行步驟c ;C、判斷當(dāng)前頁(yè)指向的地址空間是否是當(dāng)前地址空間,如果不是,則解除鎖定當(dāng)前頁(yè)并執(zhí)行步驟h ;否則執(zhí)行步驟d ;d、判斷當(dāng)前頁(yè)是否處于寫(xiě)回狀態(tài),如果是,則解除鎖定當(dāng)前頁(yè)并執(zhí)行步驟h;否則執(zhí)行步驟e ;e、判斷當(dāng)前頁(yè)的頁(yè)號(hào)是否等于連續(xù)號(hào)變量seq+Ι,如果不等于,則解除鎖定當(dāng)前頁(yè)并執(zhí)行步驟h;否則執(zhí)行步驟f; f、調(diào)用clear_page_dirty_for_io函數(shù)清除當(dāng)前頁(yè)的臟頁(yè)標(biāo)志PAGEE_TAG_ DCACHIRTY ;如果清除失敗,則解除鎖定當(dāng)前頁(yè)并執(zhí)行步驟h ;否則執(zhí)行步驟g ;g、調(diào)用page_cache_get增加當(dāng)前頁(yè)的緩存計(jì)數(shù),調(diào)用set_page_writeback函數(shù)為當(dāng)前頁(yè)設(shè)置頁(yè)寫(xiě)回狀態(tài),并填寫(xiě)頁(yè)地址到req的頁(yè)數(shù)組,增加req的頁(yè)數(shù),獲取臟頁(yè)數(shù)組中的下一頁(yè),執(zhí)行步驟a;h、判斷req的頁(yè)數(shù)是否大于0,如果大于0,則調(diào)用fuse_send_writ印ages函數(shù)將 req的頁(yè)數(shù)組中的臟頁(yè)通過(guò)req消息傳遞給用戶(hù)態(tài)文件系統(tǒng)的守護(hù)進(jìn)程,執(zhí)行步驟i ;否則直接執(zhí)行步驟i ;步驟h中,在req的頁(yè)數(shù)大于1時(shí),說(shuō)明req的頁(yè)數(shù)組中的一個(gè)以上臟頁(yè)是連續(xù)的,這樣就能夠通過(guò)一個(gè)req消息傳遞多個(gè)臟頁(yè)。i、調(diào)用pagevec_releasse函數(shù)釋放pvec,調(diào)用cond_resched函數(shù),重新執(zhí)行步驟 101。步 驟102中,進(jìn)一步包括預(yù)先設(shè)置最大臟頁(yè)數(shù),用于限制一個(gè)fuse消息傳遞的連續(xù)臟頁(yè)的數(shù)量,即當(dāng)fuse消息的頁(yè)數(shù)組中臟頁(yè)頁(yè)數(shù)達(dá)到最大臟頁(yè)數(shù)時(shí),不再繼續(xù)確定連續(xù)臟頁(yè),將該fuse消息傳遞給用戶(hù)態(tài)文件系統(tǒng)的守護(hù)進(jìn)程,如在步驟g中所述增加req的頁(yè)數(shù)之后,判斷req的頁(yè)數(shù)是否等于最大臟頁(yè)數(shù),如果的等于,則執(zhí)行步驟h,如果不等于,再獲取臟頁(yè)數(shù)組中的下一頁(yè),執(zhí)行步驟a。下面通過(guò)一個(gè)具體實(shí)例來(lái)說(shuō)明本步驟。如圖2所示,文件的地址空間(addressspace)的當(dāng)前臟頁(yè)數(shù)組中有6個(gè)臟頁(yè),頁(yè)號(hào)分別為1、2、3、6、9、10。如果用現(xiàn)有的方法,當(dāng)寫(xiě)回該文件時(shí),會(huì)對(duì)每個(gè)臟頁(yè)生成一個(gè)req 消息,共6個(gè)req消息。應(yīng)用步驟102的方法,能夠確定出頁(yè)號(hào)為1、2、3的臟頁(yè)連續(xù),可以生成一個(gè)req消息Reql,將頁(yè)號(hào)為1、2、3的臟頁(yè)的頁(yè)地址加入到Reql的頁(yè)數(shù)組中;通過(guò)獲取臟頁(yè)數(shù)組后, 臟頁(yè)數(shù)組中有3個(gè)臟頁(yè),頁(yè)號(hào)分別為6、9、10,確定出頁(yè)號(hào)為6的臟頁(yè)沒(méi)有連續(xù)的臟頁(yè),生成一個(gè)req消息Req2,將頁(yè)號(hào)為6的臟頁(yè)的頁(yè)地址加入到Req2的頁(yè)數(shù)組中;通過(guò)獲取臟頁(yè)數(shù)組后,臟頁(yè)數(shù)組中有2個(gè)臟頁(yè),頁(yè)號(hào)分別為9、10,確定出頁(yè)號(hào)為9和10的臟頁(yè)連續(xù),生成一個(gè)req消息Req3,將頁(yè)號(hào)為9、10的臟頁(yè)的頁(yè)地址加入到Req3的頁(yè)數(shù)組中,這樣,一共只需生成3個(gè)req消息,消息數(shù)可以減少一半。為了實(shí)現(xiàn)上述方法,本發(fā)明還提供一種在fuse上實(shí)現(xiàn)聚合寫(xiě)文件臟頁(yè)的裝置,如圖3所示,該裝置包括獲取模塊31、檢查模塊32、傳遞模塊33 ;其中,獲取模塊31,用于獲取臟頁(yè)數(shù)組;檢查模塊32,用于檢查臟頁(yè)數(shù)組中連續(xù)的臟頁(yè),將連續(xù)的臟頁(yè)發(fā)送到傳遞模塊 33 ;傳遞模塊33,用于將連續(xù)的臟頁(yè)通過(guò)一個(gè)fuse消息傳遞給用戶(hù)態(tài)文件系統(tǒng)的守護(hù)進(jìn)程;所述獲取模塊31,具體用于定義原型為writ印ages的函數(shù)fuse_writ印ages,函數(shù)fuse_Writ印ages根據(jù)輸入?yún)?shù)wbc,確定文件寫(xiě)的起始頁(yè)號(hào)index和結(jié)束頁(yè)號(hào)end ;清除文件寫(xiě)完成標(biāo)識(shí),調(diào)用pageveC_l00kup_tag函數(shù),并輸入起始頁(yè)號(hào)index和結(jié)束頁(yè)號(hào) end,將帶有臟頁(yè)標(biāo)志PAGEE_TAG_DCACHIRTY的頁(yè),按頁(yè)號(hào)從小到大的順序組成臟頁(yè)數(shù)組存儲(chǔ)在pvec中;所述檢查模塊32,具體用于依次檢查臟頁(yè)數(shù)組中的每一頁(yè),根據(jù)臟頁(yè)數(shù)組中第一個(gè)臟頁(yè)的頁(yè)號(hào)設(shè)置連續(xù)號(hào)變量,并將第一個(gè)臟頁(yè)的頁(yè)地址通知傳遞模塊33,通過(guò)連續(xù)號(hào)變量確定與第一個(gè)臟頁(yè)連續(xù)的臟頁(yè),將確定的連續(xù)的臟頁(yè)的頁(yè)地址通知傳遞模塊33 ;所述傳遞模塊33,具體用于將所述檢查模塊32通知的臟頁(yè)的頁(yè)地址加入到fuse 消息的頁(yè)數(shù)組中,通過(guò)所述fuse消息將所述頁(yè)數(shù)組傳遞給用戶(hù)態(tài)文件系統(tǒng)的守護(hù)進(jìn)程;所述傳遞模塊33,進(jìn)一步用于設(shè)置最大臟頁(yè)數(shù),當(dāng)fuse消息的頁(yè)數(shù)組中臟頁(yè)頁(yè)數(shù)達(dá)到最大臟頁(yè)數(shù)時(shí),通知檢查模塊32不再繼續(xù)確定連續(xù)臟頁(yè),將所述fuse消息傳遞給用戶(hù)態(tài)文件系統(tǒng)的守護(hù)進(jìn)程。
以 上所述,僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。
權(quán)利要求
1.一種在用戶(hù)空間文件系統(tǒng)(fuse)上實(shí)現(xiàn)聚合寫(xiě)文件臟頁(yè)的方法,其特征在于,該方法包括fuse獲取臟頁(yè)數(shù)組;檢查臟頁(yè)數(shù)組中連續(xù)的臟頁(yè),將連續(xù)的臟頁(yè)通過(guò)一個(gè)fuse消息傳遞給用戶(hù)態(tài)文件系統(tǒng)的守護(hù)進(jìn)程。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述fuse獲取臟頁(yè)數(shù)組為定義原型為頁(yè)寫(xiě)函數(shù)(writepages)的函數(shù) fuse_writepages,函數(shù) fuse_writepages 根據(jù)輸入?yún)?shù),確定文件寫(xiě)的起始頁(yè)號(hào)和結(jié)束頁(yè)號(hào);清除文件寫(xiě)完成標(biāo)識(shí),調(diào)用查找函數(shù)(pagevec_l00kup_tag),并輸入起始頁(yè)號(hào)和結(jié)束頁(yè)號(hào),將帶有臟頁(yè)標(biāo)志PAGEE_TAG_ DCACHIRTY的頁(yè),按頁(yè)號(hào)從小到大的順序組成臟頁(yè)數(shù)組存儲(chǔ)在臟頁(yè)存儲(chǔ)數(shù)組(pvec)中。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述檢查臟頁(yè)數(shù)組中連續(xù)的臟頁(yè),將連續(xù)的臟頁(yè)通過(guò)一個(gè)fuse消息傳遞給用戶(hù)態(tài)文件系統(tǒng)的守護(hù)進(jìn)程為fuse依次檢查臟頁(yè)數(shù)組中的每一頁(yè),根據(jù)臟頁(yè)數(shù)組中第一個(gè)臟頁(yè)的頁(yè)號(hào)設(shè)置連續(xù)號(hào)變量,并在將第一個(gè)臟頁(yè)的頁(yè)地址加入到fuse消息的頁(yè)數(shù)組中之后,通過(guò)連續(xù)號(hào)變量確定與第一個(gè)臟頁(yè)連續(xù)的臟頁(yè),將確定的連續(xù)的臟頁(yè)也加入到所述fuse消息的頁(yè)數(shù)組中,通過(guò)所述fuse消息將所述頁(yè)數(shù)組傳遞給用戶(hù)態(tài)文件系統(tǒng)的守護(hù)進(jìn)程。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,該方法進(jìn)一步包括預(yù)先設(shè)置最大臟頁(yè)數(shù),當(dāng)fuse消息的頁(yè)數(shù)組中臟頁(yè)頁(yè)數(shù)達(dá)到最大臟頁(yè)數(shù)時(shí),不再繼續(xù)確定連續(xù)臟頁(yè),將該 fuse消息傳遞給用戶(hù)態(tài)文件系統(tǒng)的守護(hù)進(jìn)程。
5.一種在fuse上實(shí)現(xiàn)聚合寫(xiě)文件臟頁(yè)的裝置,其特征在于,該裝置包括獲取模塊、檢查模塊、傳遞模塊;其中,獲取模塊,用于獲取臟頁(yè)數(shù)組;檢查模塊,用于檢查臟頁(yè)數(shù)組中連續(xù)的臟頁(yè),將連續(xù)的臟頁(yè)發(fā)送到傳遞模塊;傳遞模塊,用于將連續(xù)的臟頁(yè)通過(guò)一個(gè)fuse消息傳遞給用戶(hù)態(tài)文件系統(tǒng)的守護(hù)進(jìn)程。
6.根據(jù)權(quán)利要求5所述的裝置,其特征在于,所述獲取模塊,具體用于定義原型為 writepages的函數(shù)fuse_writepages,函數(shù)fuse_writepages根據(jù)輸入?yún)?shù)wbc,石角定文件寫(xiě)的起始頁(yè)號(hào)和結(jié)束頁(yè)號(hào);清除文件寫(xiě)完成標(biāo)識(shí),調(diào)用pagevecjookupjag函數(shù),并輸入起始頁(yè)號(hào)和結(jié)束頁(yè)號(hào),將帶有臟頁(yè)標(biāo)志PAGEE_TAG_DCACHIRTY的頁(yè),按頁(yè)號(hào)從小到大的順序組成臟頁(yè)數(shù)組存儲(chǔ)在pvec中。
7.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述檢查模塊,具體用于依次檢查臟頁(yè)數(shù)組中的每一頁(yè),根據(jù)臟頁(yè)數(shù)組中第一個(gè)臟頁(yè)的頁(yè)號(hào)設(shè)置連續(xù)號(hào)變量,并將第一個(gè)臟頁(yè)的頁(yè)地址通知傳遞模塊,通過(guò)連續(xù)號(hào)變量確定與第一個(gè)臟頁(yè)連續(xù)的臟頁(yè),將確定的連續(xù)的臟頁(yè)的頁(yè)地址通知傳遞模塊。
8.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述傳遞模塊,具體用于將所述檢查模塊通知的臟頁(yè)的頁(yè)地址加入到fuse消息的頁(yè)數(shù)組中,通過(guò)所述fuse消息將所述頁(yè)數(shù)組傳遞給用戶(hù)態(tài)文件系統(tǒng)的守護(hù)進(jìn)程。
9.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述傳遞模塊,進(jìn)一步用于設(shè)置最大臟頁(yè)數(shù),當(dāng)fuse消息的頁(yè)數(shù)組中臟頁(yè)頁(yè)數(shù)達(dá)到最大臟頁(yè)數(shù)時(shí),通知檢查模塊不再繼續(xù)確定連續(xù)臟頁(yè),將所述fuse消息傳遞給用戶(hù)態(tài)文件系統(tǒng)的守護(hù)進(jìn)程。
全文摘要
本發(fā)明公開(kāi)了一種在用戶(hù)空間文件系統(tǒng)(fuse)上實(shí)現(xiàn)聚合寫(xiě)文件臟頁(yè)的方法,fuse獲取臟頁(yè)數(shù)組;檢查臟頁(yè)數(shù)組中連續(xù)的臟頁(yè),將連續(xù)的臟頁(yè)通過(guò)一個(gè)fuse消息傳遞給用戶(hù)態(tài)文件系統(tǒng)的守護(hù)進(jìn)程;本發(fā)明同時(shí)還公開(kāi)了一種在fuse上實(shí)現(xiàn)聚合寫(xiě)文件臟頁(yè)的裝置,通過(guò)本發(fā)明的方案,能夠減少fuse消息數(shù)量,節(jié)省系統(tǒng)的CPU資源,提高傳輸效率。
文檔編號(hào)G06F17/30GK102360369SQ201110302148
公開(kāi)日2012年2月22日 申請(qǐng)日期2011年9月28日 優(yōu)先權(quán)日2011年9月28日
發(fā)明者何抗洪, 朱鵬, 程寧 申請(qǐng)人:中興通訊股份有限公司