8.4. La interfaz glock debugfs
La interfaz de glock debugfs
permite visualizar el estado interno de los glock y los soportes y también incluye algunos detalles resumidos de los objetos que se bloquean en algunos casos. Cada línea del archivo o bien comienza con G: sin sangría (que se refiere al propio glock) o bien comienza con una letra diferente, sangrada con un solo espacio, y se refiere a las estructuras asociadas al glock inmediatamente superior en el archivo (H: es un holder, I: un inodo, y R: un grupo de recursos) . He aquí un ejemplo de cómo podría ser el contenido de este archivo:
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]
El ejemplo anterior es una serie de extractos (de un archivo de aproximadamente 18 MB) generados por el comando cat /sys/kernel/debug/gfs2/unity:myfs/glocks >my.lock
durante una ejecución del benchmark postmark en un sistema de archivos GFS2 de un solo nodo. Los glocks de la figura se han seleccionado para mostrar algunas de las características más interesantes de los volcados de glock.
Los estados de glock son EX (exclusivo), DF (diferido), SH (compartido) o UN (desbloqueado). Estos estados se corresponden directamente con los modos de bloqueo DLM, excepto UN, que puede representar el estado de bloqueo DLM nulo, o que GFS2 no mantiene un bloqueo DLM (dependiendo de la bandera I, como se ha explicado anteriormente). El campo s: del glock indica el estado actual del bloqueo y el mismo campo en el holder indica el modo solicitado. Si el bloqueo se concede, el soporte tendrá el bit H activado en sus banderas (campo f:). En caso contrario, tendrá activado el bit de espera W.
El campo n: (número) indica el número asociado a cada elemento. En el caso de los glocks, es el número de tipo seguido del número de glock, de modo que en el ejemplo anterior, el primer glock es n:5/75320; lo que indica un glock iopen
que se relaciona con el inodo 75320. En el caso de los glocks de inodo y iopen
, el número de glock es siempre idéntico al número de bloque de disco del inodo.
Los números de glock (campo n:) en el archivo glocks de debugfs están en hexadecimal, mientras que la salida de tracepoints los lista en decimal. Esto es por razones históricas; los números de glock siempre se escribían en hexadecimal, pero se eligió el decimal para los tracepoints para que los números pudieran ser fácilmente comparados con la salida de otros tracepoints (de blktrace
por ejemplo) y con la salida de stat
(1).
El listado completo de todas las banderas, tanto para el titular como para el glock, se encuentra en Tabla 8.4, “Banderas Glock” y Tabla 8.5, “Banderas de soporte de Glock”. El contenido de los bloques de valores de los candados no está disponible actualmente a través de la interfaz de glock debugfs
.
Tabla 8.3, “Tipos de Glock” muestra los significados de los diferentes tipos de glock.
Tipo de número | Tipo de cerradura | Utilice |
---|---|---|
1 | trans | Bloqueo de la transacción |
2 | inode | Metadatos y datos del inodo |
3 | rgrp | Metadatos del grupo de recursos |
4 | meta | El superbloque |
5 | iopen | Detección del último inodo más cercano |
6 | rebaño |
|
8 | cuota | Operaciones de contingencia |
9 | revista | Diario mutex |
Una de las banderas más importantes de glock es la bandera l (locked). Este es el bit de bloqueo que se utiliza para arbitrar el acceso al estado de glock cuando se va a realizar un cambio de estado. Se establece cuando la máquina de estado está a punto de enviar una solicitud de bloqueo remoto a través del DLM, y sólo se borra cuando la operación completa se ha realizado. A veces esto puede significar que se haya enviado más de una solicitud de bloqueo, con varias invalidaciones que se producen entre las veces.
Tabla 8.4, “Banderas Glock” muestra los significados de las diferentes banderas de las glock.
Bandera | Nombre | Significado |
---|---|---|
d | Pendiente de degradación | Una solicitud de baja aplazada (remota) |
D | Desplazar a | Una solicitud de baja (local o remota) |
f | Descarga de troncos | El registro necesita ser comprometido antes de liberar esta glock |
F | Congelado | Respuestas de los nodos remotos ignoradas - la recuperación está en curso. |
i | Invalidación en curso | En el proceso de invalidación de páginas bajo este glock |
I | Inicialmente | Se establece cuando el bloqueo DLM está asociado a esta glock |
l | Bloqueado | La glock está en proceso de cambio de estado |
L | LRU | Se establece cuando el glock está en la lista LRU` |
o | Objeto | Se establece cuando el glock está asociado a un objeto (es decir, un inodo para los glocks de tipo 2, y un grupo de recursos para los glocks de tipo 3) |
p | Descenso de categoría en curso | El glock está en proceso de responder a una solicitud de degradación |
q | En cola | Se establece cuando un portador está en la cola de una glock, y se borra cuando la glock está retenida, pero no hay portadores restantes. Se utiliza como parte del algoritmo que calcula el tiempo mínimo de retención de una cerradura. |
r | Respuesta pendiente | La respuesta recibida del nodo remoto está a la espera de ser procesada |
y | Dirty | Los datos necesitan ser lavados en el disco antes de liberar este glock |
Cuando se recibe una devolución de llamada remota de un nodo que quiere obtener un bloqueo en un modo que entra en conflicto con el que se mantiene en el nodo local, entonces se establece uno u otro de los dos indicadores D (demote) o d (demote pending). Para evitar que se produzcan condiciones de inanición cuando hay contención en un determinado bloqueo, a cada bloqueo se le asigna un tiempo de retención mínimo. Un nodo que aún no ha tenido el bloqueo durante el tiempo mínimo de retención se le permite retener ese bloqueo hasta que el intervalo de tiempo haya expirado.
Si el intervalo de tiempo ha expirado, se activará la bandera D (demote) y se registrará el estado requerido. En ese caso, la próxima vez que no haya bloqueos concedidos en la cola de titulares, el bloqueo será degradado. Si el intervalo de tiempo no ha expirado, entonces se establece la bandera d (demote pending) en su lugar. Esto también programa la máquina de estado para borrar d (demote pending) y establecer D (demote) cuando el tiempo mínimo de retención haya expirado.
La bandera I (inicial) se establece cuando a la glock se le ha asignado un bloqueo DLM. Esto sucede cuando la glock se utiliza por primera vez y la bandera I permanecerá entonces establecida hasta que la glock sea finalmente liberada (que el bloqueo DLM se desbloquee).