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
/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.
| Flag | Nome | Significato |
|---|---|---|
| b | Blocco | Valido 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. |
| d | Pending demote | Una richiesta di retrocessione (remota) rinviata |
| D | Demote (retrocessione) | Una richiesta di retrocessione (locale o remota) |
| f | Log flush | È necessario eseguire il commit del log prima di rilasciare questo glock |
| F | Frozen | Le 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. |
| i | Invalidate in progress | La rimozione in questo glock della convilida delle pagine è in corso |
| I | Initial | Impostato quando il blocco DLM è associato con questo glock |
| l | Locked | Il glock è in procinto di cambiare stato |
| L | LRU | Impostato quando glock è sull'elenco LRU |
| o | Oggetto | Impostato 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) |
| p | Demote in progress | Glock è in procinto a rispondere ad una richiesta di retrocessione |
| q | In coda | Impostato 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. |
| r | Reply pending | La risposta ricevuta da un nodo remoto è in attesa di processazione |
| y | Dirty | È necessario azzerare i dati sul disco prima di rilasciare questo glock |
| Flag | Nome | Significato |
|---|---|---|
| a | Async | Non attendere il risultato di glock (il risultato verrà richiesto più avanti) |
| A | Qualsiasi | Qualsiasi modalità di blocco compatibile è accettabile |
| c | No cache | Quando sbloccato, retrocedi immediatamente il blocco DLM |
| e | No expire | Ignora le richieste di cancellazione del blocco successive |
| E | exact | Deve avere una modalità di blocco esatta |
| F | First | Imposta quando l'holder è il primo ad essere conferito per questo blocco |
| H | Holder | Indica che il blocco richiesto è stato conferito |
| p | Priorità | Metti l'holder in cima alla coda |
| t | Prova | Un blocco "try" |
| T | Try 1CB | Un blocco "try" che invia una callback |
| M | Wait | Imposta 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.
| Numero tipo | Tipo di blocco | Uso |
|---|---|---|
| 1 | Trans | Blocco transazione |
| 2 | Inode | Dati e metadati di Inode |
| 3 | Rgrp | Metadati del gruppo di risorse |
| 4 | Meta | Il superblocco |
| 5 | Iopen | Rilevamento ultimo nodo che ha utilizzato inode |
| 6 | Flock | flock(2) syscall |
| 8 | Quota | Operazioni quota |
| 9 | Diario | Journal 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.