Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
C.3. Glocks
GFS2 принципиально отличается от других файловых систем тем, что в ней реализован механизм блокировки glocks. На уровне кода glock представляет собой структуру данных, объединяющую блокировку DLM с функциями кэширования в конечный автомат с одним состоянием. Каждый glock связан с одной блокировкой DLM, состояние которой хранится в кэше, чтобы в случае повторного обращения с того же узла не требовалось заново вызывать DLM. Блокировки glock подразделяются на две основных категории в зависимости от того, кэшируют ли они метаданные или нет. Так, блокировки индексных дескрипторов и групп ресурсов кэшируют метаданные. Более того, при блокировке дескрипторов кэшируются и обычные данные, что обуславливает довольно сложную логику этой блокировки.
Таблица C.1. Режимы блокировки glock и DLM
Режим glock | Режим DLM | Описание |
---|---|---|
UN | IV/NL | Не заблокировано (блокировка DLM не назначена или назначена в режиме NL, о чем свидетельствует установленный флаг «I»). |
SH | PR | Совместный доступ (защищенное чтение). |
EX | EX | Монопольная блокировка. |
DF | CW | Параллельная запись. Используется для прямого ввода-вывода. |
Glock остается в памяти до тех пор, пока он не будет освобожден (по запросу другого узла или виртуальной машины). После освобождения он будет удален из хэш-таблицы glock. В свою очередь, при создании glock изначально он не связан с блокировкой DLM, но как только будет сделан первый вызов к DLM, она будет назначена, о чем свидетельствует установленный флаг «I» (см. Таблица C.4, «Флаги glock»). Пока glock удерживается, блокировка DLM тоже будет удерживаться как минимум в состоянии NL (Null). Понижение статуса NL снимает блокировку DLM и выполняется только при освобождении glock.
Примечание
В Red Hat Enterprise Linux 5 снятие блокировки DLM, связанной с активным glock, не запрещалось. В Red Hat Enterprise Linux 6 это поведение изменилось вследствие интеграции модуля
lock_dlm
в GFS2, поэтому блокировка DLM освобождается одновременно с glock.
Один glock может обрабатывать несколько запросов с вышестоящих уровней файловой системы. В целях защиты критических секций кода, добавление запросов в очередь осуществляется через системные вызовы GFS2.
В основе реализации конечного автомата glock лежит рабочая очередь — workqueue. В интересах производительности лучше всего подошли бы микропотоки tasklet, однако в текущей реализации ввод-вывод обрабатывается в контексте, не допускающем их использование.
Примечание
Механизм workqueue использует свои события трассировки, которые можно комбинировать с обработчиками GFS2.
Таблица C.2, «Кэширование glock» показывает, в каких режимах glock разрешается кэширование и допускается использование несогласованного кэша. Это касается блокировок inode и групп ресурсов (хотя при блокировке групп ресурсов кэшируются только метаданные).
Таблица C.2. Кэширование glock
Режим glock | Данные | Метаданные | Несогласованные данные | Несогласованные метаданные |
---|---|---|---|---|
UN | нет | нет | нет | нет |
SH | да | да | нет | нет |
DF | нет | да | нет | нет |
EX | да | да | да | да |