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