Eric

lundi août 24, 2009

La cache (arc) de ZFS mange toute la ram.

C'est la mémoire que ZFS utilise comme aire de cache. Le mécanisme par défaut c'est que la cache peut utiliser jusqu'à la mémoire physique - 1GB. Le problème c'est que bien que l'ARC peut rapetisser automatiquement quand les applications ont besoin de mémoire, en pratique, ça ne se fait pas assez rapidement.. Comme ZFS utilise trop de mémoire il faut le limiter.

Voici comment faire.

  • Voir son utilisation.
    • sous mdb
      • ce qui est à vérifier
      • c_min = minimum allouer
      • c_max = maximum allouer
# mdb -kw
Loading modules: [ unix krtld genunix specfs dtrace cpu.generic uppc pcplusmp ufs ip hook neti sctp arp usba uhci fcp fctl emlxs qlc nca lofs zfs mpt md cpc random crypto fcip logindmux ptm sppp nfs ]
> ::arc
hits                      =  13475080
misses                    =    278175
demand_data_hits          =   9197806
demand_data_misses        =     19961
demand_metadata_hits      =   3884809
demand_metadata_misses    =     35538
prefetch_data_hits        =    298657
prefetch_data_misses      =    209763
prefetch_metadata_hits    =     93808
prefetch_metadata_misses  =     12913
mru_hits                  =   1093121
mru_ghost_hits            =      4717
mfu_hits                  =  11993694
mfu_ghost_hits            =     20071
deleted                   =    481527
recycle_miss              =      8459
mutex_miss                =       756
evict_skip                =     12755
hash_elements             =    304229
hash_elements_max         =    305404
hash_collisions           =    290303
hash_chains               =     61527
hash_chain_max            =         6
p                         =     15817 MB
c                         =     15817 MB
c_min                     =      3966 MB
c_max                     =     31730 MB
size                      =     15760 MB
hdr_size                  =  51362304
l2_hits                   =         0
l2_misses                 =         0
l2_feeds                  =         0
l2_rw_clash               =         0
l2_writes_sent            =         0
l2_writes_done            =         0
l2_writes_error           =         0
l2_writes_hdr_miss        =         0
l2_evict_lock_retry       =         0
l2_evict_reading          =         0
l2_free_on_write          =         0
l2_abort_lowmem           =         0
l2_cksum_bad              =         0
l2_io_error               =         0
l2_size                   =         0
l2_hdr_size               =         0
memory_throttle_count     =         0
arc_no_grow               =         0
arc_tempreserve           =         0 MB
arc_meta_used             =       366 MB
arc_meta_limit            =      7932 MB
arc_meta_max              =       366 MB
  • kstat
    • utilisation actuel.
      # kstat zfs:0:arcstats:size
      module: zfs                             instance: 0
      name:   arcstats                        class:    misc
              size                            16526777664
      

Pour le limiter, il est conseillé de ne pas toucher à la valeur c_min. Mais on peut limiter la valeur c_max.
Dans mon cas j'ai limité a env 30% de la mémoire du système 36Go total et le ZFS arc 10Go = 10000000000 ocets = 0x2540BE400.

  • Limiter le c_max sous /etc/system
    • ajouter à la fin du fichier.
      • Après le changement sous /etc/system un redémarrage s'impose.
# vi /etc/system

* zfs arc maximun utilisation 10Go
set zfs:zfs_arc_max=10000000000

Comments:

Post a Comment:
Comments are closed for this entry.

Calendar

Feeds

Search

Links

Navigation

Referrers