zfs の通常の読み取り一時停止

zfs の通常の読み取り一時停止

私たちは、ほぼ完全に読み取り専用のワークロードを持つ openindiana 上で実行されている zfs ファイル システムを持っています。最近、IO が 1 分ごとに約 2 ~ 3 秒間ブロックまたは一時停止することがわかりました。なぜこのようなことが起こるのか、また、これを阻止する方法を知っている人はいますか?

pool: data

state: ONLINE

status: The pool is formatted using a legacy on-disk format.  The pool can
        still be used, but some features are unavailable.

action: Upgrade the pool using 'zpool upgrade'.  Once this is done, the
        pool will no longer be accessible on software that does not support feature
        flags.

scan: none requested

config:

        NAME                       STATE     READ WRITE CKSUM
        data01                     ONLINE       0     0     0
          raidz1-0                 ONLINE       0     0     0
            c6t5E83A97A6BAB722Fd0  ONLINE       0     0     0
            c6t5E83A97BBE7FE8F1d0  ONLINE       0     0     0
            c6t5E83A97CB2D1609Fd0  ONLINE       0     0     0
            c6t5E83A97E0D2BC6ACd0  ONLINE       0     0     0
            c6t5E83A97E1E2A6F66d0  ONLINE       0     0     0
            c6t5E83A97E4C627FC0d0  ONLINE       0     0     0
            c6t5E83A97E44EB7FC0d0  ONLINE       0     0     0
            c6t5E83A97E124F8168d0  ONLINE       0     0     0
            c6t5E83A97E86762E4Dd0  ONLINE       0     0     0
            c6t5E83A97E25716311d0  ONLINE       0     0     0
            c6t5E83A97EBEEB8B60d0  ONLINE       0     0     0
            c6t5E83A97FCF5551F5d0  ONLINE       0     0     0

errors: No known data errors

@jlliagre のリクエストに応じて、良いときと悪いときの hotkernel の呼び出し結果を以下に示します。

楽しい時間

  • zfs`vdev_is_dead 1 0.0%
  • ip`conn_ip_output 1 0.0%
  • sd`sdintr 1 0.0%
  • mpt_sas`mptsas_start_cmd0 1 0.0%
  • genunix`new_mstate 1 0.0%
  • genunix`segvn_faulta 1 0.0%
  • unix`スイッチ 1 0.0%
  • unix`tsc_scalehrtime 1 0.0%
  • zfs`ddt_stat_add 1 0.0%
  • unix`lwp_segregs_save 1 0.0%
  • ルートネックス`rootnex_get_sgl 1 0.0%
  • genunix`ldi_strategy 1 0.0%
  • mpt_sas`mptsas_scsi_init_pkt 1 0.0%
  • genunix`ddi_fm_dma_err_get 1 0.0%
  • zfs`zio_create 1 0.0%
  • zfs`zio_destroy 1 0.0%
  • unix`strcmp 1 0.0%
  • unix`cpu_acpi_idle 1 0.0%
  • ip`ip_xmit_attach_llhdr 1 0.0%
  • genunix`mdi_pi_get_vhci_private 1 0.0%
  • genunix`lbolt_event_driven 1 0.0%
  • unix`disp 1 0.0%
  • genunix`cpu_update_pct 1 0.0%
  • unix`tsc_gethrtime 1 0.0%
  • ip`tcp_build_hdrs 1 0.0%
  • genunix`dnlc_lookup 1 0.0%
  • unix`ページ作成_va 1 0.0%
  • genunix`kmem_zalloc 1 0.0%
  • unix`mmapobj_map_elf 1 0.0%
  • bnx`bnx_intr_1lvl 1 0.0%
  • genunix`btopr 1 0.0%
  • genunix`fsflush 1 0.0%
  • genunix`gexec 1 0.0%
  • unix`mmu_tlbflush_entry 1 0.0%
  • unix`hment_alloc 1 0.0%
  • specfs`spec_lockcsp 1 0.0%
  • zfs`vdev_stat_update 1 0.0%
  • genunix`stk_getptr 1 0.0%
  • unix`レジューム 1 0.0%
  • unix`do_splx 1 0.0%
  • unix`page_clr_all_props 1 0.0%
  • bnx`bnx_xmit_ring_xmit_mblk 1 0.0%
  • genunix`リスト_create 1 0.0%
  • scsi`scsi_uscsi_handle_cmd 1 0.0%
  • unix`ページルックアップノーウェイト 1 0.0%
  • genunix`syscall_mstate 1 0.0%
  • genunix`kmem_free 1 0.0%
  • genunix`as_map_locked 1 0.0%
  • unix`CPUアイドル適応1 0.0%
  • unix`ページルックアップ作成 1 0.0%
  • sd`sd_start_cmds 1 0.0%
  • unix`0xfffffffffb85 1 0.0%
  • unix`atomic_cas_64 1 0.0%
  • genunix`restorectx 1 0.0%
  • genunix`vmem_is_populator 1 0.0%
  • unix`disp_anywork 1 0.0%
  • unix`prefetch_page_r 1 0.0%
  • sd`xbuf_io開始1 0.0%
  • zfs`zfs_read 1 0.0%
  • unix`hwblkclr 1 0.0%
  • スペック検索 1 0.0%
  • genunix`swapfs_getvp 1 0.0%
  • zfs`vdev_cache_allocate 1 0.0%
  • zfs`buf_hash_find 1 0.0%
  • genunix`taskq_thread 2 0.0%
  • unix`tsc_read 2 0.0%
  • unix`tsc_gethrtimeunscaled 2 0.0%
  • genunix`fop_getpage 2 0.0%
  • unix`inflate_table 2 0.0%
  • unix`ddi_get32 2 0.0%
  • unix`mutex_exit 2 0.0%
  • unix`アイドル 3 0.0%
  • zfs`lzjb_compress 3 0.0%
  • unix`mutex_enter 6 0.1%
  • unix`page_nextn 9 0.1%
  • genunix`fsflush_do_pages 9 0.1%
  • unix`disp_getwork 12 0.2%
  • unix`acpi_cpu_cstate 441 5.7%
  • unix`i86_mwait 7118 92.7%

悪い時

  • genunix`cpu_update_pct 1 0.0%
  • unix`splr 1 0.0%
  • bnx`bnx_timer 1 0.0%
  • unix`av_check_softint_pending 1 0.0%
  • genunix`devid_str_decode_id 1 0.0%
  • pcplusmp`apic_send_ipi 1 0.0%
  • genunix`コールアウト_ダウンヒープ 1 0.0%
  • unix`prefetch_page_r 1 0.0%
  • dtrace`dtrace_state_clean 1 0.0%
  • genunix`fsflush 1 0.0%
  • unix`link_ptp 1 0.0%
  • ip`ip_input_cksum_v4 1 0.0%
  • ip`tcp_timer_callback 1 0.0%
  • unix`ページ_pptonum 1 0.0%
  • unix`do_splx 1 0.0%
  • unix`page_nextn 5 0.1%
  • genunix`fsflush_do_pages 6 0.1%
  • unix`acpi_cpu_cstate 782 17.7%
  • unix`i86_mwait

答え1

おそらく、マシンの電源管理に問題があるのでしょう。

/etc/power.confファイルに次の行を追加して無効にしてみてください

cpupm disable

次回の実行

pmconfig

I/O 動作が変化するかどうかを確認します。


アップデート:

電源管理を無効にしても何も変わりませんが、実際には、カーネルは「悪い時間」に ZFS アクティビティがゼロの状態で基本的にアイドル状態になります。

その場合、アプリケーションは I/O バウンドではなく、これらの期間中に単に何か他の処理を実行していると推測します。

答え2

まあ、ここにはいくつか間違っている点があります...

  • zpool のバージョンが古いです。zpool upgrade修正します。
  • プールの設計は、高パフォーマンスには適していません。有効なIOPSの潜在能力は、1つディスク。(これがおそらく最大の問題です)
  • RAIDZ1 にドライブが多すぎます。7 台を超えないようにしてください...
  • ここで役立つ可能性のある他の調整可能な項目がある可能性があります。示してもらえますかzfs list?

以下を読んでみてください:http://nex7.blogspot.com/2013/03/readme1st.htmlより一般的なガイドラインについては、こちらをご覧ください。

関連情報