2.9.3. Resolución de problemas de rendimiento de GFS2 con el volcado de cerrojo GFS2

Si su rendimiento de cluster está sufriendo debido a un uso ineficiente de guardado de memoria en cache de GFS2, verá que los tiempos de espera aumentan y se prolongan.
Esta sección ofrece una visión general del vaciado de bloques GFS2. Para obtener una descripción completa del vaciado de bloqueo GFS2, consulte el Apéndice C, Puntos de trazado GFS2 y archivo glocks debugfs.
La información del volcado de cerrojo GFS2 puede obtenerse del archivo debugfs, el cual se encuentra en el siguiente nombre de ruta, suponiendo que debugfs esta montado en /sys/kernel/debug/:
/sys/kernel/debug/gfs2/fsname/glocks
El contenido del archivo es una serie de líneas. Cada línea que inicia con G: representa un glock, y las siguientes líneas, con un solo espacio, representan un elemento de información que relaciona el glock inmediatamente delante de ellas en el archivo.
La mejor manera de usar el archivo debugfs es usar el comando cat para tomar una copia del contenido completo del archivo (podría tomarse bastante tiempo si tiene una gran cantidad de RAM y un montón de inodos en memoria) mientras la aplicación está teniendo problemas y luego mirar los datos resultantes en una fecha posterior.

Nota

Puede ser útil hacer dos copias del archivo debugfs, una, unos segundos o incluso un minuto o dos después de la otra. Al comparar la información del portador en los dos trazados que se relacionan con el mismo número de glock, se sabe si la carga de trabajo está haciendo algún progreso o si se ha trancado (lo cual es siempre un error y debe reportarse inmediatamente al soporte técnico de Red Hat).
Las líneas en el archivo debugfs que inician con H de 'holders' (portadores), representan solicitudes de cerrojo otorgadas o en espera de ser otorgadas. Los campos de indicadores en la línea de portadores f: muestra Which (cuál) : El indicador 'W' se refiere a la solicitud en espera, el indicador 'H' se refiere a la solicitud otorgada. Es probable que los glocks que tienen una gran cantidad de solicitudes en espera sean los que estén experimentando contención particular.
Tabla 2.1, “Indicadores Glock” shows the meanings of the different glock flags and Tabla 2.2, “Indicadores de portador de Glock” shows the meanings of the different glock holder flags in the order that they appear in the glock dumps.

Tabla 2.1. Indicadores Glock

IndicadorNombreSignificado
porBloqueoEs válido cuando el indicador se establece a bloqueado e indica si la operación que ha sido solicitada desde el DLM puede bloquear. Este indicador es retirado para degradación y para los cerrojos 'try'. El propósito de este indicador es permitir reunir estadísticas de tiempo de respuesta independiente del tiempo tomado por otros nodos para degradar cerrojos.
dPending demoteUna solicitud para degradar diferida o remota
DDemoteUna solicitud para degradar (local o remota)
fLog flushEl registro necesita ser enviado antes de liberar este Glock
FFrozenLas respuestas de los nodos remotos se ignoran- la recuperación está en curso. Este indicador no se relaciona con la congelación del sistema de archivos, el cual usa un mecanismo diferente, pero se utiliza únicamente en recuperación.
iInvalidate in progressEn el curso de invalidar páginas en este Glock
IInitialEstablecer cuándo un bloqueo de DLM se asocia con este Glock
lLockedEl Glock está en el proceso de cambio de estado
LLRUSe establece cuando el glock está en la lista LRU
oObjetoSe 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 )
pDemote in progressEl Glock está en el proceso de responder a una solicitud de degradación
sEn colaSe 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.
rReply pendingLa respuesta recibida del nodo remoto está pendiente de procesamiento
yDirtyEs necesario vaciar los datos al disco antes de lanzar este Glock

Tabla 2.2. Indicadores de portador de Glock

IndicadorNombreSignificado
aAsyncNo espera ningún resultado de Glock (emitirá un resultado más adelante)
AAnySe acepta cualquier modo de bloqueo compatible
cNo cacheCuando se desbloquea, degrada de inmediato el bloque DML
eNo expireIgnora las siguientes solicitudes de cancelación de bloqueo
EexactDebe tener un modo de bloqueo exacto
FFirstCuando el portador es el primero en concedérsele este cerrojo
HHolderIndica que se ha otorgado el cerrojo solicitado
pPriorityPone a Holder a la cabeza de la cola
tTryUn cerrojo de "ensayo"
TTry 1CBUn cerrojo de "ensayo" que envía una llamada
WWaitEstablecer mientras espera que la solicitud se complete
Al haber identificado el glock que está causando problemas, el siguiente paso es averiguar con qué inodo se relaciona. El número de glock (n: en la G: línea) lo indica. Es de la forma tipo/número y si el tipo es 2, entonces el glock es un glock de inodo y el número es un número de inodo. Para rastrear el inodo, puede entonces ejecutar find -inum número donde número es el número del inodo convertido desde el formato hex en el archivo glocks en decimales.

Nota

Si ejecuta find en un sistema de archivos cuando experimente una contención de cerrojo, muy probable que el problema empeore. Se recomienda parar la aplicación antes de ejecutar find cuando esté buscando inodos enfrentados.
La Tabla 2.3, “Tipos de glock”muestra los significados de los diferentes tipos de glock.

Tabla 2.3. Tipos de glock

NúmeroTipo de cerrojoUso
1TransCerrojo de transacción
2InodoMetadatos y datos de inodos
3RgrpMetadatos de grupo de recursos
4MetaEl superbloque
5IopenEl último nodo que se detectó
6Flockflock(2) syscall
8CuotaOperaciones de cuota
9DiarioDiario mutex
Si el glock que ha sido identificado era de un tipo diferente, entonces es muy probable que sea del tipo 3: (grupo de recursos). Si usted ve una cantidad significativa de procesos que están esperando a otros tipos de glock bajo cargas normales, entonces por favor repórtelo al soporte técnico de Red Hat.
Si ve una cantidad de solicitudes esperando en cola en un cerrojo de grupo de recursos, puede haber varias explicaciones. Una es que hay un gran número de nodos comparados al número de grupo de recursos en el sistema de archivos. Otra es que el sistema de archivos puede estar casi lleno (requiriendo en promedio, búsquedas más prolongadas para bloques libres). La situación en ambos casos puede mejorarse añadiendo más almacenamiento y usando el comando gfs2_grow para expandir el sistema de archivos.