Как определить текущий размер ARC в ZFS и как ARC относится к свободной или кэш-памяти?

ZFS использует ARC (адаптивный кэш замены), который не учитывается в традиционном использовании памяти «кеш-памяти» Linux. Как определить текущий размер, а также границы размера ZFS ARC, и как они относятся к количеству свободной или кэш-памяти, о которой сообщается, например, free ?

Код 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 808 МБ сокращено на 8,139 МБ).

Чтобы построить ответ Майкла Кьерлинга, вы также можете использовать arc_summary.py .

Здесь вы можете увидеть, как ARC использует половину памяти моего рабочего стола:

 Root @ host: ~ # free -g
              Общее количество использованных свободных буферов в кэше
 Mem: 62 56 6 1 1 5
 - / + буферы / кеш: 49 13
 Обмен: 7 0 7

 Root @ host: ~ # arc_summary.py
 -------------------------------------------------- ----------------------
 Отчет подсистемы ZFS пт. 24 февраля 19:44:20 2017
 ARC Резюме: (ЗДОРОВЫЙ)
         Объем памяти дроссельной заслонки: 0

 ARC Разное:
         Удалено: 1.33m
         Mutex Misses: 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 ГБ

 ARC Hash Breakdown:
         Элементы Макс.: 1,11 м
         Элементы Текущий: 53.48% 592.56k
         Столкновения: 763.42k
         Цепь Макс: 4
         Цепи: 19.62k

 ARC Всего разрешений: 36.34m
         Коэффициент попадания в кэш: 87.02% 31.62m
         Cache Miss Ratio: 12.98% 4.72m
         Коэффициент фактического попадания: 84.78% 30.81m

         Эффективность использования данных: 93,49% 24,22 м
         Эффективность предварительной выборки данных: 2,57% 819,12 тыс.

         CACHE HITS BY CACHE СПИСОК:
           Анонимно использовано: 2.27% 716.60k
           Самые последние использованные: 17.26% 5.46m
           Наиболее часто используемые: 80,17% 25,35 м
           Самые популярные Ghost: 0.19% 60.25k
           Наиболее часто используемый Призрак: 0.11% 35.37k

         CACHE HITS ПО ТИПУ ДАННЫХ:
           Данные спроса: 71.60% 22.64m
           Данные предварительной выборки: 0,07% 21,04 тыс.
           Метаданные спроса: 25.82% 8.16m
           Метаданные предварительной выборки: 2.51% 794.39k

         CACHE MISSES ПО ТИПУ ДАННЫХ:
           Данные спроса: 33,44% 1,58 м
           Данные предварительной выборки: 16,92% 798,09 тыс.
           Метаданные спроса: 48.90% 2.31m
           Метаданные предварительной выборки: 0,75% 35,27 тыс.


 Эффективность предварительной загрузки DMU: 173,06 м
         Коэффициент хита: 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
         Уровеньвыше 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
Давайте будем гением компьютера.