mbox series

[v2,00/13] Make nfs and nfsd stats visible in network ns

Message ID cover.1706212207.git.josef@toxicpanda.com (mailing list archive)
Headers show
Series Make nfs and nfsd stats visible in network ns | expand

Message

Josef Bacik Jan. 25, 2024, 7:53 p.m. UTC
v1: https://lore.kernel.org/linux-nfs/cover.1706124811.git.josef@toxicpanda.com/

v1->v2:
- rework the sunprc service creation to take a pointer to the sv_stats.
- dropped ->pg_stats from the svc_program.
- converted all of the nfsd global stats to per-network namespace.
- added the ability to point at a specific rpc_stat for rpc program creation.
- converted the rpc stats for nfs to per-network namespace.

-- Original email --
Hello,

We're currently deploying NFS internally and have run into some oddities with
our usage of containers.  All of the services that mount and export NFS volumes
run inside of containers, specifically all the namespaces including network
namespaces.  Our monitoring is done on a per-container basis, so we need access
to the nfs and nfsd stats that are under /proc/net/sunrpc.  However these are
only tied to the init_net, which makes them invisible to containers in a
different network namespace.

Fix this so that these files are tied to the network namespace.  This allows us
to avoid the hack of bind mounting the hosts /proc into the container in order
to do proper monitoring.  Thanks,

Josef

Josef Bacik (13):
  sunrpc: don't change ->sv_stats if it doesn't exist
  nfs: stop setting ->pg_stats for unused stats
  sunrpc: pass in the sv_stats struct through svc_create*
  sunrpc: remove ->pg_stats from svc_program
  sunrpc: add a struct rpc_stats arg to rpc_create_args
  sunrpc: use the struct net as the svc proc private
  nfsd: rename NFSD_NET_* to NFSD_STATS_*
  nfsd: expose /proc/net/sunrpc/nfsd in net namespaces
  nfsd: make all of the nfsd stats per-network namespace
  nfsd: move th_cnt into nfsd_net
  nfsd: make svc_stat per-network namespace instead of global
  nfs: expose /proc/net/sunrpc/nfs in net namespaces
  nfs: make the rpc_stat per net namespace

 fs/lockd/svc.c              |  5 +--
 fs/nfs/callback.c           |  5 +--
 fs/nfs/client.c             |  5 ++-
 fs/nfs/inode.c              |  8 ++---
 fs/nfs/internal.h           |  2 --
 fs/nfs/netns.h              |  2 ++
 fs/nfsd/cache.h             |  2 --
 fs/nfsd/netns.h             | 28 ++++++++++++---
 fs/nfsd/nfs4proc.c          |  6 ++--
 fs/nfsd/nfs4state.c         |  3 +-
 fs/nfsd/nfscache.c          | 40 +++++----------------
 fs/nfsd/nfsctl.c            | 16 ++++-----
 fs/nfsd/nfsfh.c             |  3 +-
 fs/nfsd/nfssvc.c            | 13 +++----
 fs/nfsd/stats.c             | 53 ++++++++++++----------------
 fs/nfsd/stats.h             | 70 +++++++++++++------------------------
 fs/nfsd/vfs.c               |  5 +--
 include/linux/sunrpc/clnt.h |  1 +
 include/linux/sunrpc/svc.h  |  9 +++--
 net/sunrpc/clnt.c           |  2 +-
 net/sunrpc/stats.c          |  2 +-
 net/sunrpc/svc.c            | 44 ++++++++++++++---------
 22 files changed, 147 insertions(+), 177 deletions(-)

Comments

Jeff Layton Jan. 26, 2024, 1:12 p.m. UTC | #1
On Thu, 2024-01-25 at 14:53 -0500, Josef Bacik wrote:
> v1: https://lore.kernel.org/linux-nfs/cover.1706124811.git.josef@toxicpanda.com/
> 
> v1->v2:
> - rework the sunprc service creation to take a pointer to the sv_stats.
> - dropped ->pg_stats from the svc_program.
> - converted all of the nfsd global stats to per-network namespace.
> - added the ability to point at a specific rpc_stat for rpc program creation.
> - converted the rpc stats for nfs to per-network namespace.
>
> -- Original email --
> Hello,
> 
> We're currently deploying NFS internally and have run into some oddities with
> our usage of containers.  All of the services that mount and export NFS volumes
> run inside of containers, specifically all the namespaces including network
> namespaces.  Our monitoring is done on a per-container basis, so we need access
> to the nfs and nfsd stats that are under /proc/net/sunrpc.  However these are
> only tied to the init_net, which makes them invisible to containers in a
> different network namespace.
> 
> Fix this so that these files are tied to the network namespace.  This allows us
> to avoid the hack of bind mounting the hosts /proc into the container in order
> to do proper monitoring.  Thanks,
> 
> Josef
> 
> Josef Bacik (13):
>   sunrpc: don't change ->sv_stats if it doesn't exist
>   nfs: stop setting ->pg_stats for unused stats
>   sunrpc: pass in the sv_stats struct through svc_create*
>   sunrpc: remove ->pg_stats from svc_program
>   sunrpc: add a struct rpc_stats arg to rpc_create_args
>   sunrpc: use the struct net as the svc proc private
>   nfsd: rename NFSD_NET_* to NFSD_STATS_*
>   nfsd: expose /proc/net/sunrpc/nfsd in net namespaces
>   nfsd: make all of the nfsd stats per-network namespace
>   nfsd: move th_cnt into nfsd_net
>   nfsd: make svc_stat per-network namespace instead of global
>   nfs: expose /proc/net/sunrpc/nfs in net namespaces
>   nfs: make the rpc_stat per net namespace
> 
>  fs/lockd/svc.c              |  5 +--
>  fs/nfs/callback.c           |  5 +--
>  fs/nfs/client.c             |  5 ++-
>  fs/nfs/inode.c              |  8 ++---
>  fs/nfs/internal.h           |  2 --
>  fs/nfs/netns.h              |  2 ++
>  fs/nfsd/cache.h             |  2 --
>  fs/nfsd/netns.h             | 28 ++++++++++++---
>  fs/nfsd/nfs4proc.c          |  6 ++--
>  fs/nfsd/nfs4state.c         |  3 +-
>  fs/nfsd/nfscache.c          | 40 +++++----------------
>  fs/nfsd/nfsctl.c            | 16 ++++-----
>  fs/nfsd/nfsfh.c             |  3 +-
>  fs/nfsd/nfssvc.c            | 13 +++----
>  fs/nfsd/stats.c             | 53 ++++++++++++----------------
>  fs/nfsd/stats.h             | 70 +++++++++++++------------------------
>  fs/nfsd/vfs.c               |  5 +--
>  include/linux/sunrpc/clnt.h |  1 +
>  include/linux/sunrpc/svc.h  |  9 +++--
>  net/sunrpc/clnt.c           |  2 +-
>  net/sunrpc/stats.c          |  2 +-
>  net/sunrpc/svc.c            | 44 ++++++++++++++---------
>  22 files changed, 147 insertions(+), 177 deletions(-)
> 

Nice work!

I took a look and this all looks good to me, modulo the nits that Chuck
pointed out yesterday. I'd also plan to split this into client and
server sets since they'll probably go in separately. Otherwise though,
this looks good to me and you can add:

Reviewed-by: Jeff Layton <jlayton@kernel.org>