Skip to content

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

text
arc_summary | grep -A7 '^ARC status:'

Exemplo:

text
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 GiB

Interpretaçã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

text
arc_summary | grep -A4 '^ARC demand data accesses:'

Exemplo:

text
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:

text
Demand data hits
Demand data misses

Referência prática:

Demand Data MissAvaliaçã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

text
arc_summary | grep -A4 '^ARC total accesses:'

Ou:

text
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

text
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

text
arc_summary | grep -A4 '^L2ARC breakdown:'

Exemplo:

text
L2ARC breakdown:                 787.0M
        Hit ratio:       16.6 %  130.4M
        Miss ratio:      83.4 %  656.7M

Interpretação

Referência prática:

L2ARC HitAvaliaçã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

text
arc_summary | grep -E \
'MRU allocated size|MFU allocated size|Prefetch allocated size'

Exemplo:

text
MFU allocated size:        1.4 %   63.2 GiB
MRU allocated size:       98.4 %    4.3 TiB
Prefetch allocated size:   0.2 %    7.6 GiB

Apenas MRU

text
arc_summary | grep 'MRU allocated size'

Interpretação

MRU alto isoladamente não é problema.

Fica interessante investigar quando houver:

text
MRU muito alto
+
L2ARC hit baixo
+
muitos writes no L2ARC
+
MFU muito baixo

MFU — Most Frequently Used

O que é

Representa dados acessados repetidamente.

São normalmente dados muito interessantes para permanecer em cache.

Como consultar

text
arc_summary | grep 'MFU allocated size'

Ou juntamente com MRU:

text
arc_summary | grep -E \
'MFU allocated size|MRU allocated size'

Interpretação

Exemplo:

text
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

text
arc_summary | grep 'Prefetch allocated size'

Consultar eficiência de Prefetch

text
arc_summary | grep -A5 '^ARC predictive prefetches:'

Consultar misses de Prefetch Data

text
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

text
arc_summary | grep 'L2 header size'

Exemplo:

text
L2 header size:      10.8 %   42.9 GiB

Com mais contexto

text
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

text
arc_summary | grep 'Low memory aborts'

Diretamente do kernel:

text
awk '$1=="l2_abort_lowmem" {print $3}' \
/proc/spl/kstat/zfs/arcstats

Interpretação

O valor absoluto histórico é menos importante que seu crescimento.

Exemplo:

text
Antes:  5
Depois: 5

Resultado:

text
Delta: 0

Bom.

Já:

text
Antes:  5
Depois: 8

Resultado:

text
Delta: +3

indica que houve novos aborts por pressão de memória.


L2ARC Writes

O que é

Quantidade de dados enviada aos dispositivos de L2ARC.

Como consultar

text
arc_summary | grep -A4 '^L2ARC I/O:'

Exemplo:

text
L2ARC I/O:
        Reads:   1.7 TiB
        Writes:  5.2 TiB

Diretamente do kernel

text
awk '$1=="l2_write_bytes" {print $3}' \
/proc/spl/kstat/zfs/arcstats

Converter para GiB/TiB

bash
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/arcstats

Interpretação

Correlacionar:

text
quantidade escrita
+
L2ARC Hit Ratio
+
MRU/MFU

Exemplo suspeito:

text
L2ARC atual: 5 TiB
Writes:     11 TiB
Hit:         12%
MRU:         98%

Pode existir churn com pouco benefício.


Tamanho do L2ARC

Como consultar

text
arc_summary | grep -A8 '^L2ARC size'

Exemplo:

text
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 TiB

Memória disponível do sistema

Como consultar

bash
free -h

Exemplo:

text
               total   used   free   buff/cache   available
Mem:           503Gi  397Gi   92Gi       19Gi       106Gi

Interpretação

Olhar principalmente:

text
available

Não apenas:

bash
free

zfs_arc_max

Consultar valor atual

bash
cat /sys/module/zfs/parameters/zfs_arc_max

Mostrar em GiB

bash
awk '{
    printf "%.2f GiB\n", $1/1024/1024/1024
}' /sys/module/zfs/parameters/zfs_arc_max

Exemplo: definir 400 GiB em runtime

bash
echo 429496729600 > /sys/module/zfs/parameters/zfs_arc_max

l2arc_mfuonly

Consultar

bash
cat /sys/module/zfs/parameters/l2arc_mfuonly

Valores:

text
0 = comportamento normal/adaptativo
1 = restringir L2ARC aos dados MFU

Quando avaliar

Somente quando houver evidência consistente de:

text
MRU muito alto
+
MFU muito baixo
+
L2ARC Hit baixo
+
alto churn

l2arc_write_max

Consultar

bash
cat /sys/module/zfs/parameters/l2arc_write_max

Mostrar em MiB

bash
awk '{
    printf "%.2f MiB\n", $1/1024/1024
}' /sys/module/zfs/parameters/l2arc_write_max

Consultar intervalo de alimentação

bash
cat /sys/module/zfs/parameters/l2arc_feed_secs

Não aumentar l2arc_write_max antes de confirmar que os dados escritos no L2ARC realmente estão produzindo benefício.


l2arc_noprefetch

Consultar

bash
cat /sys/module/zfs/parameters/l2arc_noprefetch

Um valor:

text
1

indica que buffers apenas prefetched não serão normalmente adicionados ao L2ARC antes de serem demandados.


Todos os tunables importantes de uma vez

bash
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"
done

Resumo rápido recomendado

Para uma inspeção rápida do storage:

text
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:

bash
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:

text
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 Total

A ideia é que cada diagnóstico responda uma pergunta:

text
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?