
ZFS utiliza un ARC (caché de reemplazo adaptativo) que no se tiene en cuenta en el uso de memoria "caché" tradicional de Linux. ¿Cómo puedo determinar el tamaño actual y los límites de tamaño de ZFS ARC y cómo se relacionan con la cantidad de memoria caché o libre informada, por ejemplo, por free
?
Respuesta1
El código ZFS informa varias estadísticas a través de procfs. Para determinar el tamaño del ARC, observe /proc/spl/kstat/zfs/arcstats
(suponiendo que procfs esté montado en /proc, como es habitual), específicamente los valores de c
, c_max
y size
. (Ver tambiénesta publicación en el foro de la comunidad de Oracle. AlternativaCopia del archivo de Interneten caso de que el sitio de Oracle deje de estar disponible).
c
es eltamaño objetivodel CRA en bytesc_max
es eltalla máximadel CRA en bytessize
es eltamaño actualdel CRA en bytes
El tamaño máximo del ARC se puede ajustar pasando un zfs_arc_max=N
parámetro al zfs
módulo (a través de modprobe), donde N
está el tamaño máximo del ARC en bytes, o sobre la marcha escribiendo el nuevo tamaño máximo en bytes en /sys/module/zfs/parameters/zfs_arc_max
.
Por comoZFS en Linuxestá implementada, la memoria ARCse comportacomo la memoria caché (por ejemplo, se desaloja si el sistema sufre presión de memoria), pero esagregadopor el kernel como asignaciones de memoria ordinarias. Esto puede generar confusión ya que el sistema parece tener mucha menos memoria libre de lo que se esperaría dada la carga de trabajo actual del sistema, pero es normal.
Para obtener el tamaño de ARC en megabytes, puedes usar algo como awk '/^size/ { print $1 " " $3 / 1048576 }' < /proc/spl/kstat/zfs/arcstats
. (1.048.576 es el número de bytes por megabyte).
Por ejemplo, mi sistema (que usa ZFS casi exclusivamente) podría informar
$ 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
$
lo que significa que elactualEl uso de memoria por parte de los procesos residentes actualmente es de aproximadamente 8.669 MB (16.808 MB reducidos en 8.139 MB).
Respuesta2
Para aprovechar la respuesta de Michael Kjörling, también puede utilizararc_summary.py.
Aquí puedes ver cómo ARC está usando la mitad de la memoria de mi escritorio:
raíz@host:~# libre -g total de buffers compartidos gratuitos utilizados en caché Memoria: 62 56 6 1 1 5 -/+ buffers/caché: 49 13 Intercambio: 7 0 7 raíz@host:~# arc_summary.py -------------------------------------------------- ---------------------- Informe del subsistema ZFS viernes 24 de febrero 19:44:20 2017 Resumen de ARC: (SALUDABLE) Conteo de aceleración de memoria: 0 ARCO varios: Eliminado: 1,33 m Fallos mutex: 99 Saltos de desalojo: 99 Tamaño del arco: 98,13% 30,80 GiB Tamaño objetivo: (adaptable) 100,00% 31,39 GiB Tamaño mínimo (límite estricto): 0,10% 32,00 MiB Tamaño máximo (agua alta): 1004:1 31,39 GiB Desglose del tamaño del ARCO: Tamaño de caché utilizado recientemente: 84,25% 26,45 GiB Tamaño de caché de uso frecuente: 15,75% 4,95 GiB Desglose del hash ARC: Elementos máx.: 1,11 m Elementos actuales: 53,48% 592,56k Colisiones: 763,42k Cadena máxima: 4 Cadenas: 19,62k Accesos totales CRA: 36,34m Proporción de aciertos de caché: 87,02 % 31,62 m Proporción de errores de caché: 12,98 % 4,72 m Proporción de aciertos real: 84,78 % 30,81 m Eficiencia de la demanda de datos: 93,49% 24,22m Eficiencia de captación previa de datos: 2,57% 819,12k ACCESOS DE CACHÉ POR LISTA DE CACHÉ: Usado de forma anónima: 2,27% 716,60k Usado más recientemente: 17,26% 5,46 millones Utilizado con mayor frecuencia: 80,17 % 25,35 m Fantasma usado más recientemente: 0,19% 60,25k Fantasma más utilizado: 0,11% 35,37k ACCESOS DE CACHÉ POR TIPO DE DATOS: Datos de demanda: 71,60% 22,64m Datos de captación previa: 0,07% 21,04k Metadatos de demanda: 25,82% 8,16m Metadatos de captación previa: 2,51% 794,39k FALLAS DE CACHÉ POR TIPO DE DATOS: Datos de demanda: 33,44% 1,58m Datos de captación previa: 16,92% 798,09k Metadatos de demanda: 48,90% 2,31m Metadatos de captación previa: 0,75% 35,27k Eficiencia de captación previa de DMU: 173,06 m Proporción de aciertos: 86,14 % 149,07 m Proporción de señoritas: 13,86% 23,99 millones ZFS sintonizable: metaslab_debug_load 0 zfs_arc_min_prefetch_lifespan 0 zfetch_max_streams 8 zfs_nopwrite_enabled 1 zfetch_min_sec_reap 2 zfs_dbgmsg_enable 0 zfs_dirty_data_max_max_percent 25 zfs_arc_p_aggressive_disable 1 spa_load_verify_data 1 zfs_zevent_cols 80 zfs_dirty_data_max_percent 10 zfs_sync_pass_dont_compress 5 l2arc_write_max 8388608 zfs_vdev_scrub_max_active 2 zfs_vdev_sync_write_min_active 10 zvol_prefetch_bytes 131072 metaslab_aliquot 524288 zfs_no_scrub_prefetch 0 zfs_arc_shrink_shift 0 zfetch_block_cap 256 zfs_txg_historia 0 zfs_delay_scale 500000 zfs_vdev_async_write_active_min_dirty_percent 30 metaslab_debug_unload 0 zfs_read_history 0 zvol_max_discard_blocks 16384 zfs_recuperación 0 l2arc_headroom 2 zfs_deadman_synctime_ms 1000000 zfs_scan_idle 50 zfs_free_min_time_ms 1000 zfs_dirty_data_max 6741298790 zfs_vdev_async_read_min_active 1 zfs_mg_noalloc_threshold 0 zfs_dedup_prefetch 0 zfs_vdev_max_active 1000 l2arc_write_boost 8388608 zfs_resilver_min_time_ms 3000 zfs_vdev_async_write_max_active 10 zil_slog_limit 1048576 zfs_prefetch_disable 0 zfs_resilver_delay 2 metaslab_lba_weighting_enabled 1 zfs_mg_fragmentation_threshold 85 l2arc_feed_again 1 zfs_zevent_console 0 zfs_immediate_write_sz 32768 zfs_dbgmsg_maxsize 4194304 zfs_free_leak_on_eio 0 zfs_deadman_enabled 1 metaslab_bias_enabled 1 zfs_arc_p_dampener_disable 1 zfs_object_mutex_size 64 zfs_metaslab_fragmentation_threshold 70 zfs_no_scrub_io 0 metalabs_per_vdev 200 zfs_dbuf_state_index 0 zfs_vdev_sync_read_min_active 10 metaslab_fragmentation_factor_enabled 1 zvol_inhibit_dev 0 zfs_vdev_async_write_active_max_dirty_percent 60 zfs_vdev_cache_size 0 zfs_vdev_mirror_switch_us 10000 zfs_dirty_data_sync 67108864 ruta_config_spa /etc/zfs/zpool.cache zfs_dirty_data_max_max 16853246976 zfs_arc_lotsfree_percent 10 zfs_zevent_len_max 128 zfs_scan_min_time_ms 1000 zfs_arc_sys_free 0 zfs_arc_meta_strategy 1 zfs_vdev_cache_bshift 16 zfs_arc_meta_adjust_restarts 4096 zfs_max_recordsize 1048576 zfs_vdev_scrub_min_active 1 zfs_vdev_read_gap_limit 32768 zfs_arc_meta_limit 0 zfs_vdev_sync_write_max_active 10 l2arc_norw 0 zfs_arc_meta_prune 10000 metaslab_preload_enabled 1 l2arc_nocompress 0 zvol_mayor 230 zfs_vdev_aggregation_limit 131072 banderas_zfs 0 spa_asize_inflación 24 zfs_admin_snapshot 0 l2arc_feed_secs 1 zio_taskq_batch_pct 75 zfs_sync_pass_deferred_free 2 zfs_disable_dup_eviction 0 zfs_arc_grow_retry 0 zfs_read_history_hits 0 zfs_vdev_async_write_min_active 1 zfs_vdev_async_read_max_active 3 zfs_scrub_delay 4 zfs_delay_min_dirty_percent 60 zfs_free_max_blocks 100000 zfs_vdev_cache_max 16384 zio_delay_max 30000 zfs_top_maxinflight 32 ignorar_agujero_nacimiento 1 spa_slop_shift 5 zfs_vdev_write_gap_limit 4096 spa_load_verify_metadatos 1 spa_load_verify_maxinflight 10000 l2arc_noprefetch 1 zfs_vdev_scheduler noop zfs_expire_snapshot 300 zfs_sync_pass_rewrite 2 zil_replay_disable 0 zfs_nocacheflush 0 zfs_arc_max 0 zfs_arc_min 0 zfs_read_chunk_size 1048576 zfs_txg_timeout 5 zfs_pd_bytes_max 52428800 l2arc_headroom_boost 200 zfs_send_corrupt_data 0 l2arc_feed_min_ms 200 zfs_arc_meta_min 0 zfs_arc_average_blocksize 8192 zfetch_array_rd_sz 1048576 zfs_autoimport_disable 1 zfs_arc_p_min_shift 0 zio_requeue_io_start_cut_in_line 1 zfs_vdev_sync_read_max_active 10 zfs_mdcomp_disable 0 zfs_arc_num_sublists_per_state 8