| 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 |  | 
| David Howells | 6a51091 | 2009-04-03 16:42:43 +0100 | [diff] [blame] | 119 | /* | 
|  | 120 | * NFS local caching servicing counters | 
|  | 121 | */ | 
|  | 122 | enum nfs_stat_fscachecounters { | 
|  | 123 | NFSIOS_FSCACHE_PAGES_READ_OK, | 
|  | 124 | NFSIOS_FSCACHE_PAGES_READ_FAIL, | 
|  | 125 | NFSIOS_FSCACHE_PAGES_WRITTEN_OK, | 
|  | 126 | NFSIOS_FSCACHE_PAGES_WRITTEN_FAIL, | 
|  | 127 | NFSIOS_FSCACHE_PAGES_UNCACHED, | 
|  | 128 | __NFSIOS_FSCACHEMAX, | 
|  | 129 | }; | 
|  | 130 |  | 
| Chuck Lever | 34e8f92 | 2008-06-12 12:32:25 -0400 | [diff] [blame] | 131 | #endif	/* _LINUX_NFS_IOSTAT */ |