Red Hat Training

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

2.9.3. 以 GFS2 Lock Dump 進行 GFS2 效能上的疑難排解

若您的叢集效能因為未足夠使用 GFS2 快取而降低,您可能會遇上較長的 I/O 等待時間。您可使用 GFS2 的鎖定傾印資訊來判斷問題發生的原因。
此部分提供了 GFS2 鎖定傾印的總覽。欲取得更多有關於 GFS2 鎖定傾印上的完整詳述,請參閱〈附錄 C, GFS2 tracepoint 和 debugfs glock 檔案〉。
GFS2 鎖定傾印資訊可由 debugfs 檔案取得,此檔案可藉由下列路徑名稱找到,假設 debugfs 掛載於 /sys/kernel/debug/ 上:
/sys/kernel/debug/gfs2/fsname/glocks
該檔案的內容為一系列的行列。各行皆以 G: 為起始,代表一個 glock;之後以單空格作為縮排的幾行則代表檔案中剛提過的 glock 相關資訊項目。
debugfs 檔案的最佳使用方式就是當應用程式發生問題時,使用 cat 指令來取得一份檔案的完整內容(若您擁有大量記憶體和許多快取的 inode,這可能會花上一段時間),之後再查看其回報資料。

注意

建立兩份 debugfs 檔案可能會有幫助,其中一份時間晚上幾秒或幾分鐘。透過比較兩項與相同 glock 號碼相聯之 trace 中的 holder 資訊,您可發現工作負載是否有增加(即代表緩慢)或是它是否卡住(這是項錯誤,並且應即刻聯絡 Red Hat 支援團隊)。
debugfs 檔案中以 H: 起始的幾行(預留位置)代表已授予或等待授予的鎖定請求。預留位置行上的旗標欄位 f: 顯示的是:'W' 旗標代表等待請求,'H' 旗標代表已授予的請求。含有大量等待請求的 glocks 可能就是那些會發生特定競用情況的 glock。
表格 2.1, “Glock 旗標” 顯示了不同 glock 旗標的意義,並且 表格 2.2, “Glock holder 旗標” 根據 glock holder 旗標在 glock dump 現的順序,顯示了不同 glock holder 旗標的意義。

表格 2.1. Glock 旗標

旗標名稱意義
bBlocking(阻絕)設定「已鎖定」(locked)旗標時視為有效,表示來自 DLM 的需求之運作可能會被阻絕。降級操作與「嘗試」(try)鎖定時,這旗標會被清除。這旗標的用途是允許蒐集 DLM 回應時間的統計資料,與其它節點降級鎖定所花的時間無關。
dPending demote(尚未解決的降階)延後的(遠端)降階請求
DDemote(降階)降階請求(本機或遠端)
fLog flush(日誌清除)釋放此 glock 前,必須先提交日誌
FFrozen(凍結)來自於遠端節點的回應已被忽略 — 正在進行復原。這旗標與檔案系統凍結無關,而是使用了不同的機制,但僅用於復原。
iInvalidate in progress(正在進行無效化)正在無效化此 glock 下的分頁
IInitial(初始)當 DLM 鎖定與此 glock 相聯時,進行設置
lLocked(已鎖定)glock 正在改變狀態
LLRUglock 在 LRU 清單上時,進行設置
oObject(物件)glock 與物件相關連時,進行設置(亦即 inode 為類型 2 的 glock;資源群組為類型 3 的 glock)
pDemote in progress(正在降階)glock 正在回應一項降階請求
qQueued(已排程)holder 已經排程至 glock 進行設置,並在取得 glock、但沒有更多 holder 時清除。用於計算 glock 的最短 hold 時間的演算法則中。
rReply pending(正在處理回應)來自於遠端節點的回應正等待處理
yDirty(已變更)釋放此 glock 前,資料必須 flush 至磁碟

表格 2.2. Glock holder 旗標

旗標名稱意義
aAsync(非同步)不等待 glock 結果(之後會輪詢結果)
AAny(任何)接受任何相容的鎖定模式
cNo Cache(無快取)當釋放之後,即刻降階 DLM 鎖定
eNo expire(無期限)忽略之後的鎖定取消請求
Eexact(完全符合)鎖定模式必須完全符合
FFirst(第一)當 holder 為第一個被授予此 glock 時進行設置
HHolder顯示請求的鎖定已授予
pPriority(優先權)將 holder 加入佇列的開頭
tTry(嘗試)「try」鎖定
TTry 1CB一個傳送 callback 的「try」鎖定
WWait(等待)當等待請求完成時進行設置
當辨識了造成問題的 glock 之後,下個步驟就是找出它與哪個 inode 相聯。請參閱 glock 的號碼(G: 行上的 n:)。格式為「類型/號碼」,並且若「類型」為 2,那麼 glock 便是個 inode glock,並且「號碼」便為 inode 號碼。若要追蹤 inode,您可執行 find -inum 號碼,「號碼」代表 inode 號碼,由 glock 檔案中的十六進位格式轉換為小數點數字。

注意

若您在一個遇上鎖定競用的檔案系統上執行 find,您可能會使情況變得更糟。建議您當尋找競用中的 inode,執行 find 之前,停下應用程式。
表格 2.3, “Glock 類型” 顯示了不同 glock 類型的意義。

表格 2.3. Glock 類型

輸入號碼鎖定類型使用
1Trans交易鎖定
2InodeInode metadata 和資料
3Rgrp資源群組 metadata
4Metasuperblock
5IopenInode 最後偵測
6Flockflock(2) syscall
8Quota配額作業
9Journal日誌互斥
若辨識到的 glock 為不同的類型,那麼它很可能是類型 3(資源群組)。若您在正常負載的情況下,看見了大量程序正在等待其它類型的 glock ,請聯絡 Red Hat 支援團隊。
若您看見了一些等待中的請求佇列於資源群組鎖定上,這可能基於幾種不同原因。其中一個原因就是,在檔案系統中,節點數量與資源群組數量相較之下過大。另一個原因就是檔案系統可能快要滿出(平均的可用區塊搜尋時間會較長)。這兩種情況皆能透過新增更多儲存裝置,並使用 gfs2_grow 指令擴展檔案系統,以得到改善。