專利名稱:使用條帶化來存儲(chǔ)數(shù)據(jù)的方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及借助對(duì)NFS服務(wù)器使用條帶化來存儲(chǔ)數(shù)據(jù)。更具體而言,本發(fā)明涉及其中將包括修改時(shí)間及更改時(shí)間在內(nèi)的屬性的范圍考慮在內(nèi)對(duì)NFS服務(wù)器使用條帶化來存儲(chǔ)數(shù)據(jù)。
背景技術(shù):
數(shù)據(jù)存儲(chǔ)中的一重要問題是為一由許多通過高速網(wǎng)絡(luò)相連的獨(dú)立處理器所構(gòu)成的計(jì)算集群提供共享文件存取。在許多有趣的情況下,計(jì)算集群在存取單個(gè)文件,而在此種情況下,提供從整個(gè)計(jì)算集群到此單個(gè)文件的足夠的帶寬具有挑戰(zhàn)性。
解決此問題的先前方法遵循兩種架構(gòu)中的一種。在一類例如由Sistina及PolyServe所采用的解決方案中,通至一單個(gè)文件的帶寬是通過提供會(huì)協(xié)調(diào)其對(duì)保存有所述文件的邏輯存儲(chǔ)器陣列(LUN)的存取的多個(gè)服務(wù)器來調(diào)整。這些系統(tǒng)實(shí)施一復(fù)雜的分布式鎖定方案來協(xié)調(diào)對(duì)LUN的存取,具體而言,協(xié)調(diào)諸如分配磁盤塊、給文件分配塊、給文件分配內(nèi)節(jié)點(diǎn)號(hào)及構(gòu)造間接塊樹等操作。這些系統(tǒng)通常因其鎖定開銷很大而效率低下。
在由PVFS系統(tǒng)所代表的另一類解決方案中,通過一建立于一標(biāo)準(zhǔn)文件系統(tǒng)頂部的附加文件系統(tǒng)層來將數(shù)據(jù)條帶化于多個(gè)服務(wù)器中。在PVFS中,對(duì)所得到文件系統(tǒng)中的不同的條文件的更新未得到非常密切的協(xié)調(diào),且那些處理全局文件性質(zhì)(例如文件長(zhǎng)度)的操作實(shí)施起來非常昂貴或通過可引起應(yīng)用錯(cuò)誤的近似值來實(shí)施。例如,在PVFS中,確定一文件的長(zhǎng)度需要從所有條中讀取各個(gè)文件長(zhǎng)度,并取最大的返回結(jié)果,此為一個(gè)昂貴的程序。同樣地,準(zhǔn)確的修改時(shí)間對(duì)于其數(shù)據(jù)是通過網(wǎng)絡(luò)文件系統(tǒng)(NFS)協(xié)定輸出的文件系統(tǒng)來說很重要,因?yàn)榫W(wǎng)絡(luò)文件系統(tǒng)(NFS)協(xié)定使用文件的修改時(shí)間作為一版本號(hào)。但PVFS及類似的并行文件系統(tǒng)通過一與返回文件長(zhǎng)度的程序類似的程序來返回一文件的修改時(shí)間其檢查所有服務(wù)器并返回最大的修改時(shí)間域。由于不同的服務(wù)器的時(shí)鐘相差不到幾微秒,所以有可能在負(fù)責(zé)一個(gè)條帶的碰巧時(shí)鐘超前最多的服務(wù)器處實(shí)施一寫入,且隨后對(duì)另一時(shí)鐘較早的服務(wù)器實(shí)施一寫入,結(jié)果使第二寫入并未超前于全系統(tǒng)文件修改時(shí)間。存在修改時(shí)間相同的兩個(gè)文件版本可引起像NFS等使用修改時(shí)間作為版本號(hào)的協(xié)議的錯(cuò)誤行為。由于這些問題,PVFS文件系統(tǒng)不適于通過一使用NFS的網(wǎng)絡(luò)輸出。
本發(fā)明與當(dāng)前技術(shù)的不同之處在于提供一種將如PVFS等條帶化解決方案的有效鎖定與為使用NFS來輸出數(shù)據(jù)所需的正確、有效的文件屬性檢索相結(jié)合的解決方案。
發(fā)明內(nèi)容
本發(fā)明涉及一種數(shù)據(jù)存儲(chǔ)裝置。所述裝置包括一NFS服務(wù)器集群。每一服務(wù)器均具有用于輸入文件系統(tǒng)請(qǐng)求及服務(wù)器之間的集群通信的網(wǎng)絡(luò)端口。所述裝置包括復(fù)數(shù)個(gè)與所述服務(wù)器通信的存儲(chǔ)器陣列。所述服務(wù)器利用一條帶化文件系統(tǒng)來存儲(chǔ)數(shù)據(jù)。
本發(fā)明涉及一種用于存儲(chǔ)數(shù)據(jù)的方法。所述方法包括將一文件創(chuàng)建于復(fù)數(shù)個(gè)NFS服務(wù)器上的步驟。具有如下步驟在所述各服務(wù)器中將數(shù)據(jù)以數(shù)據(jù)條的形式寫入文件中,所述各個(gè)條共同形成一條帶。具有從所述各服務(wù)器中讀取所述數(shù)據(jù)條的步驟。具有從所述服務(wù)器中刪除所述條的步驟。
本發(fā)明涉及一種用于為一文件建立存儲(chǔ)的方法。所述方法包括在一網(wǎng)絡(luò)元件處接收一NFS創(chuàng)建請(qǐng)求的步驟。具有在一元數(shù)據(jù)(meta data)服務(wù)器處從所述網(wǎng)絡(luò)元件接收一文件創(chuàng)建請(qǐng)求的步驟。具有在所述元數(shù)據(jù)服務(wù)器處為所述文件分配一內(nèi)節(jié)點(diǎn)號(hào)的步驟。具有向輸入輸出輔助設(shè)備作出創(chuàng)建調(diào)用以將所述文件標(biāo)記為由所述輸入輸出輔助設(shè)備所分配的步驟。具有在所述元數(shù)據(jù)服務(wù)器處委托所述文件創(chuàng)建的步驟。
本發(fā)明涉及一種用于從存儲(chǔ)器中移除一文件的方法。所述方法包括在一元數(shù)據(jù)服務(wù)器處接收一刪除文件請(qǐng)求的步驟。具有在所述元數(shù)據(jù)服務(wù)器處由所述元數(shù)據(jù)服務(wù)器從一母目錄中移除所述文件的一文件名的步驟。具有在所述元數(shù)據(jù)服務(wù)器處由元數(shù)據(jù)服務(wù)器將所述文件名加到一文件刪除列表上的步驟。具有向所述輸入輸出輔助設(shè)備發(fā)送刪除調(diào)用的步驟。具有在所述元數(shù)據(jù)服務(wù)器處從所述輸入輸出輔助設(shè)備接收其已刪除所述文件的確認(rèn)調(diào)用的步驟。具有在所述元數(shù)據(jù)服務(wù)器處刪除所述文件的步驟。具有從所述文件刪除列表中刪除所述文件的步驟。具有在所述元數(shù)據(jù)服務(wù)器處由所述元數(shù)據(jù)服務(wù)器將一與所述文件相關(guān)的內(nèi)節(jié)點(diǎn)號(hào)放入一自由列表中的步驟。
本發(fā)明涉及一種用于讀取一文件中的數(shù)據(jù)的方法。所述方法包括在一網(wǎng)絡(luò)元件處接收一對(duì)所述文件中的數(shù)據(jù)的NFS讀取請(qǐng)求的步驟。具有由所述網(wǎng)絡(luò)元件確定哪一個(gè)VFS存儲(chǔ)至少一個(gè)包含所述數(shù)據(jù)的條的步驟。具有將一文件讀取請(qǐng)求從所述網(wǎng)絡(luò)元件發(fā)送至存儲(chǔ)所述數(shù)據(jù)的條的復(fù)數(shù)個(gè)服務(wù)器的至少一個(gè)磁盤元件的步驟。具有由每一磁盤元件獲得與所述文件相關(guān)的當(dāng)前屬性的步驟。具有從每一具有所述條的磁盤元件中讀取所述文件的所述條的步驟。具有產(chǎn)生一對(duì)所述文件讀取請(qǐng)求的響應(yīng)的步驟。
本發(fā)明涉及一種用于將數(shù)據(jù)寫入一文件中的方法。所述方法包括在一網(wǎng)絡(luò)元件處接收一對(duì)一文件的NFS寫入請(qǐng)求的步驟。具有由所述網(wǎng)絡(luò)元件確定哪一個(gè)VFS與所述文件相關(guān)的步驟。具有將一文件寫入請(qǐng)求從所述網(wǎng)絡(luò)元件發(fā)送至具有所述VFS的一條帶的復(fù)數(shù)個(gè)服務(wù)器的至少一個(gè)磁盤元件的步驟。具有獲取與所述文件相關(guān)的當(dāng)前屬性的步驟。具有將所述數(shù)據(jù)中的一預(yù)定數(shù)量的字節(jié)連續(xù)寫入每一VFS條中直至所述數(shù)據(jù)全部被寫入所述文件中為止的步驟。
在附圖中,圖解說明了本發(fā)明的較佳實(shí)施例及實(shí)踐本發(fā)明的較佳方法,在圖式中圖1為本發(fā)明的一裝置的一示意圖。
圖2為本發(fā)明的所述裝置的一示意圖。
圖3為三個(gè)條帶的一示意圖。
圖4為一讀取數(shù)據(jù)路徑以及對(duì)元數(shù)據(jù)服務(wù)器的請(qǐng)求的示意圖。
圖5顯示在一條帶化系統(tǒng)中作為實(shí)施一寫入操作的一部分所交換的調(diào)用。
圖6顯示在網(wǎng)絡(luò)元件可產(chǎn)生一適當(dāng)NFS響應(yīng)前將對(duì)不同磁盤元件的多個(gè)調(diào)用相組合的結(jié)果。
圖7為一創(chuàng)建/刪除/截?cái)嗤ㄐ诺氖疽鈭D。
具體實(shí)施例方式
現(xiàn)在參見圖式一在所有這幾個(gè)圖式中相同的參考編號(hào)均指代相似或相同的部件,且更具體而言參見其圖形,圖中顯示一數(shù)據(jù)存儲(chǔ)裝置10。裝置10包括一由若干NFS服務(wù)器14構(gòu)成的集群12。每一服務(wù)器14均具有用于輸入文件系統(tǒng)請(qǐng)求及各服務(wù)器14之間的集群12通信的網(wǎng)絡(luò)端口16。裝置10包括復(fù)數(shù)個(gè)與服務(wù)器14通信的存儲(chǔ)器陣列18,服務(wù)器14利用一條帶化文件系統(tǒng)來存儲(chǔ)數(shù)據(jù)。
較佳地,每一服務(wù)器14均具有一網(wǎng)絡(luò)元件20及一磁盤元件22。每一磁盤元件22均較佳具有一虛擬文件系統(tǒng)24,每一磁盤元件22的虛擬文件系統(tǒng)24共同形成一條帶化VFS。較佳地,一虛擬文件系統(tǒng)24的一個(gè)磁盤元件22充當(dāng)一元數(shù)據(jù)服務(wù)器26。
較佳地,一文件具有若干屬性且每一文件的每一服務(wù)器14均保有一高速緩存元件,所述高速緩存元件存儲(chǔ)所述文件屬性的最新已知版本及修改時(shí)間和更改時(shí)間值的范圍以供指配給寫入操作的結(jié)果。不作為虛擬文件系統(tǒng)24的元數(shù)據(jù)服務(wù)器26的每一磁盤元件22均較佳為一輸入輸出輔助設(shè)備。較佳地,文件修改時(shí)間或文件更改時(shí)間的范圍由輸入輸出輔助設(shè)備從元數(shù)據(jù)服務(wù)器26保留。較佳將從元數(shù)據(jù)服務(wù)器26所獲得的范圍內(nèi)的修改及更改時(shí)間發(fā)給已在輸入輸出輔助設(shè)備處排隊(duì)的操作。
較佳地,將從元數(shù)據(jù)服務(wù)器26所獲得的范圍內(nèi)的修改及更改時(shí)間發(fā)給在由輸入輸出輔助設(shè)備從元數(shù)據(jù)服務(wù)器26保留所述范圍后的一時(shí)間窗口期間所接收的操作。影響一文件中所有條帶的操作較佳首先在一文件的元數(shù)據(jù)服務(wù)器26處開始執(zhí)行,且隨后在所有輸入輸出輔助設(shè)備28處執(zhí)行,以使輸入輸出輔助設(shè)備28處的操作只等待已經(jīng)完成其與元數(shù)據(jù)服務(wù)器26的通信的已在執(zhí)行的操作。
較佳地,各操作遵循至少兩種鎖定模型中的一種,其中第一種鎖定模型要首先與元數(shù)據(jù)服務(wù)器26同步,然后通過與在所述輸入輸出輔助設(shè)備處執(zhí)行的其他操作同步來開始核心執(zhí)行,而其中第二種鎖定模型則首先要在元數(shù)據(jù)服務(wù)器26處同步,且隨后與一個(gè)或多個(gè)輸入輸出輔助設(shè)備28處的已在輸入輸出輔助設(shè)備28處開始核心執(zhí)行的操作同步。集群12網(wǎng)絡(luò)較佳連接成一星形拓?fù)?。較佳地,集群12網(wǎng)絡(luò)為一交換式以太網(wǎng)。
本發(fā)明涉及一種用于存儲(chǔ)數(shù)據(jù)的方法。所述方法包括在復(fù)數(shù)個(gè)NFS服務(wù)器14上創(chuàng)建一文件的步驟。具有如下步驟在各服務(wù)器14中將數(shù)據(jù)以數(shù)據(jù)條的形式寫入所述文件中,所述各條共同形成一條帶。具有從服務(wù)器14中讀取數(shù)據(jù)條的步驟。具有從服務(wù)器14中刪除所述條的步驟。
較佳地,具有將一NFS服務(wù)器14的一虛擬文件系統(tǒng)24的一磁盤元件22識(shí)別為一元數(shù)據(jù)服務(wù)器26并將未被識(shí)別為元數(shù)據(jù)服務(wù)器26的各NFS服務(wù)器的磁盤元件22識(shí)別為輸入輸出輔助設(shè)備28的步驟。較佳具有如下步驟在一元數(shù)據(jù)服務(wù)器26處每一現(xiàn)用文件的每一輸入輸出輔助設(shè)備處的一高速緩存元件中存儲(chǔ)所述文件的適于一空轉(zhuǎn)周期的文件屬性的最新已知版本。較佳地,具有在所述高速緩存元件中存儲(chǔ)修改時(shí)間及更改時(shí)間值的范圍以便指配給寫入操作的步驟。
較佳具有由所述高速緩存元件向元數(shù)據(jù)服務(wù)器26作出一狀態(tài)請(qǐng)求以獲得一文件的當(dāng)前屬性的步驟。較佳地,所述作出一狀態(tài)請(qǐng)求的步驟包括從元數(shù)據(jù)服務(wù)器26獲得修改時(shí)間及更改時(shí)間范圍的步驟。較佳地存在如下步驟在所述輸入輸出輔助設(shè)備處對(duì)文件讀取及文件寫入請(qǐng)求進(jìn)行排隊(duì)直至所述文件讀取及文件寫入請(qǐng)求被所述高速緩存元件接納并完成執(zhí)行為止。
較佳地,具有由所述高速緩存元件來跟蹤正對(duì)所述文件執(zhí)行哪些文件讀取及文件寫入請(qǐng)求及正在讀取或?qū)懭肽男┓秶牟襟E。較佳具有在必須執(zhí)行一讀取操作時(shí)請(qǐng)求所述高速緩存元件從無效模式中移至讀取模式的步驟。較佳地,具有檢驗(yàn)一受一文件讀取請(qǐng)求影響的字節(jié)范圍以確保其不與先前所接納且當(dāng)前正在執(zhí)行的任何文件寫入請(qǐng)求的字節(jié)范圍重疊的步驟。較佳具有響應(yīng)于一文件寫入請(qǐng)求而請(qǐng)求所述高速緩存元件移入一寫入模式中的步驟。較佳地,具有檢查所述高速緩存元件所述受文件寫入請(qǐng)求影響的字節(jié)范圍是否與任何被接納且仍在執(zhí)行的文件讀取或文件寫入請(qǐng)求重疊的步驟。
較佳地,具有當(dāng)執(zhí)行一寫入請(qǐng)求時(shí)從存儲(chǔ)于所述高速緩存元件中的修改時(shí)間及更改時(shí)間范圍內(nèi)分配一修改時(shí)間及更改時(shí)間對(duì)的步驟。較佳地,具有檢查一待決的文件讀取及文件寫入請(qǐng)求隊(duì)列的首個(gè)請(qǐng)求以確定在一文件讀取或?qū)懭胝?qǐng)求完成后所述首個(gè)請(qǐng)求能否被所述高速緩存元件接納的步驟。較佳具有下列步驟所述高速緩存元件檢測(cè)到必須響應(yīng)一文件寫入請(qǐng)求而更新一文件長(zhǎng)度;將所述高速緩存元件移入互斥模式中;及向所述元數(shù)據(jù)服務(wù)器26作出一文件寫入狀態(tài)調(diào)用以更新所述文件的長(zhǎng)度屬性。
本發(fā)明涉及一種用于為一文件建立存儲(chǔ)的方法。所述方法包括在一網(wǎng)絡(luò)元件20處接收一NFS創(chuàng)建請(qǐng)求的步驟。具有在一元數(shù)據(jù)服務(wù)器26處從網(wǎng)絡(luò)元件20接收一文件創(chuàng)建請(qǐng)求的步驟。具有在元數(shù)據(jù)服務(wù)器26處為所述文件分配一內(nèi)節(jié)點(diǎn)號(hào)的步驟。具有向輸入輸出輔助設(shè)備28作出創(chuàng)建調(diào)用以將所述文件標(biāo)記為由所述輸入輸出輔助設(shè)備28所分配的步驟。具有在元數(shù)據(jù)服務(wù)器26處委托所述文件創(chuàng)建的步驟。
本發(fā)明涉及一種用于從存儲(chǔ)器中移除一文件的方法。所述方法包括在一元數(shù)據(jù)服務(wù)器26處接收一刪除文件請(qǐng)求的步驟。具有在元數(shù)據(jù)服務(wù)器26處由元數(shù)據(jù)服務(wù)器26來將所述文件的文件名自一母目錄中移除的步驟。具有在元數(shù)據(jù)服務(wù)器26處由元數(shù)據(jù)服務(wù)器26將所述文件加到一文件刪除列表上的步驟。具有向輸入輸出輔助設(shè)備28發(fā)送刪除調(diào)用的步驟。具有在元數(shù)據(jù)服務(wù)器26處從輸入輸出輔助設(shè)備28接收其已刪除所述文件的確認(rèn)調(diào)用的步驟。具有在元數(shù)據(jù)服務(wù)器26處移除所述文件的步驟。具有從所述文件刪除列表中刪除所述文件的步驟。具有在元數(shù)據(jù)服務(wù)器26處由元數(shù)據(jù)服務(wù)器26將一與所述文件相關(guān)的內(nèi)節(jié)點(diǎn)號(hào)放入一自由列表中的步驟。
本發(fā)明涉及一種用于讀取一文件中的數(shù)據(jù)的方法。所述方法包括在一網(wǎng)絡(luò)元件20處接收一對(duì)所述文件中的數(shù)據(jù)的NFS讀取請(qǐng)求的步驟。具有由網(wǎng)絡(luò)元件20確定哪一VFS存儲(chǔ)至少一個(gè)包含所述數(shù)據(jù)的條的步驟。具有將一文件讀取請(qǐng)求從網(wǎng)絡(luò)元件20發(fā)送至存儲(chǔ)所述數(shù)據(jù)的一個(gè)條的復(fù)數(shù)個(gè)服務(wù)器14的至少一個(gè)磁盤元件22的步驟。具有由每一磁盤元件22獲得與所述文件相關(guān)的當(dāng)前屬性的步驟。具有從每一具有所述條的磁盤元件22讀取所述文件的所述條的步驟。具有產(chǎn)生一對(duì)所述文件讀取請(qǐng)求的響應(yīng)的步驟。
本發(fā)明涉及一種用于將數(shù)據(jù)寫入一文件中的方法。所述方法包括在一網(wǎng)絡(luò)元件20處接收一對(duì)一文件的NFS寫入請(qǐng)求的步驟。具有由網(wǎng)絡(luò)元件20確定哪一VFS與所述文件相關(guān)聯(lián)的步驟。具有將一文件寫入請(qǐng)求從網(wǎng)絡(luò)元件20發(fā)送至具有所述VFS的一個(gè)條的復(fù)數(shù)個(gè)服務(wù)器14的至少一個(gè)磁盤元件22的步驟。具有獲取與所述文件相關(guān)的當(dāng)前屬性的步驟。具有將所述數(shù)據(jù)的一預(yù)定數(shù)量的字節(jié)寫入每一VFS條中直至將所述數(shù)據(jù)全部被寫入所述文件中為止的步驟。
在本發(fā)明的運(yùn)作中,其構(gòu)建于一SpinServer頂部,SpinServer的基本架構(gòu)闡述于第PCT/US01/46792號(hào)申請(qǐng)案中,所述申請(qǐng)案以引用方式并入本文中。我們記得,在所述申請(qǐng)案中,由一群網(wǎng)絡(luò)元件(NE)20及磁盤元件(DE)22構(gòu)建成單個(gè)全局名稱空間。
在此較佳實(shí)施例中,將單個(gè)NE與DE組合于一既具有用于輸入文件系統(tǒng)請(qǐng)求的網(wǎng)絡(luò)端口16又具有用于SpinServer之間的集群12通信的其他網(wǎng)絡(luò)端口16的服務(wù)器14中,如上圖所示。在圖2中,位于圖2頂部的鏈路代表SpinServer與其附屬存儲(chǔ)器陣列18之間的光纖信道鏈路。水平黑線代表將不同SpinServer的NE與DE組件連接在一起的專用集群12網(wǎng)絡(luò)。應(yīng)注意,在圖2中,看似集群12鏈路延伸經(jīng)過SpinServer2以到達(dá)SpinServer 3,但實(shí)際上,集群12網(wǎng)絡(luò)為一交換式吉比特以太網(wǎng),其中各機(jī)器連接成一星形拓?fù)洹?br>
假定一系統(tǒng)如上文所述構(gòu)造而成,則作為提供從DE到看似單個(gè)VFS的帶寬的方式,將數(shù)據(jù)在多個(gè)VFS之間條帶化。
一VFS內(nèi)的數(shù)據(jù)構(gòu)建成一如由以引用方式并入本文中的第PCT/US01/48741號(hào)專利申請(qǐng)案所述的內(nèi)節(jié)點(diǎn)陣列,或構(gòu)建成Berkeley快速文件系統(tǒng)(Fast File System),所述快速文件系統(tǒng)的設(shè)計(jì)及完整構(gòu)建方案可在http://www.freebsd.orq上獲得,該網(wǎng)址以引用方式并入本文中。
一條帶化VFS在NFS名稱空間中看似單個(gè)VFS,但其在內(nèi)部是由一組分布于若干DE中的條VFS構(gòu)成(每一DE一個(gè)VFS);此一集合稱作一條帶化VFS或一條帶化組。將其中一個(gè)VFS的一個(gè)服務(wù)器14辨別為元數(shù)據(jù)服務(wù)器26或MDS。隨后按下述方式使數(shù)據(jù)分布于整個(gè)VFS集合中。該條帶化VFS中的所有文件均表示在MDS處,且對(duì)于除正規(guī)數(shù)據(jù)文件外的所有文件而言,MDS均存儲(chǔ)對(duì)象的所有數(shù)據(jù)。因此,具體而言,所有目錄、符號(hào)鏈路、安裝點(diǎn)均全部存儲(chǔ)于MDS處。
數(shù)據(jù)文件受到不同的對(duì)待。通過將文件數(shù)據(jù)的不同的條放入所述條帶化組中的不同VFS中—在每一條帶化VFS內(nèi)全部共享同一虛節(jié)點(diǎn)號(hào),將數(shù)據(jù)文件條帶化于一條帶化組中的所有VFS當(dāng)中。例如,如果其由A.B.C來標(biāo)記(文件的VFS ID為A、虛節(jié)點(diǎn)B位于所述VFS內(nèi)且唯一的產(chǎn)生編號(hào)為C),則如果條帶化VFS A是由VFS A1、A2及A3組成,文件A.B.C的各個(gè)條會(huì)存儲(chǔ)于文件ID為A1.B.C、A2.B.C及A3.B.C的文件中。換句話說,一具有虛節(jié)點(diǎn)B的條帶化VFS中的文件將其數(shù)據(jù)存儲(chǔ)于所述文件中的所有組元VFS中,其中每一組元VFS中均具有相同的虛節(jié)點(diǎn)及唯一域。虛節(jié)點(diǎn)B的條N存儲(chǔ)于所述條帶組中的第I個(gè)服務(wù)器14上,其中I=(B+N)模STRIPE_WIDTH且STRIPE_WIDTH(條帶寬度)為保存條帶化VFS的所有存儲(chǔ)器陣列18中一整個(gè)條帶中的條的數(shù)量。
圖3顯示一由三個(gè)單獨(dú)的VFS A1、A2及A3形成的條帶化虛擬文件系統(tǒng)24(VFSA)中的一文件。文件的虛節(jié)點(diǎn)號(hào)為B,且其唯一域?yàn)镃。組合文件的條0存儲(chǔ)于文件A2.B.C的第一個(gè)條中,條1存儲(chǔ)于文件A3.B.C的條0中,條2存儲(chǔ)于文件A1.B.C的條0中,而組合文件的條3返回至文件A2.B.C,此時(shí)為所述文件的條1。
按圖3將數(shù)據(jù)條帶化-每一服務(wù)器14上X個(gè)字節(jié),且隨后對(duì)于下一X個(gè)字節(jié),移至下一服務(wù)器14,反復(fù)不斷地進(jìn)行。條尺寸為X,而條帶尺寸為X*<服務(wù)器的數(shù)量>,換句話說,如果在每一服務(wù)器14上寫入32KB,并隨后移至下一個(gè)服務(wù)器14,且有8個(gè)加入集群12的服務(wù)器,則條尺寸為32K而條帶尺寸為128K。
大部分操作文件系統(tǒng)操作在MDS上執(zhí)行,且MDS單獨(dú)實(shí)施屬性檢索、目錄查找、符號(hào)鏈路讀取、目錄讀取、存取檢查、屬性設(shè)定(文件長(zhǎng)度更改除外)、目錄創(chuàng)建、目錄移除、文件及目錄重命名、鎖定、硬鏈路創(chuàng)建、符號(hào)鏈路創(chuàng)建及存取控制列表設(shè)定操作。
有若干其他操作會(huì)主要影響單個(gè)條,但所述條對(duì)請(qǐng)求的處理可能需要與MDS通信;這些操作包括讀取及寫入操作二者。最后,正規(guī)文件創(chuàng)建、文件移除及對(duì)一文件長(zhǎng)度的更新均影響一條帶組中的所有文件。下文將提供這些操作的細(xì)節(jié)。
除spin_read(旋轉(zhuǎn)_讀取)及spin_write(旋轉(zhuǎn)_寫入)外的所有基本數(shù)據(jù)操作均在MDS處處理。對(duì)spin_read及spin_write的調(diào)用由NE發(fā)送至保存所述文件的適當(dāng)條的適當(dāng)DE。如上文所提及,所述條被以數(shù)據(jù)文件內(nèi)的相關(guān)條與文件的虛節(jié)點(diǎn)號(hào)相結(jié)合的一函數(shù)形式來計(jì)算,以便所述條帶化以用于一條帶化VFS內(nèi)不同文件的一不同服務(wù)器而開始。應(yīng)注意,專用請(qǐng)求是按照所述較佳實(shí)施例的命名法(例如spin_read或spin_write)來識(shí)別。這些要求表示與其相關(guān)的更一般的請(qǐng)求,例如一讀取請(qǐng)求或一寫入請(qǐng)求或一狀態(tài)請(qǐng)求。
當(dāng)一NE接收到一NFS讀取時(shí),所述NE對(duì)存儲(chǔ)有包含正被讀取的數(shù)據(jù)的條的實(shí)際VFS進(jìn)行計(jì)算,且隨后NE將讀取請(qǐng)求發(fā)送至存儲(chǔ)所述數(shù)據(jù)的DE(或各DE)。作為執(zhí)行請(qǐng)求的一部分,DE需要與文件相關(guān)的屬性,且使用最近所高速緩存的信息或者當(dāng)時(shí)從MDS獲得此信息。此信息用于確定文件長(zhǎng)度,文件長(zhǎng)度則進(jìn)一步用于微調(diào)文件讀取。其還用于確定文件屬性以供返回至spin_read的調(diào)用方。
圖4顯示此操作的運(yùn)行方式。一NFS讀取請(qǐng)求從左邊進(jìn)入NE,且被映射到對(duì)對(duì)應(yīng)條帶的對(duì)應(yīng)spin_read請(qǐng)求中,然后被存儲(chǔ)于從上面數(shù)第二個(gè)IOS上。如果存儲(chǔ)在此IOS處的高速緩存屬性為當(dāng)前屬性,則立即執(zhí)行讀取操作并產(chǎn)生一響應(yīng)。否則,向元數(shù)據(jù)服務(wù)器(MDS)26發(fā)送一spin_mds_read_status調(diào)用,以檢索文件的當(dāng)前屬性。寫入請(qǐng)求也使用相同的路徑一NFS寫入請(qǐng)求進(jìn)入NE,被轉(zhuǎn)譯成一spin_write調(diào)用,且如果高速緩存元件不能立即處理所述請(qǐng)求則IOS以spin_mds write_status來調(diào)用MDS。另外,在寫入情況下,如果文件長(zhǎng)度得到更新,則寫入調(diào)用的spin_mds_write_status調(diào)用會(huì)在MDS處更新文件長(zhǎng)度。
就確定保存有為實(shí)施寫入操作所需的數(shù)據(jù)的服務(wù)器14而言,寫入操作類似于讀取操作。spin_write操作在由一DE處理時(shí),也將需要更新存儲(chǔ)于MDS處的文件屬性。此更新是通過從IOS向MDS發(fā)送一請(qǐng)求來處理;下文所述的最佳化使IOS能夠使用對(duì)MDS的單個(gè)狀態(tài)更新調(diào)用來處理多于一個(gè)spin_write操作。
IOS可對(duì)MDS實(shí)施的調(diào)用有兩個(gè)。spin_mds_read_status操作回送當(dāng)前文件屬性。spin_mds_write_status操作回送當(dāng)前文件屬性以及IOS本身可指配的一mtime及ctime值范圍。spin_mds_write_status調(diào)用也可在回送經(jīng)過更新的屬性前采用可選的屬性來寫入到所述文件;此選項(xiàng)通常用于在IOS處的spin_write調(diào)用實(shí)際上需要更新文件長(zhǎng)度時(shí)更新文件長(zhǎng)度。
對(duì)于MDS處的每一現(xiàn)用文件,每一IOS均保有一高速緩存元件以存儲(chǔ)文件屬性的最新已知版本及mtime和ctime值的可選范圍以供指配給寫入操作。在IOS處,此高速緩存元件按下述方式處理排隊(duì)的讀取及寫入操作(spin_read及spin_write調(diào)用)。文件屬性得到高速緩存,且適用于在自MDS獲得所述文件屬性后的某一(短暫)周期-亦稱作空轉(zhuǎn)周期。如果高速緩存元件處于讀取模式中,則其已高速緩存了文件屬性,但沒有供用于寫入的mtime及ctime范圍。如果高速緩存處于寫入模式中,則其如在讀取模式中一樣已高速緩存了文件屬性,但另外還已高速緩存了一供用于寫入操作的mtime及ctime值范圍。一已高速緩存了因太過時(shí)而不能使用的信息的元件處于無效模式中。一高速緩存元件通過作出一spin_mds_read_status調(diào)用來從無效模式中移至讀取模式,以從MDS獲得最新屬性。一處于無效或讀取模式中的高速緩存元件可通過調(diào)用spin_mds_write_status來移至寫入模式,以獲得當(dāng)前屬性連同mtime及ctime范圍。
mtime為文件的修改時(shí)間,此意味著其是文件中的數(shù)據(jù)最后被修改的時(shí)間。ctime時(shí)間為文件的更改時(shí)間,每當(dāng)文件的任何特性(包括其數(shù)據(jù))更改時(shí)其均會(huì)前移。因此,如果對(duì)文件進(jìn)行寫入,則mtime及ctime二者均會(huì)改變,但如果對(duì)文件實(shí)施如改變其保護(hù)或文件所有者等操作,則僅ctime會(huì)改變。在mtime改變時(shí),ctime總是會(huì)改變,但mtime卻并非每當(dāng)ctime改變時(shí)皆會(huì)改變。
一IOS處的所有spin_read及spin_wtite調(diào)用均須在其可在IOS處執(zhí)行前獲得進(jìn)入高速緩存元件的許可;在其被接納之前,其在高速緩存元件處排隊(duì)。高速緩存元件跟蹤正在對(duì)對(duì)應(yīng)文件執(zhí)行哪些spin_read或spin_write操作、及所述操作正在讀取或?qū)懭肽男┓秶?。如果高速緩存元件處于無效模式中,則一排隊(duì)的spin_read調(diào)用首先請(qǐng)求所述高速緩存元件從無效模式中移入讀取模式中。一旦所述元件處于讀取或?qū)懭肽J街?,即檢查受spin_read調(diào)用影響的字節(jié)范圍,以確保其不與先前已被接納且當(dāng)前正在執(zhí)行的任何spin_write調(diào)用的字節(jié)范圍重疊。如果此條件也通過,則所述spin_read調(diào)用被接納,且將以當(dāng)前存儲(chǔ)于高速緩存元件中的屬性來完成。一排隊(duì)的spin_write調(diào)用請(qǐng)求所述高速緩存元件移入寫入模式。然后,其檢查受所述spin_write調(diào)用影響的字節(jié)范圍是否與任何已被接納且仍在執(zhí)行的spin_read或spin_write調(diào)用重疊。如果沒有相沖突的調(diào)用,則spin_write調(diào)用會(huì)被接納,且從存儲(chǔ)于高速緩存元件中的范圍內(nèi)分配一mtime/ctime對(duì),且就地執(zhí)行spin_write。當(dāng)spin_write調(diào)用完成時(shí),使用所分配的mtime/ctime對(duì)來發(fā)送響應(yīng)。每當(dāng)完成一spin_read或一spin_write調(diào)用時(shí),均檢查待決的spin_read及spin_write請(qǐng)求以確定其能否被接納,且接納新的調(diào)用直至遇到一調(diào)用與當(dāng)前正在運(yùn)行的一組spin_read及spin_write調(diào)用相沖突為止。
一被允許進(jìn)入高速緩存元件的寫入調(diào)用也可檢測(cè)到其必須更新文件長(zhǎng)度。在此種情況下,高速緩存元件移入互斥模式中—此需要在所有其他操作均完成后才能開始spin_write操作。在所有操作完成后,實(shí)施一spin_mds_write_status調(diào)用以更新文件長(zhǎng)度屬性并回送一新的mtime及ctime值范圍,并開始寫入操作。
圖5顯示在一條帶化系統(tǒng)中作為實(shí)施一spin_write操作的一部分而交換的調(diào)用。在此實(shí)例中,三個(gè)NFS寫入調(diào)用到達(dá)一NE,由NE向一IOS發(fā)送這三個(gè)對(duì)應(yīng)的spin_write調(diào)用。IOS的高速緩存元件未處于寫入模式,因此其向MDS作出一spin_mds_write_status調(diào)用以將所述元件置入寫入模式中。在此時(shí)間期間,其他對(duì)IOS的spin_write調(diào)用排隊(duì)等待高速緩存元件移入寫入模式中。
某些對(duì)一網(wǎng)絡(luò)元件20的讀取及寫入調(diào)用跨越文件系統(tǒng)中的條邊界。通常,此出現(xiàn)在大的NFS讀取或?qū)懭胝{(diào)用偶然地碰巧跨越一個(gè)條邊界時(shí)。在此種情況下,在NE可產(chǎn)生適當(dāng)NFS響應(yīng)之前組合對(duì)各個(gè)磁盤元件22的多個(gè)SpinFS調(diào)用的結(jié)果。圖6即圖解說明此種情形。
有兩種方法可用于這些情形。在第一種方法中,實(shí)施兩次或兩次以上的DEspin_read或spin_write操作—對(duì)每一受影響的條實(shí)施一次,并在向客戶機(jī)回送結(jié)果之前組合這些結(jié)果。用于組合多組屬性的操作將要回送與具有最早(最小)ctime域的狀態(tài)條目相關(guān)的屬性。在第二種方法中,NFSv3及NFSv4操作可實(shí)施短的讀取或?qū)懭氩僮鬟@一事實(shí)被加以利用,且只實(shí)施適合于最先受影響的條的讀取或?qū)懭氩僮鞑糠郑腘E向NFS客戶機(jī)回送一僅所述數(shù)據(jù)的一子集得到傳送的指示。在此種情況下,已知客戶機(jī)將發(fā)送另一對(duì)其余數(shù)據(jù)的請(qǐng)求。
視基本的存取協(xié)議而定,該較佳實(shí)施方案實(shí)際上使用一種混合方法。具體而言,對(duì)于允許服務(wù)器14實(shí)施一少于所請(qǐng)求字節(jié)的讀取或?qū)懭氲膮f(xié)議(其中存儲(chǔ)器客戶機(jī)負(fù)責(zé)請(qǐng)求一對(duì)其余字節(jié)的新的傳送)而言,服務(wù)器14將采用上文所述的第二種方法。對(duì)于其余需要針對(duì)每一調(diào)用來傳送所有字節(jié)的協(xié)議而言,則使用第一種方法。盡可能使用短的讀取及寫入可使存儲(chǔ)器客戶機(jī)能夠更精確地跟蹤其高速緩存器的每一頁(yè)中數(shù)據(jù)的確切版本,從而防止在存儲(chǔ)器客戶機(jī)處出現(xiàn)不必要的高速緩存器無效操作。
在MDS處實(shí)施兩類操作,但這兩類操作也影響系統(tǒng)中的IOS。一類操作包括文件創(chuàng)建及刪除操作,而第二類操作包括文件截短。下文將闡述這兩類操作。
多條操作是針對(duì)MDS,MDS向在所述操作中所涉及的不同IOS發(fā)出請(qǐng)求。如同此系統(tǒng)中的所有其他操作一樣,所述各多條操作按其文件ctime值串行化。讀者可看到,在圖7中顯示了這些操作通過所述系統(tǒng)時(shí)所經(jīng)過的路徑。其中,一NFS創(chuàng)建請(qǐng)求被一NE接收到,由所述NE將其轉(zhuǎn)譯成一spin_creat調(diào)用,然后所述spin_creat調(diào)用被轉(zhuǎn)發(fā)給MDS(最右邊的方框)。MDS通過向所有存儲(chǔ)有所討論VFS條的IOS發(fā)出若干個(gè)spin_ios_creat操作來實(shí)施此操作。在下圖中可注意到,與在此操作中所涉及的其他調(diào)用相反,spin_ios_create調(diào)用從右向左移動(dòng)。
文件創(chuàng)建及刪除操作會(huì)影響多個(gè)條,且直接發(fā)送至MDS,由MDS按下述方式來驅(qū)動(dòng)其處理。
文件創(chuàng)建相當(dāng)簡(jiǎn)單明了。對(duì)條帶化VFS而言,在實(shí)際實(shí)施創(chuàng)建之前,預(yù)留將被使用的內(nèi)節(jié)點(diǎn)號(hào),且對(duì)IOS實(shí)施spin_ios_create調(diào)用。spin_ios_create調(diào)用會(huì)確保在指定文件中不留有數(shù)據(jù)、文件內(nèi)節(jié)點(diǎn)在IOS上具有與存儲(chǔ)于MDS上的相同的唯一域、及文件的文件類型域指示所述文件為一正規(guī)文件。spin_ios_create調(diào)用是在MDS進(jìn)行內(nèi)節(jié)點(diǎn)分配事務(wù)前實(shí)施,以便萬(wàn)一在每一IOS處已創(chuàng)建內(nèi)節(jié)點(diǎn)前發(fā)生崩潰,在MDS處也不會(huì)發(fā)生變化,且文件分配將最終從頭開始。
萬(wàn)一在任一位置發(fā)生崩潰,文件創(chuàng)建將在任何文件條目得到創(chuàng)建前及在將任何內(nèi)節(jié)點(diǎn)標(biāo)記在MDS處得到分配前失敗。因此,重新嘗試所述創(chuàng)建將會(huì)成功,而不會(huì)因所述失敗的文件創(chuàng)建嘗試而損失任何資源。還應(yīng)注意,到所創(chuàng)建的文件最后變得可見時(shí)-目錄條目已得到創(chuàng)建且內(nèi)節(jié)點(diǎn)已鎖定在MDS處,文件已在MDS及所有IOS上得到創(chuàng)建。因此,不存在其中會(huì)見到一部分地得到創(chuàng)建的條帶化文件的窗口,甚至在MDS或IOS崩潰的情況下也是如此。
刪除是遵循與創(chuàng)建相同的規(guī)則,以確保會(huì)破壞目錄條目并釋放正規(guī)文件內(nèi)節(jié)點(diǎn)的事務(wù)性更新是作為文件刪除操作中的最末步驟來執(zhí)行。換句話說,在文件刪除開始時(shí)首先向每一遠(yuǎn)程VFS發(fā)送一spin_ios_delete調(diào)用(并行實(shí)施spin_io_delete調(diào)用)。一旦完成這些調(diào)用,即事務(wù)性地移除MDS處的條,且所述文件消失。
一出現(xiàn)在文件刪除中但不出現(xiàn)在文件創(chuàng)建中的復(fù)雜因素在于由于在操作開始時(shí)所述文件已存在,因而在刪除期間,執(zhí)行讀取或?qū)懭氩僮鞯娜魏稳司煽吹絼h除期間的中間狀態(tài)。通常,此意味著在一刪除期間,一讀取或?qū)懭氩僮骺稍谒鰟h除期間回送ESTALE,而不僅僅是阻斷及隨后回送ESTALE。此本身并不是問題,但如果MDS在此階段中崩潰,則在恢復(fù)時(shí),某些條將看起來被刪除,且將在讀取該字節(jié)范圍時(shí)回送ESTALE,而其他條將仍然起作用。進(jìn)行一新的文件刪除操作將會(huì)成功,但此文件的整體狀態(tài)將導(dǎo)致用戶感到迷惑。
因此,在文件刪除操作開始前,進(jìn)行一事務(wù)來將所述文件添加至一處于正被刪除過程的對(duì)象列表并將所述文件從其母目錄中移除。然后,系統(tǒng)將spin_ios_delete調(diào)用發(fā)送至所有IOS,且最終實(shí)施一第二事務(wù)來將所述文件從MDS中及從正被刪除的文件列表中移除。由于在spin_remove調(diào)用作出任何改變前所述文件被記錄為在穩(wěn)定的存儲(chǔ)器中“待刪除”,因而能保證所述文件如果一旦開始被移除,就將最終被刪除。因此,任何因在正刪除過程中存取一文件而引起的ESTALE錯(cuò)誤均將是短暫的,且只在所述文件在其母目錄中不再可見后才會(huì)發(fā)生。
spin_ios_create及spin_ios_delete調(diào)用需要使用IOS上的高速緩存元件來使所涉及的文件處于互斥模式中。實(shí)際上,此意味著在spin_ios_create或spin_ios_delete可在IOS上執(zhí)行之前,這些操作要等待所述文件的所有被接納的操作完成。
文件截短類似于文件刪除,既在MDS處也在各個(gè)IOS處執(zhí)行。最好使截短可相對(duì)于IOS處的其他操作串行化。具體而言,如果一截短回送mtime 200,且在一回送mtime 199的IOS處執(zhí)行寫入,則在該IOS處寫入的數(shù)據(jù)也必須反映所述截短的影響。另一方面,如果所述寫入執(zhí)行回送一mtime 201,則所述寫入不應(yīng)看起來受所述截短的影響。
這是通過在MDS處以與在MDS處使文件創(chuàng)建及刪除操作串行化相同的方式使各截短串行化來實(shí)現(xiàn)。具體而言,在MDS處執(zhí)行spin_setattr,從而在其執(zhí)行的持續(xù)時(shí)間內(nèi)阻斷輸入的spin_mds_read_stams及spin_mds_write_status調(diào)用。在此時(shí)間期間,其在MDS處實(shí)施截短操作,并向所有IOS發(fā)送一spin_ios_truncate操作。spin_ios_truncate操作實(shí)際上在IOS處實(shí)施截短操作。
IOS按下述方式處理spin_ios_truncate操作。首先,完成已在IOS處被接納的所有操作;根據(jù)已從MDS獲得的mtime及ctime值來執(zhí)行這些操作,且在所述截短操作前使這些操作串行化。接下來,實(shí)施所述截短操作。spin_ios_truncate調(diào)用的參數(shù)包括正被截短的文件的文件ID以及其新長(zhǎng)度、和在實(shí)施所述截短后所述文件的屬性,包括更新的mtime及ctime域。在實(shí)施所述截短操作后,高速緩存條目將處于讀取模式中,且可繼續(xù)進(jìn)行在IOS處排隊(duì)以在高速緩存條目中改變狀態(tài)的其他操作。
為了避免此設(shè)計(jì)中DE元件內(nèi)的線程資源被死鎖,預(yù)留兩個(gè)附加線程庫(kù)以在IOS及MDS中的每一個(gè)處處理輸入的請(qǐng)求。
由于任一系統(tǒng)均可同時(shí)為一MDS及一IOS(對(duì)于不同的虛擬文件系統(tǒng)24),因此預(yù)留足夠的線程資源以確保能夠執(zhí)行至少一個(gè)自IOS發(fā)送至MDS的請(qǐng)求,并確保能夠執(zhí)行至少一個(gè)自MDS發(fā)送至IOS的請(qǐng)求。具體而言,預(yù)留至少一個(gè)線程來處理輸入的spin_mds_read_status及spin_mds_write_status調(diào)用,且僅處理這些調(diào)用,并預(yù)留另一線程來處理spin_ios_create、spin_ios_delete及spin_ios_truncate調(diào)用,且僅處理這些調(diào)用。
此部分包含上文所述條帶化系統(tǒng)的操作的一走查實(shí)例。
其從一文件創(chuàng)建開始,隨后是若干次條帶化寫入,接著是若干次條帶化讀取,并以一文件刪除結(jié)束。
最初文件創(chuàng)建始于MDS處,其首先為新文件分配一虛節(jié)點(diǎn)號(hào)。然后,MDS同時(shí)向所有IOS作出spin_ios_create調(diào)用,將所述文件標(biāo)記為分配于所有IOS上。一旦完成spin_ios_create調(diào)用,即在MDS處進(jìn)行會(huì)在MDS處實(shí)際創(chuàng)建所述文件的事務(wù),且這些變化為永久性的。
在創(chuàng)建一文件后,多個(gè)機(jī)器可向所述文件進(jìn)行寫入。為具體起見,假定具有三個(gè)服務(wù)器I0、I1及I2,其中I0為所述文件的元數(shù)據(jù)服務(wù)器26。假定客戶機(jī)C0及C1正在向所述文件進(jìn)行寫入。將時(shí)間表示成一給出自1/1/1970開始的納秒數(shù)的64位量。在創(chuàng)建所述文件時(shí),其mtime及ctime二者的值相同,例如1000000。假定C0然后對(duì)一存儲(chǔ)于I1處的條作50個(gè)spin_write調(diào)用。I1首先移至寫入模式,并從I0接收一mtime及ctime值范圍。在此種情形下,假定所述寫入到達(dá)I1時(shí)的當(dāng)前時(shí)間為2000000,以便MDS通過將I1的mtime及ctime范圍規(guī)定為2000000-2000999而在I1的mtime及ctime范圍內(nèi)賦予I11000個(gè)值。然后,MDS將文件的mtime及ctime設(shè)定至2001000。為所述50個(gè)寫入指配50個(gè)各異的mtime及ctime對(duì),mtime及ctime二者均從2000000開始,且mtime及ctime二者均以2000049結(jié)束。在處理這些寫入期間,C0及C1可發(fā)送對(duì)一個(gè)或多個(gè)存儲(chǔ)于I2處的條的另外50個(gè)寫入。作為一IOS的I2也必須移至寫入模式,且通過調(diào)用spin_mds_write_status以獲得其自身的一組mtime及ctime值來實(shí)現(xiàn)。由于當(dāng)將I1置入寫入模式中時(shí)MDS已將時(shí)間戳提前到2001000,因而回送至I2的范圍為2001000至2001999。然后,在I2處實(shí)施所述50個(gè)寫入,并由I2賦予其2001000至2001049的mtime及ctime值。應(yīng)注意,已在I1及I2上執(zhí)行了100個(gè)寫入操作,以僅兩個(gè)簡(jiǎn)單的RPC至I0為代價(jià)。
接下來,假定從客戶機(jī)C0及C1向IOS I1發(fā)送50個(gè)讀取操作。當(dāng)該組中的第一個(gè)讀取到達(dá)I1時(shí),假定其發(fā)現(xiàn)IOS可保持在寫入模式中的最長(zhǎng)時(shí)間已到期,且IOS回到空閑狀態(tài)中。處理spin_read調(diào)用需要IOS處于讀取模式中,這是通過其向MDS發(fā)送一spin_mds_read_status調(diào)用來實(shí)現(xiàn)。此調(diào)用會(huì)回送當(dāng)前屬性,包括2002000的當(dāng)前文件mtime及ctime值。在完成所述spin_mds_read_status調(diào)用后,IOS I1能夠回送mtime及ctime值2002000,直至空轉(zhuǎn)周期到期為止。在此實(shí)例中,假定所有這些讀取操作均在空轉(zhuǎn)周期到期前到達(dá),則所有spin_read操作均回送指示所述文件具有的mtime及crime值2002000的屬性。
應(yīng)注意,在此實(shí)例中,所有操作均按ctime串行化。換句話說,使I1處所有向所述條的寫入均在任何向條I2的寫入之前串行化,而向條I2的寫入本身則在任何在I1處所實(shí)施的讀取之前串行化。
最后,當(dāng)刪除所述文件時(shí),MDS接收會(huì)觸發(fā)刪除的spin_remove調(diào)用。MDS從母目錄中移除所述文件名,將所述文件放入穩(wěn)定存儲(chǔ)器上一正被刪除文件的列表中并進(jìn)行所述事務(wù)。由此點(diǎn)開始,所述文件最終將在MDS及所有IOS上被刪除,甚至在多個(gè)系統(tǒng)崩潰的情況下也如此。然后,MDS實(shí)施刪除的第二階段,并行地向所有IOS發(fā)送spin_ios_delete操作。在每一IOS均確認(rèn)spin_ios_delete調(diào)用執(zhí)行成功后,在MDS處毀壞所述文件且將內(nèi)節(jié)點(diǎn)放回到MDS處的自由列表中。
上文所述技術(shù)解決了為一由許多通過高速網(wǎng)絡(luò)連接的獨(dú)立處理器所構(gòu)成的計(jì)算機(jī)集群12提供共享文件存取的問題,因?yàn)槠涫筃AS服務(wù)器14能夠形成一可提供對(duì)單個(gè)文件的極高讀取或?qū)懭胄阅艿募?2。
就讀取或?qū)懭胄阅芏?,例如,如果一管理員需要100個(gè)服務(wù)器對(duì)單個(gè)文件執(zhí)行操作,則所述管理員僅需在100個(gè)服務(wù)器上將包含所需文件的VFS條帶化。每一服務(wù)器14的每一網(wǎng)絡(luò)元件20均具有所述文件的總負(fù)載的大約1/100,且每一服務(wù)器14上的每一磁盤元件22也具有所述文件的總負(fù)載的大約1/100,因而所有IOS上的負(fù)載分布非常平均。MDS上的負(fù)載可按下述方式估算在有5000個(gè)客戶機(jī)時(shí),在任一時(shí)刻,每一IOS均可能有50個(gè)客戶機(jī)在對(duì)其進(jìn)行存取。每一客戶機(jī)在任一瞬時(shí)均可能具有8-16個(gè)待決I0請(qǐng)求,此意味著I0S在任一瞬時(shí)均具有400-800個(gè)排隊(duì)的請(qǐng)求。如果在每100個(gè)排隊(duì)的請(qǐng)求中具有一個(gè)spin_mds_read_status或spin_mds_write_status調(diào)用,且每一請(qǐng)求均為一8K讀取或?qū)懭氩僮?,則每一自IOS對(duì)MDS的調(diào)用均相當(dāng)于約800KB的數(shù)據(jù)傳送。如果MDS可以處理(保守地來說)25,000個(gè)spin_mds_read_status或pin_mds_write_status調(diào)用/秒,則對(duì)所述單個(gè)文件所支持的總帶寬大約為25,000*800KB或20吉字節(jié)/秒。此等價(jià)于160個(gè)吉比特以太網(wǎng)端口,且大大高于任何由可比技術(shù)形成的集群式NFS服務(wù)器14系統(tǒng)的性能。
在一較佳實(shí)施例中,裝置10在一具有4GB主存儲(chǔ)器的雙處理器Intel PC上運(yùn)行。裝置10具有4個(gè)吉比特以太網(wǎng)卡、2個(gè)用于輸入NFS請(qǐng)求的用戶端口及2個(gè)用于與集群12中的其他NFS服務(wù)器14通信的集群12端口。在集群12端口上傳送的調(diào)用為spin_read、spin_write、spin_create及spin_delete調(diào)用(從一網(wǎng)絡(luò)元件20到一磁盤元件22)、以及spin_ios_XXX and spin_mds_XXX調(diào)用(從一磁盤元件22到另一磁盤元件22)。每一系統(tǒng)還具有4GB的主存儲(chǔ)器用于高速緩存文件數(shù)據(jù)以及通用程序存儲(chǔ)。
裝置10在一雙處理器上運(yùn)行,且雖然此并非必需,但網(wǎng)絡(luò)元件20代碼在其中一個(gè)CPU上運(yùn)行而磁盤元件22代碼及集群代碼則在另一CPU上運(yùn)行。因此,網(wǎng)絡(luò)元件20處理器運(yùn)行NFS及CIFS服務(wù)器代碼,而磁盤元件22處理器運(yùn)行MDS及IOS代碼(可能同時(shí)用于不同的虛擬文件系統(tǒng)24)。
雖然出于例示目的而在上述實(shí)施例中詳細(xì)闡述了本發(fā)明,但應(yīng)了解,此種詳細(xì)闡述僅用于例示目的且所屬領(lǐng)域的技術(shù)人員可對(duì)其作出改動(dòng),此并不背離本發(fā)明的精神及范圍,除非在隨附權(quán)利要求書加以闡述。
權(quán)利要求
1.一種用于存儲(chǔ)數(shù)據(jù)的裝置,其包括一NFS服務(wù)器集群,每一服務(wù)器均具有用于輸入文件系統(tǒng)請(qǐng)求及服務(wù)器之間的集群通信的網(wǎng)絡(luò)端口;及用于與所述服務(wù)器通信的復(fù)數(shù)個(gè)存儲(chǔ)器陣列,所述服務(wù)器利用一條帶化文件系統(tǒng)來存儲(chǔ)數(shù)據(jù)。
2.如權(quán)利要求1所述的裝置,其中每一服務(wù)器均具有一網(wǎng)絡(luò)元件及一磁盤元件。
3.如權(quán)利要求2所述的裝置,其中每一磁盤元件均具有一虛擬文件系統(tǒng)且每一磁盤元件的所述虛擬文件系統(tǒng)共同形成一條帶化VFS。
4.如權(quán)利要求3所述的裝置,其中一虛擬文件系統(tǒng)的所有磁盤元件充當(dāng)元數(shù)據(jù)服務(wù)器。
5.如權(quán)利要求4所述的裝置,其中一文件具有若干屬性且每一服務(wù)器為每一文件均保有一高速緩存元件,所述高速緩存元件存儲(chǔ)所述文件屬性的一最新已知版本及修改時(shí)間和更改時(shí)間值的范圍以供指配給寫入操作結(jié)果。
6.如權(quán)利要求5所述的裝置,其中每一不是一虛擬文件系統(tǒng)的所述元數(shù)據(jù)服務(wù)器的磁盤元件均為一輸入輸出輔助設(shè)備。
7.如權(quán)利要求6所述的裝置,其中文件修改時(shí)間或文件更改時(shí)間的范圍是由所述輸入輸出輔助設(shè)備從所述元數(shù)據(jù)服務(wù)器中保留。
8.如權(quán)利要求7所述的裝置,其中從所述元數(shù)據(jù)服務(wù)器所獲得的所述范圍內(nèi)的所述修改時(shí)間及更改時(shí)間被分發(fā)給已在所述輸入輸出輔助設(shè)備處排隊(duì)的操作。
9.如權(quán)利要求8所述的裝置,其中從所述元數(shù)據(jù)服務(wù)器所獲得的所述范圍內(nèi)的修改時(shí)間及更改時(shí)間被分發(fā)給在由所述輸入輸出輔助設(shè)備從所述元數(shù)據(jù)服務(wù)器保留所述范圍后的一時(shí)間窗口期間所接收的操作。
10.如權(quán)利要求9所述的裝置,其中影響一文件的所有條帶的操作首先在一文件的所述元數(shù)據(jù)服務(wù)器處開始執(zhí)行,且隨后在所有輸入輸出輔助設(shè)備處執(zhí)行,以使所述輸入輸出輔助設(shè)備處的操作只等待已結(jié)束其與所述元數(shù)據(jù)服務(wù)器的通信的已在執(zhí)行的操作。
11.如權(quán)利要求10所述的裝置,其中各操作遵循至少兩種鎖定模型中的一種,所述兩種鎖定模型中的第一種首先要與所述元數(shù)據(jù)服務(wù)器同步,然后通過與在所述輸入輸出輔助設(shè)備處執(zhí)行的其他操作同步來開始核心執(zhí)行,且其中第二種首先要在所述元數(shù)據(jù)服務(wù)器處同步,且隨后與一個(gè)或多個(gè)輸入輸出輔助設(shè)備處的已在所述輸入輸出輔助設(shè)備處開始核心執(zhí)行的操作同步。
12.如權(quán)利要求11所述的裝置,其中所述集群網(wǎng)絡(luò)連接成一星形拓?fù)洹?br>
13.如權(quán)利要求12所述的裝置,其中所述集群網(wǎng)絡(luò)為一交換式以太網(wǎng)。
14.一種用于存儲(chǔ)數(shù)據(jù)的方法,其包括下列步驟在復(fù)數(shù)個(gè)NFS服務(wù)器上創(chuàng)建一文件;在所述服務(wù)器中將數(shù)據(jù)以所述數(shù)據(jù)的各個(gè)條的形式寫入至所述文件中,所述條共同形成一條帶;從所述服務(wù)中讀取所述數(shù)據(jù)的條;及從所述服務(wù)器中刪除所述條。
15.如權(quán)利要求14所述的方法,其包括將一NFS服務(wù)器的一虛擬文件系統(tǒng)的一磁盤元件識(shí)別為一元數(shù)據(jù)服務(wù)器并將未被識(shí)別為所述元數(shù)據(jù)服務(wù)器的所述NFS服務(wù)器的磁盤元件識(shí)別為輸入輸出輔助設(shè)備的步驟。
16.如權(quán)利要求15所述的方法,其包括在一元數(shù)據(jù)服務(wù)器處每一現(xiàn)用文件的每一輸入輸出輔助設(shè)備處的一高速緩存元件中存儲(chǔ)所述文件的適于一空轉(zhuǎn)周期的屬性的一最新已知版本的步驟。
17.如權(quán)利要求16所述的方法,其包括在所述高速緩存元件中存儲(chǔ)修改時(shí)間及更改時(shí)間值的范圍以供指配給寫入操作的步驟。
18.如權(quán)利要求17所述的方法,其包括由所述高速緩存元件向所述元數(shù)據(jù)服務(wù)器作出一狀態(tài)請(qǐng)求以獲得一文件的當(dāng)前屬性的步驟。
19.如權(quán)利要求18所述的方法,其中所述作出一狀態(tài)請(qǐng)求的步驟包括從所述元數(shù)據(jù)服務(wù)器獲得修改時(shí)間及更改時(shí)間范圍的步驟。
20.如權(quán)利要求19所述的方法,其包括在所述輸入輸出輔助設(shè)備處對(duì)文件讀取及文件寫入請(qǐng)求進(jìn)行排隊(duì)直至所述文件讀取及文件寫入請(qǐng)求被所述高速緩存元件接納并完成執(zhí)行為止的步驟。
21.如權(quán)利要求20所述的方法,其包括由所述高速緩存元件跟蹤正對(duì)所述文件執(zhí)行的所述文件讀取及文件寫入請(qǐng)求及正被讀取或?qū)懭氲乃龇秶牟襟E。
22.如權(quán)利要求21所述的方法,其包括當(dāng)必須執(zhí)行一讀取操作時(shí)請(qǐng)求所述高速緩存元件從無效模式移出至讀取模式的步驟。
23.如權(quán)利要求22所述的方法,其包括檢查一受一文件讀取請(qǐng)求影響的字節(jié)范圍以確保其不與任何先前被接納且當(dāng)前正在執(zhí)行的文件寫入請(qǐng)求的一字節(jié)范圍重疊的步驟。
24.如權(quán)利要求23所述的方法,其包括響應(yīng)于一文件寫入請(qǐng)求而請(qǐng)求所述高速緩存元件移入一寫入模式中的步驟。
25.如權(quán)利要求24所述的方法,其包括通過所述高速緩存元件檢查受所述文件寫入請(qǐng)求影響的所述字節(jié)范圍是否與任何被接納且仍在執(zhí)行的文件讀取或文件寫入請(qǐng)求相重疊的步驟。
26.如權(quán)利要求25所述的方法,其包括當(dāng)執(zhí)行一寫入請(qǐng)求時(shí)從存儲(chǔ)于所述高速緩存元件中的修改時(shí)間及更改時(shí)間的所述范圍中分配一修改時(shí)間及更改時(shí)間對(duì)的步驟。
27.如權(quán)利要求26所述的方法,其包括檢查一待決的文件讀取及文件寫入請(qǐng)求隊(duì)列中的首個(gè)以確定在一文件讀取或文件寫入請(qǐng)求完成后所述高速緩存元件可否接納一首個(gè)請(qǐng)求的步驟。
28.如權(quán)利要求27所述的方法,其包括如下步驟由所述高速緩存元件檢測(cè)到必須響應(yīng)于一文件寫入請(qǐng)求而更新一文件長(zhǎng)度,將所述高速緩存元件移入互斥模式中;及向所述元數(shù)據(jù)服務(wù)器作出一文件寫入狀態(tài)調(diào)用以更新所述文件的長(zhǎng)度屬性。
29.如權(quán)利要求14所述的方法,其包括在一元數(shù)據(jù)服務(wù)器處每一現(xiàn)用文件的每一輸入輸出輔助設(shè)備處的一高速緩存元件中存儲(chǔ)所述文件的適于一空轉(zhuǎn)周期的屬性的一最新已知版本的步驟。
30.如權(quán)利要求14所述的方法,其包括在一高速緩存元件中存儲(chǔ)修改時(shí)間及更改時(shí)間值的范圍以供指配給寫入操作的步驟。
31.如權(quán)利要求14所述的方法,其包括由一高速緩存元件向所述元數(shù)據(jù)服務(wù)器作出一狀態(tài)請(qǐng)求以獲得一文件的當(dāng)前屬性的步驟。
32.如權(quán)利要求31所述的方法,其中所述作出一狀態(tài)請(qǐng)求的步驟包括從所述元數(shù)據(jù)服務(wù)器獲得修改時(shí)間及更改時(shí)間范圍的步驟。
33.如權(quán)利要求14所述的方法,其包括當(dāng)必須執(zhí)行一讀取操作時(shí)請(qǐng)求一高速緩存元件從無效模式中移出至讀取模式的步驟。
34.如權(quán)利要求14所述的方法,其包括響應(yīng)于一文件寫入請(qǐng)求而請(qǐng)求一高速緩存元件移入一寫入模式中的步驟。
35.如權(quán)利要求14所述的方法,其包括如下步驟由一高速緩存元件檢測(cè)到必須響應(yīng)于一文件寫入請(qǐng)求而更新一文件長(zhǎng)度,將所述高速緩存元件移入互斥模式中;及向一元數(shù)據(jù)服務(wù)器作出一文件寫入狀態(tài)調(diào)用以更新所述文件的長(zhǎng)度屬性。
36.一種用于為一文件建立存儲(chǔ)的方法,其包括下列步驟在一網(wǎng)絡(luò)元件處接收一NFS創(chuàng)建請(qǐng)求;在一元數(shù)據(jù)服務(wù)器處從所述網(wǎng)絡(luò)元件接收一文件創(chuàng)建請(qǐng)求;在所述元數(shù)據(jù)服務(wù)器處為所述文件分配一內(nèi)節(jié)點(diǎn)號(hào);向輸入輸出輔助設(shè)備作出創(chuàng)建調(diào)用以將所述文件標(biāo)記為由所述輸入輸出輔助設(shè)備所分配;及在所述元數(shù)據(jù)服務(wù)器處進(jìn)行所述文件創(chuàng)建。
37.一種用于從存儲(chǔ)器中移除一文件的方法,其包括下列步驟在一元數(shù)據(jù)服務(wù)器處接收一刪除文件請(qǐng)求;在所述元數(shù)據(jù)服務(wù)器處由所述元數(shù)據(jù)服務(wù)器將所述文件的一文件名從一母目錄中移除;在所述元數(shù)據(jù)服務(wù)器處由所述元數(shù)據(jù)服務(wù)器將所述文件置于一文件刪除列表上;向所述輸入輸出輔助設(shè)備發(fā)送刪除調(diào)用;在所述元數(shù)據(jù)服務(wù)器處從所述輸入輸出輔助設(shè)備接收其已刪除所述文件的確認(rèn)調(diào)用;在所述元數(shù)據(jù)服務(wù)器處刪除所述文件;從所述文件刪除列表中移除所述文件;及在所述元數(shù)據(jù)服務(wù)器處由所述元數(shù)據(jù)服務(wù)器將一與所述文件相關(guān)聯(lián)的內(nèi)節(jié)點(diǎn)號(hào)置于一自由列表中。
38.一種用于讀取一文件中的數(shù)據(jù)的方法,其包括下列步驟在一網(wǎng)絡(luò)元件處接收一對(duì)所述文件中的數(shù)據(jù)的NFS讀取請(qǐng)求;由所述網(wǎng)絡(luò)元件確定哪一VFS存儲(chǔ)至少一個(gè)包含所述數(shù)據(jù)的條;從所述網(wǎng)絡(luò)元件向存儲(chǔ)所述數(shù)據(jù)的一個(gè)條的復(fù)數(shù)個(gè)服務(wù)器的至少一個(gè)磁盤元件發(fā)送一文件讀取請(qǐng)求;由每一磁盤元件獲得與所述文件相關(guān)的當(dāng)前屬性;從每一具有所述條的磁盤元件中讀取所述文件的所述條;及產(chǎn)生一對(duì)所述文件讀取請(qǐng)求的響應(yīng)。
39.一種用于將數(shù)據(jù)寫入一文件中的方法,其包括下列步驟在一網(wǎng)絡(luò)元件處接收一對(duì)一文件的NFS讀取請(qǐng)求;通過所述網(wǎng)絡(luò)元件來確定哪一個(gè)VFS與所述文件相關(guān);從所述網(wǎng)絡(luò)元件向具有所述VFS的一個(gè)條的復(fù)數(shù)個(gè)服務(wù)器的至少一個(gè)磁盤元件發(fā)送一文件寫入請(qǐng)求;獲取與所述文件相關(guān)的當(dāng)前屬性;及將所述數(shù)據(jù)的一預(yù)定數(shù)量的字節(jié)連續(xù)寫入每一VFS條中直至所述數(shù)據(jù)全部被寫入所述文件為止。
全文摘要
本發(fā)明揭示一種包括一NFS服務(wù)器集群的數(shù)據(jù)存儲(chǔ)裝置。每一服務(wù)器均具有用于輸入文件系統(tǒng)請(qǐng)求及服務(wù)器之間的集群通信的網(wǎng)絡(luò)端口。所述裝置包括復(fù)數(shù)個(gè)與所述服務(wù)器通信的存儲(chǔ)器陣列。所述服務(wù)器利用一種條帶化文件系統(tǒng)來存儲(chǔ)數(shù)據(jù)。一種用于存儲(chǔ)數(shù)據(jù)的方法。一種用于為一文件建立存儲(chǔ)的方法。一種用于從存儲(chǔ)器中移除一文件的方法。一種用于讀取一文件中的數(shù)據(jù)的方法。一種用于將數(shù)據(jù)寫入一文件中的方法。
文檔編號(hào)G06F15/16GK101019105SQ200480035292
公開日2007年8月15日 申請(qǐng)日期2004年11月15日 優(yōu)先權(quán)日2003年12月2日
發(fā)明者邁克爾·L·卡扎爾, 理查德·N·小桑齊 申請(qǐng)人:三角帆網(wǎng)絡(luò)公司