C.4. A interface de debugfs do glock
A inteface do glock
debugfs
permite a visualização do estado interno dos Glock e os "holders" e também inclui alguns detalhes em síntese dos objetos que estão sendo travados em alguns casos. Cada linha do arquivo ou começa G: sem recuo (que se refere ao próprio glock) ou começa com uma letra diferente, recuado com um único espaço, e refere-se às estruturas associadas ao glock imediatamente acima dele no arquivo (H: é um holder, I: um inode, e R: um grupo de recursos). Aqui está um exemplo de como o conteúdo deste arquivo pode parecer:
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]
O exemplo acima é uma série de trechos (a partir de um arquivo de aproximadamente 18MB) gerado pelo
cat/sys/kernel/debug/gfs2/unity:myfs/glocks >my.lock
durante uma execução do postmark benchmark em um sistema de arquivos GFS2 de nó único. Os glocks na figura foram selecionados, a fim de mostrar algumas das características mais interessantes dos despejos do glock.
A estados de glock são ou EX (exclusive), DF (diferido), SH (compartilhado) ou UN (desbloqueado). Esses estados correspondem diretamente aos modos de bloqueio DLM, exceto para UN, que pode representar o estado de bloqueio DLM nulo, ou que GFS2 não mantém um bloqueio DLM (dependendo da bandeira I, como explicado acima). O campo s: do glock indica o estado actual do bloqueio e o mesmo campo no holder indica o modo requerido. Se o bloqueio for concedido, o holderr terá o bit H definido em suas bandeiras (f: campo). Caso contrário, ele terá o conjunto de bits de espera W.
O campo n: (número) indica o número associado a cada item. Para glocks, este é onúmero do tipo seguido pelo número glock, assim, no exemplo acima, o primeira glock é n: 5/75320, isto é, um glock
Iopen
, que se relaciona com Inode 75320. No caso do inode e glocks Iopen
, o número Glock é sempre idêntico ao número do bloco de disco do inode.
Nota
Os números glock (n: campo) no arquivo de glocks debugfs, estão em hexadecimal, enquanto que o resultado do tracepoints lista-os em decimal. Isto acontece por razões históricas, números glock foram sempre escritos em hexadecimal, mas decimal foi escolhido para os pontos de rastreamento, para que os números pudessem ser facilmente comparados com o outro resultado de tracepoint (a partir do
blktrace
por exemplo) e com resultado de stat
(1).
Uma listagem completa de todas as bandeiras para ambos holder e glock são definidas em Tabela C.4, “Sinalizadores Glock” e Tabela C.5, “Sinalizadores do proprietário glock”. O conteúdo de blocos de valor de bloqueio não está disponível no momento via interface
debugfs
do glock.
A Tabela C.3, “Tipos de Glock” mostra os significados dos diferentes tipos de glock.
Digite o número | Tipo de bloqueio | Use |
---|---|---|
1 | trans | Bloqueio de transação |
2 | inode | Dados e metadados inode |
3 | rgrp | Metadados de grupos de recursos |
4 | meta | O superblock |
5 | iopen | Detecção mais próxima do último inode |
6 | flock | flock (2) syscall |
8 | quota | Operações de quota |
9 | Diário | Diário mutex |
Uma das bandeiras mais importantes glock é a bandeira l (bloqueado). Isto é o bit de bloqueio, que é utilizado para arbitrar o acesso ao estado Glock quando uma mudança de estado está a ser executada. Ele é definido quando a máquina de estado está prestes a enviar um pedido de bloqueio remoto via a DLM, e só apagada quando a operação toda tenha sido realizada. Às vezes, isso pode significar que mais do que um pedido de bloqueio terá sido enviado, com várias invalidações ocorrendo de tempo em tempo.
Tabela C.4, “Sinalizadores Glock” exibe o significado das bandeiras de glock diferentes.
Sinalizador | Nome | Significado |
---|---|---|
d | Rebaixamento pendente | Um pedido (remoto) de rebaixamento deferido |
D | Rebaixamento | Um pedido de rebaixamento (local ou remoto) |
f | Descarga de Log | O log precisa ser enviado antes de liberar esse glock |
F | Congelado | Respostas de nós remotos ignorados - recuperação em progresso. |
i | Invalidação em progresso | No processo de estar invalidando páginas sob este glock. |
I | Inicial | Ajuste quando o bloqueio DLM é associado com este glock |
l | Bloqueado | O glock está no processo de mudança de estado |
L | LRU | Definido quando o glock está na lista do LRU |
o | Object | Definido quando o glock é associado com um objeto (ou seja, um inode para glocks tipo 2, e um grupo de recurso para glocks tipo 3) |
p | Rebaixamento em progresso | O glock está no processo de responder a um pedido de rebaixamento |
q | Em fila | Definido quando um proprietário é enfileirado em um glock e limpo quando um glock é mantido, mas não houver nenhum outro proprietário. Usado como parte do algorítimo que calcula um tempo mínimo de espera para um glock. |
r | Resposta pendente | Resposta recebida do nó remoto está aguardando processamento |
y | Sujo | Os dados precisam descarregar para o disco antes de liberar este glock |
Quando uma chamada remota é recebida de um nó que deseja obter um bloqueio em um modo que entra em conflito com o que foi realizado no nó local, então uma das duas bandeiras D (rebaixar) ou d (rebaixar pendente) é definida. A fim de evitar condições de desespero, quando existe um bloqueio de contenção em particular, cada bloqueio recebe um tempo mínimo de espera. Um nó que ainda não tenha tido o bloqueio para o tempo mínimo de espera é permitido para manter aquele bloqueio até que o intervalo de tempo tenha expirado.
Se o intervalo de tempo expirou, então a bandeira D (demote) será definida e o estado requerido será gravado. Nesse caso, na próxima vez que não houver bloqueios concedidos na fila de holders, o bloqueio será rebaixado. Se o intervalo de tempo não houver expirado, a bandeira d (demote pending) será definida em seu lugar. Isso também agenda a máquina de estado para limpar o d (demote pending) e definir o D (demote), quando o tempo mínimo de espera expirar.
A bandeira I (initial) é definida quando o glock recebe um bloqueio do DLM. Isto acontece quando o glock é utilizado pela primeira vez e a bandeira I fica definida até que o glock é finalmente liberado (quando o bloqueio do DLM é desbloqueado).