2.9.3. Статистика блокировок

Неэффективное кэширование в GFS2 может привести к задержкам при обработке ввода-вывода и снизить производительность кластера в целом. Для определения причины такого поведения можно проверить статистику блокировок.
Приложение C, Мониторинг событий и файл glocks подробно обсуждает тему анализа статистики блокировок.
Статистику можно собрать при помощи debugfs. Если debugfs подключена в /sys/kernel/debug/, путь будет выглядеть так:
/sys/kernel/debug/gfs2/ФС/glocks
Это обычный текстовый файл. Секции блокировок начинаются с «G:». Внутри секции строки начинаются с пробела и содержат подробную информацию о блокировке.
Чтобы сохранить сведения о блокировках работающей программы, используйте cat для вывода содержимого этого файла. В зависимости от числа кэшируемых дескрипторов и объема ОЗУ продолжительность этой операции может быть разной.

Примечание

Можно создать две копии файла glocks — одну сразу, вторую через пару минут — и сравнить состояние блокировок. Если вы обнаружили блокировку, состояние которой не изменилось, сообщите об этом в службу поддержки Red Hat, так как это служит признаком ошибки.
Строки, начинающиеся с «H:» (holders), обозначают ожидающие или уже активные запросы блокировки. Значение «W» в поле «f:» (flags) означает ожидающий запрос, а «H» — активную блокировку. Обратите внимание на число ожидающих запросов: слишком большое число означает, что запросы обрабатываются слишком медленно.

Таблица 2.1. Флаги glock

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

Таблица 2.2. Флаги удерживания glock

ФлагЗначениеОписание
aAsyncНе ждать результата glock (будет запрошен позднее).
AAnyПринимает любой совместимый режим блокировки.
cNo cacheЕсли не заблокировано, сразу снизить режим блокировки DLM.
eNo expireИгнорирует последующие запросы снятия блокировки.
EexactТребуется конкретный режим блокировки.
FFirstПервый запрос, захвативший блокировку.
HHolderБлокировка установлена.
pPriorityСтавит запрос блокировки в начало очереди.
tTryПробная блокировка.
TTry 1CBПробная блокировка с ответом.
WWaitОжидание обработки запроса.
Определив, какая именно блокировка является причиной конфликта, в строке «G:» найдите «n:тип/номер». Если тип равен 2, за ним будет следовать номер дескриптора в шестнадцатеричном формате. Чтобы определить файл, которому принадлежит дескриптор, преобразуйте номер в десятичный формат и выполните: find -inum десятичное_число.

Примечание

Вызов find в файловой системе с высокой степенью конкуренции за блокировки может усугубить ситуацию, поэтому прежде чем начать поиск спорных дескрипторов, рекомендуется остановить приложение.
Ниже приведено описание типов glock.

Таблица 2.3. Типы glock

НомерТипОписание
1TransБлокировка транзакции
2InodeИндексный дескриптор
3RgrpМетаданные группы ресурсов
4MetaСуперблок
5IopenИдентифицирует открытый дескриптор
6FlockВызов flock(2)
8QuotaОперации с квотой
9JournalМьютекс журнала
Другой распространенный тип glock, за который могут конкурировать процессы, — это тип 3 (группа ресурсов). В остальных случаях, если вы заметили слишком частые запросы других типов glock при стандартной нагрузке, следует обратиться в службу поддержки Red Hat.
Большое число запросов, ожидающих третий тип блокирования, может быть вызвано тем, что число узлов в кластере значительно превышает число групп ресурсов (что приводит к частому обращению разных узлов к одной секции диска) или обычным переполнением файловой системы. В обоих случаях проблема решается увеличением пространства и наращиванием файловой системы (с помощью gfs2_grow).