Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

2.9. GFS2 節點鎖定

若要藉由 GFS2 檔案系統取得最佳效能,您必須理解其作業上的基本理論。一個單獨節點檔案系統會與 cache 並排實作,這是為了在使用時常請求的資料時,排除磁碟存取所造成的延遲。在 Linux 中,分頁快取(先前為緩衝快取)提供了這項快取功能。
當使用 GFS2 時,各個節點皆擁有自己的分頁快取,並可能包含了一部分的磁碟資料。GFS2 使用了一種稱為 glocks(發音為 gee-locks)的機制,以維護節點之間的快取整合性。glock 子系統提供了透過使用 distributed lock manager(DLM)實作的快取管理功能,作為基礎的通訊層。
glocks 基於各 inode 為快取提供了保護,因此各個 inode 皆有一個 lock,用於快取層的控制。若該 glock 授予於共享模式(DLM 鎖定模式:PR)中,那麼該 glock 下的資料將能同時快取入一個或更多個節點中,如此一來,所有節點皆能擁有資料的本機存取權限。
若 glock 是以 exclusive 模式授予(DLM 鎖定模式:EX)的話,那麼便只有單獨節點能夠快取該 glock 下的資料。此模式使用於所有會修改資料的作業上(例如 write 系統呼叫)。
若有另一節點請求無法即刻授予的一個 glock,DLM 便會傳送一則訊息給目前持有阻擋新請求的 glock 的節點,以要求它們釋放這些鎖定。釋放 glock 的程序可能會相當地長(大部分檔案系統作業的標準)。釋放共享的 glock 僅需使 cache 無效化,這項程序的所需時間不長,並與快取的資料數量成正比例。
若要釋放專用 glock,您需要進行一項 log flush,並將任何受到變更的資料寫回磁碟中,接著便如釋放共享 glock 一般地進行無效化。
單節點檔案系統與 GFS2 之間的差別就是,單節點檔案系統含有單獨快取區,而 GFS2 在各個節點上皆含有各別的快取區。在這兩種情況下,存取已快取資料的延遲會是相似的,不過若有一節點先前已快取了某項資料,GFS2 存取此未快取資料的延遲會較長。

注意

基於 GFS2 的快取實作方式,下列情況將能提供最佳的效能:
  • 在所有節點上使用唯讀的 inode。
  • 只由單節點寫入或修改 inode。
請注意,在建立或刪除檔案時,在目錄中插入和移除項目將會被視為寫入目錄 inode。
您可偶而忽略此規則。不過太常忽略此規則會造成嚴重的效能流失。
若您將一個檔案 mmap() 於 GFS2 上為讀/寫映射,不過卻只讀取它,這只會被視為是讀取。不過在 GFS 上,這會被視為是寫入,因此在 GFS2 上,mmap() I/O 的延展性會較高。
若您不設置 noatime mount 參數,那麼讀取也會成為寫入以更新檔案時間戳。建議所有 GFS2 使用者應以 noatime 進行掛載,除非有特別需要使用 atime 的需求。

2.9.1. Posix 的鎖定問題

使用 Posix 鎖定功能時,請考量以下幾點:
  • 使用 Flock 的處理速度會快過使用 Posix 鎖定。
  • 在 GFS2 中使用 Posix 鎖定功能的程式,應避免使用 GETLK 函數,因為在叢集環境中,程序 ID 可能會與節點上的程序 ID 不同。