J'ai lu que ZFS était configuré pour utiliser toute la mémoire physique sauf 1 Go sur les systèmes de 4 Go ou plus. Comme j'ai des machines virtuelles exécutant mon serveur domestique et le système de fichiers ZFS, je souhaitais réduire cela manuellement afin que mes ordinateurs virtuels disposent d'un espace disponible, et j'ai un peu de marge pour les futurs déploiements KVM.
J'ai compris que définir la ligne suivante dans le fichier /etc/modprobe.d/zfs.conf
limiterait ZFS à une utilisation de 4 Go seulement.
options zfs zfs_arc_max=4294967296
Après un redémarrage, htop montre qu’une partie importante de ma RAM a été allouée, mais qu’il reste beaucoup d’espace inutilisé.
Cependant, après un certain temps, RAM utilisation augmentera jusqu'à ce que nous commencions à échanger, comme indiqué ci-dessous:
Htop de Home Server avec des tâches triées par utilisation de RES
Ai-je mal configuré quelque chose ou y a-t-il autre chose que je dois également configurer pour réduire l'encombrement de ZFS? Ce n'est peut-être pas ZFS mais il y a quelque chose d'autre qui dévore ma RAM que je ne connais pas?
La sortie de cat /proc/spl/kstat/zfs/arcstats
est la suivante:
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
J'ai exécuté le outil ps-mem pour décomposer la mémoire utilisée par toutes les applications, ce qui ne représente que 8,3 Go. Cela, combiné aux 4294834528
octets (4GiB) que l’arc ZFS semble avoir, ne devrait apparemment pas dépasser 12 Go, mais vous pouvez clairement voir que je le dépasse d’environ 3 à 4 GiB supplémentaires. Peut-être que l'ARC ne libère pas correctement RAM ou quelque chose?
L'exécution de la commande suivante semble effacer l'utilisation de la mémoire en tant que démontré dans cette vidéo sur youtube .
sync; echo 2 | Sudo tee /proc/sys/vm/drop_caches
ZFS utilise également beaucoup d'espace SLAB dans le noyau. Vous pouvez vérifier la quantité de SLAB utilisée en vérifiant /proc/meminfo
ou en installant nmon
.
Vous trouverez des informations plus détaillées sur l’utilisation des dalles sous /proc/slabinfo
et /proc/spl/kmem/slab
Il vaut la peine de lire this pour en savoir plus sur l’utilisation de la mémoire de ZFS.