
O ZFS usa um ARC (cache de substituição adaptativo) que não é contabilizado no uso tradicional de memória de "cache" do Linux. Como posso determinar o tamanho atual, bem como os limites de tamanho do ZFS ARC, e como eles se relacionam com a quantidade de memória livre ou cache relatada, por exemplo, por free
?
Responder1
O código ZFS relata várias estatísticas por meio de procfs. Para determinar o tamanho do ARC, observe /proc/spl/kstat/zfs/arcstats
(assumindo procfs montados em /proc, como de costume), especificamente os valores de c
, c_max
e size
. (Veja tambémesta postagem no fórum da Comunidade Oracle. AlternativaCópia do arquivo da Internetcaso o site da Oracle fique indisponível.)
c
é otamanho alvodo ARC em bytesc_max
é otamanho máximodo ARC em bytessize
é otamanho atualdo ARC em bytes
O tamanho máximo do ARC pode ser ajustado passando um zfs_arc_max=N
parâmetro para o zfs
módulo (através do modprobe), onde N
é o tamanho máximo do ARC em bytes, ou instantaneamente escrevendo o novo tamanho máximo em bytes em /sys/module/zfs/parameters/zfs_arc_max
.
Por causa de comoZFS no Linuxé implementado, a memória ARCse comportacomo a memória cache (por exemplo, ela é removida se o sistema ficar sob pressão de memória), mas éagregadopelo kernel como alocações de memória comuns. Isto pode causar confusão, pois o sistema parece ter muito menos memória livre do que seria esperado dada a carga de trabalho atual do sistema, mas é normal.
Para obter o tamanho do ARC em megabytes, você pode usar algo como awk '/^size/ { print $1 " " $3 / 1048576 }' < /proc/spl/kstat/zfs/arcstats
. (1.048.576 é o número de bytes por megabyte.)
Por exemplo, meu sistema (que usa quase exclusivamente ZFS) pode reportar
$ 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
$
o que significa que orealo uso de memória pelos processos atualmente residentes é de aproximadamente 8.669 MB (16.808 MB reduzidos em 8.139 MB).
Responder2
Para desenvolver a resposta de Michael Kjörling, você também pode usararco_summary.py.
Aqui você pode ver como o ARC está usando metade da memória do meu desktop:
root@host:~# grátis -g total de buffers compartilhados livres usados armazenados em cache Memória: 62 56 6 1 1 5 -/+ buffers/cache: 49 13 Troca: 7 0 7 root@host:~# arc_summary.py -------------------------------------------------- ---------------------- Relatório do subsistema ZFS, sexta-feira, 24 de fevereiro, 19:44:20 2017 Resumo do ARC: (SAUDÁVEL) Contagem de aceleração de memória: 0 Diversos ARC: Excluído: 1,33m Erros de Mutex: 99 Despejos ignorados: 99 Tamanho do ARC: 98,13% 30,80 GiB Tamanho alvo: (adaptável) 100,00% 31,39 GiB Tamanho mínimo (limite rígido): 0,10% 32,00 MiB Tamanho máximo (maré alta): 1004:1 31,39 GiB Divisão do tamanho do ARC: Tamanho do cache usado recentemente: 84,25% 26,45 GiB Tamanho do cache usado com frequência: 15,75% 4,95 GiB Detalhamento do hash ARC: Elementos Máx.: 1,11m Elementos atuais: 53,48% 592,56k Colisões: 763,42k Corrente máxima: 4 Correntes: 19,62k ARC Total de acessos: 36,34m Taxa de acertos do cache: 87,02% 31,62 milhões Taxa de perda de cache: 12,98% 4,72 milhões Taxa de acerto real: 84,78% 30,81 milhões Eficiência na demanda de dados: 93,49% 24,22 milhões Eficiência de pré-busca de dados: 2,57% 819,12k ACESSO DE CACHE POR LISTA DE CACHE: Usado anonimamente: 2,27% 716,60k Mais usados recentemente: 17,26% 5,46m Mais frequentemente usado: 80,17% 25,35m Fantasma usado mais recentemente: 0,19% 60,25k Fantasma usado com mais frequência: 0,11% 35,37k ACESSO DE CACHE POR TIPO DE DADOS: Dados de demanda: 71,60% 22,64 milhões Dados de pré-busca: 0,07% 21,04k Metadados de demanda: 25,82% 8,16 milhões Pré-busca de metadados: 2,51% 794,39k PERDAS DE CACHE POR TIPO DE DADOS: Dados de demanda: 33,44% 1,58 milhão Dados de pré-busca: 16,92% 798,09k Metadados de demanda: 48,90% 2,31 milhões Pré-busca de metadados: 0,75% 35,27k Eficiência de pré-busca DMU: 173,06 milhões Taxa de acerto: 86,14% 149,07 milhões Taxa de falta: 13,86% 23,99 milhões ZFS ajustável: metaslab_debug_load0 zfs_arc_min_prefetch_lifespan0 zfetch_max_streams8 zfs_nopwrite_enabled1 zfetch_min_sec_reap2 zfs_dbgmsg_enable 0 zfs_dirty_data_max_max_percent 25 zfs_arc_p_aggressive_disable 1 spa_load_verify_data1 zfs_zevent_cols80 zfs_dirty_data_max_percent 10 zfs_sync_pass_dont_compress5 l2arc_write_max8388608 zfs_vdev_scrub_max_active 2 zfs_vdev_sync_write_min_active 10 zvol_prefetch_bytes131072 metaslab_aliquot 524288 zfs_no_scrub_prefetch0 zfs_arc_shrink_shift0 zfetch_block_cap 256 zfs_txg_history 0 zfs_delay_scale 500000 zfs_vdev_async_write_active_min_dirty_percent 30 metaslab_debug_unload0 zfs_read_history 0 zvol_max_discard_blocks16384 zfs_recover0 l2arc_headroom2 zfs_deadman_synctime_ms 1000000 zfs_scan_idle50 zfs_free_min_time_ms 1000 zfs_dirty_data_max6741298790 zfs_vdev_async_read_min_active 1 zfs_mg_noalloc_threshold 0 zfs_dedup_prefetch0 zfs_vdev_max_active 1000 l2arc_write_boost8388608 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_maxsize4194304 zfs_free_leak_on_eio 0 zfs_deadman_enabled1 metaslab_bias_enabled1 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_inibir_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_sync67108864 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_strategy1 zfs_vdev_cache_bshift16 zfs_arc_meta_adjust_restarts4096 zfs_max_recordsize1048576 zfs_vdev_scrub_min_active1 zfs_vdev_read_gap_limit 32768 zfs_arc_meta_limit0 zfs_vdev_sync_write_max_active 10 l2arc_norw 0 zfs_arc_meta_prune 10000 metaslab_preload_enabled1 l2arc_nocompress0 zvol_major 230 zfs_vdev_agregação_limit 131072 zfs_flags 0 spa_asize_inflation 24 zfs_admin_snapshot 0 l2arc_feed_secs1 zio_taskq_batch_pct 75 zfs_sync_pass_deferred_free 2 zfs_disable_dup_eviction0 zfs_arc_grow_retry 0 zfs_read_history_hits0 zfs_vdev_async_write_min_active 1 zfs_vdev_async_read_max_active 3 zfs_scrub_delay4 zfs_delay_min_dirty_percent 60 zfs_free_max_blocks 100000 zfs_vdev_cache_max 16384 zio_delay_max 30000 zfs_top_maxinflight32 ignore_hole_birth 1 spa_slop_shift 5 zfs_vdev_write_gap_limit 4096 spa_load_verify_metadata1 spa_load_verify_maxinflight 10000 l2arc_noprefetch1 zfs_vdev_scheduler noop zfs_expire_snapshot 300 zfs_sync_pass_rewrite2 zil_replay_disable 0 zfs_nocacheflush0 zfs_arc_max0 zfs_arc_min 0 zfs_read_chunk_size 1048576 zfs_txg_timeout5 zfs_pd_bytes_max52428800 l2arc_headroom_boost 200 zfs_send_corrupt_data 0 l2arc_feed_min_ms 200 zfs_arc_meta_min0 zfs_arc_average_blocksize8192 zfetch_array_rd_sz 1048576 zfs_autoimport_disable1 zfs_arc_p_min_shift0 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