zfs 일반 읽기 일시 중지

zfs 일반 읽기 일시 중지

거의 순전히 읽기 전용 워크로드로 openindiana에서 실행되는 zfs 파일 시스템이 있습니다. 최근 우리는 io가 약 2-3초 동안 1분마다 차단되거나 일시 중지되는 것을 발견했습니다. 왜 이런 일이 발생하고 이를 중지하는 방법을 아는 사람이 있습니까?

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%
  • 유닉스 스위치 1 0.0%
  • 유닉스`tsc_scalehrtime 1 0.0%
  • zfs`ddt_stat_add 1 0.0%
  • unix`lwp_segregs_save 1 0.0%
  • rootnex`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%
  • 유닉스`strcmp 1 0.0%
  • 유닉스`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_drive 1 0.0%
  • 유닉스`disp 1 0.0%
  • genunix`cpu_update_pct 1 0.0%
  • 유닉스`tsc_gethrtime 1 0.0%
  • ip`tcp_build_hdrs 1 0.0%
  • genunix`dnlc_lookup 1 0.0%
  • unix`page_create_va 1 0.0%
  • genunix`kmem_zalloc 1 0.0%
  • 유닉스`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%
  • 유닉스 이력서 1 0.0%
  • 유닉스`do_splx 1 0.0%
  • unix`page_clr_all_props 1 0.0%
  • bnx`bnx_xmit_ring_xmit_mblk 1 0.0%
  • genunix`list_create 1 0.0%
  • scsi`scsi_uscsi_handle_cmd 1 0.0%
  • unix`page_lookup_nowait 1 0.0%
  • genunix`syscall_mstate 1 0.0%
  • genunix`kmem_free 1 0.0%
  • genunix`as_map_locked 1 0.0%
  • 유닉스`cpu_idle_adaptive 1 0.0%
  • unix`page_lookup_create 1 0.0%
  • sd`sd_start_cmds 1 0.0%
  • 유닉스`0xffffffffb85 1 0.0%
  • unix`atomic_cas_64 1 0.0%
  • genunix`restorectx 1 0.0%
  • genunix`vmem_is_populator 1 0.0%
  • 유닉스`disp_anywork 1 0.0%
  • 유닉스`prefetch_page_r 1 0.0%
  • sd`xbuf_iostart 1 0.0%
  • zfs`zfs_read 1 0.0%
  • 유닉스`hwblkclr 1 0.0%
  • specfs`sfind 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%
  • 유닉스`tsc_read 2 0.0%
  • unix`tsc_gethrtimeunscaled 2 0.0%
  • genunix`fop_getpage 2 0.0%
  • 유닉스`inflate_table 2 0.0%
  • 유닉스`ddi_get32 2 0.0%
  • 유닉스`mutex_exit 2 0.0%
  • 유닉스 유휴 3 0.0%
  • zfs`lzjb_compress 3 0.0%
  • 유닉스`mutex_enter 6 0.1%
  • unix`page_nextn 9 0.1%
  • genunix`fsflush_do_pages 9 0.1%
  • 유닉스`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%
  • 유닉스`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`callout_downheap 1 0.0%
  • 유닉스`prefetch_page_r 1 0.0%
  • dtrace`dtrace_state_clean 1 0.0%
  • genunix`fsflush 1 0.0%
  • 유닉스`link_ptp 1 0.0%
  • ip`ip_input_cksum_v4 1 0.0%
  • ip`tcp_timer_callback 1 0.0%
  • unix`page_pptonum 1 0.0%
  • 유닉스`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 잠재력을 갖고 있습니다.하나디스크. (이것이 아마도 가장 큰 문제일 것입니다)
  • RAIDZ1에 드라이브가 너무 많습니다. 7시 넘어가면 안되는데...
  • 여기에 도움이 될 수 있는 다른 조정 가능 항목이 있을 수 있습니다. 보여 줄래 zfs list?

다음 내용을 읽어보세요:http://nex7.blogspot.com/2013/03/readme1st.html보다 일반적인 지침은 다음과 같습니다.

관련 정보