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