1eda14cbcSMatt Macy /* 2eda14cbcSMatt Macy * CDDL HEADER START 3eda14cbcSMatt Macy * 4eda14cbcSMatt Macy * The contents of this file are subject to the terms of the 5eda14cbcSMatt Macy * Common Development and Distribution License (the "License"). 6eda14cbcSMatt Macy * You may not use this file except in compliance with the License. 7eda14cbcSMatt Macy * 8eda14cbcSMatt Macy * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9271171e0SMartin Matuska * or https://opensource.org/licenses/CDDL-1.0. 10eda14cbcSMatt Macy * See the License for the specific language governing permissions 11eda14cbcSMatt Macy * and limitations under the License. 12eda14cbcSMatt Macy * 13eda14cbcSMatt Macy * When distributing Covered Code, include this CDDL HEADER in each 14eda14cbcSMatt Macy * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15eda14cbcSMatt Macy * If applicable, add the following below this CDDL HEADER, with the 16eda14cbcSMatt Macy * fields enclosed by brackets "[]" replaced with your own identifying 17eda14cbcSMatt Macy * information: Portions Copyright [yyyy] [name of copyright owner] 18eda14cbcSMatt Macy * 19eda14cbcSMatt Macy * CDDL HEADER END 20eda14cbcSMatt Macy */ 21eda14cbcSMatt Macy 22eda14cbcSMatt Macy #include <sys/list.h> 23eda14cbcSMatt Macy 24eda14cbcSMatt Macy #if defined(_KERNEL) 25eda14cbcSMatt Macy #if defined(HAVE_DECLARE_EVENT_CLASS) 26eda14cbcSMatt Macy 27eda14cbcSMatt Macy #undef TRACE_SYSTEM 28eda14cbcSMatt Macy #define TRACE_SYSTEM zfs 29eda14cbcSMatt Macy 30eda14cbcSMatt Macy #undef TRACE_SYSTEM_VAR 31eda14cbcSMatt Macy #define TRACE_SYSTEM_VAR zfs_arc 32eda14cbcSMatt Macy 33eda14cbcSMatt Macy #if !defined(_TRACE_ARC_H) || defined(TRACE_HEADER_MULTI_READ) 34eda14cbcSMatt Macy #define _TRACE_ARC_H 35eda14cbcSMatt Macy 36eda14cbcSMatt Macy #include <linux/tracepoint.h> 37eda14cbcSMatt Macy #include <sys/types.h> 38eda14cbcSMatt Macy #include <sys/trace_common.h> /* For ZIO macros */ 39eda14cbcSMatt Macy 40eda14cbcSMatt Macy /* 41eda14cbcSMatt Macy * Generic support for one argument tracepoints of the form: 42eda14cbcSMatt Macy * 43eda14cbcSMatt Macy * DTRACE_PROBE1(..., 44eda14cbcSMatt Macy * arc_buf_hdr_t *, ...); 45eda14cbcSMatt Macy */ 46eda14cbcSMatt Macy /* BEGIN CSTYLED */ 47eda14cbcSMatt Macy DECLARE_EVENT_CLASS(zfs_arc_buf_hdr_class, 48eda14cbcSMatt Macy TP_PROTO(arc_buf_hdr_t *ab), 49eda14cbcSMatt Macy TP_ARGS(ab), 50eda14cbcSMatt Macy TP_STRUCT__entry( 51eda14cbcSMatt Macy __array(uint64_t, hdr_dva_word, 2) 52eda14cbcSMatt Macy __field(uint64_t, hdr_birth) 53eda14cbcSMatt Macy __field(uint32_t, hdr_flags) 54eda14cbcSMatt Macy __field(arc_buf_contents_t, hdr_type) 55eda14cbcSMatt Macy __field(uint16_t, hdr_psize) 56eda14cbcSMatt Macy __field(uint16_t, hdr_lsize) 57eda14cbcSMatt Macy __field(uint64_t, hdr_spa) 58eda14cbcSMatt Macy __field(arc_state_type_t, hdr_state_type) 59eda14cbcSMatt Macy __field(clock_t, hdr_access) 60eda14cbcSMatt Macy __field(uint32_t, hdr_mru_hits) 61eda14cbcSMatt Macy __field(uint32_t, hdr_mru_ghost_hits) 62eda14cbcSMatt Macy __field(uint32_t, hdr_mfu_hits) 63eda14cbcSMatt Macy __field(uint32_t, hdr_mfu_ghost_hits) 64eda14cbcSMatt Macy __field(uint32_t, hdr_l2_hits) 65eda14cbcSMatt Macy __field(int64_t, hdr_refcount) 66eda14cbcSMatt Macy ), 67eda14cbcSMatt Macy TP_fast_assign( 68eda14cbcSMatt Macy __entry->hdr_dva_word[0] = ab->b_dva.dva_word[0]; 69eda14cbcSMatt Macy __entry->hdr_dva_word[1] = ab->b_dva.dva_word[1]; 70eda14cbcSMatt Macy __entry->hdr_birth = ab->b_birth; 71eda14cbcSMatt Macy __entry->hdr_flags = ab->b_flags; 72eda14cbcSMatt Macy __entry->hdr_psize = ab->b_psize; 73eda14cbcSMatt Macy __entry->hdr_lsize = ab->b_lsize; 74eda14cbcSMatt Macy __entry->hdr_spa = ab->b_spa; 75eda14cbcSMatt Macy __entry->hdr_state_type = ab->b_l1hdr.b_state->arcs_state; 76eda14cbcSMatt Macy __entry->hdr_access = ab->b_l1hdr.b_arc_access; 77eda14cbcSMatt Macy __entry->hdr_mru_hits = ab->b_l1hdr.b_mru_hits; 78eda14cbcSMatt Macy __entry->hdr_mru_ghost_hits = ab->b_l1hdr.b_mru_ghost_hits; 79eda14cbcSMatt Macy __entry->hdr_mfu_hits = ab->b_l1hdr.b_mfu_hits; 80eda14cbcSMatt Macy __entry->hdr_mfu_ghost_hits = ab->b_l1hdr.b_mfu_ghost_hits; 812faf504dSMartin Matuska __entry->hdr_l2_hits = ab->b_l2hdr.b_hits; 82eda14cbcSMatt Macy __entry->hdr_refcount = ab->b_l1hdr.b_refcnt.rc_count; 83eda14cbcSMatt Macy ), 84eda14cbcSMatt Macy TP_printk("hdr { dva 0x%llx:0x%llx birth %llu " 85*b2526e8bSMartin Matuska "flags 0x%x type %u psize %u lsize %u spa %llu " 86eda14cbcSMatt Macy "state_type %u access %lu mru_hits %u mru_ghost_hits %u " 87eda14cbcSMatt Macy "mfu_hits %u mfu_ghost_hits %u l2_hits %u refcount %lli }", 88eda14cbcSMatt Macy __entry->hdr_dva_word[0], __entry->hdr_dva_word[1], 89eda14cbcSMatt Macy __entry->hdr_birth, __entry->hdr_flags, 90*b2526e8bSMartin Matuska __entry->hdr_type, __entry->hdr_psize, 91eda14cbcSMatt Macy __entry->hdr_lsize, __entry->hdr_spa, __entry->hdr_state_type, 92eda14cbcSMatt Macy __entry->hdr_access, __entry->hdr_mru_hits, 93eda14cbcSMatt Macy __entry->hdr_mru_ghost_hits, __entry->hdr_mfu_hits, 94eda14cbcSMatt Macy __entry->hdr_mfu_ghost_hits, __entry->hdr_l2_hits, 95eda14cbcSMatt Macy __entry->hdr_refcount) 96eda14cbcSMatt Macy ); 97eda14cbcSMatt Macy /* END CSTYLED */ 98eda14cbcSMatt Macy 99eda14cbcSMatt Macy #define DEFINE_ARC_BUF_HDR_EVENT(name) \ 100eda14cbcSMatt Macy DEFINE_EVENT(zfs_arc_buf_hdr_class, name, \ 101eda14cbcSMatt Macy TP_PROTO(arc_buf_hdr_t *ab), \ 102eda14cbcSMatt Macy TP_ARGS(ab)) 103eda14cbcSMatt Macy DEFINE_ARC_BUF_HDR_EVENT(zfs_arc__hit); 10415f0b8c3SMartin Matuska DEFINE_ARC_BUF_HDR_EVENT(zfs_arc__iohit); 105eda14cbcSMatt Macy DEFINE_ARC_BUF_HDR_EVENT(zfs_arc__evict); 106eda14cbcSMatt Macy DEFINE_ARC_BUF_HDR_EVENT(zfs_arc__delete); 107eda14cbcSMatt Macy DEFINE_ARC_BUF_HDR_EVENT(zfs_new_state__mru); 108eda14cbcSMatt Macy DEFINE_ARC_BUF_HDR_EVENT(zfs_new_state__mfu); 10915f0b8c3SMartin Matuska DEFINE_ARC_BUF_HDR_EVENT(zfs_new_state__uncached); 110eda14cbcSMatt Macy DEFINE_ARC_BUF_HDR_EVENT(zfs_arc__async__upgrade__sync); 111eda14cbcSMatt Macy DEFINE_ARC_BUF_HDR_EVENT(zfs_l2arc__hit); 112eda14cbcSMatt Macy DEFINE_ARC_BUF_HDR_EVENT(zfs_l2arc__miss); 113eda14cbcSMatt Macy 114eda14cbcSMatt Macy /* 115eda14cbcSMatt Macy * Generic support for two argument tracepoints of the form: 116eda14cbcSMatt Macy * 117eda14cbcSMatt Macy * DTRACE_PROBE2(..., 118eda14cbcSMatt Macy * vdev_t *, ..., 119eda14cbcSMatt Macy * zio_t *, ...); 120eda14cbcSMatt Macy */ 121eda14cbcSMatt Macy /* BEGIN CSTYLED */ 122eda14cbcSMatt Macy DECLARE_EVENT_CLASS(zfs_l2arc_rw_class, 123eda14cbcSMatt Macy TP_PROTO(vdev_t *vd, zio_t *zio), 124eda14cbcSMatt Macy TP_ARGS(vd, zio), 125eda14cbcSMatt Macy TP_STRUCT__entry( 126eda14cbcSMatt Macy __field(uint64_t, vdev_id) 127eda14cbcSMatt Macy __field(uint64_t, vdev_guid) 128eda14cbcSMatt Macy __field(uint64_t, vdev_state) 129eda14cbcSMatt Macy ZIO_TP_STRUCT_ENTRY 130eda14cbcSMatt Macy ), 131eda14cbcSMatt Macy TP_fast_assign( 132eda14cbcSMatt Macy __entry->vdev_id = vd->vdev_id; 133eda14cbcSMatt Macy __entry->vdev_guid = vd->vdev_guid; 134eda14cbcSMatt Macy __entry->vdev_state = vd->vdev_state; 135eda14cbcSMatt Macy ZIO_TP_FAST_ASSIGN 136eda14cbcSMatt Macy ), 137eda14cbcSMatt Macy TP_printk("vdev { id %llu guid %llu state %llu } " 138eda14cbcSMatt Macy ZIO_TP_PRINTK_FMT, __entry->vdev_id, __entry->vdev_guid, 139eda14cbcSMatt Macy __entry->vdev_state, ZIO_TP_PRINTK_ARGS) 140eda14cbcSMatt Macy ); 141eda14cbcSMatt Macy /* END CSTYLED */ 142eda14cbcSMatt Macy 143eda14cbcSMatt Macy #define DEFINE_L2ARC_RW_EVENT(name) \ 144eda14cbcSMatt Macy DEFINE_EVENT(zfs_l2arc_rw_class, name, \ 145eda14cbcSMatt Macy TP_PROTO(vdev_t *vd, zio_t *zio), \ 146eda14cbcSMatt Macy TP_ARGS(vd, zio)) 147eda14cbcSMatt Macy DEFINE_L2ARC_RW_EVENT(zfs_l2arc__read); 148eda14cbcSMatt Macy DEFINE_L2ARC_RW_EVENT(zfs_l2arc__write); 149eda14cbcSMatt Macy 150eda14cbcSMatt Macy 151eda14cbcSMatt Macy /* 152eda14cbcSMatt Macy * Generic support for two argument tracepoints of the form: 153eda14cbcSMatt Macy * 154eda14cbcSMatt Macy * DTRACE_PROBE2(..., 155eda14cbcSMatt Macy * zio_t *, ..., 156eda14cbcSMatt Macy * l2arc_write_callback_t *, ...); 157eda14cbcSMatt Macy */ 158eda14cbcSMatt Macy /* BEGIN CSTYLED */ 159eda14cbcSMatt Macy DECLARE_EVENT_CLASS(zfs_l2arc_iodone_class, 160eda14cbcSMatt Macy TP_PROTO(zio_t *zio, l2arc_write_callback_t *cb), 161eda14cbcSMatt Macy TP_ARGS(zio, cb), 162eda14cbcSMatt Macy TP_STRUCT__entry(ZIO_TP_STRUCT_ENTRY), 163eda14cbcSMatt Macy TP_fast_assign(ZIO_TP_FAST_ASSIGN), 164eda14cbcSMatt Macy TP_printk(ZIO_TP_PRINTK_FMT, ZIO_TP_PRINTK_ARGS) 165eda14cbcSMatt Macy ); 166eda14cbcSMatt Macy /* END CSTYLED */ 167eda14cbcSMatt Macy 168eda14cbcSMatt Macy #define DEFINE_L2ARC_IODONE_EVENT(name) \ 169eda14cbcSMatt Macy DEFINE_EVENT(zfs_l2arc_iodone_class, name, \ 170eda14cbcSMatt Macy TP_PROTO(zio_t *zio, l2arc_write_callback_t *cb), \ 171eda14cbcSMatt Macy TP_ARGS(zio, cb)) 172eda14cbcSMatt Macy DEFINE_L2ARC_IODONE_EVENT(zfs_l2arc__iodone); 173eda14cbcSMatt Macy 174eda14cbcSMatt Macy 175eda14cbcSMatt Macy /* 176eda14cbcSMatt Macy * Generic support for four argument tracepoints of the form: 177eda14cbcSMatt Macy * 178eda14cbcSMatt Macy * DTRACE_PROBE4(..., 179eda14cbcSMatt Macy * arc_buf_hdr_t *, ..., 180eda14cbcSMatt Macy * const blkptr_t *, 181eda14cbcSMatt Macy * uint64_t, 182eda14cbcSMatt Macy * const zbookmark_phys_t *); 183eda14cbcSMatt Macy */ 184eda14cbcSMatt Macy /* BEGIN CSTYLED */ 185eda14cbcSMatt Macy DECLARE_EVENT_CLASS(zfs_arc_miss_class, 186eda14cbcSMatt Macy TP_PROTO(arc_buf_hdr_t *hdr, 187eda14cbcSMatt Macy const blkptr_t *bp, uint64_t size, const zbookmark_phys_t *zb), 188eda14cbcSMatt Macy TP_ARGS(hdr, bp, size, zb), 189eda14cbcSMatt Macy TP_STRUCT__entry( 190eda14cbcSMatt Macy __array(uint64_t, hdr_dva_word, 2) 191eda14cbcSMatt Macy __field(uint64_t, hdr_birth) 192eda14cbcSMatt Macy __field(uint32_t, hdr_flags) 193eda14cbcSMatt Macy __field(arc_buf_contents_t, hdr_type) 194eda14cbcSMatt Macy __field(uint16_t, hdr_psize) 195eda14cbcSMatt Macy __field(uint16_t, hdr_lsize) 196eda14cbcSMatt Macy __field(uint64_t, hdr_spa) 197eda14cbcSMatt Macy __field(arc_state_type_t, hdr_state_type) 198eda14cbcSMatt Macy __field(clock_t, hdr_access) 199eda14cbcSMatt Macy __field(uint32_t, hdr_mru_hits) 200eda14cbcSMatt Macy __field(uint32_t, hdr_mru_ghost_hits) 201eda14cbcSMatt Macy __field(uint32_t, hdr_mfu_hits) 202eda14cbcSMatt Macy __field(uint32_t, hdr_mfu_ghost_hits) 203eda14cbcSMatt Macy __field(uint32_t, hdr_l2_hits) 204eda14cbcSMatt Macy __field(int64_t, hdr_refcount) 205eda14cbcSMatt Macy 206eda14cbcSMatt Macy __array(uint64_t, bp_dva0, 2) 207eda14cbcSMatt Macy __array(uint64_t, bp_dva1, 2) 208eda14cbcSMatt Macy __array(uint64_t, bp_dva2, 2) 209eda14cbcSMatt Macy __array(uint64_t, bp_cksum, 4) 210eda14cbcSMatt Macy 211eda14cbcSMatt Macy __field(uint64_t, bp_lsize) 212eda14cbcSMatt Macy 213eda14cbcSMatt Macy __field(uint64_t, zb_objset) 214eda14cbcSMatt Macy __field(uint64_t, zb_object) 215eda14cbcSMatt Macy __field(int64_t, zb_level) 216eda14cbcSMatt Macy __field(uint64_t, zb_blkid) 217eda14cbcSMatt Macy ), 218eda14cbcSMatt Macy TP_fast_assign( 219eda14cbcSMatt Macy __entry->hdr_dva_word[0] = hdr->b_dva.dva_word[0]; 220eda14cbcSMatt Macy __entry->hdr_dva_word[1] = hdr->b_dva.dva_word[1]; 221eda14cbcSMatt Macy __entry->hdr_birth = hdr->b_birth; 222eda14cbcSMatt Macy __entry->hdr_flags = hdr->b_flags; 223eda14cbcSMatt Macy __entry->hdr_psize = hdr->b_psize; 224eda14cbcSMatt Macy __entry->hdr_lsize = hdr->b_lsize; 225eda14cbcSMatt Macy __entry->hdr_spa = hdr->b_spa; 226eda14cbcSMatt Macy __entry->hdr_state_type = hdr->b_l1hdr.b_state->arcs_state; 227eda14cbcSMatt Macy __entry->hdr_access = hdr->b_l1hdr.b_arc_access; 228eda14cbcSMatt Macy __entry->hdr_mru_hits = hdr->b_l1hdr.b_mru_hits; 229eda14cbcSMatt Macy __entry->hdr_mru_ghost_hits = hdr->b_l1hdr.b_mru_ghost_hits; 230eda14cbcSMatt Macy __entry->hdr_mfu_hits = hdr->b_l1hdr.b_mfu_hits; 231eda14cbcSMatt Macy __entry->hdr_mfu_ghost_hits = hdr->b_l1hdr.b_mfu_ghost_hits; 2322faf504dSMartin Matuska __entry->hdr_l2_hits = hdr->b_l2hdr.b_hits; 233eda14cbcSMatt Macy __entry->hdr_refcount = hdr->b_l1hdr.b_refcnt.rc_count; 234eda14cbcSMatt Macy 235eda14cbcSMatt Macy __entry->bp_dva0[0] = bp->blk_dva[0].dva_word[0]; 236eda14cbcSMatt Macy __entry->bp_dva0[1] = bp->blk_dva[0].dva_word[1]; 237eda14cbcSMatt Macy __entry->bp_dva1[0] = bp->blk_dva[1].dva_word[0]; 238eda14cbcSMatt Macy __entry->bp_dva1[1] = bp->blk_dva[1].dva_word[1]; 239eda14cbcSMatt Macy __entry->bp_dva2[0] = bp->blk_dva[2].dva_word[0]; 240eda14cbcSMatt Macy __entry->bp_dva2[1] = bp->blk_dva[2].dva_word[1]; 241eda14cbcSMatt Macy __entry->bp_cksum[0] = bp->blk_cksum.zc_word[0]; 242eda14cbcSMatt Macy __entry->bp_cksum[1] = bp->blk_cksum.zc_word[1]; 243eda14cbcSMatt Macy __entry->bp_cksum[2] = bp->blk_cksum.zc_word[2]; 244eda14cbcSMatt Macy __entry->bp_cksum[3] = bp->blk_cksum.zc_word[3]; 245eda14cbcSMatt Macy 246eda14cbcSMatt Macy __entry->bp_lsize = size; 247eda14cbcSMatt Macy 248eda14cbcSMatt Macy __entry->zb_objset = zb->zb_objset; 249eda14cbcSMatt Macy __entry->zb_object = zb->zb_object; 250eda14cbcSMatt Macy __entry->zb_level = zb->zb_level; 251eda14cbcSMatt Macy __entry->zb_blkid = zb->zb_blkid; 252eda14cbcSMatt Macy ), 253eda14cbcSMatt Macy TP_printk("hdr { dva 0x%llx:0x%llx birth %llu " 254*b2526e8bSMartin Matuska "flags 0x%x psize %u lsize %u spa %llu state_type %u " 255eda14cbcSMatt Macy "access %lu mru_hits %u mru_ghost_hits %u mfu_hits %u " 256eda14cbcSMatt Macy "mfu_ghost_hits %u l2_hits %u refcount %lli } " 257eda14cbcSMatt Macy "bp { dva0 0x%llx:0x%llx dva1 0x%llx:0x%llx dva2 " 258eda14cbcSMatt Macy "0x%llx:0x%llx cksum 0x%llx:0x%llx:0x%llx:0x%llx " 259eda14cbcSMatt Macy "lsize %llu } zb { objset %llu object %llu level %lli " 260eda14cbcSMatt Macy "blkid %llu }", 261eda14cbcSMatt Macy __entry->hdr_dva_word[0], __entry->hdr_dva_word[1], 262eda14cbcSMatt Macy __entry->hdr_birth, __entry->hdr_flags, 263*b2526e8bSMartin Matuska __entry->hdr_psize, __entry->hdr_lsize, 264eda14cbcSMatt Macy __entry->hdr_spa, __entry->hdr_state_type, __entry->hdr_access, 265eda14cbcSMatt Macy __entry->hdr_mru_hits, __entry->hdr_mru_ghost_hits, 266eda14cbcSMatt Macy __entry->hdr_mfu_hits, __entry->hdr_mfu_ghost_hits, 267eda14cbcSMatt Macy __entry->hdr_l2_hits, __entry->hdr_refcount, 268eda14cbcSMatt Macy __entry->bp_dva0[0], __entry->bp_dva0[1], 269eda14cbcSMatt Macy __entry->bp_dva1[0], __entry->bp_dva1[1], 270eda14cbcSMatt Macy __entry->bp_dva2[0], __entry->bp_dva2[1], 271eda14cbcSMatt Macy __entry->bp_cksum[0], __entry->bp_cksum[1], 272eda14cbcSMatt Macy __entry->bp_cksum[2], __entry->bp_cksum[3], 273eda14cbcSMatt Macy __entry->bp_lsize, __entry->zb_objset, __entry->zb_object, 274eda14cbcSMatt Macy __entry->zb_level, __entry->zb_blkid) 275eda14cbcSMatt Macy ); 276eda14cbcSMatt Macy /* END CSTYLED */ 277eda14cbcSMatt Macy 278eda14cbcSMatt Macy #define DEFINE_ARC_MISS_EVENT(name) \ 279eda14cbcSMatt Macy DEFINE_EVENT(zfs_arc_miss_class, name, \ 280eda14cbcSMatt Macy TP_PROTO(arc_buf_hdr_t *hdr, \ 281eda14cbcSMatt Macy const blkptr_t *bp, uint64_t size, const zbookmark_phys_t *zb), \ 282eda14cbcSMatt Macy TP_ARGS(hdr, bp, size, zb)) 283eda14cbcSMatt Macy DEFINE_ARC_MISS_EVENT(zfs_arc__miss); 284eda14cbcSMatt Macy 285eda14cbcSMatt Macy /* 286eda14cbcSMatt Macy * Generic support for four argument tracepoints of the form: 287eda14cbcSMatt Macy * 288eda14cbcSMatt Macy * DTRACE_PROBE4(..., 289eda14cbcSMatt Macy * l2arc_dev_t *, ..., 290eda14cbcSMatt Macy * list_t *, ..., 291eda14cbcSMatt Macy * uint64_t, ..., 292eda14cbcSMatt Macy * boolean_t, ...); 293eda14cbcSMatt Macy */ 294eda14cbcSMatt Macy /* BEGIN CSTYLED */ 295eda14cbcSMatt Macy DECLARE_EVENT_CLASS(zfs_l2arc_evict_class, 296eda14cbcSMatt Macy TP_PROTO(l2arc_dev_t *dev, 297eda14cbcSMatt Macy list_t *buflist, uint64_t taddr, boolean_t all), 298eda14cbcSMatt Macy TP_ARGS(dev, buflist, taddr, all), 299eda14cbcSMatt Macy TP_STRUCT__entry( 300eda14cbcSMatt Macy __field(uint64_t, vdev_id) 301eda14cbcSMatt Macy __field(uint64_t, vdev_guid) 302eda14cbcSMatt Macy __field(uint64_t, vdev_state) 303eda14cbcSMatt Macy 304eda14cbcSMatt Macy __field(uint64_t, l2ad_hand) 305eda14cbcSMatt Macy __field(uint64_t, l2ad_start) 306eda14cbcSMatt Macy __field(uint64_t, l2ad_end) 307eda14cbcSMatt Macy __field(boolean_t, l2ad_first) 308eda14cbcSMatt Macy __field(boolean_t, l2ad_writing) 309eda14cbcSMatt Macy 310eda14cbcSMatt Macy __field(uint64_t, taddr) 311eda14cbcSMatt Macy __field(boolean_t, all) 312eda14cbcSMatt Macy ), 313eda14cbcSMatt Macy TP_fast_assign( 314eda14cbcSMatt Macy __entry->vdev_id = dev->l2ad_vdev->vdev_id; 315eda14cbcSMatt Macy __entry->vdev_guid = dev->l2ad_vdev->vdev_guid; 316eda14cbcSMatt Macy __entry->vdev_state = dev->l2ad_vdev->vdev_state; 317eda14cbcSMatt Macy 318eda14cbcSMatt Macy __entry->l2ad_hand = dev->l2ad_hand; 319eda14cbcSMatt Macy __entry->l2ad_start = dev->l2ad_start; 320eda14cbcSMatt Macy __entry->l2ad_end = dev->l2ad_end; 321eda14cbcSMatt Macy __entry->l2ad_first = dev->l2ad_first; 322eda14cbcSMatt Macy __entry->l2ad_writing = dev->l2ad_writing; 323eda14cbcSMatt Macy 324eda14cbcSMatt Macy __entry->taddr = taddr; 325eda14cbcSMatt Macy __entry->all = all; 326eda14cbcSMatt Macy ), 327eda14cbcSMatt Macy TP_printk("l2ad { vdev { id %llu guid %llu state %llu } " 328eda14cbcSMatt Macy "hand %llu start %llu end %llu " 329eda14cbcSMatt Macy "first %d writing %d } taddr %llu all %d", 330eda14cbcSMatt Macy __entry->vdev_id, __entry->vdev_guid, __entry->vdev_state, 331eda14cbcSMatt Macy __entry->l2ad_hand, __entry->l2ad_start, 332eda14cbcSMatt Macy __entry->l2ad_end, __entry->l2ad_first, __entry->l2ad_writing, 333eda14cbcSMatt Macy __entry->taddr, __entry->all) 334eda14cbcSMatt Macy ); 335eda14cbcSMatt Macy /* END CSTYLED */ 336eda14cbcSMatt Macy 337eda14cbcSMatt Macy #define DEFINE_L2ARC_EVICT_EVENT(name) \ 338eda14cbcSMatt Macy DEFINE_EVENT(zfs_l2arc_evict_class, name, \ 339c03c5b1cSMartin Matuska TP_PROTO(l2arc_dev_t *dev, list_t *buflist, uint64_t taddr, boolean_t all),\ 340eda14cbcSMatt Macy TP_ARGS(dev, buflist, taddr, all)) 341eda14cbcSMatt Macy DEFINE_L2ARC_EVICT_EVENT(zfs_l2arc__evict); 342eda14cbcSMatt Macy 343eda14cbcSMatt Macy /* 344eda14cbcSMatt Macy * Generic support for three argument tracepoints of the form: 345eda14cbcSMatt Macy * 346eda14cbcSMatt Macy * DTRACE_PROBE3(..., 347eda14cbcSMatt Macy * uint64_t, ..., 348eda14cbcSMatt Macy * uint64_t, ..., 349eda14cbcSMatt Macy * uint64_t, ...); 350eda14cbcSMatt Macy */ 351eda14cbcSMatt Macy /* BEGIN CSTYLED */ 352eda14cbcSMatt Macy DECLARE_EVENT_CLASS(zfs_arc_wait_for_eviction_class, 353eda14cbcSMatt Macy TP_PROTO(uint64_t amount, uint64_t arc_evict_count, uint64_t aew_count), 354eda14cbcSMatt Macy TP_ARGS(amount, arc_evict_count, aew_count), 355eda14cbcSMatt Macy TP_STRUCT__entry( 356eda14cbcSMatt Macy __field(uint64_t, amount) 357eda14cbcSMatt Macy __field(uint64_t, arc_evict_count) 358eda14cbcSMatt Macy __field(uint64_t, aew_count) 359eda14cbcSMatt Macy ), 360eda14cbcSMatt Macy TP_fast_assign( 361eda14cbcSMatt Macy __entry->amount = amount; 362eda14cbcSMatt Macy __entry->arc_evict_count = arc_evict_count; 363eda14cbcSMatt Macy __entry->aew_count = aew_count; 364eda14cbcSMatt Macy ), 365eda14cbcSMatt Macy TP_printk("amount %llu arc_evict_count %llu aew_count %llu", 366eda14cbcSMatt Macy __entry->amount, __entry->arc_evict_count, __entry->aew_count) 367eda14cbcSMatt Macy ); 368eda14cbcSMatt Macy /* END CSTYLED */ 369eda14cbcSMatt Macy 370eda14cbcSMatt Macy #define DEFINE_ARC_WAIT_FOR_EVICTION_EVENT(name) \ 371eda14cbcSMatt Macy DEFINE_EVENT(zfs_arc_wait_for_eviction_class, name, \ 372eda14cbcSMatt Macy TP_PROTO(uint64_t amount, uint64_t arc_evict_count, uint64_t aew_count), \ 373eda14cbcSMatt Macy TP_ARGS(amount, arc_evict_count, aew_count)) 374eda14cbcSMatt Macy DEFINE_ARC_WAIT_FOR_EVICTION_EVENT(zfs_arc__wait__for__eviction); 375eda14cbcSMatt Macy 376eda14cbcSMatt Macy #endif /* _TRACE_ARC_H */ 377eda14cbcSMatt Macy 378eda14cbcSMatt Macy #undef TRACE_INCLUDE_PATH 379eda14cbcSMatt Macy #undef TRACE_INCLUDE_FILE 380eda14cbcSMatt Macy #define TRACE_INCLUDE_PATH sys 381eda14cbcSMatt Macy #define TRACE_INCLUDE_FILE trace_arc 382eda14cbcSMatt Macy #include <trace/define_trace.h> 383eda14cbcSMatt Macy 384eda14cbcSMatt Macy #else 385eda14cbcSMatt Macy 386eda14cbcSMatt Macy DEFINE_DTRACE_PROBE1(arc__hit); 38715f0b8c3SMartin Matuska DEFINE_DTRACE_PROBE1(arc__iohit); 388eda14cbcSMatt Macy DEFINE_DTRACE_PROBE1(arc__evict); 389eda14cbcSMatt Macy DEFINE_DTRACE_PROBE1(arc__delete); 390eda14cbcSMatt Macy DEFINE_DTRACE_PROBE1(new_state__mru); 391eda14cbcSMatt Macy DEFINE_DTRACE_PROBE1(new_state__mfu); 39215f0b8c3SMartin Matuska DEFINE_DTRACE_PROBE1(new_state__uncached); 393eda14cbcSMatt Macy DEFINE_DTRACE_PROBE1(arc__async__upgrade__sync); 394eda14cbcSMatt Macy DEFINE_DTRACE_PROBE1(l2arc__hit); 395eda14cbcSMatt Macy DEFINE_DTRACE_PROBE1(l2arc__miss); 396eda14cbcSMatt Macy DEFINE_DTRACE_PROBE2(l2arc__read); 397eda14cbcSMatt Macy DEFINE_DTRACE_PROBE2(l2arc__write); 398eda14cbcSMatt Macy DEFINE_DTRACE_PROBE2(l2arc__iodone); 399eda14cbcSMatt Macy DEFINE_DTRACE_PROBE3(arc__wait__for__eviction); 400eda14cbcSMatt Macy DEFINE_DTRACE_PROBE4(arc__miss); 401eda14cbcSMatt Macy DEFINE_DTRACE_PROBE4(l2arc__evict); 402eda14cbcSMatt Macy 403eda14cbcSMatt Macy #endif /* HAVE_DECLARE_EVENT_CLASS */ 404eda14cbcSMatt Macy #endif /* _KERNEL */ 405