Um FreeBSD usa memória com medidas que chamamos de páginas, cada página possui um tamanho de 4KB na maioria das plataformas. Você verá 3 tipos de memórias descritas ao executar comandos como top:
- Active ou ativo
- Inactive ou inativo
- Laundry algo como lavanderia, para processos sujos(dirties) ficarem limpos(clean).
Esses 3 tipos de memórias são chamados de filas. Então temos a fila active, a fila inactive e a laundry. Lembre-se disso: fila.
Memória Anônima e Dados de Arquivos
A memória, que é medida pela unidade chamada página, guarda dois tipos de dados: memória anônima e dados de arquivos.
DADOS DE ARQUIVOS
dados de arquivos é bem fácil de entender, são simplesmente o conteúdo em cache dos arquivos e os metadados do arquivo. Esses metadados são informações do arquivo, como onde está localizado, sua identificação… Em geral, os sistemas de arquivos manterão seu próprio cache de tamanho fixo de dados de arquivo e metadados. Em sistemas de arquivos como UFS, msdosfs, NFS…, isse cache é chamado de “cache de buffer”; em sistemas de arquivos como o ZFS, é chamado de ARC (cache de substituição adaptável). Quando a memória é despejada do cache do buffer para liberar espaço para novos dados, ela é colocada na fila inativa.
MEMÓRIA ANÔNIMA
Como exemplo de memória anônima podemos citar coisas como:
a) conteúdo de um dispositivo MD do tipo “swap”,
b) sistemas de arquivos tmpfs,
c) Segmentos de memória compartilhada SysV ou POSIX
A memória anônima não possui armazenamento dedicado e será levada para o uma memória swap se precisar ser reutilizada para outra finalidade.
Páginas são unidades de 4 kilobytes de memória 🙂
As páginas pertencentes às filas de páginas(ativa, inativa, laundry) estão em um dos dois estados: limpas(clean) ou sujas(dirty). As páginas sujas devem ter seu conteúdo salvo antes de serem reutilizadas para algum outro propósito, momento em que se tornam limpas. As páginas anônimas sujas são limpas gravando seu conteúdo no swap, e as páginas de arquivo sujas são limpas gravando seu conteúdo no armazenamento de backup do sistema de arquivos. Uma vez que uma página esteja limpa, ela pode ser facilmente liberada e reutilizada.
Saliento que a memória anônima não possui armazenamento de backup dedicado e será gravada no swap se a memória precisar ser reutilizada para outra finalidade.
Classes de memória no FreeBSD
Active
- Contém páginas “ativamente”(recentemente) referenciadas por userland
- Contém uma mistura de páginas limpas e sujas
- As páginas são verificadas regularmente pelo daemon de página(cada página é visitada uma vez a cada vm.pageout_update_period segundos)
- As varreduras verificam se a página foi referenciada desde a última varredura
- Se varreduras suficientes forem concluídas sem ver uma referência, a página será movida para a fila inativa
- Implementa pseudo-LRU
Inactive
- Contém páginas antigas fora da fila ativa
- Contém páginas removidas do cache do buffer
- Contém uma mistura de páginas limpas e sujas
- As páginas são verificadas pelo daemon de página (começando no início da fila) quando há falta de memória:
- As páginas que foram referenciadas são movidas de volta para a fila ativa ou para o final da fila inativa
- As páginas sujas são movidas para o final da fila de lavanderia(laundry)
- Páginas limpas e não referenciadas podem ser liberadas e reutilizadas imediatamente
- Implementa LRU de segunda chance
Laundry
- Fila para gerenciar páginas inativas sujas, que devem ser limpas(“cleaned”) antes de serem reutilizadas
- Gerenciado por um thread separado, o thread de lavanderia(laundry), em vez do daemon de página
- O f thread da lavanderia lava um pequeno número de páginas para equilibrar as filas inativas e de lavanderia
- A frequência da lavagem depende de:
- Quantas páginas limpas o daemon de página está liberando; mais frees(liberadas) contribui para uma maior frequência de lavagem
- O tamanho da fila de lavanderia em relação à fila inativa; se a fila da lavanderia estiver crescendo, lavaremos com mais frequência
- As páginas são digitalizadas pelo thread da lavanderia(começando no início da fila):
- As páginas que foram referenciadas são movidas de volta para a fila ativa ou para o final da fila de lavanderia
- As páginas sujas são lavadas e depois movidas para o topo da fila inativa
Free
Memória disponível para uso pelo restante do sistema.
Wired
- Memória não paginável: não pode ser liberada até que seja explicitamente liberada pelo proprietário
- A memória userland pode ser conectada por mlock(2) (sujeito ao sistema e aos limites por usuário)
- Os alocadores de memória do kernel retornam a memória com thread
- O conteúdo do ARC e o cache do buffer são conectados
- Alguma memória é conectada permanentemente e nunca é liberada(por exemplo, o próprio arquivo do kernel)
Comment on “FreeBSD: Detalhes Sobre Memória RAM de Comandos como top e sysctl”