1*c373aa8bSJohn Wren Kennedy /*
2*c373aa8bSJohn Wren Kennedy  * This file and its contents are supplied under the terms of the
3*c373aa8bSJohn Wren Kennedy  * Common Development and Distribution License ("CDDL"), version 1.0.
4*c373aa8bSJohn Wren Kennedy  * You may only use this file in accordance with the terms of version
5*c373aa8bSJohn Wren Kennedy  * 1.0 of the CDDL.
6*c373aa8bSJohn Wren Kennedy  *
7*c373aa8bSJohn Wren Kennedy  * A full copy of the text of the CDDL should have accompanied this
8*c373aa8bSJohn Wren Kennedy  * source.  A copy of the CDDL is also available via the Internet at
9*c373aa8bSJohn Wren Kennedy  * http://www.illumos.org/license/CDDL.
10*c373aa8bSJohn Wren Kennedy  */
11*c373aa8bSJohn Wren Kennedy 
12*c373aa8bSJohn Wren Kennedy /*
13*c373aa8bSJohn Wren Kennedy  * Copyright (c) 2016, 2018 by Delphix. All rights reserved.
14*c373aa8bSJohn Wren Kennedy  */
15*c373aa8bSJohn Wren Kennedy 
16*c373aa8bSJohn Wren Kennedy /*
17*c373aa8bSJohn Wren Kennedy  * This measures metrics that relate to the performance of the ZIL.
18*c373aa8bSJohn Wren Kennedy  *
19*c373aa8bSJohn Wren Kennedy  * The "zil_commit" and "zil_commit_writer" fuctions are instrumented.
20*c373aa8bSJohn Wren Kennedy  * For each function, the number of times each function is called is
21*c373aa8bSJohn Wren Kennedy  * tracked, as well as the average latency for function, and a histogram
22*c373aa8bSJohn Wren Kennedy  * of the latencies for each function.
23*c373aa8bSJohn Wren Kennedy  */
24*c373aa8bSJohn Wren Kennedy 
25*c373aa8bSJohn Wren Kennedy #pragma D option aggsortkey
26*c373aa8bSJohn Wren Kennedy #pragma D option quiet
27*c373aa8bSJohn Wren Kennedy 
28*c373aa8bSJohn Wren Kennedy BEGIN
29*c373aa8bSJohn Wren Kennedy {
30*c373aa8bSJohn Wren Kennedy 	@c["zil_commit"] = count();
31*c373aa8bSJohn Wren Kennedy 	@a["zil_commit"] = avg(0);
32*c373aa8bSJohn Wren Kennedy 	@h["zil_commit"] = quantize(0);
33*c373aa8bSJohn Wren Kennedy 
34*c373aa8bSJohn Wren Kennedy 	@c["zil_commit_writer"] = count();
35*c373aa8bSJohn Wren Kennedy 	@a["zil_commit_writer"] = avg(0);
36*c373aa8bSJohn Wren Kennedy 	@h["zil_commit_writer"] = quantize(0);
37*c373aa8bSJohn Wren Kennedy 
38*c373aa8bSJohn Wren Kennedy 	clear(@c);
39*c373aa8bSJohn Wren Kennedy 	clear(@a);
40*c373aa8bSJohn Wren Kennedy 	clear(@h);
41*c373aa8bSJohn Wren Kennedy }
42*c373aa8bSJohn Wren Kennedy 
43*c373aa8bSJohn Wren Kennedy fbt:zfs:zil_commit:entry
44*c373aa8bSJohn Wren Kennedy / args[0]->zl_spa->spa_name == $$1 /
45*c373aa8bSJohn Wren Kennedy {
46*c373aa8bSJohn Wren Kennedy 	self->zc_elapsed = timestamp;
47*c373aa8bSJohn Wren Kennedy }
48*c373aa8bSJohn Wren Kennedy 
49*c373aa8bSJohn Wren Kennedy fbt:zfs:zil_commit:return
50*c373aa8bSJohn Wren Kennedy / self->zc_elapsed /
51*c373aa8bSJohn Wren Kennedy {
52*c373aa8bSJohn Wren Kennedy 	@c[probefunc] = count();
53*c373aa8bSJohn Wren Kennedy 	@a[probefunc] = avg(timestamp - self->zc_elapsed);
54*c373aa8bSJohn Wren Kennedy 	@h[probefunc] = quantize(timestamp - self->zc_elapsed);
55*c373aa8bSJohn Wren Kennedy 	self->zc_elapsed = 0;
56*c373aa8bSJohn Wren Kennedy }
57*c373aa8bSJohn Wren Kennedy 
58*c373aa8bSJohn Wren Kennedy fbt:zfs:zil_commit_writer:entry
59*c373aa8bSJohn Wren Kennedy / self->zc_elapsed && args[0]->zl_spa->spa_name == $$1 /
60*c373aa8bSJohn Wren Kennedy {
61*c373aa8bSJohn Wren Kennedy 	self->zcw_elapsed = timestamp;
62*c373aa8bSJohn Wren Kennedy }
63*c373aa8bSJohn Wren Kennedy 
64*c373aa8bSJohn Wren Kennedy fbt:zfs:zil_commit_writer:return
65*c373aa8bSJohn Wren Kennedy / self->zcw_elapsed /
66*c373aa8bSJohn Wren Kennedy {
67*c373aa8bSJohn Wren Kennedy 	@c[probefunc] = count();
68*c373aa8bSJohn Wren Kennedy 	@a[probefunc] = avg(timestamp - self->zcw_elapsed);
69*c373aa8bSJohn Wren Kennedy 	@h[probefunc] = quantize(timestamp - self->zcw_elapsed);
70*c373aa8bSJohn Wren Kennedy 	self->zcw_elapsed = 0;
71*c373aa8bSJohn Wren Kennedy }
72*c373aa8bSJohn Wren Kennedy 
73*c373aa8bSJohn Wren Kennedy tick-$2s
74*c373aa8bSJohn Wren Kennedy {
75*c373aa8bSJohn Wren Kennedy 	printf("%u\n", `time);
76*c373aa8bSJohn Wren Kennedy 	printa("counts_%-21s %@u\n", @c);
77*c373aa8bSJohn Wren Kennedy 	printa("avgs_%-21s %@u\n", @a);
78*c373aa8bSJohn Wren Kennedy 	printa("histograms_%-21s %@u\n", @h);
79*c373aa8bSJohn Wren Kennedy 
80*c373aa8bSJohn Wren Kennedy 	clear(@c);
81*c373aa8bSJohn Wren Kennedy 	clear(@a);
82*c373aa8bSJohn Wren Kennedy 	clear(@h);
83*c373aa8bSJohn Wren Kennedy }
84*c373aa8bSJohn Wren Kennedy 
85*c373aa8bSJohn Wren Kennedy ERROR
86*c373aa8bSJohn Wren Kennedy {
87*c373aa8bSJohn Wren Kennedy 	trace(arg1);
88*c373aa8bSJohn Wren Kennedy 	trace(arg2);
89*c373aa8bSJohn Wren Kennedy 	trace(arg3);
90*c373aa8bSJohn Wren Kennedy 	trace(arg4);
91*c373aa8bSJohn Wren Kennedy 	trace(arg5);
92*c373aa8bSJohn Wren Kennedy }
93