Comment puis-je déterminer la taille actuelle de l'ARC dans ZFS, et comment l'ARC se rapporte-t-il à la mémoire libre ou en cache?

17

ZFS utilise un ARC (cache de remplacement adaptatif) qui n'est pas pris en compte dans l'utilisation de la mémoire traditionnelle du «cache» Linux. Comment puis-je déterminer la taille actuelle ainsi que les limites de taille de l'ARC ZFS, et comment sont-elles liées à la quantité de mémoire libre ou de mémoire cache signalée par exemple par free?

un CVn
la source

Réponses:

20

Le code ZFS rapporte diverses statistiques via procfs. Pour déterminer la taille de l'ARC, regardez /proc/spl/kstat/zfs/arcstats(en supposant que procfs est monté sur / proc, comme d'habitude), en particulier les valeurs de c, c_maxet size. (Voir également cet article sur le forum de la communauté Oracle . Copie alternative des archives Internet au cas où le site Oracle deviendrait indisponible.)

  • cest la taille cible de l'ARC en octets
  • c_maxest la taille maximale de l'ARC en octets
  • sizeest la taille actuelle de l'ARC en octets

La taille maximale de l'ARC peut être ajustée soit en transmettant un zfs_arc_max=Nparamètre au zfsmodule (via modprobe), où Nest la taille maximale de l'ARC en octets, soit à la volée en écrivant la nouvelle taille maximale en octets /sys/module/zfs/parameters/zfs_arc_max.

En raison de la façon dont ZFS sous Linux est implémenté, la mémoire ARC se comporte comme une mémoire cache (par exemple, elle est supprimée si le système subit une pression mémoire), mais est agrégée par le noyau en tant qu'allocations de mémoire ordinaires. Cela peut être source de confusion car le système semble avoir beaucoup moins de mémoire libre que prévu compte tenu de la charge de travail actuelle du système, mais c'est normal.

Pour obtenir la taille 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 au mégaoctet.)

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éduits de 8 139 Mo).

un CVn
la source
13

Pour s'appuyer sur la réponse de Michael Kjörling, vous pouvez également utiliser arc_summary.py .

Ici, vous pouvez voir comment l'ARC utilise la moitié de la mémoire de mon bureau:

root @ host: ~ # free -g
             total des tampons partagés gratuits utilisés mis en cache
Mém: 62 56 6 1 1 5
- / + tampons / cache: 49 13
Échange: 7 0 7

root @ host: ~ # arc_summary.py
-------------------------------------------------- ----------------------
Rapport du sous-système ZFS ven 24 fév 19:44:20 2017
Résumé de l'ARC: (SAIN)
        Nombre d'accélérateurs de mémoire: 0

Divers ARC:
        Supprimé: 1,33 m
        Mutex manque: 99
        Expulsion saute: 99

Taille ARC: 98,13% 30,80 Gio
        Taille cible: (adaptatif) 100,00% 31,39 Gio
        Taille minimale (limite stricte): 0,10% 32,00 Mio
        Taille maximale (hautes eaux): 1004: 1 31,39 Gio

Répartition de la taille de l'ARC:
        Taille du cache récemment utilisée: 84,25% 26,45 Gio
        Taille du cache fréquemment utilisée: 15,75% 4,95 Gio

Répartition du hachage ARC:
        Éléments max: 1,11 m
        Éléments actuels: 53,48% 592,56k
        Collisions: 763,42 km
        Chaîne max: 4
        Chaînes: 19,62 km

ARC Total accès: 36,34 m
        Taux de réussite du cache: 87,02% 31,62 m
        Taux de non-respect du cache: 12,98% 4,72 m
        Taux de réussite réel: 84,78% 30,81 m

        Efficacité de la demande de données: 93,49% 24,22 m
        Efficacité de la pré-extraction des données: 2,57% 819,12k

        CACHE HITS PAR LISTE CACHE:
          Utilisé de façon anonyme: 2,27% 716,60 k
          Dernière utilisation: 17.26% 5.46m
          Le plus fréquemment utilisé: 80,17% 25,35 m
          Fantôme le plus récemment utilisé: 0,19% 60,25k
          Fantôme le plus fréquemment utilisé: 0,11% 35,37 ko

        CACHE HITS PAR TYPE DE DONNÉES:
          Données sur la demande: 71,60% 22,64 m
          Données de prélecture: 0,07% 21,04 k
          Métadonnées de la demande: 25,82% 8,16 millions
          Prétetch des métadonnées: 2,51% 794,39k

        CACHE MANQUE PAR TYPE DE DONNÉES:
          Données sur la demande: 33,44% 1,58 m
          Données de prélecture: 16,92% 798,09 ko
          Métadonnées de la demande: 48,90% 2,31 millions
          Prétetch des métadonnées: 0,75% 35,27 ko


Efficacité DMU Prefetch: 173,06 m
        Taux de réussite: 86,14% 149,07 m
        Ratio de manques: 13,86% 23,99 m



Réglable ZFS:
        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
la source
Je me demande ce que signifie la signification du rapport rapporté à la taille maximale (eau haute).
CMCDragonkai
Pour les utilisateurs d'Ubuntu: c'est arc_summarysans.py
Springloaded