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