O FreeBSD divide a memória em 5 listas :
- com fio (bloqueado na memória, não paginável)
- ativo (usado recentemente)
- inativo (não usado recentemente)
- cache
- grátis
Alguns deles têm mínimo livre e destino , por exemplo
Pool Minimum Target
Free 0.7% 3%
Cache 3% 6%
Inactive 0% 4.5%
(Fonte: O Design e Implementação do Sistema Operacional FreeBSD , em vez de: 2004 cobrindo o FreeBSD 5.2 - esses números mudaram desde então, mas a abordagem geral não acredito).
O pagedaemon é encarregado de manter os níveis e paginar conforme a necessidade.
De uma VM do FreeBSD 9.0 que tenho aqui, estes são alguns dos números relevantes:
hw.availpages: 3138511
vm.stats.vm.v_inactive_target: 121342 # 3.9%
vm.stats.vm.v_free_target: 80895 # 2.6%
vm.stats.vm.v_free_reserved: 4011 # 0.1%
vm.stats.vm.v_free_min: 19221 # 0.6%
vm.stats.vm.v_cache_min: 80895 # 2.6%
vm.stats.vm.v_cache_max: 161790 # 5.1%
(Não tenho certeza de como eles são calculados, isso depende da memória física e presumivelmente kern.maxusers
).
O FreeBSD irá proactivamente anular a página para aumentar o cache disponível de modo que só porque a troca é usada não significa que seu sistema está sob pressão. É muito mais útil inspecionar (e representar graficamente!) As taxas de paginação e outros indicadores de carga, como E / S de disco e CPU, systat -io
é um começo. Executar o locate / updatedb é uma boa maneira de alterar o uso da memória durante a noite.
Usar o swap mesmo quando há memória livre é um comportamento normal, ele está efetivamente se preparando para possíveis demandas de memória futuras enquanto ocioso, portanto, o uso de swap por si só não é uma maneira confiável de determinar os requisitos de RAM. O FreeBSD é muito bom em dizer quando você precisa sintonizar algo (grep "see tuning" no arquivo messages
).
Outra leitura útil: