1 #!/usr/sbin/dtrace -s 2 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. 8 * 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. 12 */ 13 14 /* 15 * Copyright 2018 Nexenta Systems, Inc. All rights reserved. 16 */ 17 18 /* 19 * Print input and output values for each NFSv3 andf NFSv4 operation, 20 * optionally for a specified client, share and zone. 21 * 22 * Usage: nfs-trace.d [<client ip>|all [<share path>|all] [<zone id>]]] 23 * 24 * example: nfs_trace.d 192.168.123.1 /mypool/fs1 0 25 * 26 * It is valid to specify <client ip> or <share path> as "all" 27 * to quantize data for all clients and/or all shares. 28 * Omitting <zone id> will quantize data for all zones. 29 */ 30 31 /* 32 * Unfortunately, trying to write this script using wildcards, for example: 33 * nfsv3:::op-*-start {} 34 * nfsv3:::op-*-done {} 35 * prints the operation-specific args[2] structure as the incorrect type. 36 * Until this is resolved it is necessary to explicitly list each operation. 37 * 38 * See nfs-time.d for an example of using the wildcard format when there are 39 * no operation-specific args (args[2]) being traced. 40 */ 41 42 #pragma D option flowindent 43 #pragma D option defaultargs 44 45 dtrace:::BEGIN 46 { 47 all_clients = (($$1 == NULL) || ($$1 == "all")) ? 1 : 0; 48 all_shares = (($$2 == NULL) || ($$2 == "all")) ? 1 : 0; 49 all_zones = ($$3 == NULL) ? 1 : 0; 50 51 client = $$1; 52 share = $$2; 53 zoneid = $3; 54 55 printf("%Y - client=%s share=%s zone=%s)\n", walltimestamp, 56 (all_clients) ? "all" : client, 57 (all_shares) ? "all" : share, 58 (all_zones) ? "all" : $$3); 59 } 60 61 nfsv3:::op-getattr-start, 62 nfsv3:::op-setattr-start, 63 nfsv3:::op-lookup-start, 64 nfsv3:::op-access-start, 65 nfsv3:::op-commit-start, 66 nfsv3:::op-create-start, 67 nfsv3:::op-fsinfo-start, 68 nfsv3:::op-fsstat-start, 69 nfsv3:::op-link-start, 70 nfsv3:::op-mkdir-start, 71 nfsv3:::op-mknod-start, 72 nfsv3:::op-pathconf-start, 73 nfsv3:::op-read-start, 74 nfsv3:::op-readdir-start, 75 nfsv3:::op-readdirplus-start, 76 nfsv3:::op-readlink-start, 77 nfsv3:::op-remove-start, 78 nfsv3:::op-rename-start, 79 nfsv3:::op-rmdir-start, 80 nfsv3:::op-symlink-start, 81 nfsv3:::op-write-start 82 / ((all_clients) || (args[0]->ci_remote == client)) && 83 ((all_shares) || (args[1]->noi_shrpath == share)) && 84 ((all_zones) || (args[1]->noi_zoneid == zoneid)) / 85 { 86 printf("\n"); 87 print(*args[0]); 88 printf("\n"); 89 print(*args[1]); 90 printf("\n"); 91 print(*args[2]); 92 printf("\n"); 93 } 94 95 nfsv3:::op-getattr-done, 96 nfsv3:::op-setattr-done, 97 nfsv3:::op-lookup-done, 98 nfsv3:::op-access-done, 99 nfsv3:::op-commit-done, 100 nfsv3:::op-create-done, 101 nfsv3:::op-fsinfo-done, 102 nfsv3:::op-fsstat-done, 103 nfsv3:::op-link-done, 104 nfsv3:::op-mkdir-done, 105 nfsv3:::op-mknod-done, 106 nfsv3:::op-pathconf-done, 107 nfsv3:::op-read-done, 108 nfsv3:::op-readdir-done, 109 nfsv3:::op-readdirplus-done, 110 nfsv3:::op-readlink-done, 111 nfsv3:::op-remove-done, 112 nfsv3:::op-rename-done, 113 nfsv3:::op-rmdir-done, 114 nfsv3:::op-symlink-done, 115 nfsv3:::op-write-done 116 / ((all_clients) || (args[0]->ci_remote == client)) && 117 ((all_shares) || (args[1]->noi_shrpath == share)) && 118 ((all_zones) || (args[1]->noi_zoneid == zoneid)) / 119 { 120 /* 121 printf("\n"); 122 print(*args[0]); 123 printf("\n"); 124 print(*args[1]); 125 */ 126 printf("\n"); 127 print(*args[2]); 128 printf("\n"); 129 } 130 131 nfsv4:::op-access-start, 132 nfsv4:::op-close-start, 133 nfsv4:::op-commit-start, 134 nfsv4:::op-create-start, 135 nfsv4:::op-delegpurge-start, 136 nfsv4:::op-delegreturn-start, 137 nfsv4:::op-getattr-start, 138 nfsv4:::op-link-start, 139 nfsv4:::op-lock-start, 140 nfsv4:::op-lockt-start, 141 nfsv4:::op-locku-start, 142 nfsv4:::op-lookup-start, 143 nfsv4:::op-nverify-start, 144 nfsv4:::op-open-start, 145 nfsv4:::op-open-confirm-start, 146 nfsv4:::op-open-downgrade-start, 147 nfsv4:::op-openattr-start, 148 nfsv4:::op-putfh-start, 149 nfsv4:::op-read-start, 150 nfsv4:::op-readdir-start, 151 nfsv4:::op-release-lockowner-start, 152 nfsv4:::op-remove-start, 153 nfsv4:::op-rename-start, 154 nfsv4:::op-renew-start, 155 nfsv4:::op-secinfo-start, 156 nfsv4:::op-setattr-start, 157 nfsv4:::op-setclientid-start, 158 nfsv4:::op-setclientid-confirm-start, 159 nfsv4:::op-verify-start, 160 nfsv4:::op-write-start 161 / ((all_clients) || (args[0]->ci_remote == client)) && 162 ((all_shares) || (args[1]->noi_shrpath == share)) && 163 ((all_zones) || (args[1]->noi_zoneid == zoneid)) / 164 { 165 printf("\n"); 166 print(*args[0]); 167 printf("\n"); 168 print(*args[1]); 169 printf("\n"); 170 print(*args[2]); 171 printf("\n"); 172 } 173 174 /* These operations do not have args[2] */ 175 nfsv4:::op-getfh-start, 176 nfsv4:::op-lookupp-start, 177 nfsv4:::op-putpubfh-start, 178 nfsv4:::op-putrootfh-start, 179 nfsv4:::op-readlink-start, 180 nfsv4:::op-restorefh-start, 181 nfsv4:::op-savefh-start 182 / ((all_clients) || (args[0]->ci_remote == client)) && 183 ((all_shares) || (args[1]->noi_shrpath == share)) && 184 ((all_zones) || (args[1]->noi_zoneid == zoneid)) / 185 { 186 printf("\n"); 187 print(*args[0]); 188 printf("\n"); 189 print(*args[1]); 190 printf("\n"); 191 } 192 193 194 nfsv4:::op-access-done, 195 nfsv4:::op-close-done, 196 nfsv4:::op-commit-done, 197 nfsv4:::op-create-done, 198 nfsv4:::op-delegpurge-done, 199 nfsv4:::op-delegreturn-done, 200 nfsv4:::op-getattr-done, 201 nfsv4:::op-getfh-done, 202 nfsv4:::op-link-done, 203 nfsv4:::op-lock-done, 204 nfsv4:::op-lockt-done, 205 nfsv4:::op-locku-done, 206 nfsv4:::op-lookup-done, 207 nfsv4:::op-lookupp-done, 208 nfsv4:::op-nverify-done, 209 nfsv4:::op-open-done, 210 nfsv4:::op-open-confirm-done, 211 nfsv4:::op-open-downgrade-done, 212 nfsv4:::op-openattr-done, 213 nfsv4:::op-putfh-done, 214 nfsv4:::op-putpubfh-done, 215 nfsv4:::op-putrootfh-done, 216 nfsv4:::op-read-done, 217 nfsv4:::op-readdir-done, 218 nfsv4:::op-readlink-done, 219 nfsv4:::op-release-lockowner-done, 220 nfsv4:::op-remove-done, 221 nfsv4:::op-rename-done, 222 nfsv4:::op-renew-done, 223 nfsv4:::op-restorefh-done, 224 nfsv4:::op-savefh-done, 225 nfsv4:::op-secinfo-done, 226 nfsv4:::op-setattr-done, 227 nfsv4:::op-setclientid-done, 228 nfsv4:::op-setclientid-confirm-done, 229 nfsv4:::op-verify-done, 230 nfsv4:::op-write-done 231 / ((all_clients) || (args[0]->ci_remote == client)) && 232 ((all_shares) || (args[1]->noi_shrpath == share)) && 233 ((all_zones) || (args[1]->noi_zoneid == zoneid)) / 234 { 235 /* 236 printf("\n"); 237 print(*args[0]); 238 printf("\n"); 239 print(*args[1]); 240 */ 241 printf("\n"); 242 print(*args[2]); 243 printf("\n"); 244 } 245 246 dtrace:::END 247 { 248 } 249