1 2Kernel NFS Server Statistics 3============================ 4 5This document describes the format and semantics of the statistics 6which the kernel NFS server makes available to userspace. These 7statistics are available in several text form pseudo files, each of 8which is described separately below. 9 10In most cases you don't need to know these formats, as the nfsstat(8) 11program from the nfs-utils distribution provides a helpful command-line 12interface for extracting and printing them. 13 14All the files described here are formatted as a sequence of text lines, 15separated by newline '\n' characters. Lines beginning with a hash 16'#' character are comments intended for humans and should be ignored 17by parsing routines. All other lines contain a sequence of fields 18separated by whitespace. 19 20/proc/fs/nfsd/pool_stats 21------------------------ 22 23This file is available in kernels from 2.6.30 onwards, if the 24/proc/fs/nfsd filesystem is mounted (it almost always should be). 25 26The first line is a comment which describes the fields present in 27all the other lines. The other lines present the following data as 28a sequence of unsigned decimal numeric fields. One line is shown 29for each NFS thread pool. 30 31All counters are 64 bits wide and wrap naturally. There is no way 32to zero these counters, instead applications should do their own 33rate conversion. 34 35pool 36 The id number of the NFS thread pool to which this line applies. 37 This number does not change. 38 39 Thread pool ids are a contiguous set of small integers starting 40 at zero. The maximum value depends on the thread pool mode, but 41 currently cannot be larger than the number of CPUs in the system. 42 Note that in the default case there will be a single thread pool 43 which contains all the nfsd threads and all the CPUs in the system, 44 and thus this file will have a single line with a pool id of "0". 45 46packets-arrived 47 Counts how many NFS packets have arrived. More precisely, this 48 is the number of times that the network stack has notified the 49 sunrpc server layer that new data may be available on a transport 50 (e.g. an NFS or UDP socket or an NFS/RDMA endpoint). 51 52 Depending on the NFS workload patterns and various network stack 53 effects (such as Large Receive Offload) which can combine packets 54 on the wire, this may be either more or less than the number 55 of NFS calls received (which statistic is available elsewhere). 56 However this is a more accurate and less workload-dependent measure 57 of how much CPU load is being placed on the sunrpc server layer 58 due to NFS network traffic. 59 60sockets-enqueued 61 Counts how many times an NFS transport is enqueued to wait for 62 an nfsd thread to service it, i.e. no nfsd thread was considered 63 available. 64 65 The circumstance this statistic tracks indicates that there was NFS 66 network-facing work to be done but it couldn't be done immediately, 67 thus introducing a small delay in servicing NFS calls. The ideal 68 rate of change for this counter is zero; significantly non-zero 69 values may indicate a performance limitation. 70 71 This can happen either because there are too few nfsd threads in the 72 thread pool for the NFS workload (the workload is thread-limited), 73 or because the NFS workload needs more CPU time than is available in 74 the thread pool (the workload is CPU-limited). In the former case, 75 configuring more nfsd threads will probably improve the performance 76 of the NFS workload. In the latter case, the sunrpc server layer is 77 already choosing not to wake idle nfsd threads because there are too 78 many nfsd threads which want to run but cannot, so configuring more 79 nfsd threads will make no difference whatsoever. The overloads-avoided 80 statistic (see below) can be used to distinguish these cases. 81 82threads-woken 83 Counts how many times an idle nfsd thread is woken to try to 84 receive some data from an NFS transport. 85 86 This statistic tracks the circumstance where incoming 87 network-facing NFS work is being handled quickly, which is a good 88 thing. The ideal rate of change for this counter will be close 89 to but less than the rate of change of the packets-arrived counter. 90 91overloads-avoided 92 Counts how many times the sunrpc server layer chose not to wake an 93 nfsd thread, despite the presence of idle nfsd threads, because 94 too many nfsd threads had been recently woken but could not get 95 enough CPU time to actually run. 96 97 This statistic counts a circumstance where the sunrpc layer 98 heuristically avoids overloading the CPU scheduler with too many 99 runnable nfsd threads. The ideal rate of change for this counter 100 is zero. Significant non-zero values indicate that the workload 101 is CPU limited. Usually this is associated with heavy CPU usage 102 on all the CPUs in the nfsd thread pool. 103 104 If a sustained large overloads-avoided rate is detected on a pool, 105 the top(1) utility should be used to check for the following 106 pattern of CPU usage on all the CPUs associated with the given 107 nfsd thread pool. 108 109 - %us ~= 0 (as you're *NOT* running applications on your NFS server) 110 111 - %wa ~= 0 112 113 - %id ~= 0 114 115 - %sy + %hi + %si ~= 100 116 117 If this pattern is seen, configuring more nfsd threads will *not* 118 improve the performance of the workload. If this patten is not 119 seen, then something more subtle is wrong. 120 121threads-timedout 122 Counts how many times an nfsd thread triggered an idle timeout, 123 i.e. was not woken to handle any incoming network packets for 124 some time. 125 126 This statistic counts a circumstance where there are more nfsd 127 threads configured than can be used by the NFS workload. This is 128 a clue that the number of nfsd threads can be reduced without 129 affecting performance. Unfortunately, it's only a clue and not 130 a strong indication, for a couple of reasons: 131 132 - Currently the rate at which the counter is incremented is quite 133 slow; the idle timeout is 60 minutes. Unless the NFS workload 134 remains constant for hours at a time, this counter is unlikely 135 to be providing information that is still useful. 136 137 - It is usually a wise policy to provide some slack, 138 i.e. configure a few more nfsds than are currently needed, 139 to allow for future spikes in load. 140 141 142Note that incoming packets on NFS transports will be dealt with in 143one of three ways. An nfsd thread can be woken (threads-woken counts 144this case), or the transport can be enqueued for later attention 145(sockets-enqueued counts this case), or the packet can be temporarily 146deferred because the transport is currently being used by an nfsd 147thread. This last case is not very interesting and is not explicitly 148counted, but can be inferred from the other counters thus: 149 150packets-deferred = packets-arrived - ( sockets-enqueued + threads-woken ) 151 152 153More 154---- 155Descriptions of the other statistics file should go here. 156 157 158Greg Banks <gnb@sgi.com> 15926 Mar 2009 160