基于微內(nèi)核的可擴展文件系統(tǒng)及文件訪問方法
【專利摘要】本發(fā)明公開了一種基于微內(nèi)核的可擴展文件系統(tǒng),包括用于讀寫磁盤的磁盤服務(wù);用于在用戶進程與文件服務(wù)進程之間拷貝文件數(shù)據(jù),幫助磁盤服務(wù)執(zhí)行內(nèi)核態(tài)的特權(quán)IO指令的系統(tǒng)服務(wù);目錄服務(wù)進程:工作于單個處理核,管理全局的元數(shù)據(jù),設(shè)置塊緩存用于保存文件屬性信息inode和目錄信息dentry,接收用戶進程的所有文件處理請求,執(zhí)行目錄遍歷,處理所述文件處理請求中的操作元數(shù)據(jù)的請求,并將讀寫文件的請求路由至文件服務(wù)進程;多個文件服務(wù)進程:用于處理讀寫文件的請求,設(shè)置有緩存池用于緩存數(shù)據(jù)文件塊。本發(fā)明還公開了一種基于微內(nèi)核的可擴展文件系統(tǒng)的文件訪問方法。本發(fā)明可避免大部分鎖競爭開銷,實現(xiàn)文件服務(wù)進程的負(fù)載均衡與彈性擴展。
【專利說明】
基于微內(nèi)核的可擴展文件系統(tǒng)及文件訪問方法
技術(shù)領(lǐng)域
[0001]本發(fā)明涉及一種文件系統(tǒng)及文件訪問方法,尤其是涉及一種基于微內(nèi)核的可擴展文件系統(tǒng)及文件訪問方法,屬于數(shù)據(jù)存儲訪問技術(shù)領(lǐng)域。
【背景技術(shù)】
[0002]對于網(wǎng)絡(luò)服務(wù)器或大型的多核工作站,文件系統(tǒng)的并行性能至關(guān)重要。特別是隨著云計算時代分布式存儲系統(tǒng)的廣泛應(yīng)用,在多核的云存儲系統(tǒng)中,對于每個核上的塊(chunk)服務(wù)進程,塊讀寫效率成為關(guān)鍵要素,這是因為通常需要在短時間內(nèi)處理對大量文件的讀寫工作。
[0003]目前傳統(tǒng)的文件系統(tǒng)在核數(shù)較少時可以很好地工作,但由于存在鎖競爭開銷,其性能會隨著并行代碼流的數(shù)量增加而大幅度降低。其鎖競爭開銷主要來自于以下兩部分:
[0004](I)元數(shù)據(jù)。當(dāng)多個目錄查詢代碼流并行時,對文件系統(tǒng)的元數(shù)據(jù)(包括目錄信息dentry、文件屬性信息inode、超級塊列表、塊位圖)中的目錄信息dentry的緩存數(shù)據(jù)結(jié)構(gòu)dcache和文件屬性信息inode的緩存數(shù)據(jù)結(jié)構(gòu)icache的訪問會成為瓶頸。dcache按照樹型結(jié)構(gòu),組織了系統(tǒng)中所有目錄的基本信息,由鎖對象dcachejock保護;icache緩存了系統(tǒng)中所有被引用到的文件屬性信息inode節(jié)點,由鎖對象inode_lock保護。當(dāng)創(chuàng)建或打開一個文件時,系統(tǒng)會解析文件路徑名,并按順序分解為多個dentry與inode,并在dcache和icache中檢索它們。該過程需要獲取這些數(shù)據(jù)結(jié)構(gòu)上的全局自旋鎖以及每個dentry與inode上的互斥鎖。
[0005](2)塊緩存。當(dāng)并行讀寫文件時,對文件系統(tǒng)中共享的塊緩存也存在極大的競爭開銷。除了全局鎖,每個塊緩存項由一個狀態(tài)值控制(相當(dāng)于互斥鎖),以避免塊被同時寫,這使得寫操作較多的程序擴展性更差。
[0006]同時,多個文件服務(wù)進程間的負(fù)載不均衡或用戶請求量與服務(wù)進程的服務(wù)能力不匹配也會造成計算資源的使用不合理,從而導(dǎo)致文件系統(tǒng)整體性能的下降。
【發(fā)明內(nèi)容】
[0007]本發(fā)明提供了一種基于微內(nèi)核的并行且能夠擴展至多核平臺的文件系統(tǒng)以及基于該系統(tǒng)的文件訪問方法,通過對文件系統(tǒng)的數(shù)據(jù)對象和操作的劃分,避免大部分鎖競爭開銷。采用主從服務(wù)結(jié)構(gòu),實現(xiàn)文件服務(wù)進程的負(fù)載均衡與彈性擴展。
[0008]本發(fā)明技術(shù)方案如下:一種基于微內(nèi)核的可擴展文件系統(tǒng),包括:
[0009]磁盤服務(wù):用于將磁盤上的數(shù)據(jù)加載至內(nèi)存或?qū)?nèi)存數(shù)據(jù)寫回磁盤;
[0010]系統(tǒng)任務(wù):用于在用戶進程與文件服務(wù)進程之間拷貝文件數(shù)據(jù),并在磁盤服務(wù)需要訪問磁盤時幫助其執(zhí)行內(nèi)核態(tài)的特權(quán)10指令;
[0011]目錄服務(wù)進程:工作于單個處理核,管理全局的元數(shù)據(jù),設(shè)置塊緩存用于保存文件屬性信息inode和目錄信息dentry,接收用戶進程的所有文件處理請求,執(zhí)行目錄遍歷,處理所述文件處理請求中的操作元數(shù)據(jù)的請求,并將讀寫文件的請求路由至文件服務(wù)進程;
[0012]多個文件服務(wù)進程:用于處理讀寫文件的請求,設(shè)置有緩存池用于緩存數(shù)據(jù)文件塊,所述數(shù)據(jù)文件塊包括數(shù)據(jù)塊以及中間塊。
[0013]進一步的,所述目錄服務(wù)進程路由時根據(jù)讀寫數(shù)據(jù)量估計每個文件服務(wù)進程的負(fù)載值,并選取負(fù)載值最低的文件服務(wù)進程作為路由目標(biāo),所述目錄服務(wù)進程在路由一個讀寫請求時增加相應(yīng)文件服務(wù)進程的負(fù)載值,所述文件服務(wù)進程在取得一個排隊的請求后并即將處理時減去相應(yīng)負(fù)載值。
[0014]進一步的,所述目錄服務(wù)進程監(jiān)控文件服務(wù)進程的平均負(fù)載并調(diào)整文件服務(wù)進程數(shù)量。
[0015]所述元數(shù)據(jù)包括目錄信息dentry、文件屬性信息inode、超級塊列表和塊位圖。
[0016]所述操作元數(shù)據(jù)的請求包括打開文件、關(guān)閉文件、創(chuàng)建文件、創(chuàng)建文件夾、進入文件夾和改變文件屬性。
[0017]—種基于微內(nèi)核的可擴展文件系統(tǒng)的文件訪問方法,包括步驟:用戶進程向目錄服務(wù)進程發(fā)送文件訪問請求,所述文件訪問請求的參數(shù)包括文件描述符ID,緩沖區(qū)地址和文件請求的字節(jié)數(shù);目錄服務(wù)進程在用戶進程的文件描述符表中檢索inode指針,同時在路由表中檢索目標(biāo)文件服務(wù)進程;目標(biāo)文件服務(wù)進程檢索到文件inode并分析塊映射圖,從緩存中逐塊讀取與請求文件相關(guān)的間接塊和數(shù)據(jù)塊,在哈希表中沒找到的塊由磁盤服務(wù)加載;目標(biāo)文件服務(wù)進程請求系統(tǒng)任務(wù)從文件服務(wù)進程的地址空間中拷貝數(shù)據(jù)至用戶進程的緩沖區(qū)。
[0018]進一步的,所述目錄服務(wù)在路由表中檢索目標(biāo)文件服務(wù)進程時根據(jù)讀寫數(shù)據(jù)量估計每個文件服務(wù)進程的負(fù)載值,并選取負(fù)載值最低的文件服務(wù)進程作為路由目標(biāo),所述目錄服務(wù)進程在路由一個讀寫請求時增加相應(yīng)文件服務(wù)進程的負(fù)載值,所述文件服務(wù)進程在取得一個排隊的請求后并即將處理時減去相應(yīng)負(fù)載值。
[0019]本發(fā)明所提供的技術(shù)方案的優(yōu)點在于:
[0020](I)目錄服務(wù)進程進行串行化目錄操作,可以避免對元數(shù)據(jù)加鎖,并移除緩存一致性協(xié)議所帶來的開銷。
[0021](2)對于一個已打開文件的讀寫請求,由目錄服務(wù)進程路由至特定的文件服務(wù)進程進行處理,從而保證了不同文件服務(wù)進程操作的文件集合不相交。多個文件服務(wù)進程的分布的塊緩存各自保存了不同的數(shù)據(jù)內(nèi)容,所以它們之間是互相獨立的,并且數(shù)據(jù)結(jié)構(gòu)無需加鎖。當(dāng)多個用戶進程試圖訪問同一個文件塊時,讀寫過程均會由單個文件服務(wù)進程串行地執(zhí)行,因而,每個塊緩存上的互斥鎖也可移除。
[0022](3)目錄服務(wù)進程作為主服務(wù)進程,利用一個全局視圖平衡文件服務(wù)進程(從服務(wù)進程)的負(fù)載,并動態(tài)地調(diào)節(jié)服務(wù)的規(guī)模以匹配用戶進程的請求負(fù)荷。
[0023](4)文件系統(tǒng)的功能被分解并運行于特定的處理核,同時將高競爭度的數(shù)據(jù)結(jié)構(gòu)分離,從而使每個服務(wù)進程的工作集幾乎不相交,這樣可以避免文件系統(tǒng)的大部分鎖。
【附圖說明】
[0024]圖1為基于微內(nèi)核的可擴展文件系統(tǒng)的架構(gòu)示意圖;
[0025]圖2為基于微內(nèi)核的可擴展文件系統(tǒng)的交互時序圖。
【具體實施方式】
[0026]下面結(jié)合實施例對本發(fā)明作進一步說明,但不作為對本發(fā)明的限定。
[0027]如圖1所示,本實施例所涉及的基于微內(nèi)核的可擴展文件系統(tǒng),包括:
[0028]磁盤服務(wù):一個采用直接內(nèi)存訪問方式的塊設(shè)備驅(qū)動,用于將磁盤上的數(shù)據(jù)加載至內(nèi)存或?qū)?nèi)存數(shù)據(jù)寫回磁盤;
[0029]系統(tǒng)任務(wù):運行于內(nèi)核態(tài),用于在用戶進程與文件服務(wù)進程之間拷貝文件數(shù)據(jù),并在磁盤服務(wù)需要訪問磁盤時幫助其執(zhí)行內(nèi)核態(tài)的特權(quán)1指令;
[0030]目錄服務(wù)進程與多個文件服務(wù)進程:通過與系統(tǒng)任務(wù)和磁盤服務(wù)進行交互來訪問磁盤中的目錄或文件數(shù)據(jù),以及為用戶進程提供文件服務(wù)。在主從結(jié)構(gòu)中,目錄服務(wù)進程可以視為本發(fā)明的主服務(wù)進程,而文件服務(wù)進程為從服務(wù)進程。
[0031]目錄服務(wù)進程工作于單個處理核,管理內(nèi)存中的元數(shù)據(jù)(包括目錄信息dentry、文件屬性信息inode、超級塊列表、塊位圖),它作為訪問入口向用戶提供一組統(tǒng)一的接口,所有來自用戶進程的請求都發(fā)往目錄服務(wù)進程。其中操作元數(shù)據(jù)的請求,如打開文件、關(guān)閉文件、創(chuàng)建文件、創(chuàng)建文件夾、進入文件夾、改變文件屬性等,由目錄服務(wù)進程直接處理,而讀寫普通文件的請求則被路由至文件服務(wù)進程進行處理。
[0032]目錄服務(wù)進程的路由策略操作依據(jù)一張哈希路由表完成,該表記錄了由文件屬性信息inode映射至文件服務(wù)進程的路由項。當(dāng)用戶進程請求打開一個新文件時,目錄服務(wù)進程會為其選擇多個文件服務(wù)進程中的一個文件服務(wù)進程,并創(chuàng)建一個新的路由項。隨后訪問該文件的請求都將被路由至該文件服務(wù)進程。當(dāng)沒有進程引用該文件時,其路由項才會被刪除。這樣的路由方式使得文件在其打開期間,其緩存的文件塊始終存放于固定的文件服務(wù)進程。這期間其它文件服務(wù)進程不可能對該文件進行操作,從而保證了緩存數(shù)據(jù)與磁盤數(shù)據(jù)之間的一致性。為了避免不必要的路由操作,用戶進程也緩存了路由項,使大部分文件請求可以不經(jīng)過路由過程而被直接發(fā)送至文件服務(wù)進程。
[0033]部分競爭度較低的元數(shù)據(jù)雖然由目錄服務(wù)進程維護,但也需要被文件服務(wù)進程訪問。這些元數(shù)據(jù)包括超級塊列表、塊位圖、icache,存儲于目錄服務(wù)進程,并被每個文件服務(wù)進程共享,這樣可以使各文件服務(wù)進程都能方便快速地訪問它們。系統(tǒng)任務(wù)在各個文件服務(wù)進程啟動完成后,通過內(nèi)存頁映射的方式將這些元數(shù)據(jù)共享。
[0034]由于目錄服務(wù)進程和文件服務(wù)進程無差別地訪問所有的塊數(shù)據(jù),所以超級塊列表和塊位圖都需要加鎖同步。icache維護了當(dāng)前所有進程引用到的inode索引節(jié)點,文件服務(wù)進程在讀取一個文件前,需要檢索一個inode的塊映射圖,其數(shù)據(jù)結(jié)構(gòu)不需要加鎖,這是因為在某個時刻,各服務(wù)進程操作的對象不相交:(I)文件服務(wù)進程只會訪問一個inode的塊映射圖,而目錄服務(wù)進程不訪問inode的塊映射圖;(2)由于文件服務(wù)進程間的隔離性,一個inode在某一時刻只會被唯一的文件服務(wù)進程訪問。
[0035]對于本發(fā)明提出的基于微內(nèi)核的可擴展文件系統(tǒng)的負(fù)載均衡問題,如果一部分文件服務(wù)進程的工作量過載或空閑,那么整體性能會由于處理器的物理核沒有得到合理利用而變得很差。文件服務(wù)進程必須能夠彈性擴展,即服務(wù)整體可以隨著用戶請求的負(fù)荷動態(tài)地伸縮。本發(fā)明中目錄服務(wù)進程為一個新打開的文件創(chuàng)建靜態(tài)路由項時實施負(fù)載均衡策略。對于每個文件讀寫請求,利用讀寫的數(shù)據(jù)量來衡量負(fù)載。這是因為讀寫過程的時長與數(shù)據(jù)量近似成正比。文件服務(wù)進程使用環(huán)形緩沖來存儲未處理的請求,并按順序處理這些消息,因而這些未完成任務(wù)的總負(fù)載反映了一個文件服務(wù)進程當(dāng)前的工作負(fù)載。目錄服務(wù)進程在路由時首先估計每個文件服務(wù)進程的負(fù)載值,并選取負(fù)載值最低的作為路由目標(biāo)。目錄服務(wù)進程在路由一個讀寫請求時增加相應(yīng)負(fù)載值,而文件服務(wù)進程在取得一個排隊的請求后并即將處理時減去相應(yīng)負(fù)載值。
[0036]目錄服務(wù)進程還負(fù)責(zé)監(jiān)控所有文件服務(wù)進程的平均負(fù)載,并定期調(diào)整文件服務(wù)進程的數(shù)量。當(dāng)整體負(fù)載偏高時,它將請求微內(nèi)核分配額外的核來運行新的文件服務(wù)進程。新的文件服務(wù)進程在初始化和更新狀態(tài)之后才能開始工作。相反地,當(dāng)整體負(fù)載過低時,一些文件服務(wù)進程會被終止,以回收其使用的處理器的物理核資源。在終止前,未處理的請求將被傳送回目錄服務(wù)進程,并重新路由,而其緩存的臟塊(dirty block)將被重寫回磁盤以確保數(shù)據(jù)的一致性。
[0037]請結(jié)合圖2,本發(fā)明提出的基于微內(nèi)核的可擴展文件系統(tǒng)的各個服務(wù)進程的交互過程是這樣的:
[0038]1.目錄服務(wù)進程――文件服務(wù)進程
[0039]在讀文件之前,文件服務(wù)進程必須獲得的元數(shù)據(jù)包括inode項以及文件描述符信息。用戶進程發(fā)送的請求中包括了文件描述符ID,緩沖區(qū)地址和字節(jié)數(shù),請求會被首先發(fā)送至目錄服務(wù)進程的緊急緩沖區(qū)中,使其能被優(yōu)先路由。然后,目錄服務(wù)進程在用戶進程的文件描述符表中檢索inode指針,同時目標(biāo)文件服務(wù)進程在路由表中被找到。最后,目錄服務(wù)進程會將inode號和文件描述符傳遞該文件服務(wù)進程。
[0040]2.文件服務(wù)進程<>磁盤服務(wù)
[0041 ]接收到路由請求后,文件服務(wù)進程檢索到文件inode并分析塊映射圖。接著,文件相關(guān)的間接塊和數(shù)據(jù)塊將被逐塊從緩存中讀取。如果一個塊在哈希表中沒找到,那么它將會由磁盤服務(wù)加載。臟塊的寫回策略包括兩種:(I)定期寫回;(2)當(dāng)空閑緩存塊不夠時,使用最近最少使用(Least Recently Used,LRU)策略寫回臟塊。
[0042]考慮到在文件服務(wù)進程的多個工作線程內(nèi)部存在一個同步問題,在線程加載一個未緩存的塊并為其建立新的哈希表項的期間可能會發(fā)生數(shù)據(jù)的不一致。在哈希表建立前,線程會阻塞并等待磁盤服務(wù)為其讀取塊內(nèi)容。如果隨后調(diào)度的線程也試圖讀取相同的塊,那么由于該塊緩存尚未更新,會導(dǎo)致它再次請求磁盤并建立多余的哈希項。本發(fā)明的解決方法是:如果后來的線程試圖讀取相同塊時,將被掛起。當(dāng)塊數(shù)據(jù)加載完畢后,掛起的線程才被喚醒,并直接從緩存中讀取。目錄服務(wù)進程在讀取dentry和inode時也采用類似的方法。
[0043]3.磁盤服務(wù)<>系統(tǒng)任務(wù)
[0044]系統(tǒng)任務(wù)為磁盤服務(wù)提供了三個接口函數(shù):接口函數(shù)I,根據(jù)一個端口號執(zhí)行單次1/0指令;接口函數(shù)2,根據(jù)多個端口號執(zhí)行一組1/0指令;接口函數(shù)3,開/關(guān)中斷以及設(shè)置中斷處理的策略。
[0045]磁盤服務(wù)利用上述接口執(zhí)行直接內(nèi)存訪問操作。當(dāng)磁盤中斷發(fā)生時,系統(tǒng)注冊的處理函數(shù)只是簡單地通知磁盤服務(wù)。
[0046]4.文件服務(wù)進程<>系統(tǒng)任務(wù)
[0047]一旦文件服務(wù)進程成功讀取到塊,它會請求系統(tǒng)任務(wù)從文件服務(wù)進程的地址空間中拷貝數(shù)據(jù)至用戶進程的緩沖區(qū)中。
【主權(quán)項】
1.一種基于微內(nèi)核的可擴展文件系統(tǒng),其特征在于,包括: 磁盤服務(wù):用于將磁盤上的數(shù)據(jù)加載至內(nèi)存或?qū)?nèi)存數(shù)據(jù)寫回磁盤; 系統(tǒng)任務(wù):用于在用戶進程與文件服務(wù)進程之間拷貝文件數(shù)據(jù),并在磁盤服務(wù)需要訪問磁盤時幫助其執(zhí)行內(nèi)核態(tài)的特權(quán)1指令; 目錄服務(wù)進程:工作于單個處理核,管理全局的元數(shù)據(jù),設(shè)置塊緩存用于保存文件屬性信息inode和目錄信息den try,接收用戶進程的所有文件處理請求,執(zhí)行目錄遍歷,處理所述文件處理請求中的操作元數(shù)據(jù)的請求,并將讀寫文件的請求路由至文件服務(wù)進程; 多個文件服務(wù)進程:用于處理讀寫文件的請求,設(shè)置有緩存池用于緩存數(shù)據(jù)文件塊,所述數(shù)據(jù)文件塊包括數(shù)據(jù)塊以及中間塊。2.根據(jù)權(quán)利要求1所述的基于微內(nèi)核的可擴展文件系統(tǒng),其特征在于,所述目錄服務(wù)進程路由時根據(jù)讀寫數(shù)據(jù)量估計每個文件服務(wù)進程的負(fù)載值,并選取負(fù)載值最低的文件服務(wù)進程作為路由目標(biāo),所述目錄服務(wù)進程在路由一個讀寫請求時增加相應(yīng)文件服務(wù)進程的負(fù)載值,所述文件服務(wù)進程在取得一個排隊的請求后并即將處理時減去相應(yīng)負(fù)載值。3.根據(jù)權(quán)利要求1所述的基于微內(nèi)核的可擴展文件系統(tǒng),其特征在于,所述目錄服務(wù)進程監(jiān)控文件服務(wù)進程的平均負(fù)載并調(diào)整文件服務(wù)進程數(shù)量。4.根據(jù)權(quán)利要求1所述的基于微內(nèi)核的可擴展文件系統(tǒng),其特征在于,所述元數(shù)據(jù)包括目錄信息dentry、文件屬性信息inode、超級塊列表和塊位圖。5.根據(jù)權(quán)利要求1所述的基于微內(nèi)核的可擴展文件系統(tǒng),其特征在于,所述操作元數(shù)據(jù)的請求包括打開文件、關(guān)閉文件、創(chuàng)建文件、創(chuàng)建文件夾、進入文件夾和改變文件屬性。6.—種基于微內(nèi)核的可擴展文件系統(tǒng)的文件訪問方法,其特征在于,包括步驟:用戶進程向目錄服務(wù)進程發(fā)送文件訪問請求,所述文件訪問請求的參數(shù)包括文件描述符ID,緩沖區(qū)地址和文件請求的字節(jié)數(shù);目錄服務(wù)進程在用戶進程的文件描述符表中檢索inode指針,同時在路由表中檢索目標(biāo)文件服務(wù)進程;目標(biāo)文件服務(wù)進程檢索到文件inode并分析塊映射圖,從緩存中逐塊讀取與請求文件相關(guān)的間接塊和數(shù)據(jù)塊,在哈希表中沒找到的塊由磁盤服務(wù)加載;目標(biāo)文件服務(wù)進程請求系統(tǒng)任務(wù)從文件服務(wù)進程的地址空間中拷貝數(shù)據(jù)至用戶進程的緩沖區(qū)。7.根據(jù)權(quán)利要求6所述的基于微內(nèi)核的可擴展文件系統(tǒng)的文件訪問方法,其特征在于,所述目錄服務(wù)在路由表中檢索目標(biāo)文件服務(wù)進程時根據(jù)讀寫數(shù)據(jù)量估計每個文件服務(wù)進程的負(fù)載值,并選取負(fù)載值最低的文件服務(wù)進程作為路由目標(biāo),所述目錄服務(wù)進程在路由一個讀寫請求時增加相應(yīng)文件服務(wù)進程的負(fù)載值,所述文件服務(wù)進程在取得一個排隊的請求后并即將處理時減去相應(yīng)負(fù)載值。
【文檔編號】G06F17/30GK106095817SQ201610378856
【公開日】2016年11月9日
【申請日】2016年6月1日
【發(fā)明人】錢振江, 湯力, 張雪伍, 周蕾, 王劍, 樂德廣
【申請人】常熟理工學(xué)院