在SSD上,如果主数据已经存在,是否需要 ZFS L2ARC?

分享于 

11分钟阅读

互联网

  繁體 雙語

问题:

我正在尝试为我的工作负载( Postgres和同一物理机器 [1] 上的文件服务器) 优化 ZFS,并想了解我是否真的需要 L2ARC,或者不需要。

如果 https://www.zfsbuild.com//explanation-of-arc-and-l2arc/ ( 我想,在 2010年,ssd是昂贵的) 提供的信息正确,则不应该禁用 L2ARC? 如果 arc 上存在缓存错误,从L2ARC读取和主数据集将采取相同的时间( 都将是 SSD )。 我的理解正确吗?

有关--的相关问题如何检查L2ARC的摘要? 我不认为 arc_summary 提供了关于L2ARC的任何信息,对吧?

L2ARC是第二级自适应替换缓存。 在ZFS系统中,L2ARC通常称为"缓存驱动器"。

[.. ]

这些高速缓存驱动器是物理上刚果解放运动的固态硬盘驱动器。 这些固态硬盘比系统内存慢,但仍然比硬盘快。 更重要的是,固态硬盘比系统内存便宜得多。

[.. ]

当ZFS池中存在缓存驱动器时,缓存驱动器将缓存不适合 arc的频繁访问数据。 当读取请求进入系统时,ZFS将尝试从 arc 请求这些请求。 如果数据不在 arc 中,ZFS将尝试提供来自L2ARC的请求。 只有在 arc 或者L2ARC中不存在数据时才会访问硬盘驱动器。

[1] 硬件配置:https://www.hetzner.com/dedicated-rootserver/px61-nvme

  • 两台 512 GB NVMe Gen3 x4 ssd
  • 64千兆字节内存 ECC RAM

zpool status 输出


 pool: firstzfs


 state: ONLINE


 scan: none requested


config:



 NAME STATE READ WRITE CKSUM


 firstzfs ONLINE 0 0 0


 nvme0n1p3 ONLINE 0 0 0



errors: No known data errors



arc_summary 输出


ZFS Subsystem Report Wed Jan 30 09:26:07 2019


ARC Summary: (HEALTHY)


 Memory Throttle Count: 0



ARC Misc:


 Deleted: 43.56k


 Mutex Misses: 0


 Evict Skips: 0



ARC Size: 65.51% 20.54 GiB


 Target Size: (Adaptive) 100.00% 31.35 GiB


 Min Size (Hard Limit): 6.25% 1.96 GiB


 Max Size (High Water): 16:1 31.35 GiB



ARC Size Breakdown:


 Recently Used Cache Size: 86.54% 16.66 GiB


 Frequently Used Cache Size: 13.46% 2.59 GiB



ARC Hash Breakdown:


 Elements Max: 4.64m


 Elements Current: 89.55% 4.16m


 Collisions: 83.96m


 Chain Max: 8


 Chains: 721.73k



ARC Total accesses: 985.94m


 Cache Hit Ratio: 95.94% 945.94m


 Cache Miss Ratio: 4.06% 40.00m


 Actual Hit Ratio: 93.33% 920.18m



 Data Demand Efficiency: 87.42% 313.82m


 Data Prefetch Efficiency: 100.00% 25.94m



 CACHE HITS BY CACHE LIST:


 Anonymously Used: 2.72% 25.76m


 Most Recently Used: 27.97% 264.53m


 Most Frequently Used: 69.31% 655.65m


 Most Recently Used Ghost: 0.00% 0


 Most Frequently Used Ghost: 0.00% 0



 CACHE HITS BY DATA TYPE:


 Demand Data: 29.00% 274.35m


 Prefetch Data: 2.74% 25.94m


 Demand Metadata: 68.21% 645.27m


 Prefetch Metadata: 0.04% 379.71k



 CACHE MISSES BY DATA TYPE:


 Demand Data: 98.68% 39.47m


 Prefetch Data: 0.00% 0


 Demand Metadata: 1.32% 527.28k


 Prefetch Metadata: 0.00% 0



DMU Prefetch Efficiency: 865.60m


 Hit Ratio: 9.64% 83.45m


 Miss Ratio: 90.36% 782.14m



ZFS Tunable:


 dbuf_cache_hiwater_pct 10


 dbuf_cache_lowater_pct 10


 dbuf_cache_max_bytes 104857600


 dbuf_cache_max_shift 5


 dmu_object_alloc_chunk_shift 7


 ignore_hole_birth 1


 l2arc_feed_again 1


 l2arc_feed_min_ms 200


 l2arc_feed_secs 1


 l2arc_headroom 2


 l2arc_headroom_boost 200


 l2arc_noprefetch 1


 l2arc_norw 0


 l2arc_write_boost 8388608


 l2arc_write_max 8388608


 metaslab_aliquot 524288


 metaslab_bias_enabled 1


 metaslab_debug_load 0


 metaslab_debug_unload 0


 metaslab_fragmentation_factor_enabled 1


 metaslab_lba_weighting_enabled 1


 metaslab_preload_enabled 1


 metaslabs_per_vdev 200


 send_holes_without_birth_time 1


 spa_asize_inflation 24


 spa_config_path/etc/zfs/zpool.cache


 spa_load_verify_data 1


 spa_load_verify_maxinflight 10000


 spa_load_verify_metadata 1


 spa_slop_shift 5


 zfetch_array_rd_sz 1048576


 zfetch_max_distance 8388608


 zfetch_max_streams 8


 zfetch_min_sec_reap 2


 zfs_abd_scatter_enabled 1


 zfs_abd_scatter_max_order 10


 zfs_admin_snapshot 1


 zfs_arc_average_blocksize 8192


 zfs_arc_dnode_limit 0


 zfs_arc_dnode_limit_percent 10


 zfs_arc_dnode_reduce_percent 10


 zfs_arc_grow_retry 0


 zfs_arc_lotsfree_percent 10


 zfs_arc_max 0


 zfs_arc_meta_adjust_restarts 4096


 zfs_arc_meta_limit 0


 zfs_arc_meta_limit_percent 75


 zfs_arc_meta_min 0


 zfs_arc_meta_prune 10000


 zfs_arc_meta_strategy 1


 zfs_arc_min 0


 zfs_arc_min_prefetch_lifespan 0


 zfs_arc_p_aggressive_disable 1


 zfs_arc_p_dampener_disable 1


 zfs_arc_p_min_shift 0


 zfs_arc_pc_percent 0


 zfs_arc_shrink_shift 0


 zfs_arc_sys_free 0


 zfs_autoimport_disable 1


 zfs_compressed_arc_enabled 1


 zfs_dbgmsg_enable 0


 zfs_dbgmsg_maxsize 4194304


 zfs_dbuf_state_index 0


 zfs_deadman_checktime_ms 5000


 zfs_deadman_enabled 1


 zfs_deadman_synctime_ms 1000000


 zfs_dedup_prefetch 0


 zfs_delay_min_dirty_percent 60


 zfs_delay_scale 500000


 zfs_delete_blocks 20480


 zfs_dirty_data_max 4294967296


 zfs_dirty_data_max_max 4294967296


 zfs_dirty_data_max_max_percent 25


 zfs_dirty_data_max_percent 10


 zfs_dirty_data_sync 67108864


 zfs_dmu_offset_next_sync 0


 zfs_expire_snapshot 300


 zfs_flags 0


 zfs_free_bpobj_enabled 1


 zfs_free_leak_on_eio 0


 zfs_free_max_blocks 100000


 zfs_free_min_time_ms 1000


 zfs_immediate_write_sz 32768


 zfs_max_recordsize 1048576


 zfs_mdcomp_disable 0


 zfs_metaslab_fragmentation_threshold 70


 zfs_metaslab_segment_weight_enabled 1


 zfs_metaslab_switch_threshold 2


 zfs_mg_fragmentation_threshold 85


 zfs_mg_noalloc_threshold 0


 zfs_multihost_fail_intervals 5


 zfs_multihost_history 0


 zfs_multihost_import_intervals 10


 zfs_multihost_interval 1000


 zfs_multilist_num_sublists 0


 zfs_no_scrub_io 0


 zfs_no_scrub_prefetch 0


 zfs_nocacheflush 0


 zfs_nopwrite_enabled 1


 zfs_object_mutex_size 64


 zfs_pd_bytes_max 52428800


 zfs_per_txg_dirty_frees_percent 30


 zfs_prefetch_disable 0


 zfs_read_chunk_size 1048576


 zfs_read_history 0


 zfs_read_history_hits 0


 zfs_recover 0


 zfs_resilver_delay 2


 zfs_resilver_min_time_ms 3000


 zfs_scan_idle 50


 zfs_scan_min_time_ms 1000


 zfs_scrub_delay 4


 zfs_send_corrupt_data 0


 zfs_sync_pass_deferred_free 2


 zfs_sync_pass_dont_compress 5


 zfs_sync_pass_rewrite 2


 zfs_sync_taskq_batch_pct 75


 zfs_top_maxinflight 32


 zfs_txg_history 0


 zfs_txg_timeout 5


 zfs_vdev_aggregation_limit 131072


 zfs_vdev_async_read_max_active 3


 zfs_vdev_async_read_min_active 1


 zfs_vdev_async_write_active_max_dirty_percent 60


 zfs_vdev_async_write_active_min_dirty_percent 30


 zfs_vdev_async_write_max_active 10


 zfs_vdev_async_write_min_active 2


 zfs_vdev_cache_bshift 16


 zfs_vdev_cache_max 16384


 zfs_vdev_cache_size 0


 zfs_vdev_max_active 1000


 zfs_vdev_mirror_non_rotating_inc 0


 zfs_vdev_mirror_non_rotating_seek_inc 1


 zfs_vdev_mirror_rotating_inc 0


 zfs_vdev_mirror_rotating_seek_inc 5


 zfs_vdev_mirror_rotating_seek_offset 1048576


 zfs_vdev_queue_depth_pct 1000


 zfs_vdev_raidz_impl [fastest] original scalar sse2 ssse3 avx2


 zfs_vdev_read_gap_limit 32768


 zfs_vdev_scheduler noop


 zfs_vdev_scrub_max_active 2


 zfs_vdev_scrub_min_active 1


 zfs_vdev_sync_read_max_active 10


 zfs_vdev_sync_read_min_active 10


 zfs_vdev_sync_write_max_active 10


 zfs_vdev_sync_write_min_active 10


 zfs_vdev_write_gap_limit 4096


 zfs_zevent_cols 80


 zfs_zevent_console 0


 zfs_zevent_len_max 128


 zfs_zil_clean_taskq_maxalloc 1048576


 zfs_zil_clean_taskq_minalloc 1024


 zfs_zil_clean_taskq_nthr_pct 100


 zil_replay_disable 0


 zil_slog_bulk 786432


 zio_delay_max 30000


 zio_dva_throttle_enabled 1


 zio_requeue_io_start_cut_in_line 1


 zio_taskq_batch_pct 75


 zvol_inhibit_dev 0


 zvol_major 230


 zvol_max_discard_blocks 16384


 zvol_prefetch_bytes 131072


 zvol_request_sync 0


 zvol_threads 32


 zvol_volmode 1




回答 1:

在将缓存设备添加到池中时,仅使用比主池设备更快的L2ARC,并且仅当你显式地将缓存设备附加到池中时,这里操作才有效。

arc_summary 清楚地报告你的L2ARC统计信息,但显然只有当你将它附加到主池时。

如果你没有看到任何L2ARC数据,这意味着你现在已经有了级的L2缓存。 要确定,请发布 zpool status的输出

编辑:zpool status 确认你已经有了,没有 L2ARC。 在输出的过程中,arcstat 也没有任何迹象;惟一的引用是关于可以调,在本例中,我们没有任何。


回答 2:

要添加到 @shodanshok's 应答:

将L2ARC与ZFS一起使用不会明显地使事情变得更快。 在不同的论坛上有很多讨论,但基本上你需要保持L2ARC的大小,如果没有大量的内存。 你说,在服务器中有 64 GB的内存,并且根据几个讨论,L2ARC可以能是有意义的。

换句话说:实现 ZFS L2ARC应该是在你自己的系统负载上执行生命的结果,并且不需要。



数据  Require  Required  ZFS  
相关文章