
ZFS は、従来の Linux の「キャッシュ」メモリ使用量では考慮されない ARC (適応型置換キャッシュ) を使用します。ZFS ARC の現在のサイズとサイズ境界をどのように判断すればよいでしょうか。また、これらは、たとえば によって報告される空きメモリまたはキャッシュ メモリの量とどのように関係するのでしょうかfree
。
答え1
ZFS コードは procfs を通じてさまざまな統計情報を報告します。ARC のサイズを決定するには、/proc/spl/kstat/zfs/arcstats
(慣例どおり procfs が /proc にマウントされていると仮定して)、特に 、 、 の値を確認しますc
。c_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