Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

2.9.3. Risoluzione problematiche relative alle prestazioni di GFS2 con il GFS2 Lock Dump

Se si verifica un deterioramento delle prestazioni del cluster a causa di un uso inefficiente del caching del GFS2, potrete notare un aumento dei tempi di attesa I/O. A tale scopo usate le informazioni presenti nel lock dump di GFS2 per determinare la causa del problema.
Questa sezione fornisce solo una breve descrizione del lock dump di GFS2. Per informazioni più dettagliate consultare Appendice C, Tracepoint GFS2 e debugfs glock File.
Le informazioni presenti nel lock dump del GFS2 sono disponibili nel file debugfs attraverso il seguente nome del percorso, assumendo che debugfs sia stato montato su /sys/kernel/debug/:
/sys/kernel/debug/gfs2/fsname/glocks
Il contenuto è una serie di linee. Ogni linea che inizia con G: rappresenta un glock, e linee seguenti, rappresentano le informazioni relative al glock che le precede sul file.
Il modo migliore per usare il file debugfs è quello di utilizzare il comando cat per avere una copia del contenuto completo del file (potrebbe richidere molto tempo se siete in possesso di una quantità di RAM molto grande ed un numero elevato di inode presenti in cache) se l'aplicazione presenta qualche problema, consultando le informazioni presenti in un secondo momento.

Nota

Potrebbe essere utile creare due copie del file debugfs una dopo qualche secondo o minuto dalla precedente. Confrontando le informazioni dell'holder nelle due tracce relative allo stesso numero di glock sarete in grado di verificare se il carico di lavoro prosegue senza alcun problema (lentamente) o se si è fermato (in questo caso siamo in presenza di un bug da riportare al supporto di Red Hat immediatamente).
Le linee nel file debugfs che iniziano con H: (holder 'detentori') rappresentano le richieste del blocco conferite o in attesa di essere assegnate. Il campo dei flag sulla linea f: mostra quale: Il flag 'W' si riferisce alla richiesta in attesa, 'H' invece si riferisce alla richiesta assegnata. I glock che possiedono un numero elevato di richieste d'attesa nella maggior parte dei casi sono quelli con maggiore contesa.
Tabella 2.1, «Flag di glock» mostra il significato dei diversi flag di glock mentre Tabella 2.2, «Flag holder di glock» mostra il significato dei diversi flag degli holder di glock nell'ordine presente nei dump di glock.

Tabella 2.1. Flag di glock

FlagNomeSignificato
bBloccoValido se impostato un flag locked, indica che l'operazione richiesta dal DLM potrebbe eseguire un blocco. Questo flag viene annullato per operazioni di declassamento e per lock "try". Lo scopo di questo flag è quello di permettere la raccolta di statistiche sul tempo di risposta DLM, indipendentemente dal tempo necessario per altri nodi di eseguire operazioni di demote dei lock.
dPending demoteUna richiesta di retrocessione (remota) rinviata
DDemote (retrocessione)Una richiesta di retrocessione (locale o remota)
fLog flushÈ necessario eseguire il commit del log prima di rilasciare questo glock
FFrozenLe repliche dei nodi remoti verranno ignorate - il recupero è in corso. Questo flag non si riferisce al freeze del file system, il quale utilizza un meccanismo diverso, ma viene usato solo per operazioni di ripristino.
iInvalidate in progressLa rimozione in questo glock della convilida delle pagine è in corso
IInitialImpostato quando il blocco DLM è associato con questo glock
lLockedIl glock è in procinto di cambiare stato
LLRUImpostato quando glock è sull'elenco LRU
oOggettoImpostato quando glock è associato con un oggetto (cioè un inode per il tipo 2 di glock, e un gruppo di risorse per il tipo 3 di glock)
pDemote in progressGlock è in procinto a rispondere ad una richiesta di retrocessione
qIn codaImpostato quando un holder è in coda per un glock ed è rimosso quando un glock è occupato, quando altri holder non sono disponibili. Usato come parte dell'algoritmo per il calcolo dell'intervallo minimo per un glock.
rReply pendingLa risposta ricevuta da un nodo remoto è in attesa di processazione
yDirtyÈ necessario azzerare i dati sul disco prima di rilasciare questo glock

Tabella 2.2. Flag holder di glock

FlagNomeSignificato
aAsyncNon attendere il risultato di glock (il risultato verrà richiesto più avanti)
AQualsiasiQualsiasi modalità di blocco compatibile è accettabile
cNo cacheQuando sbloccato, retrocedi immediatamente il blocco DLM
eNo expireIgnora le richieste di cancellazione del blocco successive
EexactDeve avere una modalità di blocco esatta
FFirstImposta quando l'holder è il primo ad essere conferito per questo blocco
HHolderIndica che il blocco richiesto è stato conferito
pPrioritàMetti l'holder in cima alla coda
tProvaUn blocco "try"
TTry 1CBUn blocco "try" che invia una callback
MWaitImposta mentre in attesa del completamento della richiesta
Dopo aver identificato il glock che causa il problema, la fase successiva è quella di trovare l'inode relativo. Il numero di glock (n: sulla riga G:) riporta questa informazione. Il suo formato è type/number e se type risulta essere 2, allora saremo in presenza di un glock inode ed il number è un numero inode. Per rintracciare l'inode eseguire find -inum number dove number è il numero inode modificato da un formato esadecimale nel file di glock in un formato decimale.

Nota

Se eseguite find su di un file system in presenza di una contesa del blocco, molto probabilmente non farete altro che peggiorare il problema esistente. È consigliato arrestare l'applicazione prima di eseguire find se siete alla ricerca di inode contesi.
Tabella 2.3, «Tipi di glock» mostra il significato dei diversi tipi di glock.

Tabella 2.3. Tipi di glock

Numero tipoTipo di bloccoUso
1TransBlocco transazione
2InodeDati e metadati di Inode
3RgrpMetadati del gruppo di risorse
4MetaIl superblocco
5IopenRilevamento ultimo nodo che ha utilizzato inode
6Flockflock(2) syscall
8QuotaOperazioni quota
9DiarioJournal mutex
Se il glock identificato era di un tipo diverso, molto probabilmente sarà di tipo 3: (gruppo risorse). Se visualizzate un numero elevato di processi in attesa per altri tipi di glock in presenza di carichi normali, riportatelo al supporto di Red Hat.
Se visualizzate un certo numero di richieste in coda in un blocco del gruppo delle risorse controllate se è presente un numero elevato di nodi rispetto al numero di gruppi delle risorse presenti nel file system. Oppure controllate se il file system è quasi pieno (causando un tempo più lungo per le ricerche di blocchi liberi). In entrambi i casi sarà possibile aggiungere più storage ed usare il comando gfs2_grow per estendere il file system.