如何確定 ZFS 中 ARC 的當前大小,以及 ARC 與空閒記憶體或快取記憶體有何關係?

如何確定 ZFS 中 ARC 的當前大小,以及 ARC 與空閒記憶體或快取記憶體有何關係?

ZFS 使用 ARC(自適應替換快取),傳統 Linux「快取」記憶體使用中沒有考慮到這一點。如何確定 ZFS ARC 的當前大小以及大小邊界,以及這些與報告的可用記憶體或快取記憶體量有何關係free

答案1

ZFS 代碼透過 procfs 報告各種統計資料。要確定 ARC 的大小,請查看(按照慣例假設 procfs 安裝在 /proc 上),特別是、和/proc/spl/kstat/zfs/arcstats的值。 (也可以看看cc_maxsizeOracle 社群論壇上的這篇文章。選擇互聯網檔案館副本以防 Oracle 站點不可用。

  • c是個目標尺寸ARC 的位元組數
  • c_max是個最大尺寸ARC 的位元組數
  • size是個目前的規模ARC 的位元組數

zfs_arc_max=N可以透過將參數傳遞給zfs模組(透過 modprobe)來調整 ARC 的最大大小,其中N是最大ARC 大小(以位元組為單位),也可以透過將新的最大大小(以位元組為單位)寫入來動態調整/sys/module/zfs/parameters/zfs_arc_max

因為如何Linux 上的 ZFS實現後,ARC內存表現就像緩存一樣(例如,如果系統面臨記憶體壓力,它就會被逐出),但是聚合的由核心作為普通記憶體分配。這可能會導致混亂,因為系統的可用記憶體似乎遠少於當前系統工作負載的預期,但這是正常的。

要取得以兆位元組為單位的 ARC 大小,您可以使用類似awk '/^size/ { print $1 " " $3 / 1048576 }' < /proc/spl/kstat/zfs/arcstats. (1,048,576 是位元組數與兆位元組的比值。)

例如,我的系統(幾乎只使用 ZFS)可能會報告

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

這意味著實際的目前駐留進程的記憶體使用量約為 8,669 MB(16,808 MB 減少了 8,139 MB)。

答案2

要以 Michael Kjörling 的答案為基礎,您也可以使用arc_summary.py

在這裡您可以看到 ARC 如何使用我桌面一半的記憶體:

root@host:~# free -g
             快取的已使用空閒共享緩衝區總數
記憶體:62 56 6 1 1 5
-/+ 緩衝區/快取:49 13
交換:7 0 7

root@host:~# arc_summary.py
-------------------------------------------------- ----------------------
ZFS 子系統報告 2017 年 2 月 24 日星期五 19:44:20
ARC 摘要:(健康)
        記憶體節流計數:0

ARC 其他:
        刪除:1.33m
        互斥體未命中:99
        驅逐跳過:99

ARC 大小:98.13% 30.80 GiB
        目標大小:(自適應)100.00% 31.39 GiB
        最小大小(硬限制):0.10% 32.00 MiB
        最大大小(高水位):1004:1 31.39 GiB

ARC 尺寸細分:
        最近使用的快取大小:84.25% 26.45 GiB
        常用快取大小:15.75% 4.95 GiB

ARC 哈希細分:
        元素最大:1.11m
        目前元素:53.48% 592.56k
        碰撞次數:763.42k
        最大鏈數:4
        鏈條:19.62k

ARC總瀏覽量:36.34m
        快取命中率:87.02% 31.62m
        快取未命中率:12.98% 472萬
        實際命中率:84.78% 30.81m

        資料需求效率:93.49% 24.22m
        資料預取效率:2.57% 819.12k

        按快取清單的快取命中:
          匿名使用:2.27% 716.60k
          最近使用:17.26% 5.46m
          最常用:80.17% 25.35m
          最近使用的 Ghost:0.19% 60.25k
          最常用的 Ghost:0.11% 35.37k

        按資料類型劃分的快取命中數:
          需求數據:71.60% 22.64m
          預取資料:0.07% 21.04k
          需求元資料:25.82% 816萬
          預取元資料:2.51% 794.39k

        按資料類型劃分的快取未命中:
          需求數據:33.44% 158萬
          預取資料:16.92% 798.09k
          需求元資料:48.90% 231萬
          預取元資料:0.75% 35.27k


DMU預取效率:173.06m
        命中率:86.14% 149.07m
        失誤率:13.86% 23.99m



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_等分 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_恢復 0
        l2arc_淨空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
        忽略洞出生 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_逾時 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

相關內容