web-dev-qa-db-ja.com

プライマリデータがすでにSSDにある場合、ZFS L2ARCは必要ですか?

Linux上のZFSをワークロード(Postgresとファイルサーバーが同じ物理マシン上にある[1])に合わせて調整しようとしています。本当にL2ARCが必要かどうかを知りたいと思っていました。

https://www.zfsbuild.com/2010/04/15/explanation-of-arc-and-l2arc/ で提供された情報が2010年に書かれた場合、SSDは高価です)正しいですが、L2ARCを無効にするべきではありませんか? ARCにキャッシュミスがある場合、L2ARCとメインデータセットからの読み取りには同じ時間がかかります(両方ともSSDになります)。私の理解は正しいですか?

関連する質問-L2ARCの概要を確認するにはどうすればよいですか? arc_summaryがL2ARCに関する情報を提供することはないと思いますよね?

L2ARCは、第2レベルの適応置換キャッシュです。 L2ARCは、ZFSシステムでは「キャッシュドライブ」と呼ばれることがよくあります。

[..]

これらのキャッシュドライブは、物理的にMLCスタイルのSSDドライブです。これらのSSDドライブは、システムメモリよりも低速ですが、ハードドライブよりもはるかに高速です。さらに重要なことに、SSDドライブはシステムメモリよりもはるかに安価です。

[..]

キャッシュドライブがZFSプールに存在する場合、キャッシュドライブは、ARCに適合しない頻繁にアクセスされるデータをキャッシュします。読み取り要求がシステムに入ると、ZFSはARCからの要求を処理しようとします。データがARCにない場合、ZFSはL2ARCからの要求を処理しようとします。ハードドライブは、ARCまたはL2ARCのいずれにもデータが存在しない場合にのみアクセスされます。

[1]ハードウェア構成: https://www.hetzner.com/dedicated-rootserver/px61-nvme

  • 512 GB NVMe Gen3 x4 SSD x 2
  • 64 GB DDR4 ECC RAM
  • インテル®Xeon®E3-1275 v5クアッドコアSkylakeプロセッサー(4コア/ 8スレッド)

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
3
Saurabh Nanda

L2ARCは、メインのプールデバイスよりも速いを使用する場合にのみ役立ち、キャッシュデバイスを明示的にプールに接続する場合にのみアクティブになります。

arc_summaryはL2ARC統計を明確に報告しますが、明らかにそれをメインプールに接続した場合のみです。

L2ARC統計が表示されない場合は、現在no L2キャッシュがあることを意味します。確かに、zpool statusの出力を投稿してください

編集:zpool statusno L2ARCであることを確認します。 arcstatの出力もL2ARCの兆候を示していません。唯一の参照はtunablesに関するものであり、この場合、影響はありません。

4
shodanshok

@shodanshokの回答に追加するには:

ZFSでL2ARCを使用しても、明確に処理が速くなるわけではありません。背景が詳細に説明されているさまざまなフォーラムで多数のディスカッションがありますが、基本的には、a)L2ARCのサイズを小さくして読み取りレイテンシを削減したい、およびb)おそらく、1つは使用したくない場合大容量のRAMはありません。あなたはサーバーに64 GBのメモリがあると言い、いくつかの議論によると、これはL2ARCが意味をなす最も低い場所です。

つまり、ZFS L2ARCの実装は、独自のシステム負荷に対して実物そっくりのテストを実行した結果である必要があり、まったく必要ない場合があります。

1
Mikael H