
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_max
und an size
. (Siehe auchdieser Beitrag im Oracle Community-Forum. AlternativeKopie des Internetarchivsfür den Fall, dass die Oracle-Site nicht mehr verfügbar ist.)
c
ist derZielgrößedes ARC in Bytesc_max
ist dermaximale Größedes ARC in Bytessize
ist dermomentane Größedes ARC in Bytes
Die maximale Größe des ARC kann entweder durch Übergeben eines zfs_arc_max=N
Parameters an das zfs
Modul (über modprobe) angepasst werden, wobei N
die 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