Comandos de Consulta por Métrica — ARC/L2ARC
Esta seção relaciona cada métrica importante do ARC/L2ARC ao comando usado para consultá-la no TrueNAS SCALE/OpenZFS.
PROPÓSITO
Servir de consulta rápida durante um diagnóstico: você sabe qual métrica quer e precisa do comando que a devolve.
Quando usar: Durante a análise de um pool ZFS, quando já se sabe o que olhar. Para entender o que cada métrica significa, veja o documento de diagnóstico e tuning.
Pré-requisitos: TrueNAS SCALE ou OpenZFS com acesso ao shell.
ARC — tamanho e memória disponível
O que observar
tamanho atual do ARC;
tamanho máximo permitido;
memória livre;
memória disponível;
target atual.
Como consultar
arc_summary | grep -A7 '^ARC status:'Exemplo:
ARC status:
Total memory size: 503.6 GiB
Min target size: 15.7 GiB
Max target size: 400.0 GiB
Target size: 400.0 GiB
Current size: 397.2 GiB
Free memory size: 92.4 GiB
Available memory size: 76.0 GiBInterpretação
O principal é verificar se o ARC não está deixando o sistema sem memória disponível.
Demand Data — hits e misses
O que é
Representa os dados solicitados diretamente pelas aplicações.
É a métrica mais importante para avaliar a eficiência do ARC sob a carga real.
Como consultar
arc_summary | grep -A4 '^ARC demand data accesses:'Exemplo:
ARC demand data accesses: 827.5M
Demand data hits: 65.2 %
Demand data I/O hits: 1.9 %
Demand data misses: 32.9 %Interpretação
Priorizar:
Demand data hits
Demand data missesReferência prática:
| Demand Data Miss | Avaliação |
|---|---|
| 0–2% | Excelente |
| >2–5% | Bom |
| >5–10% | Atenção |
| >10% | Investigar |
ARC Total — hits e misses
O que é
Inclui:
Demand Data;
Metadata;
Prefetch;
outros acessos internos.
Como consultar
arc_summary | grep -A4 '^ARC total accesses:'Ou:
arc_summary | grep -E \
'ARC total accesses|Total hits:|Total I/O hits:|Total misses:'Interpretação
Serve como visão geral.
Não deve ser utilizado sozinho para avaliar a performance percebida pelas aplicações, porque metadata normalmente possui hit rate muito alto.
L2ARC — estado geral
O que é
Segundo nível de cache do ZFS, normalmente em SSD ou NVMe.
Como consultar
arc_summary | grep -A30 '^L2ARC status:'Esse comando mostra praticamente tudo que interessa ao L2ARC:
saúde;
low-memory aborts;
tamanho;
MRU;
MFU;
prefetch;
hits;
misses;
reads;
writes.
L2ARC Hit e Miss
O que observar
Quanto das consultas feitas ao L2ARC realmente encontra o dado.
Como consultar
arc_summary | grep -A4 '^L2ARC breakdown:'Exemplo:
L2ARC breakdown: 787.0M
Hit ratio: 16.6 % 130.4M
Miss ratio: 83.4 % 656.7MInterpretação
Referência prática:
| L2ARC Hit | Avaliação |
|---|---|
| >= 40% | Excelente |
| 25–40% | Bom |
| 10–25% | Atenção |
| <10% | Baixo |
Porém, um L2ARC hit baixo não representa necessariamente um problema quando Demand Data Miss também é muito baixo.
MRU — Most Recently Used
O que é
Representa dados utilizados recentemente.
Muito MRU no L2ARC pode indicar que grande quantidade de dados está entrando no cache após apenas um uso recente.
Como consultar
arc_summary | grep -E \
'MRU allocated size|MFU allocated size|Prefetch allocated size'Exemplo:
MFU allocated size: 1.4 % 63.2 GiB
MRU allocated size: 98.4 % 4.3 TiB
Prefetch allocated size: 0.2 % 7.6 GiBApenas MRU
arc_summary | grep 'MRU allocated size'Interpretação
MRU alto isoladamente não é problema.
Fica interessante investigar quando houver:
MRU muito alto
+
L2ARC hit baixo
+
muitos writes no L2ARC
+
MFU muito baixoMFU — Most Frequently Used
O que é
Representa dados acessados repetidamente.
São normalmente dados muito interessantes para permanecer em cache.
Como consultar
arc_summary | grep 'MFU allocated size'Ou juntamente com MRU:
arc_summary | grep -E \
'MFU allocated size|MRU allocated size'Interpretação
Exemplo:
MFU: 1%
MRU: 98%indica que quase todo o L2ARC está ocupado por dados classificados como recentemente utilizados.
Se o L2ARC tiver hit muito baixo ao mesmo tempo, pode haver baixa reutilização dos dados armazenados.
Prefetch no L2ARC
O que é
Dados antecipados pelo ZFS antes de uma aplicação solicitá-los explicitamente.
Como consultar o espaço alocado
arc_summary | grep 'Prefetch allocated size'Consultar eficiência de Prefetch
arc_summary | grep -A5 '^ARC predictive prefetches:'Consultar misses de Prefetch Data
arc_summary | grep -A4 '^ARC prefetch data accesses:'Interpretação
Um Prefetch Data Miss alto isoladamente não significa necessariamente problema.
É importante observar se os blocos antecipados posteriormente acabam sendo demandados.
L2ARC Headers — consumo de RAM
O que é
O índice usado pelo ZFS para localizar os blocos existentes no L2ARC.
Esses headers ficam em RAM.
Como consultar
arc_summary | grep 'L2 header size'Exemplo:
L2 header size: 10.8 % 42.9 GiBCom mais contexto
arc_summary | grep -A12 '^ARC structural breakdown'Interpretação
Um L2ARC muito grande também possui custo de RAM.
Não analisar apenas o tamanho dos SSDs de cache.
Low-memory aborts
O que é
Indica situações em que o ZFS deixou de alimentar o L2ARC devido a pressão de memória.
Como consultar
arc_summary | grep 'Low memory aborts'Diretamente do kernel:
awk '$1=="l2_abort_lowmem" {print $3}' \
/proc/spl/kstat/zfs/arcstatsInterpretação
O valor absoluto histórico é menos importante que seu crescimento.
Exemplo:
Antes: 5
Depois: 5Resultado:
Delta: 0Bom.
Já:
Antes: 5
Depois: 8Resultado:
Delta: +3indica que houve novos aborts por pressão de memória.
L2ARC Writes
O que é
Quantidade de dados enviada aos dispositivos de L2ARC.
Como consultar
arc_summary | grep -A4 '^L2ARC I/O:'Exemplo:
L2ARC I/O:
Reads: 1.7 TiB
Writes: 5.2 TiBDiretamente do kernel
awk '$1=="l2_write_bytes" {print $3}' \
/proc/spl/kstat/zfs/arcstatsConverter para GiB/TiB
awk '
$1=="l2_write_bytes" {
printf "Writes: %.2f GiB / %.2f TiB\n",
$3/1024/1024/1024,
$3/1024/1024/1024/1024
}
' /proc/spl/kstat/zfs/arcstatsInterpretação
Correlacionar:
quantidade escrita
+
L2ARC Hit Ratio
+
MRU/MFUExemplo suspeito:
L2ARC atual: 5 TiB
Writes: 11 TiB
Hit: 12%
MRU: 98%Pode existir churn com pouco benefício.
Tamanho do L2ARC
Como consultar
arc_summary | grep -A8 '^L2ARC size'Exemplo:
L2ARC size (adaptive): 7.3 TiB
Compressed: 59.5 % 4.3 TiB
Header size: 42.9 GiB
MFU allocated size: 63.2 GiB
MRU allocated size: 4.3 TiBMemória disponível do sistema
Como consultar
free -hExemplo:
total used free buff/cache available
Mem: 503Gi 397Gi 92Gi 19Gi 106GiInterpretação
Olhar principalmente:
availableNão apenas:
freezfs_arc_max
Consultar valor atual
cat /sys/module/zfs/parameters/zfs_arc_maxMostrar em GiB
awk '{
printf "%.2f GiB\n", $1/1024/1024/1024
}' /sys/module/zfs/parameters/zfs_arc_maxExemplo: definir 400 GiB em runtime
echo 429496729600 > /sys/module/zfs/parameters/zfs_arc_maxl2arc_mfuonly
Consultar
cat /sys/module/zfs/parameters/l2arc_mfuonlyValores:
0 = comportamento normal/adaptativo
1 = restringir L2ARC aos dados MFUQuando avaliar
Somente quando houver evidência consistente de:
MRU muito alto
+
MFU muito baixo
+
L2ARC Hit baixo
+
alto churnl2arc_write_max
Consultar
cat /sys/module/zfs/parameters/l2arc_write_maxMostrar em MiB
awk '{
printf "%.2f MiB\n", $1/1024/1024
}' /sys/module/zfs/parameters/l2arc_write_maxConsultar intervalo de alimentação
cat /sys/module/zfs/parameters/l2arc_feed_secsNão aumentar l2arc_write_max antes de confirmar que os dados escritos no L2ARC realmente estão produzindo benefício.
l2arc_noprefetch
Consultar
cat /sys/module/zfs/parameters/l2arc_noprefetchUm valor:
1indica que buffers apenas prefetched não serão normalmente adicionados ao L2ARC antes de serem demandados.
Todos os tunables importantes de uma vez
for p in \
zfs_arc_max \
l2arc_write_max \
l2arc_write_boost \
l2arc_feed_secs \
l2arc_mfuonly \
l2arc_meta_percent \
l2arc_noprefetch
do
printf '%-25s = ' "$p"
cat "/sys/module/zfs/parameters/$p"
doneResumo rápido recomendado
Para uma inspeção rápida do storage:
arc_summary | grep -E \
'ARC demand data accesses:|Demand data hits:|Demand data misses:|Low memory aborts:|L2ARC breakdown:|Hit ratio:|Miss ratio:|MFU allocated size:|MRU allocated size:'Esse comando reúne em uma única tela:
Demand Data Hit;
Demand Data Miss;
low-memory aborts;
L2ARC Hit;
L2ARC Miss;
MFU;
MRU.
Monitoramento rápido em tempo real
Atualizar a cada 10 segundos:
watch -n10 '
arc_summary | grep -E \
"ARC demand data accesses:|Demand data hits:|Demand data misses:|Low memory aborts:|L2ARC breakdown:|Hit ratio:|Miss ratio:|MFU allocated size:|MRU allocated size:"
'Ordem prática de análise
Ao executar os comandos, interpretar nesta ordem:
1. Demand Data Miss
|
v
2. Low-memory aborts
|
v
3. L2ARC Hit Ratio
|
v
4. MRU x MFU
|
v
5. L2ARC Writes
|
v
6. Header / memória
|
v
7. ARC TotalA ideia é que cada diagnóstico responda uma pergunta:
Demand Miss
-> O ARC está atendendo as aplicações?
Low-memory abort
-> Há pressão de RAM?
L2ARC Hit
-> O segundo cache está ajudando?
MRU / MFU
-> Que tipo de dado estamos armazenando?
Writes
-> Quanto SSD estamos consumindo para obter esse benefício?
Headers
-> Quanto RAM o L2ARC está custando?