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