ZFS の ARC の現在のサイズをどのように判断すればよいですか? また、ARC は空きメモリやキャッシュ メモリとどのように関係していますか?

ZFS の ARC の現在のサイズをどのように判断すればよいですか? また、ARC は空きメモリやキャッシュ メモリとどのように関係していますか?

ZFS は、従来の Linux の「キャッシュ」メモリ使用量では考慮されない ARC (適応型置換キャッシュ) を使用します。ZFS ARC の現在のサイズとサイズ境界をどのように判断すればよいでしょうか。また、これらは、たとえば によって報告される空きメモリまたはキャッシュ メモリの量とどのように関係するのでしょうかfree

答え1

ZFS コードは procfs を通じてさまざまな統計情報を報告します。ARC のサイズを決定するには、/proc/spl/kstat/zfs/arcstats(慣例どおり procfs が /proc にマウントされていると仮定して)、特に 、 、 の値を確認しますcc_max(size以下も参照してください。Oracleコミュニティフォーラムのこの投稿。 代替インターネットアーカイブのコピーOracle サイトが利用できなくなった場合に備えて。

  • cそれはターゲットサイズARCのバイト数
  • c_maxそれは最大サイズARCのバイト数
  • sizeそれは現在のサイズARCのバイト数

ARC の最大サイズは、モジュールzfs_arc_max=Nにパラメータを渡すことによってzfs(modprobe を介して)調整できます。ここで、Nはバイト単位の最大 ARC サイズです。または、新しい最大サイズをバイト単位で に書き込むことによって、その場で調整できます/sys/module/zfs/parameters/zfs_arc_max

その理由はLinux 上の ZFSARCメモリが実装され振る舞うキャッシュメモリのように(例えば、システムがメモリ不足に陥ると削除されます)集約されたカーネルによって通常のメモリ割り当てとして処理されます。現在のシステム ワークロードを考慮すると、システムの空きメモリが予想されるよりもはるかに少ないように見えるため、混乱が生じる可能性がありますが、これは正常です。

ARC サイズをメガバイト単位で取得するには、次のようにしますawk '/^size/ { print $1 " " $3 / 1048576 }' < /proc/spl/kstat/zfs/arcstats。(1,048,576 は 1 メガバイトあたりのバイト数です。)

例えば、私のシステム(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の回答を基に、アークサマリー.py

ここで、ARC がデスクトップのメモリの半分を使用している様子がわかります。

ルート@ホスト:~# 無料 -g
             キャッシュされた未使用の共有バッファの合計
メンバー: 62 56 6 1 1 5
-/+ バッファ/キャッシュ: 49 13
スワップ: 7 0 7

ルート@ホスト:~# 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% 4.72m
        実際のヒット率: 84.78% 30.81m

        データ需要効率: 93.49% 24.22m
        データプリフェッチ効率: 2.57% 819.12k

        キャッシュ リストによるキャッシュ ヒット:
          匿名で使用: 2.27% 716.60k
          最近の使用: 17.26% 546万
          最も頻繁に使用されるもの: 80.17% 25.35m
          最近使用したゴースト: 0.19% 60.25k
          最も頻繁に使用されるゴースト: 0.11% 35.37k

        データタイプ別のキャッシュヒット:
          需要データ: 71.60% 2264万
          プリフェッチデータ: 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 調整可能:
        メタラボデバッグロード 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
        スパロード検証データ 1
        zfs_zevent_cols 80
        zfs_ダーティデータ最大パーセント 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
        メタスラブアリクォート 524288
        zfs_no_scrub_prefetch 0
        zfs_arc_shrink_shift 0
        zfetch_block_cap 256
        zfs_txg_履歴 0
        zfs_遅延スケール 500000
        zfs_vdev_async_write_active_min_dirty_percent 30
        メタラボデバッグアンロード 0
        zfs_read_history 0
        zvol_max_discard_blocks 16384
        zfs_recover 0
        l2arc_ヘッドルーム 2
        zfs_デッドマン同期時間_ms 1000000
        zfs_scan_idle 50
        zfs_free_min_time_ms 1000
        zfs_ダーティデータ最大 6741298790
        zfs_vdev_async_read_min_active 1
        zfs_mg_noalloc_threshold 0
        zfs_dedup_prefetch 0
        zfs_vdev_max_active 1000
        8388608 の書き込み
        zfs_resilver_min_time_ms 3000
        zfs_vdev_async_write_max_active 10
        ジル_slog_limit 1048576
        zfs_prefetch_disable 0
        zfs_resilver_delay 2
        metaslab_lba_weighting_enabled 1
        zfs_mg_断片化しきい値 85
        l2arc_feed_again 1
        zfs_zevent_console 0
        zfs_即時書き込み_sz 32768
        zfs_dbgmsg_最大サイズ 4194304
        zfs_free_leak_on_eio 0
        zfs_デッドマン_有効 1
        メタスラブバイアス有効 1
        zfs_arc_p_dampener_disable 1
        zfs_オブジェクト_ミューテックス_サイズ 64
        zfs_metaslab_断片化しきい値 70
        zfs_no_scrub_io 0
        メタスラブス_per_vdev 200
        zfs_dbuf_state_index 0
        zfs_vdev_sync_read_min_active 10
        メタスラブ断片化係数が有効 1
        zvol_inhibit_dev 0
        zfs_vdev_async_write_active_max_dirty_percent 60
        zfs_vdev_キャッシュサイズ 0
        zfs_vdev_ミラー_スイッチ_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_最大レコードサイズ 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
        0 さん
        zfs_arc_meta_prune 10000
        メタスラブプリロード有効 1
        l2arc_nocompress 0
        zvol_major 230
        zfs_vdev_集約制限 131072
        zfs_フラグ 0
        スパ_asize_インフレーション 24
        zfs_admin_スナップショット 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_スクラブ遅延4
        zfs_delay_min_dirty_percent 60
        zfs_free_max_blocks 100000
        zfs_vdev_cache_max 16384
        ジオ遅延最大30000
        zfs_top_maxフライト32
        無視_穴_誕生 1
        スパスロップシフト5
        zfs_vdev_書き込みギャップ制限 4096
        スパロード検証メタデータ 1
        スパロード検証最大飛行時間10000
        l2arc_noprefetch 1
        zfs_vdev_scheduler は何もしない
        zfs_expire_スナップショット 300
        zfs_sync_pass_rewrite 2
        再生を無効にする 0
        zfs_nocacheflush 0
        zfs_arc_max 0
        zfs_arc_min 0
        zfs_read_chunk_size 1048576
        zfs_txg_タイムアウト 5
        zfs_pd_バイト最大 52428800
        l2arc_ヘッドルーム_ブースト 200
        zfs_send_corrupt_data 0
        l2arc_feed_min_ms 200
        zfs_arc_meta_min 0
        zfs_arc_平均ブロックサイズ 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

関連情報