Come posso determinare la dimensione corrente di ARC in ZFS e in che modo ARC si collega alla memoria libera o cache?


17

ZFS utilizza un ARC (adattivo cache sostitutiva) che non viene preso in considerazione nel tradizionale utilizzo della memoria "cache" di Linux. Come posso determinare la dimensione corrente e i limiti di dimensione di ZFS ARC, e in che modo questi si riferiscono alla quantità di memoria libera o cache riportata ad esempio da free?

Risposte:


20

Il codice ZFS riporta varie statistiche tramite procfs. Per determinare la dimensione dell'ARC, guardare /proc/spl/kstat/zfs/arcstats(assumendo procfs montati su / proc, come di consueto), in particolare i valori di c, c_maxe size. (Vedi anche questo post sul forum Oracle Community . Copia alternativa di Internet Archive nel caso in cui il sito Oracle non sia disponibile.)

  • cè la dimensione target dell'ARC in byte
  • c_maxè la dimensione massima dell'ARC in byte
  • sizeè la dimensione corrente dell'ARC in byte

La dimensione massima dell'ARC può essere regolata passando un zfs_arc_max=Nparametro al zfsmodulo (tramite modprobe), dove Nè la dimensione massima dell'ARC in byte, o al volo scrivendo la nuova dimensione massima in byte in /sys/module/zfs/parameters/zfs_arc_max.

A causa dell'implementazione di ZFS su Linux , la memoria ARC si comporta come la memoria cache (ad esempio, viene sfrattata se il sistema subisce una pressione della memoria), ma viene aggregata dal kernel come allocazioni di memoria ordinarie. Ciò può creare confusione poiché il sistema sembra avere molta meno memoria libera di quanto ci si aspetterebbe dato l'attuale carico di lavoro del sistema, ma è normale.

Per ottenere la dimensione ARC in megabyte, è possibile utilizzare qualcosa di simile awk '/^size/ { print $1 " " $3 / 1048576 }' < /proc/spl/kstat/zfs/arcstats. (1.048.576 è il numero di byte in megabyte.)

Ad esempio, il mio sistema (che utilizza ZFS quasi esclusivamente) potrebbe riportare

$ 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
$

ciò significa che l' utilizzo effettivo della memoria da parte dei processi attualmente residenti è di circa 8.669 MB (16.808 MB ridotti di 8.139 MB).


13

Per basarti sulla risposta di Michael Kjörling, puoi anche usare arc_summary.py .

Qui puoi vedere come ARC usa metà della memoria del mio desktop:

root @ host: ~ # free -g
             buffer condivisi gratuiti totali utilizzati memorizzati nella cache
Mem: 62 56 6 1 1 5
- / + buffer / cache: 49 13
Scambia: 7 0 7

root @ host: ~ # arc_summary.py
-------------------------------------------------- ----------------------
Rapporto sul sottosistema ZFS ven 24 feb 19:44:20 2017
Sommario ARC: (SANO)
        Conteggio acceleratore memoria: 0

ARC Varie:
        Eliminato: 1,33 m
        Misses Mutex: 99
        Evict Salta: 99

Dimensione ARC: 98,13% 30,80 GiB
        Dimensione target: (adattivo) 100,00% 31,39 GiB
        Dimensione minima (limite rigido): 0,10% 32,00 MiB
        Dimensione massima (acqua alta): 1004: 1 31,39 GiB

Ripartizione delle dimensioni ARC:
        Dimensione cache utilizzata di recente: 84,25% 26,45 GiB
        Dimensione cache utilizzata di frequente: 15,75% 4,95 GiB

Ripartizione hash ARC:
        Elementi Max: 1,11 m
        Elementi attuali: 53,48% 592,56 k
        Collisioni: 763.42k
        Catena massima: 4
        Catene: 19.62k

ARC Totale accessi: 36.34m
        Rapporto hit cache: 87,02% 31,62 m
        Rapporto Miss Cache: 12,98% 4,72 m
        Rapporto effettivo colpi: 84,78% 30,81 m

        Efficienza della domanda di dati: 93,49% 24,22 m
        Efficienza di prefetch dei dati: 2,57% 819,12 k

        CACHE HITS BY CACHE LIST:
          Usato anonimamente: 2,27% 716,60 k
          Usati più di recente: 17,26% 5,46 m
          Più frequentemente utilizzati: 80,17% 25,35 m
          Ghost usato più di recente: 0,19% 60,25 k
          Fantasma più frequentemente usato: 0,11% 35,37 k

        COLPI DI CACHE PER TIPO DI DATI:
          Dati richiesta: 71,60% 22,64 milioni
          Precarica dati: 0,07% 21,04k
          Metadati della domanda: 25,82% 8,16 milioni
          Precarica metadati: 2,51% 794,39 k

        CACHE PERDE PER TIPO DI DATI:
          Dati richiesta: 33,44% 1,58 m
          Precarica dati: 16,92% 798,09 k
          Metadati della domanda: 48,90% 2,31 milioni
          Precarica metadati: 0,75% 35,27 k


Efficienza prefetch DMU: 173,06 m
        Rapporto ferite: 86,14% 149,07 m
        Rapporto Miss: 13,86% 23,99 milioni



Sintonizzabile 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

Mi chiedo cosa significhi il significato del rapporto riportato per Dimensione massima (Acqua alta).
CMCDragonkai,

Per utenti Ubuntu: è arc_summarysenza.py
caricato a molla il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.