nfsstat.c (3819) | nfsstat.c (9336) |
---|---|
1/* 2 * Copyright (c) 1983, 1989, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * Rick Macklem at The University of Guelph. 7 * 8 * Redistribution and use in source and binary forms, with or without --- 29 unchanged lines hidden (view full) --- 38static char copyright[] = 39"@(#) Copyright (c) 1983, 1989, 1993\n\ 40 The Regents of the University of California. All rights reserved.\n"; 41#endif /* not lint */ 42 43#ifndef lint 44/*static char sccsid[] = "From: @(#)nfsstat.c 8.1 (Berkeley) 6/6/93";*/ 45static const char rcsid[] = | 1/* 2 * Copyright (c) 1983, 1989, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * Rick Macklem at The University of Guelph. 7 * 8 * Redistribution and use in source and binary forms, with or without --- 29 unchanged lines hidden (view full) --- 38static char copyright[] = 39"@(#) Copyright (c) 1983, 1989, 1993\n\ 40 The Regents of the University of California. All rights reserved.\n"; 41#endif /* not lint */ 42 43#ifndef lint 44/*static char sccsid[] = "From: @(#)nfsstat.c 8.1 (Berkeley) 6/6/93";*/ 45static const char rcsid[] = |
46 "$Id$"; | 46 "$Id: nfsstat.c,v 1.2 1994/10/23 23:25:43 wollman Exp $"; |
47#endif /* not lint */ 48 49#include <sys/param.h> 50#include <sys/mount.h> 51#include <sys/sysctl.h> | 47#endif /* not lint */ 48 49#include <sys/param.h> 50#include <sys/mount.h> 51#include <sys/sysctl.h> |
52#include <nfs/nfsv2.h> | 52#include <nfs/rpcv2.h> 53#include <nfs/nfsproto.h> |
53#include <nfs/nfs.h> 54#include <signal.h> 55#include <fcntl.h> 56#include <ctype.h> 57#include <errno.h> 58#include <kvm.h> 59#include <nlist.h> 60#include <unistd.h> --- 7 unchanged lines hidden (view full) --- 68#define N_NFSSTAT 0 69 { "_nfsstats" }, 70 "", 71}; 72kvm_t *kd; 73 74static int deadkernel = 0; 75 | 54#include <nfs/nfs.h> 55#include <signal.h> 56#include <fcntl.h> 57#include <ctype.h> 58#include <errno.h> 59#include <kvm.h> 60#include <nlist.h> 61#include <unistd.h> --- 7 unchanged lines hidden (view full) --- 69#define N_NFSSTAT 0 70 { "_nfsstats" }, 71 "", 72}; 73kvm_t *kd; 74 75static int deadkernel = 0; 76 |
76void intpr(void), printhdr(void), sidewaysintpr(u_int), usage(void); | 77void intpr __P((void)); 78void printhdr __P((void)); 79void sidewaysintpr __P((u_int)); 80void usage __P((void)); |
77 78main(argc, argv) 79 int argc; 80 char **argv; 81{ 82 extern int optind; 83 extern char *optarg; 84 u_int interval; --- 56 unchanged lines hidden (view full) --- 141 exit(0); 142} 143 144/* 145 * Read the nfs stats using sysctl(3) for live kernels, or kvm_read 146 * for dead ones. 147 */ 148void | 81 82main(argc, argv) 83 int argc; 84 char **argv; 85{ 86 extern int optind; 87 extern char *optarg; 88 u_int interval; --- 56 unchanged lines hidden (view full) --- 145 exit(0); 146} 147 148/* 149 * Read the nfs stats using sysctl(3) for live kernels, or kvm_read 150 * for dead ones. 151 */ 152void |
149readstats(struct nfsstats *stp) | 153readstats(stp) 154 struct nfsstats *stp; |
150{ 151 if(deadkernel) { 152 if(kvm_read(kd, (u_long)nl[N_NFSSTAT].n_value, stp, 153 sizeof *stp) < 0) { 154 err(1, "kvm_read"); 155 } 156 } else { 157 int name[3]; --- 8 unchanged lines hidden (view full) --- 166 } 167 } 168} 169 170/* 171 * Print a description of the nfs stats. 172 */ 173void | 155{ 156 if(deadkernel) { 157 if(kvm_read(kd, (u_long)nl[N_NFSSTAT].n_value, stp, 158 sizeof *stp) < 0) { 159 err(1, "kvm_read"); 160 } 161 } else { 162 int name[3]; --- 8 unchanged lines hidden (view full) --- 171 } 172 } 173} 174 175/* 176 * Print a description of the nfs stats. 177 */ 178void |
174intpr(void) | 179intpr() |
175{ 176 struct nfsstats nfsstats; 177 178 readstats(&nfsstats); 179 180 printf("Client Info:\n"); 181 printf("Rpc Counts:\n"); 182 printf("%9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s\n", --- 5 unchanged lines hidden (view full) --- 188 nfsstats.rpccnt[NFSPROC_LOOKUP], 189 nfsstats.rpccnt[NFSPROC_READLINK], 190 nfsstats.rpccnt[NFSPROC_READ], 191 nfsstats.rpccnt[NFSPROC_WRITE], 192 nfsstats.rpccnt[NFSPROC_CREATE], 193 nfsstats.rpccnt[NFSPROC_REMOVE]); 194 printf("%9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s\n", 195 "Rename", "Link", "Symlink", "Mkdir", "Rmdir", | 180{ 181 struct nfsstats nfsstats; 182 183 readstats(&nfsstats); 184 185 printf("Client Info:\n"); 186 printf("Rpc Counts:\n"); 187 printf("%9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s\n", --- 5 unchanged lines hidden (view full) --- 193 nfsstats.rpccnt[NFSPROC_LOOKUP], 194 nfsstats.rpccnt[NFSPROC_READLINK], 195 nfsstats.rpccnt[NFSPROC_READ], 196 nfsstats.rpccnt[NFSPROC_WRITE], 197 nfsstats.rpccnt[NFSPROC_CREATE], 198 nfsstats.rpccnt[NFSPROC_REMOVE]); 199 printf("%9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s\n", 200 "Rename", "Link", "Symlink", "Mkdir", "Rmdir", |
196 "Readdir", "Statfs", "RdirLook"); | 201 "Readdir", "RdirPlus", "Access"); |
197 printf("%9d %9d %9d %9d %9d %9d %9d %9d\n", 198 nfsstats.rpccnt[NFSPROC_RENAME], 199 nfsstats.rpccnt[NFSPROC_LINK], 200 nfsstats.rpccnt[NFSPROC_SYMLINK], 201 nfsstats.rpccnt[NFSPROC_MKDIR], 202 nfsstats.rpccnt[NFSPROC_RMDIR], 203 nfsstats.rpccnt[NFSPROC_READDIR], | 202 printf("%9d %9d %9d %9d %9d %9d %9d %9d\n", 203 nfsstats.rpccnt[NFSPROC_RENAME], 204 nfsstats.rpccnt[NFSPROC_LINK], 205 nfsstats.rpccnt[NFSPROC_SYMLINK], 206 nfsstats.rpccnt[NFSPROC_MKDIR], 207 nfsstats.rpccnt[NFSPROC_RMDIR], 208 nfsstats.rpccnt[NFSPROC_READDIR], |
204 nfsstats.rpccnt[NFSPROC_STATFS], 205 nfsstats.rpccnt[NQNFSPROC_READDIRLOOK]); 206 printf("%9.9s %9.9s %9.9s\n", | 209 nfsstats.rpccnt[NFSPROC_READDIRPLUS], 210 nfsstats.rpccnt[NFSPROC_ACCESS]); 211 printf("%9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s\n", 212 "Mknod", "Fsstat", "Fsinfo", "PathConf", "Commit", |
207 "GLease", "Vacate", "Evict"); | 213 "GLease", "Vacate", "Evict"); |
208 printf("%9d %9d %9d\n", | 214 printf("%9d %9d %9d %9d %9d %9d %9d %9d\n", 215 nfsstats.rpccnt[NFSPROC_MKNOD], 216 nfsstats.rpccnt[NFSPROC_FSSTAT], 217 nfsstats.rpccnt[NFSPROC_FSINFO], 218 nfsstats.rpccnt[NFSPROC_PATHCONF], 219 nfsstats.rpccnt[NFSPROC_COMMIT], |
209 nfsstats.rpccnt[NQNFSPROC_GETLEASE], 210 nfsstats.rpccnt[NQNFSPROC_VACATED], 211 nfsstats.rpccnt[NQNFSPROC_EVICTED]); 212 printf("Rpc Info:\n"); 213 printf("%9.9s %9.9s %9.9s %9.9s %9.9s\n", 214 "TimedOut", "Invalid", "X Replies", "Retries", "Requests"); 215 printf("%9d %9d %9d %9d %9d\n", 216 nfsstats.rpctimeouts, --- 34 unchanged lines hidden (view full) --- 251 nfsstats.srvrpccnt[NFSPROC_LOOKUP], 252 nfsstats.srvrpccnt[NFSPROC_READLINK], 253 nfsstats.srvrpccnt[NFSPROC_READ], 254 nfsstats.srvrpccnt[NFSPROC_WRITE], 255 nfsstats.srvrpccnt[NFSPROC_CREATE], 256 nfsstats.srvrpccnt[NFSPROC_REMOVE]); 257 printf("%9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s\n", 258 "Rename", "Link", "Symlink", "Mkdir", "Rmdir", | 220 nfsstats.rpccnt[NQNFSPROC_GETLEASE], 221 nfsstats.rpccnt[NQNFSPROC_VACATED], 222 nfsstats.rpccnt[NQNFSPROC_EVICTED]); 223 printf("Rpc Info:\n"); 224 printf("%9.9s %9.9s %9.9s %9.9s %9.9s\n", 225 "TimedOut", "Invalid", "X Replies", "Retries", "Requests"); 226 printf("%9d %9d %9d %9d %9d\n", 227 nfsstats.rpctimeouts, --- 34 unchanged lines hidden (view full) --- 262 nfsstats.srvrpccnt[NFSPROC_LOOKUP], 263 nfsstats.srvrpccnt[NFSPROC_READLINK], 264 nfsstats.srvrpccnt[NFSPROC_READ], 265 nfsstats.srvrpccnt[NFSPROC_WRITE], 266 nfsstats.srvrpccnt[NFSPROC_CREATE], 267 nfsstats.srvrpccnt[NFSPROC_REMOVE]); 268 printf("%9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s\n", 269 "Rename", "Link", "Symlink", "Mkdir", "Rmdir", |
259 "Readdir", "Statfs", "RdirLook"); | 270 "Readdir", "RdirPlus", "Access"); |
260 printf("%9d %9d %9d %9d %9d %9d %9d %9d\n", 261 nfsstats.srvrpccnt[NFSPROC_RENAME], 262 nfsstats.srvrpccnt[NFSPROC_LINK], 263 nfsstats.srvrpccnt[NFSPROC_SYMLINK], 264 nfsstats.srvrpccnt[NFSPROC_MKDIR], 265 nfsstats.srvrpccnt[NFSPROC_RMDIR], 266 nfsstats.srvrpccnt[NFSPROC_READDIR], | 271 printf("%9d %9d %9d %9d %9d %9d %9d %9d\n", 272 nfsstats.srvrpccnt[NFSPROC_RENAME], 273 nfsstats.srvrpccnt[NFSPROC_LINK], 274 nfsstats.srvrpccnt[NFSPROC_SYMLINK], 275 nfsstats.srvrpccnt[NFSPROC_MKDIR], 276 nfsstats.srvrpccnt[NFSPROC_RMDIR], 277 nfsstats.srvrpccnt[NFSPROC_READDIR], |
267 nfsstats.srvrpccnt[NFSPROC_STATFS], 268 nfsstats.srvrpccnt[NQNFSPROC_READDIRLOOK]); 269 printf("%9.9s %9.9s %9.9s\n", | 278 nfsstats.srvrpccnt[NFSPROC_READDIRPLUS], 279 nfsstats.srvrpccnt[NFSPROC_ACCESS]); 280 printf("%9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s\n", 281 "Mknod", "Fsstat", "Fsinfo", "PathConf", "Commit", |
270 "GLease", "Vacate", "Evict"); | 282 "GLease", "Vacate", "Evict"); |
271 printf("%9d %9d %9d\n", | 283 printf("%9d %9d %9d %9d %9d %9d %9d %9d\n", 284 nfsstats.srvrpccnt[NFSPROC_MKNOD], 285 nfsstats.srvrpccnt[NFSPROC_FSSTAT], 286 nfsstats.srvrpccnt[NFSPROC_FSINFO], 287 nfsstats.srvrpccnt[NFSPROC_PATHCONF], 288 nfsstats.srvrpccnt[NFSPROC_COMMIT], |
272 nfsstats.srvrpccnt[NQNFSPROC_GETLEASE], 273 nfsstats.srvrpccnt[NQNFSPROC_VACATED], 274 nfsstats.srvrpccnt[NQNFSPROC_EVICTED]); 275 printf("Server Ret-Failed\n"); 276 printf("%17d\n", nfsstats.srvrpc_errs); 277 printf("Server Faults\n"); 278 printf("%13d\n", nfsstats.srv_errs); 279 printf("Server Cache Stats:\n"); --- 6 unchanged lines hidden (view full) --- 286 nfsstats.srvcache_misses); 287 printf("Server Lease Stats:\n"); 288 printf("%9.9s %9.9s %9.9s\n", 289 "Leases", "PeakL", "GLeases"); 290 printf("%9d %9d %9d\n", 291 nfsstats.srvnqnfs_leases, 292 nfsstats.srvnqnfs_maxleases, 293 nfsstats.srvnqnfs_getleases); | 289 nfsstats.srvrpccnt[NQNFSPROC_GETLEASE], 290 nfsstats.srvrpccnt[NQNFSPROC_VACATED], 291 nfsstats.srvrpccnt[NQNFSPROC_EVICTED]); 292 printf("Server Ret-Failed\n"); 293 printf("%17d\n", nfsstats.srvrpc_errs); 294 printf("Server Faults\n"); 295 printf("%13d\n", nfsstats.srv_errs); 296 printf("Server Cache Stats:\n"); --- 6 unchanged lines hidden (view full) --- 303 nfsstats.srvcache_misses); 304 printf("Server Lease Stats:\n"); 305 printf("%9.9s %9.9s %9.9s\n", 306 "Leases", "PeakL", "GLeases"); 307 printf("%9d %9d %9d\n", 308 nfsstats.srvnqnfs_leases, 309 nfsstats.srvnqnfs_maxleases, 310 nfsstats.srvnqnfs_getleases); |
311 printf("Server Write Gathering:\n"); 312 printf("%9.9s %9.9s %9.9s\n", 313 "WriteOps", "WriteRPC", "Opsaved"); 314 printf("%9d %9d %9d\n", 315 nfsstats.srvvop_writes, 316 nfsstats.srvrpccnt[NFSPROC_WRITE], 317 nfsstats.srvrpccnt[NFSPROC_WRITE] - nfsstats.srvvop_writes); |
|
294} 295 296u_char signalled; /* set if alarm goes off "early" */ 297 298/* 299 * Print a running summary of nfs statistics. 300 * Repeat display every interval seconds, showing statistics 301 * collected over that interval. Assumes that interval is non-zero. --- 14 unchanged lines hidden (view full) --- 316 317 for (hdrcnt = 1;;) { 318 if (!--hdrcnt) { 319 printhdr(); 320 hdrcnt = 20; 321 } 322 readstats(&nfsstats); 323 printf("Client: %8d %8d %8d %8d %8d %8d %8d %8d\n", | 318} 319 320u_char signalled; /* set if alarm goes off "early" */ 321 322/* 323 * Print a running summary of nfs statistics. 324 * Repeat display every interval seconds, showing statistics 325 * collected over that interval. Assumes that interval is non-zero. --- 14 unchanged lines hidden (view full) --- 340 341 for (hdrcnt = 1;;) { 342 if (!--hdrcnt) { 343 printhdr(); 344 hdrcnt = 20; 345 } 346 readstats(&nfsstats); 347 printf("Client: %8d %8d %8d %8d %8d %8d %8d %8d\n", |
324 nfsstats.rpccnt[1]-lastst.rpccnt[1], 325 nfsstats.rpccnt[4]-lastst.rpccnt[4], 326 nfsstats.rpccnt[5]-lastst.rpccnt[5], 327 nfsstats.rpccnt[6]-lastst.rpccnt[6], 328 nfsstats.rpccnt[8]-lastst.rpccnt[8], 329 nfsstats.rpccnt[11]-lastst.rpccnt[11], 330 nfsstats.rpccnt[12]-lastst.rpccnt[12], 331 nfsstats.rpccnt[16]-lastst.rpccnt[16]); | 348 nfsstats.rpccnt[NFSPROC_GETATTR]-lastst.rpccnt[NFSPROC_GETATTR], 349 nfsstats.rpccnt[NFSPROC_LOOKUP]-lastst.rpccnt[NFSPROC_LOOKUP], 350 nfsstats.rpccnt[NFSPROC_READLINK]-lastst.rpccnt[NFSPROC_READLINK], 351 nfsstats.rpccnt[NFSPROC_READ]-lastst.rpccnt[NFSPROC_READ], 352 nfsstats.rpccnt[NFSPROC_WRITE]-lastst.rpccnt[NFSPROC_WRITE], 353 nfsstats.rpccnt[NFSPROC_RENAME]-lastst.rpccnt[NFSPROC_RENAME], 354 nfsstats.rpccnt[NFSPROC_ACCESS]-lastst.rpccnt[NFSPROC_ACCESS], 355 (nfsstats.rpccnt[NFSPROC_READDIR]-lastst.rpccnt[NFSPROC_READDIR]) 356 +(nfsstats.rpccnt[NFSPROC_READDIRPLUS]-lastst.rpccnt[NFSPROC_READDIRPLUS])); |
332 printf("Server: %8d %8d %8d %8d %8d %8d %8d %8d\n", | 357 printf("Server: %8d %8d %8d %8d %8d %8d %8d %8d\n", |
333 nfsstats.srvrpccnt[1]-lastst.srvrpccnt[1], 334 nfsstats.srvrpccnt[4]-lastst.srvrpccnt[4], 335 nfsstats.srvrpccnt[5]-lastst.srvrpccnt[5], 336 nfsstats.srvrpccnt[6]-lastst.srvrpccnt[6], 337 nfsstats.srvrpccnt[8]-lastst.srvrpccnt[8], 338 nfsstats.srvrpccnt[11]-lastst.srvrpccnt[11], 339 nfsstats.srvrpccnt[12]-lastst.srvrpccnt[12], 340 nfsstats.srvrpccnt[16]-lastst.srvrpccnt[16]); | 358 nfsstats.srvrpccnt[NFSPROC_GETATTR]-lastst.srvrpccnt[NFSPROC_GETATTR], 359 nfsstats.srvrpccnt[NFSPROC_LOOKUP]-lastst.srvrpccnt[NFSPROC_LOOKUP], 360 nfsstats.srvrpccnt[NFSPROC_READLINK]-lastst.srvrpccnt[NFSPROC_READLINK], 361 nfsstats.srvrpccnt[NFSPROC_READ]-lastst.srvrpccnt[NFSPROC_READ], 362 nfsstats.srvrpccnt[NFSPROC_WRITE]-lastst.srvrpccnt[NFSPROC_WRITE], 363 nfsstats.srvrpccnt[NFSPROC_RENAME]-lastst.srvrpccnt[NFSPROC_RENAME], 364 nfsstats.srvrpccnt[NFSPROC_ACCESS]-lastst.srvrpccnt[NFSPROC_ACCESS], 365 (nfsstats.srvrpccnt[NFSPROC_READDIR]-lastst.srvrpccnt[NFSPROC_READDIR]) 366 +(nfsstats.srvrpccnt[NFSPROC_READDIRPLUS]-lastst.srvrpccnt[NFSPROC_READDIRPLUS])); |
341 lastst = nfsstats; 342 fflush(stdout); 343 oldmask = sigblock(sigmask(SIGALRM)); 344 if (!signalled) 345 sigpause(0); 346 sigsetmask(oldmask); 347 signalled = 0; 348 (void)alarm(interval); 349 } 350 /*NOTREACHED*/ 351} 352 353void 354printhdr() 355{ 356 printf(" %8.8s %8.8s %8.8s %8.8s %8.8s %8.8s %8.8s %8.8s\n", 357 "Getattr", "Lookup", "Readlink", "Read", "Write", "Rename", | 367 lastst = nfsstats; 368 fflush(stdout); 369 oldmask = sigblock(sigmask(SIGALRM)); 370 if (!signalled) 371 sigpause(0); 372 sigsetmask(oldmask); 373 signalled = 0; 374 (void)alarm(interval); 375 } 376 /*NOTREACHED*/ 377} 378 379void 380printhdr() 381{ 382 printf(" %8.8s %8.8s %8.8s %8.8s %8.8s %8.8s %8.8s %8.8s\n", 383 "Getattr", "Lookup", "Readlink", "Read", "Write", "Rename", |
358 "Link", "Readdir"); | 384 "Access", "Readdir"); |
359 fflush(stdout); 360} 361 362/* 363 * Called if an interval expires before sidewaysintpr has completed a loop. 364 * Sets a flag to not wait for the alarm. 365 */ 366void --- 12 unchanged lines hidden --- | 385 fflush(stdout); 386} 387 388/* 389 * Called if an interval expires before sidewaysintpr has completed a loop. 390 * Sets a flag to not wait for the alarm. 391 */ 392void --- 12 unchanged lines hidden --- |