Wie kann ich die aktuelle Größe des ARC in ZFS ermitteln und in welcher Beziehung steht der ARC zum freien Speicher bzw. zum Cache-Speicher?

Wie kann ich die aktuelle Größe des ARC in ZFS ermitteln und in welcher Beziehung steht der ARC zum freien Speicher bzw. zum Cache-Speicher?

ZFS verwendet einen ARC (Adaptive Replacement Cache), der bei der herkömmlichen „Cache“-Speichernutzung von Linux nicht berücksichtigt wird. Wie kann ich die aktuelle Größe sowie die Größengrenzen des ZFS ARC ermitteln und in welchem ​​Verhältnis stehen diese zur Menge des freien oder Cache-Speichers, die beispielsweise von gemeldet wird free?

Antwort1

Der ZFS-Code meldet verschiedene Statistiken über procfs. Um die Größe des ARC zu bestimmen, sehen Sie sich /proc/spl/kstat/zfs/arcstats(unter der Annahme, dass procfs wie üblich auf /proc gemountet ist) insbesondere die Werte für c, c_maxund an size. (Siehe auchdieser Beitrag im Oracle Community-Forum. AlternativeKopie des Internetarchivsfür den Fall, dass die Oracle-Site nicht mehr verfügbar ist.)

  • cist derZielgrößedes ARC in Bytes
  • c_maxist dermaximale Größedes ARC in Bytes
  • sizeist dermomentane Größedes ARC in Bytes

Die maximale Größe des ARC kann entweder durch Übergeben eines zfs_arc_max=NParameters an das zfsModul (über modprobe) angepasst werden, wobei Ndie maximale ARC-Größe in Bytes ist, oder spontan durch Schreiben der neuen maximalen Größe in Bytes in /sys/module/zfs/parameters/zfs_arc_max.

Denn wieZFS unter Linuximplementiert ist, wird der ARC-Speicherverhältwie Cache-Speicher (er wird z. B. ausgelagert, wenn das System unter Speichermangel gerät), ist aberaggregiertvom Kernel als normale Speicherzuweisungen. Dies kann zu Verwirrung führen, da das System scheinbar viel weniger freien Speicher hat, als angesichts der aktuellen Systemauslastung zu erwarten wäre, ist aber normal.

Um die ARC-Größe in Megabyte zu erhalten, können Sie etwas wie verwenden awk '/^size/ { print $1 " " $3 / 1048576 }' < /proc/spl/kstat/zfs/arcstats. (1.048.576 ist die Anzahl der Bytes pro Megabyte.)

Beispielsweise könnte mein System (das fast ausschließlich ZFS verwendet) melden

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

Das bedeutet, dass dietatsächlichDer Speicherverbrauch durch aktuell residente Prozesse beträgt ungefähr 8.669 MB (16.808 MB reduziert um 8.139 MB).

Antwort2

Um auf Michael Kjörlings Antwort aufzubauen, können Sie auch verwendenarc_summary.py.

Hier können Sie sehen, wie der ARC die Hälfte des Arbeitsspeichers meines Desktops nutzt:

root@host:~# frei -g
             insgesamt genutzte freie gemeinsam genutzte Puffer im Cache
Merken: 62 56 6 1 1 5
-/+ Puffer/Cache: 49 13
Tausch: 7 0 7

root@host:~# arc_summary.py
------------------------------------------------------------------------
ZFS-Subsystembericht Fr., 24. Februar 2017, 19:44:20 Uhr
ARC-Zusammenfassung: (GESUND)
        Anzahl der Speicherdrosseln: 0

ARC Sonstiges:
        Gelöscht: 1,33 m
        Mutex-Fehler: 99
        Räumungssprünge: 99

ARC-Größe: 98,13 % 30,80 GiB
        Zielgröße: (Adaptiv) 100,00 % 31,39 GiB
        Mindestgröße (hartes Limit): 0,10 % 32,00 MiB
        Max. Größe (Hochwasser): 1004:1 31,39 GiB

ARC-Größenaufschlüsselung:
        Zuletzt genutzte Cachegröße: 84,25 % 26,45 GiB
        Häufig genutzte Cachegröße: 15,75 % 4,95 GiB

ARC-Hash-Aufschlüsselung:
        Elemente Max: 1,11 m
        Elemente aktuell: 53,48 % 592,56 k
        Kollisionen: 763,42k
        Kette Max: 4
        Ketten: 19,62k

ARC Zugriffe gesamt: 36,34 Mio.
        Cache-Trefferquote: 87,02 % 31,62 m
        Cache-Fehlerquote: 12,98 % 4,72 m
        Tatsächliche Trefferquote: 84,78 % 30,81 Mio.

        Datennachfrageeffizienz: 93,49 % 24,22 Mio.
        Effizienz des Datenvorabrufs: 2,57 % 819,12 k

        CACHE-TREFFER NACH CACHE-LISTE:
          Anonym genutzt: 2,27 % 716,60 k
          Zuletzt verwendet: 17,26 % 5,46 Mio.
          Am häufigsten verwendet: 80,17 % 25,35 Mio.
          Zuletzt verwendeter Ghost: 0,19 % 60,25 k
          Am häufigsten verwendeter Geist: 0,11 % 35,37k

        CACHE-TREFFER NACH DATENTYP:
          Nachfragedaten: 71,60 % 22,64 Mio.
          Prefetch-Daten: 0,07 % 21,04 k
          Nachfragemetadaten: 25,82 % 8,16 Mio.
          Prefetch-Metadaten: 2,51 % 794,39 KB

        CACHE-FEHLER NACH DATENTYP:
          Nachfragedaten: 33,44 % 1,58 Mio.
          Prefetch-Daten: 16,92 % 798,09 KB
          Nachfragemetadaten: 48,90 % 2,31 Mio.
          Prefetch-Metadaten: 0,75 % 35,27 k


DMU-Prefetch-Effizienz: 173,06 m
        Trefferquote: 86,14 % 149,07 m
        Fehlschussquote: 13,86 % 23,99 Mio.



ZFS-optimierbar:
        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_Kopfraum 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_aktiviert 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_pfad /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_aktiviert 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_maximflight 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

verwandte Informationen