Skip to contentSkip to conversation

NFS debugging helpers

DISCUSSION Chuck Lever 2 participants 4 messages Jun 21, 2007 – Jun 22, 2007

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

I thought I remembered that nfs-utils has simple programs to set NFS/RPC debugging flags, but I couldn't find them.

So I constructed a couple of Python scripts to remember the flag names and values (see attached). They are still a little raw.

Is there anything like this already out there?

#!/usr/bin/env python
# -*- python-mode -*-
"""Script to set NFS debug levels symbolically
"""

__copyright__ = """
Copyright (C) 2007, Chuck Lever <[email protected]>

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA """

""" History:
Thu Jun 21 10:41:40 EDT 2007 cel - created
"""

import sys, os, time, popen2

""" From include/linux/nfs_fs.h
"""

NfsDebugFlags = {
    'vfs'         : 0x0001,
    'dircache'    : 0x0002,
    'lookupcache' : 0x0004,
    'pagecache'   : 0x0008,
    'proc'        : 0x0010,
    'xdr'         : 0x0020,
    'file'        : 0x0040,
    'root'        : 0x0080,
    'callback'    : 0x0100,
    'client'      : 0x0200,
    'mount'       : 0x0400,
}

NoNfsFlags = 0
AllNfsFlags = 0x07ff

def DoCmd(cmd):
p = popen2.Popen3(cmd, True)
output = p.fromchild.read()
if p.wait():
print '%s failed (%s)' % (str(cmd), p.childerr.read().strip())
return output

def CurrentSetting():
string = DoCmd("/sbin/sysctl sunrpc.nfs_debug") words = string.split()
return int(words[2])

def SetNfsFlags(flags):
cmd = '/usr/bin/sudo /sbin/sysctl -w sunrpc.nfs_debug=%d' % flags DoCmd(cmd)
return

def ProcessFlag(flag):
if flag not in NfsDebugFlags:
print 'Unrecognized NFS debugging flag.'
return

current = CurrentSetting()
SetNfsFlags(current | NfsDebugFlags[flag])

return

#
# Main
#

if len(sys.argv) == 1:
current = CurrentSetting()
if current == NoNfsFlags:
print 'NFS debugging is currently disabled.'
elif current == AllNfsFlags:
print 'NFS debugging is currently fully enabled.'
else:
print 'Current NFS debugging flags:'
for i in NfsDebugFlags.items():
if (current & i[1]) == i[1]:
print ' %s' % i[0]
sys.exit(0)

if sys.argv[1] in [ '-h', '--help' ]:

    print 'Usage:  nfsdebug [flag name] [flag name] ...'
    print '  where flag name is one of: all, none, %s' % \
        ', '.join(NfsDebugFlags.keys())
    sys.exit(1)

for arg in sys.argv:

    if arg == sys.argv[0]:
        continue

    elif arg in [ 'all', 'on', 'true', 'yes' ]:
        SetNfsFlags(AllNfsFlags)
        print 'NFS debugging is now enabled.'

    elif arg in [ 'none', 'off', 'false', 'no', 'clear', 'zero' ]:
        SetNfsFlags(NoNfsFlags)
        print 'NFS debugging is now disabled.'

    else:
        ProcessFlag(arg)

sys.exit(0)

#!/usr/bin/env python
# -*- python-mode -*-
"""Script to set RPC debug levels symbolically
"""

__copyright__ = """
Copyright (C) 2007, Chuck Lever <[email protected]>

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA """

""" History:
Thu Jun 21 10:41:40 EDT 2007 cel - created
"""

import sys, os, time, popen2

""" From include/linux/sunrpc/debug.h
"""

RpcDebugFlags = {
    'xprt'    : 0x0001,
    'call'    : 0x0002,
    'debug'   : 0x0004,
    'nfs'     : 0x0008,
    'auth'    : 0x0010,
    'bind'    : 0x0020,
    'sched'   : 0x0040,
    'trans'   : 0x0080,
    'svcsock' : 0x0100,
    'svcdsp'  : 0x0200,
    'misc'    : 0x0400,
    'cache'   : 0x0800,
}

NoRpcFlags = 0
AllRpcFlags = 0x0fff

def DoCmd(cmd):
p = popen2.Popen3(cmd, True)
output = p.fromchild.read()
if p.wait():
print '%s failed (%s)' % (str(cmd), p.childerr.read().strip())
return output

def CurrentSetting():
string = DoCmd("/sbin/sysctl sunrpc.rpc_debug") words = string.split()
return int(words[2])

def SetRpcFlags(flags):
cmd = '/usr/bin/sudo /sbin/sysctl -w sunrpc.rpc_debug=%d' % flags DoCmd(cmd)
return

def ProcessFlag(flag):
if flag not in RpcDebugFlags:
print 'Unrecognized RPC debugging flag.'
return

current = CurrentSetting()
SetRpcFlags(current | RpcDebugFlags[flag])

return

#
# Main
#

if len(sys.argv) == 1:
current = CurrentSetting()
if current == NoRpcFlags:
print 'RPC debugging is currently disabled.'
elif current == AllRpcFlags:
print 'RPC debugging is currently fully enabled.'
else:
print 'Current RPC debugging flags:'
for i in RpcDebugFlags.items():
if (current & i[1]) == i[1]:
print ' %s' % i[0]
sys.exit(0)

if sys.argv[1] in [ '-h', '--help' ]:

    print 'Usage:  rpcdebug [flag name] [flag name] ...'
    print '  where flag name is one of: all, none, %s' % \
        ', '.join(RpcDebugFlags.keys())
    sys.exit(1)

for arg in sys.argv:

    if arg == sys.argv[0]:
        continue

    elif arg in [ 'all', 'on', 'true', 'yes' ]:
        SetRpcFlags(AllRpcFlags)
        print 'RPC debugging is now enabled.'

    elif arg in [ 'none', 'off', 'false', 'no', 'clear', 'zero' ]:
        SetRpcFlags(NoRpcFlags)
        print 'RPC debugging is now disabled.'

    else:
        ProcessFlag(arg)

sys.exit(0)

begin:vcard
fn:Chuck Lever
n:Lever;Chuck
org:Oracle Corporation;Corporate Architecture: Linux Projects Group adr:;;1015 Granger Avenue;Ann Arbor;MI;48104;USA title:Principal Member of Staff
tel;work:+1 248 614 5091
x-mozilla-html:FALSE
url:http://oss.oracle.com/~cel/
version:2.1
end:vcard

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/

_______________________________________________
NFS maillist - [email protected]
https://lists.sourceforge.net/lists/listinfo/nfs

#1 lore raw
Quoted 7 lines · Chuck Lever

I thought I remembered that nfs-utils has simple programs to set NFS/RPC debugging flags, but I couldn't find them.

So I constructed a couple of Python scripts to remember the flag names and values (see attached). They are still a little raw.

Is there anything like this already out there?

Try

man rpcdebug

It comes from nfs-utils/tools/rpcdebug/.

--b.

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
NFS maillist - [email protected]
https://lists.sourceforge.net/lists/listinfo/nfs

#2 lore raw
Quoted 5 lines · J. Bruce Fields
Quoted 4 lines · Chuck Lever

I thought I remembered that nfs-utils has simple programs to set NFS/RPC debugging flags, but I couldn't find them.

So I constructed a couple of Python scripts to remember the flag names and values (see attached). They are still a little raw.

Quoted 7 lines
Quoted 1 line

Is there anything like this already out there?

Try

man rpcdebug

It comes from nfs-utils/tools/rpcdebug/.

Ja, that's what I remembered.

Not necessarily to Bruce: Is it actively maintained? If a new debugging flag is added, is this tool updated by someone?

begin:vcard
fn:Chuck Lever
n:Lever;Chuck
org:Oracle Corporation;Corporate Architecture: Linux Projects Group adr:;;1015 Granger Avenue;Ann Arbor;MI;48104;USA title:Principal Member of Staff
tel;work:+1 248 614 5091
x-mozilla-html:FALSE
url:http://oss.oracle.com/~cel/
version:2.1
end:vcard

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/

_______________________________________________
NFS maillist - [email protected]
https://lists.sourceforge.net/lists/listinfo/nfs

#3 lore raw
Quoted 12 lines · Chuck Lever
Quoted 11 lines · J. Bruce Fields
Quoted 7 lines · Chuck Lever

I thought I remembered that nfs-utils has simple programs to set NFS/RPC debugging flags, but I couldn't find them.

So I constructed a couple of Python scripts to remember the flag names and values (see attached). They are still a little raw.

Is there anything like this already out there?

Try

Quoted 8 lines
Quoted 3 lines

man rpcdebug

It comes from nfs-utils/tools/rpcdebug/.

Ja, that's what I remembered.

Not necessarily to Bruce: Is it actively maintained? If a new debugging flag is added, is this tool updated by someone?

Sounds like a volunteer!

git hsows the last update (to update some flags, add the manpage, and install everything) as being by Greg Banks last in July 2006.

I have to admit, just now I needed to turn on some dprintk's, and did it by looking up the #define by hand. I forgot about rpcdebug even after having talked about it just yesterday....

--b.

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
NFS maillist - [email protected]
https://lists.sourceforge.net/lists/listinfo/nfs