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) 2015, 2016 by Delphix. All rights reserved. 14 */ 15 16 /* 17 * prefetch_ios: Number of IOs the prefetcher issued 18 * @c["prefetched_demand_reads"]: Number of demand reads already prefetched 19 * @c["sync_wait_for_async"]: Number of times sync IO waited for prefetch IO 20 * @s["demand"]: Number of non-prefetch read IOs 21 * @s["logical"]: Logical (uncompressed) bytes read per interval 22 * @s["physical"]: Physical (compressed) bytes read per interval 23 */ 24 25 #pragma D option aggsortkey 26 #pragma D option quiet 27 28 #define SPA_MINBLOCKSHIFT 9 29 #define ARC_FLAGS_PREFETCH (1 << 3) 30 #define HDR_GET_LSIZE(hdr) ((hdr)->b_lsize << SPA_MINBLOCKSHIFT) 31 #define HDR_GET_PSIZE(hdr) ((hdr)->b_psize << SPA_MINBLOCKSHIFT) 32 33 BEGIN 34 { 35 prefetch_ios = `arc_stats.arcstat_prefetch_data_misses.value.ui64; 36 prefetch_ios += `arc_stats.arcstat_prefetch_metadata_misses.value.ui64; 37 @s["demand"] = sum(0); 38 @s["logical"] = sum(0); 39 @s["physical"] = sum(0); 40 @c["prefetched_demand_reads"] = count(); 41 @c["sync_wait_for_async"] = count(); 42 clear(@s); 43 clear(@c); 44 } 45 46 arc_read:arc-demand-hit-predictive-prefetch 47 { 48 @c["prefetched_demand_reads"] = count(); 49 } 50 51 arc_read:arc-upgrade-sync 52 { 53 @c["async_upgrade_sync"] = count(); 54 } 55 56 arc_read_done:entry 57 / args[0]->io_spa->spa_name == $$1 / 58 { 59 this->zio = args[0]; 60 this->hdr = (arc_buf_hdr_t *)this->zio->io_private; 61 @s["demand"] = sum(this->hdr->b_flags & ARC_FLAGS_PREFETCH ? 0 : 1); 62 @s["logical"] = sum(HDR_GET_LSIZE(this->hdr)); 63 @s["physical"] = sum(HDR_GET_PSIZE(this->hdr)); 64 } 65 66 tick-$2s 67 { 68 this->new_prefetch_ios = 69 `arc_stats.arcstat_prefetch_data_misses.value.ui64 + 70 `arc_stats.arcstat_prefetch_metadata_misses.value.ui64; 71 printf("%u\n%-24s\t%u\n", `time, "prefetch_ios", 72 this->new_prefetch_ios - prefetch_ios); 73 printa("%-24s\t%@u\n", @s); 74 printa("%-24s\t%@u\n", @c); 75 prefetch_ios = this->new_prefetch_ios; 76 clear(@s); 77 clear(@c); 78 } 79 80 ERROR 81 { 82 trace(arg1); 83 trace(arg2); 84 trace(arg3); 85 trace(arg4); 86 trace(arg5); 87 } 88