C.4. Interfaz de Glock debugfs
La interfaz de glock
debugfs
permite la visualización del estado interno de los glocks y de los portadores y también incluye algunos detalles de resumen de los objetos que se bloquean en algunos casos. Cada línea del archivo puede comenzar por G: sin ninguna sangría (lo cual se refiere al glock) o por una letra diferente, con sangría con un solo espacio y se refiere a las estructuras asociadas con el glock inmediatamente por encima de este en el archivo (H: es un portador, I: un inodo, y R: un grupo de recursos) . Aquí vemos un ejemplo de cómo se podría ver el contenido:
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 18 MB aproximadamente) generado por el comando
cat /sys/kernel/debug/gfs2/unity:myfs/glocks >my.lock
durante una ejecución del punto de referencia del matasellos en un único nodo de sistema de archivos GFS2. Los glocks en la figura han sido seleccionados para mostrar algunas de las funciones más interesantes de los vaciados de glock.
Los estados de glock pueden ser EX (exclusivo), DF (diferido), SH (compartido) o UN (desbloqueado). Estos estados corresponden directamente con extractos de modos de cerrojo DLM para 'UN' el cual puede representar un estado de cerrojo DLM null (nulo) o ese GFS2 no mantiene el cerrojo DLM (según el indicador I como se explica arriba). El s: campo del glock indica el estado actual del cerrojo y el mismo campo en el portador indica el modo solicitado. Si el cerrojo se otorga, el portador tendrá el bit H bit establecido en sus indicadores (f: campo). De lo contrario, deberá tener el bit W de esperar.
El campo n: (número) indica el número asociado con cada elemento. Para glocks, es el número del tipo seguido por el número de glock, entonces en el ejemplo anterior, el primer glock es n:5/75320; es decir, un glock
iopen
se relaciona con el inodo 75320. En el caso del inodo y de los glocks iopen
, el número de glock siempre es idéntico al número de bloque del disco del inodo.
Nota
Los números glock (n: campo) en el archivo de glocks debugfs están en hexadecimales, aunque en la salida de puntos de trazado aparece en decimales. Esto se debe a razones históricas; los números glock siempre se escribían en hexadecimales, pero se seleccionaron los decimales para los puntos de trazado a fin de que los números pudieran ser comparados fácilmente con la otra salida de punto de trazado (desde
blktrace
por ejemplo) y con salida desde stat
(1).
El listado completo de todos los indicadores para el portador y el glock se configuran en la Tabla C.4, “Indicadores Glock” y en la Tabla C.5, “Indicadores de portadores de glock”. El contexto de bloques de valor de cerrojo no está disponible actualmente mediante la interfaz de glock
debugfs
.
La Tabla C.3, “Tipos Glock” muestra los significados de los diferentes tipos de Glock.
Número de tipo | Tipo de cerrojo | Uso |
---|---|---|
1 | trans | Cerrojo de transacción |
2 | inodo | Metadatos y datos de inodo |
3 | rgrp | Metadatos de grupo de recursos |
4 | meta | El súperbloque |
5 | iopen | El último nodo que se detectó |
6 | Flock | flock (2) syscall |
8 | quota | Operaciones de cuota |
9 | Diario | Diario mutex |
Uno de los indicadores de glock más importantes es el indicador l (Bloqueado). Este es el cerrojo de bits utilizado para arbitrar el acceso a un estado de glock cuando se realiza un cambio de estado. Se establece cuando la máquina de estados está a punto de enviar una petición de cerrojo a través del Gestor de cerrojo distribuido (DML) , y solo se despeja cuando la operación se ha realizado. Algunas veces, esto puede significar que se ha enviado más de una solicitud de cerrojo con varias invalidaciones que se presentan entre los tiempos.
La Tabla C.4, “Indicadores Glock” muestra los significados de los diferentes indicadores Glock.
Indicador | Nombre | Significado |
---|---|---|
d | Pending demote | Una solicitud para degradar diferida o remota |
D | Demote | Una solicitud para degradar (local o remota) |
f | Log flush | El registro necesita ser enviado antes de lanzar este Glock |
F | Frozen | Responde desde los nodos remotos ignorados - recuperación en curso. |
i | Invalidate in progress | En el proceso de invalidar páginas en este Glock |
I | Initial | Definir cuando el cerrojo DLM esté asociado con este Glock |
l | Locked | El Glock está en el proceso de cambiar estado |
L | LRU | Se establece cuando el glock está en la lista LRU |
o | Objeto | Se establece cuando el glock se asocia con un objeto (es decir, un inodo para tipo de glocks 2 y grupo de recursos para tipo de glocks3 ) |
p | Demote in progress | El Glock está en el proceso de responder a una solicitud de degradación |
s | En cola | Se establece cuando un portador es puesto en cola para un glock y se retira cuando el glock se mantiene pero no quedan portadores remanentes. Se utiliza como parte de el algoritmo que calcula el mínimo de tiempo de retención para un glock. |
r | Reply pending | Respuesta recibida del nodo remoto está a la espera del procesamiento |
y | Dirty | Los datos necesitan vaciarse al disco antes de lanzar este glock |
Cuando se recibe una llamada remota desde un nodo que desea obtener un cerrojo en un modo que entra en conflicto con el que se mantiene en un nodo local, luego uno u otro de los dos indicadores D (degradar) o d (pendiente para degradar) se establece. Con el fin de evitar las condiciones de hambre cuando hay contención en un cerrojo particular, a cada cerrojo se le asigna un tiempo de espera mínimo. El nodo que aún no tiene el cerrojo para el tiempo de espera mínimo puede retener ese cerrojo hasta que el intervalo de tiempo haya expirado.
Si el intervalo de tiempo ha expirado, entonces el indicador D (degradar) se enviará y el estado requerido será registrado. En ese caso, la próxima vez que no se otorguen cerrojos en la cola de portadores, el cerrojo será degradado. Si el tiempo de intervalo no ha expirado, entonces el indicador d (pendiente para degradar) se establecerá en su lugar. Esto también programa el la máquina de estados para limpiar d (pendiente para degradar) y establecer D (degradar) cuando el tiempo mínimo del portador mínimo ha expirado.
El indicador I (inicial) se establece cuando se ha asignado un cerrojo DLM al glock. Esto sucede cuando el glock se utiliza primero y cuando el indicador I permanece configurado hasta que el glock sea desbloqueado.