8322 nl: misleading-indentation
[unleashed/tickless.git] / usr / src / test / zfs-tests / tests / perf / scripts / prefetch_io.d
blobfb0706ceb7325f91c59ef93b8644741cc3d483d7
1 #!/usr/sbin/dtrace -Cs
3 /*
4 * This file and its contents are supplied under the terms of the
5 * Common Development and Distribution License ("CDDL"), version 1.0.
6 * You may only use this file in accordance with the terms of version
7 * 1.0 of the CDDL.
9 * A full copy of the text of the CDDL should have accompanied this
10 * source. A copy of the CDDL is also available via the Internet at
11 * http://www.illumos.org/license/CDDL.
15 * Copyright (c) 2015, 2016 by Delphix. All rights reserved.
19 * prefetch_ios: Number of IOs the prefetcher issued
20 * @c["prefetched_demand_reads"]: Number of demand reads already prefetched
21 * @c["sync_wait_for_async"]: Number of times sync IO waited for prefetch IO
22 * @s["demand"]: Number of non-prefetch read IOs
23 * @s["logical"]: Logical (uncompressed) bytes read per interval
24 * @s["physical"]: Physical (compressed) bytes read per interval
27 #pragma D option aggsortkey
28 #pragma D option quiet
30 #define SPA_MINBLOCKSHIFT 9
31 #define ARC_FLAGS_PREFETCH (1 << 3)
32 #define HDR_GET_LSIZE(hdr) ((hdr)->b_lsize << SPA_MINBLOCKSHIFT)
33 #define HDR_GET_PSIZE(hdr) ((hdr)->b_psize << SPA_MINBLOCKSHIFT)
35 BEGIN
37 prefetch_ios = `arc_stats.arcstat_prefetch_data_misses.value.ui64;
38 prefetch_ios += `arc_stats.arcstat_prefetch_metadata_misses.value.ui64;
39 @s["demand"] = sum(0);
40 @s["logical"] = sum(0);
41 @s["physical"] = sum(0);
42 @c["prefetched_demand_reads"] = count();
43 @c["sync_wait_for_async"] = count();
44 clear(@s);
45 clear(@c);
48 arc_read:arc-demand-hit-predictive-prefetch
50 @c["prefetched_demand_reads"] = count();
53 arc_read:arc-sync-wait-for-async
55 @c["sync_wait_for_async"] = count();
58 arc_read_done:entry
59 / args[0]->io_spa->spa_name == $$1 /
61 this->zio = args[0];
62 this->hdr = (arc_buf_hdr_t *)this->zio->io_private;
63 @s["demand"] = sum(this->hdr->b_flags & ARC_FLAGS_PREFETCH ? 0 : 1);
64 @s["logical"] = sum(HDR_GET_LSIZE(this->hdr));
65 @s["physical"] = sum(HDR_GET_PSIZE(this->hdr));
68 tick-$2s
70 this->new_prefetch_ios =
71 `arc_stats.arcstat_prefetch_data_misses.value.ui64 +
72 `arc_stats.arcstat_prefetch_metadata_misses.value.ui64;
73 printf("%u\n%-24s\t%u\n", `time, "prefetch_ios",
74 this->new_prefetch_ios - prefetch_ios);
75 printa("%-24s\t%@u\n", @s);
76 printa("%-24s\t%@u\n", @c);
77 prefetch_ios = this->new_prefetch_ios;
78 clear(@s);
79 clear(@c);
82 ERROR
84 trace(arg1);
85 trace(arg2);
86 trace(arg3);
87 trace(arg4);
88 trace(arg5);