cvdb(1) cvdb(1)
NAME
cvdb - Xsan Client File System Debugger
SYNOPSIS
cvdb [options]
DESCRIPTION
cvdb provides a mechanism for developers and system administrators to
extract debugging information from the Xsan File System client filesys-
tem. It can be used by system administrators to change the level of
system logging that the client filesystem performs. There is also a
switch to retrieve various statistics.
USAGE
cvdb is a multi-purpose debugging tool, performing a variety of func-
tions. A rich set of options provide the user with control over various
debug and logging functions. The main features of cvdb are as follows:
Control debug logging.
Control level and verbosity of syslog logging.
Retrieve statistics.
OPTIONS
-g Retrieve the debug log from a running system. The log pointers
are reset after this command, so that the next invocation of
cvdb -g will retrieve new information from the buffer.
-C Continuously snap the trace. (Only useful with the -g option.)
-S stopfile
Stop snapping the trace when the file stopfile appears. (Only
useful when also using the -g and -C options.)
-D msec
Delay msec milliseconds between trace snaps. The default is
1000 msec or one second. (Only useful when also using the -C
and -g options.)
-F Save the trace output to files named cvdbout.000000, cvd-
bout.000001, etc. instead of writing to standard output. These
files will appear in the current working directory. (Only use-
ful when also using the -C and -g options.)
-n cnt After writing cnt files, overwrite the cvdbout out files start-
ing with cvdbout.000000. This will essentially "wrap" the trace
output.
-N name
Use name instead of cvdbout for the cvdb output files. (Only
useful when also using the -C, -g, and -F options.)
-d Disable debug logging. This is the initial (start-up) default.
-e Enable debug logging. Disabled by default. Note: care should be
taken when enabling logging in a production environment as this
can significantly reduce file system performance.
-m modules=bitvector logmask=bitvector
Specify the trace points for a given module or modules.
-l List the current trace points and their mask values.
-L List the available trace/debug points.
-s syslog={none|notice|info|debug}
Set the syslog logging value. The default at mount time is
notice. See mount_acfs(1) for more information.
-R size=[nbytes[k|m|g]]
Resize the the debug log. By default, the size of the log is
4MB. The minimum allowed size is 32768 bytes.
-v Be verbose about the operations.
-b Print various statistics about each buffer cache. The only
other option that can be used with this is -v. There are buffer
caches per cachebufsize, see mount_acfs(1). For each buffer
cache, the following is printed:
# of mounted file systems using this buffer cache
# of buffers and total memory used
# of cache hits (and percentage)
# of cache misses (and percentage)
# of checks for write throttling to prevent over use by
one file system. Write throttles only occur when more
than 1 file system is using the cache.
# of times writes were throttled
If the -v option is also used with -b, the following additional
statistics are printed for each buffer cache:
buffercachecap, see mount_acfs(1)
buffercachewant (internal, means thread is waiting for a
buffer)
bufhashsize (internal, # of entries in hash used to
search buffers)
bcdirtycnt (internal, # of buffers with "dirty" data
queued in cache)
dirty_ndone (internal, bcdirtycnt + buffers being writ-
ten)
flusheractive (internal, flag indicating buffer flusher
is active)
deferredflush (internal, # of buffers deferred after
files are closed)
dirtywaiters (internal, # of threads waiting due to
throttling)
rsvd max (internal, maximum amount of reserved space
seen)
non-zero rsvd min (internal, minimum amount of reserved
space seen > 0)
successful rsvd requests (internal, # of times reserved
space was needed)
failed rsvd requests (internal, # of times reserved space
not available)
-B Print buffer cache statistics using a curses based display that
refreshes every second. Statistics are maintained separately
for reads and writes, for each cache segment, and each mount
point. Statistics labeled Cumulative are those representing the
totals since the command was invoked or since the last reset.
Those labeled Current represent the change in the last one sec-
ond, roughly corresponding to the display refresh interval.
Two keystrokes are interactively recognized on systems support-
ing curses. A q, quit, will cause the display to terminate. An
r, reset, will reset the cumulative counters to zeros.
The -B option is intended to be used to to analyze performance
of the buffer cache with various applications, I/O subsystems,
and various configuration parameters.
The refreshing display is supported on clients that have a
curses capability. Other clients will produce a line oriented
output with similar content.
A deadman timer will terminate the display after 30 seconds with
no file systems mounted. This is to avoid hanging during file
system shutdown.
-x Print distributed LAN proxy client and server statistics. The
only other options that can be used with this are -X and -f.
The proxy statistics are collected at both the client and server
ends of each proxy connection. The client will have a connection
entry for each path to a proxy server for each proxy client file
system. A proxy server will have a connection entry for each
path to each client which has the file sytem mounted.
Note: The distributed LAN proxy options are only available on
platforms which support the distributed LAN client or server.
The following information is displayed for each proxy connec-
tion:
Client/Server System ID This IP address identifies the
remote host.
Client IP Addr The IP address of the Client side of the
connection.
Server IP Addr The IP address of the Server side of the
connection.
Read Bytes/Sec Measured recent read performance of the
connection.
Write Bytes/Sec Measured recent write performance of the
connection.
FS Read Bytes/Sec Measured recent read performance for
all connections for this file system.
FS Write Bytes/Sec Measured recent write performance for
all connections for this file system.
Queued I/O Outstanding I/O (backlog) for this connection.
The backlog is meaningful for client side connec-
tions only.
-X option
Dump statistics for each path in comma separated value (CSV)
format. (Only useful with the -x option.) The following options
are available:
1 Dump remote endpoint IP address and backlog in bytes. This
option is only relevant for client mounts.
2 Dump remote endpoint IP address and read bytes per second.
3 Dump remote endpoint IP address and write bytes per second.
-f fsname
Specifies the file name associated with an action option. For
proxy statistics(-x option), filter on connections for the given
file system. This parameter is required for the read/write sta-
tistics (-y or -Y) option.
-y, -Y Display the read/write statistics for the file system specified
with the -f option (required). If -Y, also clear the stats.
DEBUG LOGGING
Developing code that runs in the kernel is very different than program-
ming a user-level application. To assist plugin developers who may not
be familiar with the kernel environment, Xsan provides a simple "trace-
point like" debugging mechanism. This mechanism allows developers to
use printf-like statements to assist in debugging their code.
To use the debugging facility, each module (typically a ".c" file),
must declare a structure of type ModuleLogInfo_t. This structure is
defined in include/sys/irix/log.h. This structure defines the name of
the module as it will appear in the debug statements, and indicates the
debug level that is in effect for that module.
ModuleLogInfo_t MyLogModule =
{ "mymodule_name", DEBUGLOG_NONE};
To use the facility, each module must call the AddLogModule() routine.
This is typically done when the module is first initialized (in the
xxx_start() routine for a plugin). When logging is no longer required
(as when the plugin is unloaded), the module should call RemoveLogMod-
ule() to free up the system resources.
Logging is not enabled by default. To enable logging at any time, spec-
ify the enable flag (-e)
shrubbery %h: cvdb -e
To disable logging, specify the disable flag.
shrubbery %h: cvdb -d -v
Disabling debug logging
The level of debugging is controlled via a 64-bit mask. This allows
each module to have 64 different, discrete trace/log points. If the log
point is enabled when the code is executed, the trace point will be
dumped to the circular buffer.
A complete listing of all the pre-defined trace points can be obtained
via:
rabbit %h: cvdb -L
Trace points:
cvENTRY 0x0001
cvEXIT 0x0002
cvINFO 0x0004
cvNOTE 0x0008
cvWARN 0x0010
cvMEM 0x0020
cvNUKE 0x0040
cvLOOKUP 0x0080
cvGATE 0x0100
cvSTRAT 0x0200
cvRWCVP 0x0400
These trace points would then be used to control the verbosity of log-
ging. Using the example above, if the cvEXIT and cvINFO trace points
are enabled, then only those trace points would be dumped to the log.
To enable the trace points, the first step is to determine the ID of
the module. This is done with the list command.
shrubbery %h: cvdb -l
Module 'cvfs_memalloc' module 0x000001 logmask 0x0000000000000000
Module 'cvfs_fsmsubr' module 0x000002 logmask 0x0000000000000000
Module 'cvfs_fsmdir' module 0x000004 logmask 0x0000000000000000
Module 'cvfs_fsmvfsops' module 0x000008 logmask 0x0000000000000000
Module 'cvfs_fsmvnops' module 0x000010 logmask 0x0000000000000000
Module 'cvfs_sockio' module 0x000020 logmask 0x0000000000000000
Module 'cvfs_subr' module 0x000040 logmask 0x0000000000000000
Module 'cvfs_vfsops' module 0x000080 logmask 0x0000000000000000
Module 'cvfs_vnops' module 0x000100 logmask 0x0000000000000000
Module 'cvfs_dmon' module 0x000200 logmask 0x0000000000000000
Module 'cvfs_rwlock' module 0x000400 logmask 0x0000000000000000
Module 'cvfs_rw' module 0x000800 logmask 0x0000000000000000
Module 'cvfs_fsmtokops' module 0x001000 logmask 0x0000000000000000
Module 'cvfs_extent' module 0x002000 logmask 0x0000000000000000
Module 'cvfs_plugin' module 0x004000 logmask 0x0000000000000000
Module 'cvfs_disk' module 0x008000 logmask 0x0000000000000000
To enable the cvENTRY and cvEXIT trace points of the plugin, rwlock,
vnops, and memalloc routines, use the modules command.
shrubbery %h: cvdb -m modules=0x4501 logmask=3
The bit masks are additive, not replacement. This means that modules
and trace points you do not specify are unaffected. To turn on all
debugging on all trace points, specify minus one (-1).
shrubbery %h: cvdb -m modules=-1 logmask=-1
Once the module has been added to the system, log messages will then be
dumped into a 1 meg circular buffer. Modules may find it convenient to
declare a macro in each file so that the form of log messages will be
the same in each file. For example, the following macro definition and
following log function would dump information to the log buffer if the
trace point is enabled:
#define LOGINFO (&MyLogModule)
LogMsg(LOGINFO, cvEXIT, "Plugin read return error %d bytes %llx",
error, num_bytes);
To extract the messages from the log on a running system, use the -g
option of cvdb.
SYSLOG
The Xsan client file system can log certain events so that they show up
on the system console and in the system log, /var/adm/SYSLOG. The ver-
bosity of messages can be controlled via the syslog parameter. The
default is to log all messages. See syslogd(1m) for more information
of setting up system logging.
There are four log levels: none, notice, info, and debug . The levels
are prioritized so that the debug level is the most verbose; setting
the level to none will turn off logging completely. The events that
are logged at each level are as follows:
notice
o reconnection with the FSM.
info
o all notice messages, plus
o socket daemon termination
debug
o Currently unused
The log level is set to debug by default.
BUSY UNMOUNTS
Occasionally, it will be impossible to unmount the Xsan volume even
when it appears that all processes are no longer using the volume. The
problem is that the processes are most likely in the zombie state;
while they do not show up in ps, then can be found using icrash. Usu-
ally, these processes are waiting on a lock in the Xsan file system, or
waiting for a response from the FSM.
DEBUG LOGGING EXAMPLES
To enable logging:
cvdb -e
To disable logging:
cvdb -d
To retrieve (get) log information on a running system:
cvdb -g > cvdbout
To continuously retrieve log information on a running system, snapping
the trace once per second:
cvdb -g -C > cvdbout
To continuously retrieve log information on a running system, snapping
the trace once every two seconds and stopping when the file named STOP
appears:
cvdb -g -C -D 2000 -S STOP > cvdbout
To continuously retrieve log information on a running system, and save
the output to files named cvdbout.000000, cvdbout.0000001, etc. and
wrapping after 100 files have been written:
cvdb -g -C -F -n 100
To continuously snap traces named /tmp/snap.000000, /tmp/snap.000001,
etc.:
cvdb -g -C -F -N /tmp/snap
To list all the modules and their enabled trace points:
cvdb -l
To set trace points in individual modules:
cvdb -m modules=bitmask_of_modules logmask=tracepoints.
To resize the log to 12 megabytes:
cvdb -R 12m
To dump out all the pre-defined trace points:
cvdb -L
SEE ALSO
syslogd(1m), umount(1m), cvdbset(1)
Xsan File System December 2005 cvdb(1)
Mac OS X 10.9.1 - Generated Sat Jan 4 16:29:14 CST 2014
