mbox series

[v2,0/9] Add a tool for using the new sysfs files

Message ID 20210806201739.472806-1-Anna.Schumaker@Netapp.com (mailing list archive)
Headers show
Series Add a tool for using the new sysfs files | expand

Message

Anna Schumaker Aug. 6, 2021, 8:17 p.m. UTC
From: Anna Schumaker <Anna.Schumaker@Netapp.com>

These patches implement a tool that can be used to read and write the
sysfs files, with subcommands! They do need my extra patches to add in
srcaddr and dst_port to the xprt_info file. Let me know if I need to
resend adding support for kernels both with and without these patches.

The following subcommands are implemented:
	nfs-sysfs.py rpc-client
 	nfs-sysfs.py xprt
 	nfs-sysfs.py xprt set
 	nfs-sysfs.py xprt-switch
 	nfs-sysfs.py xprt-switch set

So you can print out information about every xprt-switch with:
	anna@client ~ % nfs-sysfs xprt-switch
	switch 0: num_xprts 1, num_active 1, queue_len 0
		xprt 0: local, /var/run/gssproxy.sock [main]
	switch 1: num_xprts 1, num_active 1, queue_len 0
		xprt 1: local, /var/run/rpcbind.sock [main]
	switch 2: num_xprts 1, num_active 1, queue_len 0
		xprt 2: tcp, 192.168.111.1 [main]
	switch 3: num_xprts 4, num_active 4, queue_len 0
		xprt 3: tcp, 192.168.111.188 [main]
		xprt 4: tcp, 192.168.111.188
		xprt 5: tcp, 192.168.111.188
		xprt 6: tcp, 192.168.111.188

And information about each xprt:
	anna@client ~ % nfs-sysfs xprt       
	xprt 0: local, /var/run/gssproxy.sock, port 0, state <MAIN,CONNECTED,BOUND>
		Source: (einval), port 0, Requests: 2
		Congestion: cur 0, win 256, Slots: min 2, max 65536
		Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0
	xprt 1: local, /var/run/rpcbind.sock, port 0, state <MAIN,CONNECTED,BOUND>
		Source: (einval), port 0, Requests: 2
		Congestion: cur 0, win 256, Slots: min 2, max 65536
		Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0
	xprt 2: tcp, 192.168.111.1, port 2049, state <MAIN,CONNECTED,BOUND>
		Source: 192.168.111.222, port 959, Requests: 2
		Congestion: cur 0, win 256, Slots: min 2, max 65536
		Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0
	xprt 3: tcp, 192.168.111.188, port 2049, state <MAIN,CONNECTED,BOUND>
		Source: 192.168.111.222, port 921, Requests: 2
		Congestion: cur 0, win 256, Slots: min 2, max 65536
		Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0
	xprt 4: tcp, 192.168.111.188, port 2049, state <CONNECTED,BOUND>
		Source: 192.168.111.222, port 726, Requests: 2
		Congestion: cur 0, win 256, Slots: min 2, max 65536
		Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0
	xprt 5: tcp, 192.168.111.188, port 2049, state <CONNECTED,BOUND>
		Source: 192.168.111.222, port 671, Requests: 2
		Congestion: cur 0, win 256, Slots: min 2, max 65536
		Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0
	xprt 6: tcp, 192.168.111.188, port 2049, state <CONNECTED,BOUND>
		Source: 192.168.111.222, port 934, Requests: 2
		Congestion: cur 0, win 256, Slots: min 2, max 65536
		Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0

You can use the `set` subcommand to change the dstaddr of individual xprts:
	anna@client ~ % sudo nfs-sysfs xprt --id 4 
	xprt 4: tcp, 192.168.111.188, port 2049, state <CONNECTED,BOUND>
		Source: 192.168.111.222, port 726, Requests: 2
		Congestion: cur 0, win 256, Slots: min 2, max 65536
		Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0
	anna@client ~ % sudo nfs-sysfs xprt set --id 4 --dstaddr server2.nowheycreamery.com
	xprt 4: tcp, 192.168.111.186, port 2049, state <CONNECTED,BOUND>
		Source: 192.168.111.222, port 726, Requests: 2
		Congestion: cur 0, win 256, Slots: min 2, max 65536
		Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0

Or for changing the dstaddr of all xprts attached to a switch:
	anna@client % ./nfs-sysfs.py xprt-switch --id 3
	switch 3: num_xprts 4, num_active 4, queue_len 0
		xprt 3: tcp, 192.168.111.188 [main]
		xprt 4: tcp, 192.168.111.188
		xprt 5: tcp, 192.168.111.188
		xprt 6: tcp, 192.168.111.188
	anna@client % sudo ./nfs-sysfs.py xprt-switch set --id 4 --dstaddr server2.nowheycreamery.vm
	switch 3: num_xprts 4, num_active 4, queue_len 0
		xprt 2: tcp, 192.168.111.186 [main]
		xprt 3: tcp, 192.168.111.186
		xprt 5: tcp, 192.168.111.186
		xprt 6: tcp, 192.168.111.186


What does everybody think? Is there any thing I should change about the
user input or output lines? How about other subcommands that should be
added with the initial submission?

Thanks,
Anna


Anna Schumaker (9):
  nfs-sysfs: Add an nfs-sysfs.py tool
  nfs-sysfs.py: Add a command for printing xprt switch information
  nfs-sysfs.py: Add a command for printing individual xprts
  nfs-sysfs.py: Add a command for printing rpc-client information
  nfs-sysfs.py: Add a command for changing xprt dstaddr
  nfs-sysfs.py: Add a command for changing xprt-switch dstaddrs
  nfs-sysfs.py: Add a command for changing xprt state
  nfs-sysfs: Add a man page
  nfs-sysfs: Add installation to the Makefile

 .gitignore                    |   2 +
 configure.ac                  |   1 +
 tools/Makefile.am             |   2 +-
 tools/nfs-sysfs/Makefile.am   |  20 +++++++
 tools/nfs-sysfs/client.py     |  27 +++++++++
 tools/nfs-sysfs/nfs-sysfs     |   5 ++
 tools/nfs-sysfs/nfs-sysfs.man |  88 +++++++++++++++++++++++++++++
 tools/nfs-sysfs/nfs-sysfs.py  |  23 ++++++++
 tools/nfs-sysfs/switch.py     |  51 +++++++++++++++++
 tools/nfs-sysfs/sysfs.py      |  28 ++++++++++
 tools/nfs-sysfs/xprt.py       | 101 ++++++++++++++++++++++++++++++++++
 11 files changed, 347 insertions(+), 1 deletion(-)
 create mode 100644 tools/nfs-sysfs/Makefile.am
 create mode 100644 tools/nfs-sysfs/client.py
 create mode 100644 tools/nfs-sysfs/nfs-sysfs
 create mode 100644 tools/nfs-sysfs/nfs-sysfs.man
 create mode 100755 tools/nfs-sysfs/nfs-sysfs.py
 create mode 100644 tools/nfs-sysfs/switch.py
 create mode 100644 tools/nfs-sysfs/sysfs.py
 create mode 100644 tools/nfs-sysfs/xprt.py

Comments

Steve Dickson Aug. 8, 2021, 4:30 p.m. UTC | #1
Hey Anna,

On 8/6/21 4:17 PM, schumaker.anna@gmail.com wrote:
> From: Anna Schumaker <Anna.Schumaker@Netapp.com>
> 
> These patches implement a tool that can be used to read and write the
> sysfs files, with subcommands! They do need my extra patches to add in
> srcaddr and dst_port to the xprt_info file. Let me know if I need to
> resend adding support for kernels both with and without these patches.
> 
> The following subcommands are implemented:
> 	nfs-sysfs.py rpc-client
>   	nfs-sysfs.py xprt
>   	nfs-sysfs.py xprt set
>   	nfs-sysfs.py xprt-switch
>   	nfs-sysfs.py xprt-switch set
> 
> So you can print out information about every xprt-switch with:
> 	anna@client ~ % nfs-sysfs xprt-switch
> 	switch 0: num_xprts 1, num_active 1, queue_len 0
> 		xprt 0: local, /var/run/gssproxy.sock [main]
> 	switch 1: num_xprts 1, num_active 1, queue_len 0
> 		xprt 1: local, /var/run/rpcbind.sock [main]
> 	switch 2: num_xprts 1, num_active 1, queue_len 0
> 		xprt 2: tcp, 192.168.111.1 [main]
> 	switch 3: num_xprts 4, num_active 4, queue_len 0
> 		xprt 3: tcp, 192.168.111.188 [main]
> 		xprt 4: tcp, 192.168.111.188
> 		xprt 5: tcp, 192.168.111.188
> 		xprt 6: tcp, 192.168.111.188
> 
> And information about each xprt:
> 	anna@client ~ % nfs-sysfs xprt
> 	xprt 0: local, /var/run/gssproxy.sock, port 0, state <MAIN,CONNECTED,BOUND>
> 		Source: (einval), port 0, Requests: 2
> 		Congestion: cur 0, win 256, Slots: min 2, max 65536
> 		Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0
> 	xprt 1: local, /var/run/rpcbind.sock, port 0, state <MAIN,CONNECTED,BOUND>
> 		Source: (einval), port 0, Requests: 2
> 		Congestion: cur 0, win 256, Slots: min 2, max 65536
> 		Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0
> 	xprt 2: tcp, 192.168.111.1, port 2049, state <MAIN,CONNECTED,BOUND>
> 		Source: 192.168.111.222, port 959, Requests: 2
> 		Congestion: cur 0, win 256, Slots: min 2, max 65536
> 		Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0
> 	xprt 3: tcp, 192.168.111.188, port 2049, state <MAIN,CONNECTED,BOUND>
> 		Source: 192.168.111.222, port 921, Requests: 2
> 		Congestion: cur 0, win 256, Slots: min 2, max 65536
> 		Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0
> 	xprt 4: tcp, 192.168.111.188, port 2049, state <CONNECTED,BOUND>
> 		Source: 192.168.111.222, port 726, Requests: 2
> 		Congestion: cur 0, win 256, Slots: min 2, max 65536
> 		Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0
> 	xprt 5: tcp, 192.168.111.188, port 2049, state <CONNECTED,BOUND>
> 		Source: 192.168.111.222, port 671, Requests: 2
> 		Congestion: cur 0, win 256, Slots: min 2, max 65536
> 		Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0
> 	xprt 6: tcp, 192.168.111.188, port 2049, state <CONNECTED,BOUND>
> 		Source: 192.168.111.222, port 934, Requests: 2
> 		Congestion: cur 0, win 256, Slots: min 2, max 65536
> 		Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0
> 
> You can use the `set` subcommand to change the dstaddr of individual xprts:
> 	anna@client ~ % sudo nfs-sysfs xprt --id 4
> 	xprt 4: tcp, 192.168.111.188, port 2049, state <CONNECTED,BOUND>
> 		Source: 192.168.111.222, port 726, Requests: 2
> 		Congestion: cur 0, win 256, Slots: min 2, max 65536
> 		Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0
> 	anna@client ~ % sudo nfs-sysfs xprt set --id 4 --dstaddr server2.nowheycreamery.com
> 	xprt 4: tcp, 192.168.111.186, port 2049, state <CONNECTED,BOUND>
> 		Source: 192.168.111.222, port 726, Requests: 2
> 		Congestion: cur 0, win 256, Slots: min 2, max 65536
> 		Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0
> 
> Or for changing the dstaddr of all xprts attached to a switch:
> 	anna@client % ./nfs-sysfs.py xprt-switch --id 3
> 	switch 3: num_xprts 4, num_active 4, queue_len 0
> 		xprt 3: tcp, 192.168.111.188 [main]
> 		xprt 4: tcp, 192.168.111.188
> 		xprt 5: tcp, 192.168.111.188
> 		xprt 6: tcp, 192.168.111.188
> 	anna@client % sudo ./nfs-sysfs.py xprt-switch set --id 4 --dstaddr server2.nowheycreamery.vm
> 	switch 3: num_xprts 4, num_active 4, queue_len 0
> 		xprt 2: tcp, 192.168.111.186 [main]
> 		xprt 3: tcp, 192.168.111.186
> 		xprt 5: tcp, 192.168.111.186
> 		xprt 6: tcp, 192.168.111.186
> 
> 
> What does everybody think? Is there any thing I should change about the
> user input or output lines? How about other subcommands that should be
> added with the initial submission?
I have not play around with this new tool.. but I will! Looking
forward to it... But... and I should have mention this in v1
my apologies.

The rest of the NFS tools do not have have "nfs-" as the
prefix only an "nfs"... As with nfs-iostat, I'll me more that
will to take the patch with the '-' char, but I would
prefer the  man page and the installed script be call nfssysfs,
just to say with the current naming conventions.

steved.

> 
> Thanks,
> Anna
> 
> 
> Anna Schumaker (9):
>    nfs-sysfs: Add an nfs-sysfs.py tool
>    nfs-sysfs.py: Add a command for printing xprt switch information
>    nfs-sysfs.py: Add a command for printing individual xprts
>    nfs-sysfs.py: Add a command for printing rpc-client information
>    nfs-sysfs.py: Add a command for changing xprt dstaddr
>    nfs-sysfs.py: Add a command for changing xprt-switch dstaddrs
>    nfs-sysfs.py: Add a command for changing xprt state
>    nfs-sysfs: Add a man page
>    nfs-sysfs: Add installation to the Makefile
> 
>   .gitignore                    |   2 +
>   configure.ac                  |   1 +
>   tools/Makefile.am             |   2 +-
>   tools/nfs-sysfs/Makefile.am   |  20 +++++++
>   tools/nfs-sysfs/client.py     |  27 +++++++++
>   tools/nfs-sysfs/nfs-sysfs     |   5 ++
>   tools/nfs-sysfs/nfs-sysfs.man |  88 +++++++++++++++++++++++++++++
>   tools/nfs-sysfs/nfs-sysfs.py  |  23 ++++++++
>   tools/nfs-sysfs/switch.py     |  51 +++++++++++++++++
>   tools/nfs-sysfs/sysfs.py      |  28 ++++++++++
>   tools/nfs-sysfs/xprt.py       | 101 ++++++++++++++++++++++++++++++++++
>   11 files changed, 347 insertions(+), 1 deletion(-)
>   create mode 100644 tools/nfs-sysfs/Makefile.am
>   create mode 100644 tools/nfs-sysfs/client.py
>   create mode 100644 tools/nfs-sysfs/nfs-sysfs
>   create mode 100644 tools/nfs-sysfs/nfs-sysfs.man
>   create mode 100755 tools/nfs-sysfs/nfs-sysfs.py
>   create mode 100644 tools/nfs-sysfs/switch.py
>   create mode 100644 tools/nfs-sysfs/sysfs.py
>   create mode 100644 tools/nfs-sysfs/xprt.py
>
Anna Schumaker Aug. 8, 2021, 7 p.m. UTC | #2
Hi Steve,

On Sun, Aug 8, 2021 at 12:30 PM Steve Dickson <steved@redhat.com> wrote:
>
> Hey Anna,
>
> On 8/6/21 4:17 PM, schumaker.anna@gmail.com wrote:
> > From: Anna Schumaker <Anna.Schumaker@Netapp.com>
> >
> > These patches implement a tool that can be used to read and write the
> > sysfs files, with subcommands! They do need my extra patches to add in
> > srcaddr and dst_port to the xprt_info file. Let me know if I need to
> > resend adding support for kernels both with and without these patches.
> >
> > The following subcommands are implemented:
> >       nfs-sysfs.py rpc-client
> >       nfs-sysfs.py xprt
> >       nfs-sysfs.py xprt set
> >       nfs-sysfs.py xprt-switch
> >       nfs-sysfs.py xprt-switch set
> >
> > So you can print out information about every xprt-switch with:
> >       anna@client ~ % nfs-sysfs xprt-switch
> >       switch 0: num_xprts 1, num_active 1, queue_len 0
> >               xprt 0: local, /var/run/gssproxy.sock [main]
> >       switch 1: num_xprts 1, num_active 1, queue_len 0
> >               xprt 1: local, /var/run/rpcbind.sock [main]
> >       switch 2: num_xprts 1, num_active 1, queue_len 0
> >               xprt 2: tcp, 192.168.111.1 [main]
> >       switch 3: num_xprts 4, num_active 4, queue_len 0
> >               xprt 3: tcp, 192.168.111.188 [main]
> >               xprt 4: tcp, 192.168.111.188
> >               xprt 5: tcp, 192.168.111.188
> >               xprt 6: tcp, 192.168.111.188
> >
> > And information about each xprt:
> >       anna@client ~ % nfs-sysfs xprt
> >       xprt 0: local, /var/run/gssproxy.sock, port 0, state <MAIN,CONNECTED,BOUND>
> >               Source: (einval), port 0, Requests: 2
> >               Congestion: cur 0, win 256, Slots: min 2, max 65536
> >               Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0
> >       xprt 1: local, /var/run/rpcbind.sock, port 0, state <MAIN,CONNECTED,BOUND>
> >               Source: (einval), port 0, Requests: 2
> >               Congestion: cur 0, win 256, Slots: min 2, max 65536
> >               Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0
> >       xprt 2: tcp, 192.168.111.1, port 2049, state <MAIN,CONNECTED,BOUND>
> >               Source: 192.168.111.222, port 959, Requests: 2
> >               Congestion: cur 0, win 256, Slots: min 2, max 65536
> >               Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0
> >       xprt 3: tcp, 192.168.111.188, port 2049, state <MAIN,CONNECTED,BOUND>
> >               Source: 192.168.111.222, port 921, Requests: 2
> >               Congestion: cur 0, win 256, Slots: min 2, max 65536
> >               Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0
> >       xprt 4: tcp, 192.168.111.188, port 2049, state <CONNECTED,BOUND>
> >               Source: 192.168.111.222, port 726, Requests: 2
> >               Congestion: cur 0, win 256, Slots: min 2, max 65536
> >               Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0
> >       xprt 5: tcp, 192.168.111.188, port 2049, state <CONNECTED,BOUND>
> >               Source: 192.168.111.222, port 671, Requests: 2
> >               Congestion: cur 0, win 256, Slots: min 2, max 65536
> >               Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0
> >       xprt 6: tcp, 192.168.111.188, port 2049, state <CONNECTED,BOUND>
> >               Source: 192.168.111.222, port 934, Requests: 2
> >               Congestion: cur 0, win 256, Slots: min 2, max 65536
> >               Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0
> >
> > You can use the `set` subcommand to change the dstaddr of individual xprts:
> >       anna@client ~ % sudo nfs-sysfs xprt --id 4
> >       xprt 4: tcp, 192.168.111.188, port 2049, state <CONNECTED,BOUND>
> >               Source: 192.168.111.222, port 726, Requests: 2
> >               Congestion: cur 0, win 256, Slots: min 2, max 65536
> >               Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0
> >       anna@client ~ % sudo nfs-sysfs xprt set --id 4 --dstaddr server2.nowheycreamery.com
> >       xprt 4: tcp, 192.168.111.186, port 2049, state <CONNECTED,BOUND>
> >               Source: 192.168.111.222, port 726, Requests: 2
> >               Congestion: cur 0, win 256, Slots: min 2, max 65536
> >               Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0
> >
> > Or for changing the dstaddr of all xprts attached to a switch:
> >       anna@client % ./nfs-sysfs.py xprt-switch --id 3
> >       switch 3: num_xprts 4, num_active 4, queue_len 0
> >               xprt 3: tcp, 192.168.111.188 [main]
> >               xprt 4: tcp, 192.168.111.188
> >               xprt 5: tcp, 192.168.111.188
> >               xprt 6: tcp, 192.168.111.188
> >       anna@client % sudo ./nfs-sysfs.py xprt-switch set --id 4 --dstaddr server2.nowheycreamery.vm
> >       switch 3: num_xprts 4, num_active 4, queue_len 0
> >               xprt 2: tcp, 192.168.111.186 [main]
> >               xprt 3: tcp, 192.168.111.186
> >               xprt 5: tcp, 192.168.111.186
> >               xprt 6: tcp, 192.168.111.186
> >
> >
> > What does everybody think? Is there any thing I should change about the
> > user input or output lines? How about other subcommands that should be
> > added with the initial submission?
> I have not play around with this new tool.. but I will! Looking
> forward to it... But... and I should have mention this in v1
> my apologies.
>
> The rest of the NFS tools do not have have "nfs-" as the
> prefix only an "nfs"... As with nfs-iostat, I'll me more that
> will to take the patch with the '-' char, but I would
> prefer the  man page and the installed script be call nfssysfs,
> just to say with the current naming conventions.

No problem! Changing the name of the tool should be easy enough. I'm
not committed to the name either, so if anybody has a better name in
mind please let me know!


Anna
>
> steved.
>
> >
> > Thanks,
> > Anna
> >
> >
> > Anna Schumaker (9):
> >    nfs-sysfs: Add an nfs-sysfs.py tool
> >    nfs-sysfs.py: Add a command for printing xprt switch information
> >    nfs-sysfs.py: Add a command for printing individual xprts
> >    nfs-sysfs.py: Add a command for printing rpc-client information
> >    nfs-sysfs.py: Add a command for changing xprt dstaddr
> >    nfs-sysfs.py: Add a command for changing xprt-switch dstaddrs
> >    nfs-sysfs.py: Add a command for changing xprt state
> >    nfs-sysfs: Add a man page
> >    nfs-sysfs: Add installation to the Makefile
> >
> >   .gitignore                    |   2 +
> >   configure.ac                  |   1 +
> >   tools/Makefile.am             |   2 +-
> >   tools/nfs-sysfs/Makefile.am   |  20 +++++++
> >   tools/nfs-sysfs/client.py     |  27 +++++++++
> >   tools/nfs-sysfs/nfs-sysfs     |   5 ++
> >   tools/nfs-sysfs/nfs-sysfs.man |  88 +++++++++++++++++++++++++++++
> >   tools/nfs-sysfs/nfs-sysfs.py  |  23 ++++++++
> >   tools/nfs-sysfs/switch.py     |  51 +++++++++++++++++
> >   tools/nfs-sysfs/sysfs.py      |  28 ++++++++++
> >   tools/nfs-sysfs/xprt.py       | 101 ++++++++++++++++++++++++++++++++++
> >   11 files changed, 347 insertions(+), 1 deletion(-)
> >   create mode 100644 tools/nfs-sysfs/Makefile.am
> >   create mode 100644 tools/nfs-sysfs/client.py
> >   create mode 100644 tools/nfs-sysfs/nfs-sysfs
> >   create mode 100644 tools/nfs-sysfs/nfs-sysfs.man
> >   create mode 100755 tools/nfs-sysfs/nfs-sysfs.py
> >   create mode 100644 tools/nfs-sysfs/switch.py
> >   create mode 100644 tools/nfs-sysfs/sysfs.py
> >   create mode 100644 tools/nfs-sysfs/xprt.py
> >
>