¿Cómo puedo determinar el tamaño actual del ARC en ZFS y cómo se relaciona el ARC con la memoria libre o caché?

17

ZFS usa un ARC (caché de reemplazo adaptativo) que no se tiene en cuenta en el uso tradicional de la memoria "caché" de Linux. ¿Cómo puedo determinar el tamaño actual y los límites de tamaño del ZFS ARC, y cómo se relacionan con la cantidad de memoria libre o de caché informada, por ejemplo free?

un CVn
fuente

Respuestas:

20

El código ZFS informa varias estadísticas a través de procfs. Para determinar el tamaño del ARC, mire /proc/spl/kstat/zfs/arcstats(suponiendo que procfs esté montado en / proc, como es costumbre), específicamente los valores para c, c_maxy size. (Consulte también esta publicación en el foro de la Comunidad de Oracle . Copia alternativa de Internet Archive en caso de que el sitio de Oracle no esté disponible).

  • ces el tamaño objetivo del ARC en bytes
  • c_maxes el tamaño máximo del ARC en bytes
  • sizees el tamaño actual del ARC en bytes

El tamaño máximo del ARC se puede ajustar pasando un zfs_arc_max=Nparámetro al zfsmódulo (a través de modprobe), donde Nestá el tamaño máximo del ARC en bytes, o sobre la marcha escribiendo el nuevo tamaño máximo en bytes /sys/module/zfs/parameters/zfs_arc_max.

Debido a cómo se implementa ZFS en Linux , la memoria ARC se comporta como la memoria caché (por ejemplo, se desaloja si el sistema está bajo presión de memoria), pero el núcleo la agrega 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, puede usar algo como awk '/^size/ { print $1 " " $3 / 1048576 }' < /proc/spl/kstat/zfs/arcstats. (1,048,576 es el número de bytes al 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 el uso de memoria real por los procesos residentes actualmente es de aproximadamente 8,669 MB (16,808 MB reducido en 8,139 MB).

un CVn
fuente
13

Para construir sobre la respuesta de Michael Kjörling, también puede usar arc_summary.py .

Aquí puede ver cómo el ARC está utilizando la mitad de la memoria de mi escritorio:

root @ host: ~ # free -g
             total de buffers compartidos gratuitos usados ​​en caché
Mem: 62 56 6 1 1 5
- / + buffers / cache: 49 13
Intercambio: 7 0 7

root @ host: ~ # arc_summary.py
-------------------------------------------------- ----------------------
Informe del subsistema ZFS vie 24 feb 19:44:20 2017
Resumen de ARC: (SALUDABLE)
        Cuenta del acelerador de memoria: 0

Varios ARC:
        Borrado: 1.33m
        Mutex Misses: 99
        Expulsar saltos: 99

Tamaño de ARC: 98.13% 30.80 GiB
        Tamaño objetivo: (Adaptable) 100.00% 31.39 GiB
        Tamaño mínimo (límite duro): 0.10% 32.00 MiB
        Tamaño máximo (agua alta): 1004: 1 31.39 GiB

Desglose del tamaño de ARC:
        Tamaño de caché utilizado recientemente: 84.25% 26.45 GiB
        Tamaño de caché de uso frecuente: 15,75% 4,95 GiB

Desglose de Hash ARC:
        Elementos Máx .: 1.11m
        Elementos actuales: 53.48% 592.56k
        Colisiones: 763.42k
        Cadena Máx .: 4
        Cadenas: 19.62k

Total de accesos ARC: 36.34m
        Proporción de aciertos de caché: 87.02% 31.62 m
        Caché Miss Ratio: 12.98% 4.72m
        Proporción de golpes real: 84.78% 30.81m

        Eficiencia de demanda de datos: 93.49% 24.22m
        Eficiencia de captación previa de datos: 2.57% 819.12k

        CACHE HITS BY CACHE LIST:
          Usado anónimamente: 2.27% 716.60k
          Utilizado más recientemente: 17,26% 5,46 m
          Uso más frecuente: 80.17% 25.35m
          Fantasma usado más recientemente: 0.19% 60.25k
          Fantasma más utilizado: 0.11% 35.37k

        CACHE HITS POR TIPO DE DATOS:
          Datos de demanda: 71,60% 22,64 m
          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

        CACHE FALTA 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
        Hit Ratio: 86.14% 149.07m
        Miss Ratio: 13.86% 23.99m



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_history 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_recover 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
        metaslabs_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
        spa_config_path /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_major 230
        zfs_vdev_aggregation_limit 131072
        zfs_flags 0
        spa_asize_inflation 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
        ignore_hole_birth 1
        spa_slop_shift 5
        zfs_vdev_write_gap_limit 4096
        spa_load_verify_metadata 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
11181
fuente
Me pregunto qué significa la importancia de la relación informada para Tamaño máximo (High Water).
CMCDragonkai
Para usuarios de Ubuntu: es arc_summarysin.py
cargado el