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
?
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 octetsc_max
est la taille maximale de l'ARC en octetssize
est la taille actuelle de l'ARC en octetsLa 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).