專利名稱:一種分布式文件系統(tǒng)中高效的元數(shù)據(jù)訪存方法
技術(shù)領(lǐng)域:
本發(fā)明涉及分布式文件系統(tǒng)管理領(lǐng)域,具體涉及一種分布式文件系統(tǒng)中高效的 元數(shù)據(jù)訪存方法。
背景技術(shù):
在分布式文件系統(tǒng)中,元數(shù)據(jù)是描述文件系統(tǒng)的重要單元。大部分分布式文件 系統(tǒng)的典型應(yīng)用中,如互聯(lián)網(wǎng),科學(xué)計(jì)算等,元數(shù)據(jù)訪問請(qǐng)求占到所有請(qǐng)求一半以上的 比例。因此,分布式文件系統(tǒng)中元數(shù)據(jù)的存取效率對(duì)整個(gè)文件系統(tǒng)的性能有著極其重要 的影響。文件系統(tǒng)的元數(shù)據(jù)主要包括索引節(jié)點(diǎn)和目錄項(xiàng)。索引節(jié)點(diǎn)是文件系統(tǒng)中對(duì)象 (文件和目錄)的標(biāo)識(shí),一個(gè)索引節(jié)點(diǎn)會(huì)有一個(gè)唯一的全局編號(hào),即索引節(jié)點(diǎn)號(hào);目錄項(xiàng) 則是對(duì)目錄中一個(gè)子項(xiàng)的描述,通常包含該子項(xiàng)的名稱和索引節(jié)點(diǎn)號(hào)。傳統(tǒng)的Linux文 件系統(tǒng)對(duì)文件系統(tǒng)元數(shù)據(jù)的管理一般放在內(nèi)核態(tài),通過直接與塊設(shè)備層的交互對(duì)元數(shù)據(jù) 進(jìn)行訪存,這種方式在存取效率上較高,但內(nèi)核態(tài)的開發(fā)和維護(hù)成本較高。因此,一些 優(yōu)秀的分布式文件系統(tǒng),如GoogleFS、HadoopFS等,均將元數(shù)據(jù)管理放在用戶態(tài),即基 于本地文件系統(tǒng)之上。通過選用高效的緩存技術(shù)和檢索算法,基于本地文件系統(tǒng)之上的 元數(shù)據(jù)管理的性能可以很好地滿足分布式存儲(chǔ)的需求?;诒镜匚募到y(tǒng)之上的元數(shù)據(jù)管理方式,是將索引節(jié)點(diǎn)和目錄項(xiàng)存于本地文 件系統(tǒng)的文件中。當(dāng)有元數(shù)據(jù)訪存時(shí),直接操作這些本地文件即可。對(duì)本地文件的訪 問,通常包含兩個(gè)階段的開銷,第一個(gè)階段是通過系統(tǒng)調(diào)用向內(nèi)核態(tài)的文件系統(tǒng)模塊發(fā) 出請(qǐng)求,第二個(gè)階段是內(nèi)核態(tài)的文件系統(tǒng)模塊通過塊設(shè)備驅(qū)動(dòng)以及底層磁盤驅(qū)動(dòng)去訪問 磁盤。由于現(xiàn)代操作系統(tǒng)的文件系統(tǒng)會(huì)對(duì)訪問的對(duì)象進(jìn)行緩存,因而對(duì)文件的操作一般 都是直接在內(nèi)存中進(jìn)行,所以效率上不是瓶頸。所以,訪問基于本地文件系統(tǒng)的元數(shù)據(jù) 信息,開銷主要是頻繁的系統(tǒng)調(diào)用。在普通的服務(wù)器上,一次系統(tǒng)調(diào)用約需要幾十個(gè)微 秒的時(shí)間,在元數(shù)據(jù)訪問異常頻繁的分布式文件系統(tǒng)中,這種開銷會(huì)使文件系統(tǒng)的性能 大打折扣。因此,如何設(shè)計(jì)元數(shù)據(jù)的訪存方式,對(duì)于分布式文件系統(tǒng)是至關(guān)重要的。
發(fā)明內(nèi)容
本發(fā)明旨在公開一種分布式文件系統(tǒng)中高效的元數(shù)據(jù)訪存方式,目的是滿足分 布式文件系統(tǒng)中頻繁的元數(shù)據(jù)服務(wù)請(qǐng)求。一種分布式文件系統(tǒng)中高效的元數(shù)據(jù)訪存方法,包括以下步驟A、索引節(jié)點(diǎn)采用64位無(wú)符號(hào)整數(shù)進(jìn)行編號(hào),從0開始,每32K個(gè)索引節(jié)點(diǎn)元 數(shù)據(jù)存放于同一個(gè)文件,所有的索引節(jié)點(diǎn)文件按照節(jié)點(diǎn)號(hào)順序采用兩級(jí)樹狀結(jié)構(gòu)目錄進(jìn) 行存放;B、索引節(jié)點(diǎn)文件存儲(chǔ)的目錄結(jié)構(gòu)組織為一個(gè)多路搜索樹,樹的每個(gè)非葉子節(jié)點(diǎn) 對(duì)應(yīng)一個(gè)子目錄,而葉子節(jié)點(diǎn)則表示索引節(jié)點(diǎn)文件;
C、同一非葉子節(jié)點(diǎn)的所有子節(jié)點(diǎn)采用trie樹組織;D、通過內(nèi)存映射將索引節(jié)點(diǎn)文件映射到一片內(nèi)存區(qū)域,只有實(shí)際訪問到的部 分,本地文件系統(tǒng)才會(huì)將其從磁盤上讀入文件系統(tǒng)的頁(yè)面緩存,對(duì)于其他部分,則只保 留虛擬空間,并不觸發(fā)缺頁(yè)中斷去讀取磁盤數(shù)據(jù);E、將內(nèi)存中修改過的索引節(jié)點(diǎn)文件采用定時(shí)同步方式向磁盤同步,每到定時(shí)時(shí) 間,同步線程基于以上引入的多路搜索樹結(jié)構(gòu),采用深度優(yōu)先遍歷的方式,對(duì)位于葉子 節(jié)點(diǎn)的索引節(jié)點(diǎn)文件按照創(chuàng)建的先后順序進(jìn)行掃描,如發(fā)現(xiàn)有修改標(biāo)志,則進(jìn)行同步。本發(fā)明的創(chuàng)新點(diǎn)在于索引節(jié)點(diǎn)的訪存方式發(fā)明提供了一種基于多路搜索樹和 trie樹相結(jié)合的文件樹訪問方式;引入文件內(nèi)存映射的方式對(duì)元數(shù)據(jù)文件進(jìn)行讀寫;同時(shí) 基于元數(shù)據(jù)的樹結(jié)構(gòu)組織,對(duì)索引節(jié)點(diǎn)元數(shù)據(jù)從內(nèi)存同步到磁盤進(jìn)行優(yōu)化,以減輕磁盤 的負(fù)載。
圖1是本發(fā)明索引節(jié)點(diǎn)和文件織結(jié)構(gòu)
具體實(shí)施例方式(1)索引節(jié)點(diǎn)采用64位無(wú)符號(hào)整數(shù)進(jìn)行編號(hào),從0開始,每32K個(gè)索引節(jié)點(diǎn)元 數(shù)據(jù)存放于同一個(gè)文件,所有的索引節(jié)點(diǎn)文件在磁盤上按照節(jié)點(diǎn)號(hào)采用兩級(jí)樹狀結(jié)構(gòu)目 錄進(jìn)行存放。如圖1所示(2)為了減少與本地文件系統(tǒng)的交互,本發(fā)明將索引節(jié)點(diǎn)文件存儲(chǔ)的目錄結(jié)構(gòu)按 照?qǐng)D1所示的結(jié)構(gòu)組織為一個(gè)多路搜索樹,樹的每個(gè)非葉子節(jié)點(diǎn)對(duì)應(yīng)一個(gè)子目錄,而葉 子節(jié)點(diǎn)則表示索引節(jié)點(diǎn)文件。這樣,當(dāng)需要訪問某個(gè)索引節(jié)點(diǎn)時(shí),通過其索引節(jié)點(diǎn)號(hào), 先從多路搜索樹中查找。如果查找成功,則不需要通過系統(tǒng)調(diào)用去本地文件系統(tǒng)訪問該 索引節(jié)點(diǎn)數(shù)據(jù);只有索引節(jié)點(diǎn)在內(nèi)存中不存在時(shí),才會(huì)和本地文件系統(tǒng)進(jìn)行交互,并為 其建立相應(yīng)的樹節(jié)點(diǎn),以后再有訪問同一個(gè)索引節(jié)點(diǎn)文件的請(qǐng)求,就不需要再通過系統(tǒng) 調(diào)用與本地文件系統(tǒng)進(jìn)行交互了。(3)由于多路搜索樹每個(gè)非葉子節(jié)點(diǎn)的子節(jié)點(diǎn)數(shù)目較多,采用線性搜索的時(shí)間復(fù) 雜度為O(n),效率較低。為了提高檢索效率,在本發(fā)明實(shí)施中,同一個(gè)節(jié)點(diǎn)的所有子節(jié) 點(diǎn)采用trie樹組織起來(lái)。之所以使用trie樹,主要是由于索引節(jié)點(diǎn)號(hào)是使用整數(shù)表示的, 當(dāng)將整數(shù)以二進(jìn)制表示時(shí),其每一位的取值可能為O或1,正好符合trie樹的應(yīng)用場(chǎng)景。 如果給一棵深度為N的完全二叉樹每個(gè)節(jié)點(diǎn)的左右子節(jié)點(diǎn)分別賦予權(quán)值O和1,則一個(gè)N 位整數(shù)所能表達(dá)的值域集合等價(jià)于該完全二叉樹從根節(jié)點(diǎn)到所有葉子經(jīng)過的節(jié)點(diǎn)權(quán)值組 合后形成的集合。使用trie樹可以極大的提高檢索效率,假定多路搜索樹的每個(gè)節(jié)點(diǎn)有2ΛΝ的子 節(jié)點(diǎn),trie樹節(jié)點(diǎn)包含的子節(jié)點(diǎn)數(shù)目選為2ΛΜ(1 <=Μ<=Ν),則檢索時(shí)間夏雜度有 O (log (2ΛΝ))減為 0 (IogM (N))。(4)由于本發(fā)明中,一個(gè)索引節(jié)點(diǎn)文件共存有索引節(jié)點(diǎn)32Κ個(gè),如果每訪問其中 的一個(gè)索引節(jié)點(diǎn)就去訪問一次本地文件系統(tǒng),則需要打開文件,移動(dòng)文件指針,讀取數(shù) 據(jù)等多次系統(tǒng)調(diào)用,使效率大打折扣;而如果在第一次訪問的時(shí)候,就將所有的索引節(jié)點(diǎn)都讀入內(nèi)存,由于索引節(jié)點(diǎn)文件較大,會(huì)照成較大的浪費(fèi),因?yàn)楹芸赡芤院笤僖矝]有 請(qǐng)求去訪問同一文件中的其他索引節(jié)點(diǎn)?;谝陨戏治?,本發(fā)明給出了一種高效的解決方案方案通過內(nèi)存映射將索引 節(jié)點(diǎn)文件映射到一片內(nèi)存區(qū)域。這樣,只有實(shí)際訪問到的部分,本地文件系統(tǒng)才會(huì)將其 從磁盤上讀入文件系統(tǒng)的頁(yè)面緩存,對(duì)于其他部分,則只保留虛存空間,并不觸發(fā)缺頁(yè) 中斷;采用內(nèi)存映射的另一個(gè)優(yōu)點(diǎn)是,訪問文件數(shù)據(jù)時(shí)不需要經(jīng)過從內(nèi)核態(tài)文件系統(tǒng)的 頁(yè)面緩存拷貝到用戶緩沖區(qū),能減少對(duì)CPU—級(jí)緩存的污染,進(jìn)一步提高分布式文件系 統(tǒng)元數(shù)據(jù)處理單元的總體性能。(5)本地文件系統(tǒng)的策略會(huì)保證同一個(gè)索引節(jié)點(diǎn)文件中的所有索引節(jié)點(diǎn)內(nèi)容在磁 盤上是比較靠近;不同的索引節(jié)點(diǎn)文件,由于索引節(jié)點(diǎn)號(hào)是逐漸遞增的,其創(chuàng)建時(shí)間順 序和索引節(jié)點(diǎn)的大小順序是一致的,因而,相鄰的索引節(jié)點(diǎn)文件在磁盤上所處的物理位 置分布自然也是比較靠近。一般來(lái)說(shuō),磁盤順序讀寫能最大程度發(fā)揮磁盤的性能,并且可以有效地減小對(duì) 磁盤磁頭的損害。本技術(shù)方案在將內(nèi)存中修改過的索引節(jié)點(diǎn)文件向磁盤同步時(shí),采用定 時(shí)同步的方式。每當(dāng)?shù)蕉〞r(shí)時(shí)間,同步線程基于以上引入的多路搜索樹結(jié)構(gòu),采用深度 優(yōu)先遍歷的方式,對(duì)位于葉子節(jié)點(diǎn)的索引節(jié)點(diǎn)文件按照創(chuàng)建的先后順序(即索引節(jié)點(diǎn)號(hào) 的大小順序)進(jìn)行掃描,如果發(fā)現(xiàn)有修改標(biāo)志,則進(jìn)行同步。這樣以來(lái),磁盤磁頭基本 是順序移動(dòng),而非隨機(jī)移動(dòng),因而,不僅加快了同步速率,而且可以增加磁盤的使用壽 命。
權(quán)利要求
1. 一種分布式文件系統(tǒng)中高效的元數(shù)據(jù)訪存方法,其特征在于包括以下步驟A、索引節(jié)點(diǎn)采用64位無(wú)符號(hào)整數(shù)進(jìn)行編號(hào),從0開始,每32K個(gè)索引節(jié)點(diǎn)元數(shù)據(jù) 存放于同一個(gè)文件,所有的索引節(jié)點(diǎn)文件按照節(jié)點(diǎn)號(hào)順序采用兩級(jí)樹狀結(jié)構(gòu)目錄進(jìn)行存 放;B、索引節(jié)點(diǎn)文件存儲(chǔ)的目錄結(jié)構(gòu)組織為一個(gè)多路搜索樹,樹的每個(gè)非葉子節(jié)點(diǎn)對(duì)應(yīng) 一個(gè)子目錄,而葉子節(jié)點(diǎn)則表示索引節(jié)點(diǎn)文件;C、同一非葉子節(jié)點(diǎn)的所有子節(jié)點(diǎn)采用trie樹組織;D、通過內(nèi)存映射將索引節(jié)點(diǎn)文件映射到一片內(nèi)存區(qū)域,只有實(shí)際訪問到的部分,本 地文件系統(tǒng)才會(huì)將其從磁盤上讀入文件系統(tǒng)的頁(yè)面緩存,對(duì)于其他部分,則只保留虛擬 空間,并不觸發(fā)缺頁(yè)中斷去讀取磁盤數(shù)據(jù);E、將內(nèi)存中修改過的索引節(jié)點(diǎn)文件采用定時(shí)同步方式向磁盤同步,每到定時(shí)時(shí)間, 同步線程基于以上引入的多路搜索樹結(jié)構(gòu),采用深度優(yōu)先遍歷的方式,對(duì)位于葉子節(jié)點(diǎn) 的索引節(jié)點(diǎn)文件按照創(chuàng)建的先后順序進(jìn)行掃描,如發(fā)現(xiàn)有修改標(biāo)志,則進(jìn)行同步。
全文摘要
本發(fā)明提供了一種分布式文件系統(tǒng)中高效的元數(shù)據(jù)訪存方法。該方法基于多路搜索樹和trie樹相結(jié)合的文件樹訪問方式;引入文件內(nèi)存映射的方式對(duì)元數(shù)據(jù)文件進(jìn)行讀寫;同時(shí)基于元數(shù)據(jù)的樹結(jié)構(gòu)組織,對(duì)索引節(jié)點(diǎn)元數(shù)據(jù)從內(nèi)存同步到磁盤進(jìn)行優(yōu)化,以減輕磁盤的負(fù)載。
文檔編號(hào)G06F17/30GK102024020SQ20101053653
公開日2011年4月20日 申請(qǐng)日期2010年11月4日 優(yōu)先權(quán)日2010年11月4日
發(fā)明者楊浩, 王勇, 苗艷超, 邵宗有, 馬照云 申請(qǐng)人:曙光信息產(chǎn)業(yè)(北京)有限公司