C.4. Просмотр статуса glock средствами debugfs

Debugfs предоставляет интерфейс для визуализации внутреннего состояния блокировок. Секция блокировки начинается с «G:». Следующие за ней строки начинаются с пробела и содержат подробную информацию (например, «H:» обозначает запрос, удерживающий glock, «I:» — inode, «R:» — группу ресурсов).
G:  s:SH n:5/75320 f:I t:SH d:EX/0 a:0 r:3
 H: s:SH f:EH e:0 p:4466 [postmark] gfs2_inode_lookup+0x14e/0x260 [gfs2]
G:  s:EX n:3/258028 f:yI t:EX d:EX/0 a:3 r:4
 H: s:EX f:tH e:0 p:4466 [postmark] gfs2_inplace_reserve_i+0x177/0x780 [gfs2]
 R: n:258028 f:05 b:22256/22256 i:16800
G:  s:EX n:2/219916 f:yfI t:EX d:EX/0 a:0 r:3
 I: n:75661/219916 t:8 f:0x10 d:0x00000000 s:7522/7522
G:  s:SH n:5/127205 f:I t:SH d:EX/0 a:0 r:3
 H: s:SH f:EH e:0 p:4466 [postmark] gfs2_inode_lookup+0x14e/0x260 [gfs2]
G:  s:EX n:2/50382 f:yfI t:EX d:EX/0 a:0 r:2
G:  s:SH n:5/302519 f:I t:SH d:EX/0 a:0 r:3
 H: s:SH f:EH e:0 p:4466 [postmark] gfs2_inode_lookup+0x14e/0x260 [gfs2]
G:  s:SH n:5/313874 f:I t:SH d:EX/0 a:0 r:3
 H: s:SH f:EH e:0 p:4466 [postmark] gfs2_inode_lookup+0x14e/0x260 [gfs2]
G:  s:SH n:5/271916 f:I t:SH d:EX/0 a:0 r:3
 H: s:SH f:EH e:0 p:4466 [postmark] gfs2_inode_lookup+0x14e/0x260 [gfs2]
G:  s:SH n:5/312732 f:I t:SH d:EX/0 a:0 r:3
 H: s:SH f:EH e:0 p:4466 [postmark] gfs2_inode_lookup+0x14e/0x260 [gfs2]
Это фрагмент файла, который будет создан при выполнении cat /sys/kernel/debug/gfs2/unity:myfs/glocks >my.lock во время теста postmark на узле GFS2. Здесь показаны блокировки, демонстрирующие наиболее интересные свойства glock.
Возможные состояния glock включают EX (exclusive), DF (deferred), SH (shared) и UN (unlocked), каждое из которых соответствует определенному режиму блокировки DLM. Исключение составляет glock в состоянии UN, так как он может быть вообще не связан с блокировкой DLM или связан в режиме NL (о чем будет свидетельствовать установленный флаг «I» в поле «f:»).
Обратите внимание на поле «n:тип/номер». Так, в первой строке в примере можно увидеть «n:5/75320», где 5 означает тип iopen, а 75320 — номер файлового дескриптора. Для типов 2 и 5 за наклонной чертой следует номер дескриптора на диске.

Примечание

Число в поле «n:» представлено в шестнадцатеричном формате, в то время как в выводе обработчиков событий трассировки эти же числа будут показаны в десятичном формате. Это сделано намеренно для того, чтобы их можно было сравнить с выводом других инструментов анализа производительности, таких как blktrace и stat(1).
Таблица C.4, «Флаги glock» и Таблица C.5, «Флаги удерживания glock» содержат описание флагов glock и запросов блокировки. Содержимое блоков состояния блокировки в настоящий момент не может быть проверено средствами debugfs.
Ниже приведено описание типов glock.

Таблица C.3. Типы glock

НомерТипОписание
1transБлокировка транзакции
2inodeИндексный дескриптор
3rgrpМетаданные группы ресурсов
4metaСуперблок
5iopenИдентифицирует открытый дескриптор
6flockСистемный вызов flock(2)
8quotaОперации с квотами
9journalМьютекс журнала
Ниже приведена таблица флагов glock. Отдельно стоит отметить флаг «l» (locked), который ограничивает доступ к glock во время изменения его состояния. Этот флаг устанавливается непосредственно перед тем, как будет запрошена блокировка DLM, и снимается после ее установки.
Таблица C.4, «Флаги glock» содержит список возможных значений в поле «f:» в строке «G:».

Таблица C.4. Флаги glock

ФлагИмяОписание
dPending demoteПолучен запрос снижения режима блокировки, но glock уже удерживается, и время минимального обслуживания не истекло.
DDemoteЕсть запрос снижения режима блокирования (локальный или удаленный).
fLog flushПрежде чем освободить glock, необходимо сохранить журнал.
FFrozenИдет восстановление — ответы удаленных узлов игнорируются.
iInvalidate in progressСброс страниц кэша под блокировкой.
IInitialВыбранному glock назначена блокировка DLM.
lLockedGlock в процессе изменения состояния.
LLRUGlock в списке LRU.
oObjectОзначает, что glock связан с объектом. Объекты могут быть разных типов. Так, тип 2 означает дескриптор, 3 — группу ресурсов.
pDemote in progressGlock в процессе обработки запроса снижения режима блокировки.
qQueuedУстанавливается при наличии ожидающих запросов и снимается, если запросов нет. Используется алгоритмом расчета минимального времени удерживания glock.
rReply pendingОтвет, полученный от удаленного узла, ожидает обработки.
yDirtyПрежде чем освободить glock, необходимо сохранить данные.
Чтобы уменьшить риск конкуренции из-за частого перехвата glock разными запросами, для каждого glock устанавливается минимальное время, на протяжении которого он может удерживаться одним запросом. При получении удаленного запроса, несовместимого с текущим режимом блокировки, будет установлен флаг D (demote) или d (demote pending) в зависимости от того, когда истекает минимальное время обслуживания.
Если интервал подошел к концу, будет установлен флаг D, и запрашиваемый режим блокировки будет записан. Как только в очереди не останется активных блокировок, статус glock будет понижен. Если же минимальное время обслуживания не истекло, будет установлен флаг ожидания d, который будет изменен на D, когда оно подойдет к концу.
Флаг «I» (Initial) будет установлен, как только с glock будет связана блокировка DLM, и сброшен только после снятия блокировки DLM и освобождения glock.