C.4. L'interfaccia debugfs di glock
L'interfaccia
debugfs
di glock permette di visualizzare lo stato interno dei glock e degli holder, include anche, in alcuni casi, un sommario degli oggetti bloccati. Ogni riga del file può iniziare con G: con doppio spazio (si riferisce a glock stesso) oppure con una lettera diversa, e con spazio singolo, e si riferisce alle strutture associate con glock immediatamente sopra nel file (H: rappresenta un holder, I: un inode e R: un gruppo di risorse). Di seguito viene riportato un esempio del contenuto di questo file:
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]
Il seguente esempio riporta alcuni estratti (da un file di circa 18MB) generati dal comando
cat /sys/kernel/debug/gfs2/unity:myfs/glocks >my.lock
durante l'esecuzione di un postmark benchmark su un file system GFS2 di un nodo. Nell figura sono stati selezionati i glock in modo da mostrare alcune delle funzioni più interessanti dei glock dump.
Gli stati relativi al glock possono essere EX (exclusive), DF (deferred), SH (shared) o UN (unlocked). I suddetti stati corrispondono direttamente con le modalità DLM lock ad eccezione di UN, il quale può rappresentare uno stato DLM null lock oppure indicare che GFS2 non presenta alcun DLM lock (a seconda del flag I come precedentemente affrontato). Il campo s: indica lo stato corrente di lock, lo stesso campo nell'holder indica la modalità richiesta. Se si conferisce un lock, l'holder presenterà la lettera H nei propri flag (f: field). In caso contrario presenterà la lettera W.
Il campo n: (numero) indica il numero associato con ogni oggetto. Per glock, rappresenta il numero del tipo seguito dal numero di glock come nell'esempio riportato, il primo glock è n:5/75320; cioè un glock
iopen
relativo all'inode 75320. In presenza di inode e glock iopen
, il numero di glock è sempre identico al numero del blocco a disco dell'inode.
Nota
I numeri di glock (campo n:) nel file glock di debugfs sono esadecimali, mentre gli output di tracepoint li rappresenta con valori decimali. Questo viene fatto per motivi cronologici; i numeri di glock sono sempre stati scritti in esadecimali, ma i valori decimali sono stati scelti per i tracepoint in modo da facilitare il processo di confronto con gli altri output (per esempio di
blktrace
) e con output di stat
(1).
L'elenco completo di tutti i flag, sia per l'holder che per glock, sono disponibili in Tabella C.4, «Flag di glock» e Tabella C.5, «Flag holder di glock». Il contenuto dei blocchi per il valore del blocco non è attualmente disponibile tramite l'interfaccia
debugfs
di glock.
Tabella C.3, «Tipi di glock» mostra il significato dei diversi tipi di glock.
Numero tipo | Tipo di lock | Uso |
---|---|---|
1 | trans | Lock di 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 | journal | Journal mutex |
Uno dei flag più importanti di glock è l (locked). Questo flag regola l'accesso allo stato di glock per eseguire la modifica dello stato stesso. Esso viene impostato quando la macchina degli stati è in procinto di inviare una richiesta remota di lock tramite DLM, viene annullato solo quando l'operazione è stata completamente eseguita. Talvolta ciò può implicare l'invio di più di una richiesta di lock con conseguenti processi di annullamento.
Tabella C.4, «Flag di glock» mostra il significato dei diversi flag.
Flag | Nome | Significato |
---|---|---|
d | Pending demote | Una richiesta di declassamento (remota) rinviata |
D | Demote (declassamento) | Una richiesta di declassamento (locale o remota) |
f | Log flush | È necessario eseguire il commit del log prima di rilasciare questo glock |
F | Frozen | Le risposte dai nodi remoti sono ignorate - il ripristino è in corso. |
i | Invalidate in progress | La rimozione in questo glock della convilida delle pagine è in corso |
I | Initial | Impostato quando il DLM lock è associato con questo glock |
l | Locked | Il glock è in procinto di cambiare stato |
L | LRU | Impostato quando glock è nell'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 declassamento |
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 |
Alla ricezione di una chiamata remota da un nodo che desidera ottenere un lock in una modalità in conflitto con quella presente sul nodo locale, verrà impostato uno dei seguenti flag, D (demote) o d (demote pending). Per evitare condizioni di "starvation" in presenza di una contesa per un lock particolare, ogni lock riceve un intervallo. In presenza di un nodo al quale non è stato conferito un lock per la durata prevista dell'intervallo, esso avrà diritto al lock fino a quando l'intervallo scade.
Se l'intervallo è scaduto, allora verrà impostato il flag D (demote) e registrato lo stato necessario. In tal caso in assenza di lock nella coda degli holder, il lock verrà declassato. Se l'intervallo non è ancora scaduto verrà impostato il flag d (demote pending). Questa operazione indica alla macchina degli stati di eliminare d (demote pending) e impostare D (demote) dopo la scadenza dell' intervallo.
Il flag I (initial) viene impostato quando è stato assegnato al glock un DLM lock. Ciò si verifica al primo utilizzo di glock ed il flag rimarrà impostato fino alla disponibilità di glock (DLM lock è sbloccato "unlocked").