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