VMFS簡介:數據組織,鎖和寫時拷貝

VMFS(Virtual Machine File System)是VMWare爲其VMWare ESX Server和VMWare Infrastructure產品開發的集羣文件系統。它主要用來存儲虛擬機的磁盤鏡像,設計的初衷是爲了讓多個主機合作維護存儲在共享磁盤上的文件系統,而不需要一個coordinator的角色。

VMFS會將共享的磁盤分成四個不同的資源池:inode,指針塊,數據塊和子塊。Inode和指針塊在VMFS中的作用和在傳統的UNIX文件系統中的作用類似,分別用來存儲文件的元數據以及指向包含實際文件數據的數據塊的指針。數據塊和子塊都用於存儲文件的數據,區別是塊的大小。在每個資源池中,資源都被組織成集羣(cluster),每個集羣的頭部維護了該集羣包含的資源的元數據,比如每個資源的引用數量,哪些資源已經被分配了。

前面提到,VMFS採用了兩種不同的資源類型來存儲文件數據:數據塊和子塊。在VMFS中文件大小滿足雙峯分佈,虛擬機磁盤鏡像文件通常有幾個GB那麼大,而配置文件和日誌文件通常只有幾個KB。因此,VMFS使用1MB的數據塊來存儲大文件,減少元數據開銷和外部碎片;而對於小文件,VMFS使用更小的子塊來存儲,減少內部碎片。

VMFS使用分佈式鎖管理來支持多個主機併發訪問文件和資源。大多數集羣文件系統使用IP網絡來進行同步(RPC?),而VMFS完全依靠磁盤的鎖來同步所有的文件訪問。爲了保護臨界區的讀-改-寫,VMFS使用基於SCSI-2的邏輯單元號預留技術(LUN reservations)保證訪問鎖數據結構的原子性(這段不是很懂)。爲了利用SAN的可靠性,在VMFS中訪問同步狀態(鎖的狀態)和訪問文件系統的狀態的方法是相同的,避免了基於IP的同步機制典型的“split brain[2]”問題,一旦網絡連接中斷,多個主機將不能知道文件系統的鎖定狀態而導致同時訪問文件系統的共享數據。

VMFS的鎖可以分爲文件鎖和集羣鎖。VMFS的文件鎖是粗粒度的,會同時鎖住文件的元數據(inode和指針塊)和數據(數據塊和子塊),也就是文件涉及的所有資源。另外VMFS中的文件鎖一般持續較長的時間,比如一個虛擬機的磁盤鏡像文件,只要虛擬機開機就會被一直鎖住。爲了保護資源的元數據,VMFS還使用了集羣鎖,分配和回收資源都必須將其涉及的所有集羣鎖住。這裏就涉及到一個鎖開銷和競爭鎖開銷的權衡。如果設置一個集羣包含很多的資源,主機就可以用較少的鎖來操作更多的資源,但同時也加劇了主機之間的競爭開銷。

VMFS還支持塊級的寫時拷貝。VMFS的每個數據塊和子塊都可以被多個指針塊引用,因此不同的文件之間可以共享相同的數據。每個指向共享資源的引用都被打上一個寫時拷貝的位標記,當需要修改這個資源時,必須生成這個資源的一個副本,對副本進行修改。值得注意的是,這個寫時拷貝的位標記是打在引用上,而不是打在共享資源上,否則的話,每次寫操作都必須獲取集羣鎖來檢查目標資源的寫時拷貝位標記。當要在兩個文件之間共享資源時,需要獲得兩個文件的鎖,因爲兩個文件的指針塊都需要修改,即使其中一個可能只需要修改寫時拷貝標記位。

參考文獻:

[1] Austin T. Clements et al. Decentralized Deduplication in SAN Cluster File Systems. In Proceedings of the USENIX Annual Technical Conference, 2009. USENIX.

[2] Split-brain. http://en.wikipedia.org/wiki/Split-brain_(computing)

[3] Logical Unit Number. http://en.wikipedia.org/wiki/Logical_Unit_Number



發佈了22 篇原創文章 · 獲贊 18 · 訪問量 38萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章