| Chuck Lever | 34e8f92 | 2008-06-12 12:32:25 -0400 | [diff] [blame] | 1 | /* | 
 | 2 |  *  User-space visible declarations for NFS client per-mount | 
 | 3 |  *  point statistics | 
 | 4 |  * | 
 | 5 |  *  Copyright (C) 2005, 2006 Chuck Lever <cel@netapp.com> | 
 | 6 |  * | 
 | 7 |  *  NFS client per-mount statistics provide information about the | 
 | 8 |  *  health of the NFS client and the health of each NFS mount point. | 
 | 9 |  *  Generally these are not for detailed problem diagnosis, but | 
 | 10 |  *  simply to indicate that there is a problem. | 
 | 11 |  * | 
 | 12 |  *  These counters are not meant to be human-readable, but are meant | 
 | 13 |  *  to be integrated into system monitoring tools such as "sar" and | 
 | 14 |  *  "iostat".  As such, the counters are sampled by the tools over | 
 | 15 |  *  time, and are never zeroed after a file system is mounted. | 
 | 16 |  *  Moving averages can be computed by the tools by taking the | 
 | 17 |  *  difference between two instantaneous samples  and dividing that | 
 | 18 |  *  by the time between the samples. | 
 | 19 |  */ | 
 | 20 |  | 
 | 21 | #ifndef _LINUX_NFS_IOSTAT | 
 | 22 | #define _LINUX_NFS_IOSTAT | 
 | 23 |  | 
 | 24 | #define NFS_IOSTAT_VERS		"1.0" | 
 | 25 |  | 
 | 26 | /* | 
 | 27 |  * NFS byte counters | 
 | 28 |  * | 
 | 29 |  * 1.  SERVER - the number of payload bytes read from or written | 
 | 30 |  *     to the server by the NFS client via an NFS READ or WRITE | 
 | 31 |  *     request. | 
 | 32 |  * | 
 | 33 |  * 2.  NORMAL - the number of bytes read or written by applications | 
 | 34 |  *     via the read(2) and write(2) system call interfaces. | 
 | 35 |  * | 
 | 36 |  * 3.  DIRECT - the number of bytes read or written from files | 
 | 37 |  *     opened with the O_DIRECT flag. | 
 | 38 |  * | 
 | 39 |  * These counters give a view of the data throughput into and out | 
 | 40 |  * of the NFS client.  Comparing the number of bytes requested by | 
 | 41 |  * an application with the number of bytes the client requests from | 
 | 42 |  * the server can provide an indication of client efficiency | 
 | 43 |  * (per-op, cache hits, etc). | 
 | 44 |  * | 
 | 45 |  * These counters can also help characterize which access methods | 
 | 46 |  * are in use.  DIRECT by itself shows whether there is any O_DIRECT | 
 | 47 |  * traffic.  NORMAL + DIRECT shows how much data is going through | 
 | 48 |  * the system call interface.  A large amount of SERVER traffic | 
 | 49 |  * without much NORMAL or DIRECT traffic shows that applications | 
 | 50 |  * are using mapped files. | 
 | 51 |  * | 
 | 52 |  * NFS page counters | 
 | 53 |  * | 
 | 54 |  * These count the number of pages read or written via nfs_readpage(), | 
 | 55 |  * nfs_readpages(), or their write equivalents. | 
 | 56 |  * | 
 | 57 |  * NB: When adding new byte counters, please include the measured | 
 | 58 |  * units in the name of each byte counter to help users of this | 
 | 59 |  * interface determine what exactly is being counted. | 
 | 60 |  */ | 
 | 61 | enum nfs_stat_bytecounters { | 
 | 62 | 	NFSIOS_NORMALREADBYTES = 0, | 
 | 63 | 	NFSIOS_NORMALWRITTENBYTES, | 
 | 64 | 	NFSIOS_DIRECTREADBYTES, | 
 | 65 | 	NFSIOS_DIRECTWRITTENBYTES, | 
 | 66 | 	NFSIOS_SERVERREADBYTES, | 
 | 67 | 	NFSIOS_SERVERWRITTENBYTES, | 
 | 68 | 	NFSIOS_READPAGES, | 
 | 69 | 	NFSIOS_WRITEPAGES, | 
 | 70 | 	__NFSIOS_BYTESMAX, | 
 | 71 | }; | 
 | 72 |  | 
 | 73 | /* | 
 | 74 |  * NFS event counters | 
 | 75 |  * | 
 | 76 |  * These counters provide a low-overhead way of monitoring client | 
 | 77 |  * activity without enabling NFS trace debugging.  The counters | 
 | 78 |  * show the rate at which VFS requests are made, and how often the | 
 | 79 |  * client invalidates its data and attribute caches.  This allows | 
 | 80 |  * system administrators to monitor such things as how close-to-open | 
 | 81 |  * is working, and answer questions such as "why are there so many | 
 | 82 |  * GETATTR requests on the wire?" | 
 | 83 |  * | 
 | 84 |  * They also count anamolous events such as short reads and writes, | 
 | 85 |  * silly renames due to close-after-delete, and operations that | 
 | 86 |  * change the size of a file (such operations can often be the | 
 | 87 |  * source of data corruption if applications aren't using file | 
 | 88 |  * locking properly). | 
 | 89 |  */ | 
 | 90 | enum nfs_stat_eventcounters { | 
 | 91 | 	NFSIOS_INODEREVALIDATE = 0, | 
 | 92 | 	NFSIOS_DENTRYREVALIDATE, | 
 | 93 | 	NFSIOS_DATAINVALIDATE, | 
 | 94 | 	NFSIOS_ATTRINVALIDATE, | 
 | 95 | 	NFSIOS_VFSOPEN, | 
 | 96 | 	NFSIOS_VFSLOOKUP, | 
 | 97 | 	NFSIOS_VFSACCESS, | 
 | 98 | 	NFSIOS_VFSUPDATEPAGE, | 
 | 99 | 	NFSIOS_VFSREADPAGE, | 
 | 100 | 	NFSIOS_VFSREADPAGES, | 
 | 101 | 	NFSIOS_VFSWRITEPAGE, | 
 | 102 | 	NFSIOS_VFSWRITEPAGES, | 
 | 103 | 	NFSIOS_VFSGETDENTS, | 
 | 104 | 	NFSIOS_VFSSETATTR, | 
 | 105 | 	NFSIOS_VFSFLUSH, | 
 | 106 | 	NFSIOS_VFSFSYNC, | 
 | 107 | 	NFSIOS_VFSLOCK, | 
 | 108 | 	NFSIOS_VFSRELEASE, | 
 | 109 | 	NFSIOS_CONGESTIONWAIT, | 
 | 110 | 	NFSIOS_SETATTRTRUNC, | 
 | 111 | 	NFSIOS_EXTENDWRITE, | 
 | 112 | 	NFSIOS_SILLYRENAME, | 
 | 113 | 	NFSIOS_SHORTREAD, | 
 | 114 | 	NFSIOS_SHORTWRITE, | 
 | 115 | 	NFSIOS_DELAY, | 
 | 116 | 	__NFSIOS_COUNTSMAX, | 
 | 117 | }; | 
 | 118 |  | 
 | 119 | #endif	/* _LINUX_NFS_IOSTAT */ |