C.3. Glocks
El concepto más importante para entender el GFS2 y el que se establece al lado de otros sistemas de archivos, es el concepto de glocks. En términos de código de fuente, un glock es una estructura de datos que combina el DLM y la memoria cache en una sola máquina. Cada máquina tiene una relación 1:1 con un solo cerrojo DLM, y ofrece memoria cache para ese estado de cerrojo para que las operaciones repetitivas llevadas a cabo desde un solo nodo de un sistema de archivos no tenga que llamar varias veces al DLM, y por lo tanto, ayudan a evitar tráfico innecesario. Hay dos amplias categorías de glocks, los que guardan metadatos y los que no. Los glocks de inodo y los glocks de grupos de recursos ambos guardan en cache metadatos, otros tipos de glocks no guardan metadatos en cache. El glock de inodo también tiene que ver con el guardado en cache de datos, aparte de metadatos, y su lógica es la más compleja de todos los glocks.
Modo Glock | Modo de cerrojo DLM | Notas |
---|---|---|
UN | IV/NL | Desbloqueado (No hay cerrojo DLM asociado con Glock o ningún cerrojo NL que dependa del indicador l) |
SH | PR | Cerrojo compartido (protegido lectura) |
EX | EX | Cerrojo exclusivo |
DF | CW | Diferido (escritura simultánea) utilizado para E/S directa y congelación de sistema de archivos |
Los Glocks permanecen en memoria hasta que se desbloqueen (a solicitud de algún nodo o a solicitud de la Máquina virtual) y si no hay otros usuarios locales. En ese momento se retiran de la tabla hash de glocks y se liberan. Cuando se crea un glock, el cerrojo DLM no se asocia con el glock de inmediato. El cerrojo DLM se asocia con el glock tras la primera solicitud al DLM, y si esta solicitud tiene éxito, entonces el indicador 'I' (initial) se establecerá en el glock. La Tabla C.4, “Indicadores Glock” muestra el significado de los diferentes indicadores. Una vez que el DLM haya sido asociado con el glock, el cerrojo DLM permanecerá por lo menos en el modo de cerrojo NL (Null) hasta que el glock deba ser liberado. La democión del cerrojo DLM del modo NL a desbloqueado es siempre la última operación en la vida de un glock.
Nota
Este aspecto particular de la conducta de cerrojo del DLM cambió desde Red Hat Enterprise Linux 5, el cual desbloquea algunas veces los cerrojos de DLM que se vinculan totalmente a los glocks y así, Red Hat Enterprise Linux 5 tiene un mecanismo diferente para garantizar que los bloques de valor de cerrojo (LVB) se preserven donde sea requerido. El nuevo esquema que utiliza Red Hat Enterprise Linux 6 se hizo posible debido a la fusión del módulo de cerrojo
lock_dlm
(no confundir con el DLM) dentro de GFS2.
Cada glock puede tener un número de "portadores" asociados, cada uno representa una solicitud de cerrojo de las capas más altas. Las llamadas del sistema relacionadas con GFS2 ponen y quitan de la cola a los portadores del glock para proteger la sección crítica de código.
La máquina de estados de glock se basa en 'workqueue'. Por razones de rendimiento, los 'tasklets' son preferibles, sin embargo, en la implementación actual, necesitamos enviar E/S desde ese contexto que prohíbe su uso.
Nota
Los 'Workqueues' tienen sus propios puntos de trazado que pueden utilizarse junto con los puntos de trazado de GFS2 si se desea.
La Tabla C.2, “Modos Glock y tipos de datos” muestra el estado en que pueden guardarse en cache cada uno de los modos de glock y si ese estado guardado en cache puede estar sucio. Esto aplica tanto a los cerrojos de grupo de recursos como al inodo, aunque no hay componente de datos para cerrojos de grupo de recursos, solo metadatos.
Modo Glock | Datos de cache | Metadatos de cache | Datos sucios | Metadatos sucios |
---|---|---|---|---|
UN | No | No | No | No |
SH | Yes | Yes | No | No |
DF | No | Yes | No | No |
EX | Yes | Yes | Yes | Yes |