Eu li que o ZFS foi configurado para usar toda a memória física, exceto 1 GB em sistemas com 4 GB ou mais. Como tenho máquinas virtuais executando meu home-server que está executando o sistema de arquivos ZFS, eu queria reduzi-lo manualmente para que minhas VMs alocassem espaço, e tenho espaço para futuras implantações de KVM.
Eu entendi que definir a seguinte linha no arquivo /etc/modprobe.d/zfs.conf
limitaria o ZFS a usar apenas 4 GB.
options zfs zfs_arc_max=4294967296
Após a reinicialização, htop mostra que uma parte significativa da minha RAM foi alocada, mas há muito espaço não utilizado.
No entanto, após um período de tempo, a utilização da RAM aumentará até começarmos a trocar, conforme mostrado abaixo:
Htop do Home Server com tarefas ordenadas pelo uso do RES
Pergunta
Eu configurei algo incorretamente ou há algo mais que eu também precise definir para reduzir a pegada do ZFS? Talvez não seja o ZFS, mas há algo mais comendo minha memória RAM que eu não conheço?
Informações extras
A saída de cat /proc/spl/kstat/zfs/arcstats
é a seguinte:
5 1 0x01 85 4080 4981548270 615775159747876
name type data
hits 4 46287364
misses 4 2610021
demand_data_hits 4 30804990
demand_data_misses 4 578061
demand_metadata_hits 4 9829556
demand_metadata_misses 4 357556
prefetch_data_hits 4 2489500
prefetch_data_misses 4 1569248
prefetch_metadata_hits 4 3163318
prefetch_metadata_misses 4 105156
mru_hits 4 12907488
mru_ghost_hits 4 114469
mfu_hits 4 27727068
mfu_ghost_hits 4 464039
deleted 4 2749215
recycle_miss 4 8133
mutex_miss 4 740
evict_skip 4 62122
evict_l2_cached 4 0
evict_l2_eligible 4 270710646272
evict_l2_ineligible 4 122732333056
hash_elements 4 268203
hash_elements_max 4 268941
hash_collisions 4 7490083
hash_chains 4 71651
hash_chain_max 4 9
p 4 1982394368
c 4 4294967296
c_min 4 4194304
c_max 4 4294967296
size 4 4294834528
hdr_size 4 86552992
data_size 4 3125542912
meta_size 4 526384640
other_size 4 556353984
anon_size 4 540672
anon_evict_data 4 0
anon_evict_metadata 4 0
mru_size 4 1985674752
mru_evict_data 4 1692532736
mru_evict_metadata 4 124579328
mru_ghost_size 4 2308680192
mru_ghost_evict_data 4 1841692672
mru_ghost_evict_metadata 4 466987520
mfu_size 4 1665712128
mfu_evict_data 4 1432485888
mfu_evict_metadata 4 56686592
mfu_ghost_size 4 1953543680
mfu_ghost_evict_data 4 1462370304
mfu_ghost_evict_metadata 4 491173376
l2_hits 4 0
l2_misses 4 0
l2_feeds 4 0
l2_rw_clash 4 0
l2_read_bytes 4 0
l2_write_bytes 4 0
l2_writes_sent 4 0
l2_writes_done 4 0
l2_writes_error 4 0
l2_writes_hdr_miss 4 0
l2_evict_lock_retry 4 0
l2_evict_reading 4 0
l2_free_on_write 4 0
l2_abort_lowmem 4 0
l2_cksum_bad 4 0
l2_io_error 4 0
l2_size 4 0
l2_asize 4 0
l2_hdr_size 4 0
l2_compress_successes 4 0
l2_compress_zeros 4 0
l2_compress_failures 4 0
memory_throttle_count 4 0
duplicate_buffers 4 0
duplicate_buffers_size 4 0
duplicate_reads 4 0
memory_direct_count 4 2561
memory_indirect_count 4 36032
arc_no_grow 4 0
arc_tempreserve 4 0
arc_loaned_bytes 4 0
arc_prune 4 0
arc_meta_used 4 1169291616
arc_meta_limit 4 3221225472
arc_meta_max 4 1490740400
Atualizar
Eu executei a ferramenta ps-mem para executar um detalhamento da memória sendo utilizada por todos os applcations, e ela chega a apenas 8,3 GB. Isso combinado com o 4294834528
bytes (4GiB) que o ZFS ARC aparentemente só deve ter 12 GiB, mas você pode ver claramente que eu estou excedendo isso por aproximadamente 3-4 GiB. Talvez o ARC não esteja liberando RAM corretamente ou algo do tipo?
Atualização de 5 de maio de 2015 - Solução temporária
A execução do seguinte comando aparece para limpar o uso de memória como demonstrado neste vídeo do youtube .
sync; echo 2 | sudo tee /proc/sys/vm/drop_caches
Mais informações sobre este comando .