ZFS использует ARC (адаптивный кэш-заменитель), который не учитывается в традиционном использовании кеш-памяти в Linux. Как я могу определить текущий размер, а также границы размера ZFS ARC, и как они соотносятся с объемом свободной или кэш-памяти, сообщаемой, например, free?
2 ответа
Код 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 .
Из-за того, как реализована ZFS в Linux , 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 МБ (16 088 МБ уменьшено на 8 139 МБ).
Чтобы продолжить ответ Михаэля Кьёрлинга, вы также можете использовать arc_summary.py.
Здесь вы можете увидеть, как ARC использует половину памяти моего рабочего стола:
root@host:~# free -g
total used free shared buffers cached
Mem: 62 56 6 1 1 5
-/+ buffers/cache: 49 13
Swap: 7 0 7
root@host:~# arc_summary.py
------------------------------------------------------------------------
ZFS Subsystem Report Fri Feb 24 19:44:20 2017
ARC Summary: (HEALTHY)
Memory Throttle Count: 0
ARC Misc:
Deleted: 1.33m
Mutex Misses: 99
Evict Skips: 99
ARC Size: 98.13% 30.80 GiB
Target Size: (Adaptive) 100.00% 31.39 GiB
Min Size (Hard Limit): 0.10% 32.00 MiB
Max Size (High Water): 1004:1 31.39 GiB
ARC Size Breakdown:
Recently Used Cache Size: 84.25% 26.45 GiB
Frequently Used Cache Size: 15.75% 4.95 GiB
ARC Hash Breakdown:
Elements Max: 1.11m
Elements Current: 53.48% 592.56k
Collisions: 763.42k
Chain Max: 4
Chains: 19.62k
ARC Total accesses: 36.34m
Cache Hit Ratio: 87.02% 31.62m
Cache Miss Ratio: 12.98% 4.72m
Actual Hit Ratio: 84.78% 30.81m
Data Demand Efficiency: 93.49% 24.22m
Data Prefetch Efficiency: 2.57% 819.12k
CACHE HITS BY CACHE LIST:
Anonymously Used: 2.27% 716.60k
Most Recently Used: 17.26% 5.46m
Most Frequently Used: 80.17% 25.35m
Most Recently Used Ghost: 0.19% 60.25k
Most Frequently Used Ghost: 0.11% 35.37k
CACHE HITS BY DATA TYPE:
Demand Data: 71.60% 22.64m
Prefetch Data: 0.07% 21.04k
Demand Metadata: 25.82% 8.16m
Prefetch Metadata: 2.51% 794.39k
CACHE MISSES BY DATA TYPE:
Demand Data: 33.44% 1.58m
Prefetch Data: 16.92% 798.09k
Demand Metadata: 48.90% 2.31m
Prefetch Metadata: 0.75% 35.27k
DMU Prefetch Efficiency: 173.06m
Hit Ratio: 86.14% 149.07m
Miss Ratio: 13.86% 23.99m
ZFS Tunable:
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_headroom 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
ignore_hole_birth 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_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
