All of lore.kernel.org
 help / color / mirror / Atom feed
* Calculating total server read/write bytes
@ 2022-05-12 14:40 Chris Chilvers
  0 siblings, 0 replies; only message in thread
From: Chris Chilvers @ 2022-05-12 14:40 UTC (permalink / raw)
  To: linux-nfs

I want to display the total server read, and server write bytes from the
io_stats. However, this poses a challenge as the only way I can find to retrieve
these stats is from /proc/self/mountstats.

The issue I run into is that io_stats is per nfs_server record, while the output
is reported per mount. Multiple mounts can share the same nfs_server record.

This means while parsing the mountstats I need a way to reliably determine if
two mounts share the same nfs_server record.

From reading the source it appears that nfs_server and super_block are
correlated 1:1, and s_dev for NFS is allocated a unique value via
set_anon_super.

My plan is to run stat on the mount point to fetch the st_dev value. Thus is it
safe to assume (for NFS) if two mount points have the same st_dev value they
share the same io_stats, and if the st_dev value is different they have separate
io_stats, or is there some scenario that I've missed?

Longer term it would be nice to make this process simpler, I can see several
options on how to handle this:

1. Add a unique identifier in the mountstats (e.g. s_dev) that can be used as a
   unique key.

   The concept here is that anything scraping the stats does not need to
   rely on the assumption that io_stats has a 1:1 correlation with super_block
   or that s_dev is unique. If the implementation were to change in future the
   key can be updated to match.

   The only issue is if this uses an existing value such as s_dev consumers
   might ignore the fact that the key should be treated as an opaque value and
   only used to deduplicate io_stats and start relying on the key matching the
   s_dev value. As such it might be necessary to allocate
   a separate unique key to the io_stats.

2. Two separate files in procfs that only output each unique stat once.
   * io_stats for each nfs_server excluding xprt: lines (multiple nfs_server
     entries can share the same RPC transport).
   * stats for RPC transports (xprt lines). These should be unique so that each
     RPC connection is only displayed once.

3. Add a new file to procfs that outputs aggregated io_stats (including xprt
   lines). These stats should be aggregated at the source server level. It is
   still useful when a client has mounted exports from multiple servers to have
   separate stats per server.

--
Chris

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-05-12 14:40 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-12 14:40 Calculating total server read/write bytes Chris Chilvers

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.