web-dev-qa-db-fra.com

Comment déterminer la taille actuelle de l'ARC dans ZFS et quel est le lien entre l'ARC et la mémoire libre ou en mémoire cache?

ZFS utilise un ARC (cache de remplacement adaptatif) qui n'est pas pris en compte dans l'utilisation de la mémoire "cache" Linux traditionnelle. Comment puis-je déterminer la taille actuelle ainsi que les limites de taille de l'ARC ZFS et leur relation avec la quantité de mémoire disponible ou en mémoire cache signalée par exemple par free?

15
a CVn

Le code ZFS rapporte diverses statistiques via procfs. Pour déterminer la taille de l'ARC, examinez /proc/spl/kstat/zfs/arcstats (en supposant que procfs est monté sur/proc, comme d'habitude), en particulier les valeurs pour c, c_max et size. (Voir aussi cet article sur le forum Oracle Community . Alternative Copie d'archive Internet au cas où le site Oracle ne serait plus disponible.)

  • c est la taille cible de l'ARC en octets
  • c_max est la taille maximale de l'ARC en octets
  • size est la taille actuelle de l'ARC en octets

La taille maximale de l'ARC peut être ajustée en passant un paramètre zfs_arc_max=N au module zfs (via modprobe), où N est la taille maximale de l'ARC en octets, ou à la volée en écrivant la nouvelle taille maximale en octets dans /sys/module/zfs/parameters/zfs_arc_max.

En raison de la mise en œuvre de ZFS sur Linux , la mémoire ARC se comporte comme une mémoire cache (par exemple, elle est expulsé si le système est soumis à une pression de mémoire), mais est agrégé par le noyau en tant qu’allocations de mémoire ordinaires. Cela peut prêter à confusion, car le système semble avoir beaucoup moins de mémoire libre que ce à quoi on pourrait s’attendre compte tenu de la charge de travail actuelle du système, mais c’est normal.

Pour obtenir la taille d'ARC en mégaoctets, vous pouvez utiliser quelque chose comme awk '/^size/ { print $1 " " $3 / 1048576 }' < /proc/spl/kstat/zfs/arcstats. (1 048 576 est le nombre d'octets en mégaoctets.)

Par exemple, mon système (qui utilise presque exclusivement ZFS) peut signaler

$ free -m
             total       used       free     shared    buffers     cached
Mem:         32194      17948      14245          0        158        982
-/+ buffers/cache:      16808      15386
Swap:        49152          0      49152
$ awk '/^size/ { print $1 " " $3 / 1048576 }' < /proc/spl/kstat/zfs/arcstats
size 8138.73
$

ce qui signifie que l'utilisation réelle de la mémoire par les processus actuellement résidents est d'environ 8 669 Mo (16 808 Mo réduite de 8 139 Mo).

18
a CVn