Provided by: freebsd-manpages_12.0-1_all bug

NAME

       dtrace_lockstat — a DTrace provider for tracing CPU scheduling events

SYNOPSIS

       lockstat:::adaptive-acquire(struct mtx *);

       lockstat:::adaptive-release(struct mtx *);

       lockstat:::adaptive-spin(struct mtx *, uint64_t);

       lockstat:::adaptive-block(struct mtx *, uint64_t);

       lockstat:::spin-acquire(struct mtx *);

       lockstat:::spin-release(struct mtx *);

       lockstat:::spin-spin(struct mtx *, uint64_t);

       lockstat:::rw-acquire(struct rwlock *, int);

       lockstat:::rw-release(struct rwlock *, int);

       lockstat:::rw-block(struct rwlock *, uint64_t, int, int, int);

       lockstat:::rw-spin(struct rwlock *, uint64_t);

       lockstat:::rw-upgrade(struct rwlock *);

       lockstat:::rw-downgrade(struct rwlock *);

       lockstat:::sx-acquire(struct sx *, int);

       lockstat:::sx-release(struct sx *, int);

       lockstat:::sx-block(struct sx *, uint64_t, int, int, int);

       lockstat:::sx-spin(struct sx *, uint64_t);

       lockstat:::sx-upgrade(struct sx *);

       lockstat:::sx-downgrade(struct sx *);

       lockstat:::thread-spin(struct mtx *, uint64);

DESCRIPTION

       The DTrace lockstat provider allows the tracing of events related to locking on FreeBSD.

       The dtrace_lockstat provider contains DTrace probes for inspecting kernel lock state transitions.  Probes
       exist  for the mutex(9), rwlock(9), and sx(9) lock types.  The lockstat(1) utility can be used to collect
       and display data collected from the dtrace_lockstat provider.   Each  type  of  lock  has  acquire()  and
       release() probes which expose the lock structure being operated upon, as well as probes which fire when a
       thread contends with other threads for ownership of a lock.

       The  lockstat:::adaptive-acquire() and lockstat:::adaptive-release() probes fire when an MTX_DEF mutex(9)
       is acquired and released, respectively.  The only argument is a  pointer  to  the  lock  structure  which
       describes the lock being acquired or released.

       The lockstat:::adaptive-spin() probe fires when a thread spins while waiting for a MTX_DEF mutex(9) to be
       released  by  another  thread.   The first argument is a pointer to the lock structure that describes the
       lock and the second argument is the amount of time, in nanoseconds, that the mutex spent  spinning.   The
       lockstat:::adaptive-block() probe fires when a thread takes itself off the CPU while trying to acquire an
       MTX_DEF  mutex(9) that is owned by another thread.  The first argument is a pointer to the lock structure
       that describes the lock and the second argument is the length of time, in nanoseconds, that  the  waiting
       thread  was  blocked.   The  lockstat:::adaptive-block()  and lockstat:::adaptive-spin() probes fire only
       after the lock has been successfully acquired, and in particular, after the lockstat:::adaptive-acquire()
       probe fires.

       The lockstat:::spin-acquire() and lockstat:::spin-release() probes  fire  when  a  MTX_SPIN  mutex(9)  is
       acquired or released, respectively.  The only argument is a pointer to the lock structure which describes
       the lock being acquired or released.

       The  lockstat:::spin-spin()  probe  fires when a thread spins while waiting for a MTX_SPIN mutex(9) to be
       released by another thread.  The first argument is a pointer to the lock  structure  that  describes  the
       lock  and  the  second  argument  is  the  length  of  the  time  spent  spinning,  in  nanoseconds.  The
       lockstat:::spin-spin() probe fires only after the lock has been successfully acquired, and in particular,
       after the lockstat:::spin-acquire() probe fires.

       The lockstat:::rw-acquire() and lockstat:::rw-release() probes fire  when  a  rwlock(9)  is  acquired  or
       released,  respectively.  The first argument is a pointer to the structure which describes the lock being
       acquired.  The second argument is 0 if the lock is being acquired or released as a writer, and 1 if it is
       being acquired or released as a reader.

       The lockstat:::rw-block() probe fires when a thread removes itself from the CPU while waiting to  acquire
       a  rwlock(9).   The  lockstat:::rw-spin()  probe  fires  when  a  thread spins while waiting to acquire a
       rwlock(9).  Both probes take the same set of arguments.  The first argument is  a  pointer  to  the  lock
       structure  that  describes the lock.  The second argument is the length of time, in nanoseconds, that the
       waiting thread was off the CPU or spinning for the lock.  The third  argument  is  0  if  the  thread  is
       attempting  to  acquire  the lock as a writer, and 1 if the thread is attempting to acquire the lock as a
       reader.  The fourth argument is 0 if the thread is waiting for a writer to release the lock, and 1 if the
       thread is waiting for a reader to release the lock.  The fifth argument is the  number  of  readers  that
       held the lock when the thread first attempted to acquire the lock.  This argument will be 0 if the fourth
       argument is 0.

       The lockstat:::rw-upgrade() probe fires when a thread successfully upgrades a held rwlock(9) read lock to
       a  write lock.  The lockstat:::rw-downgrade() probe fires when a thread downgrades a held rwlock(9) write
       lock to a read lock.  The only argument is a pointer to the structure  which  describes  the  lock  being
       acquired.

       The lockstat:::sx-acquire() and lockstat:::sx-release() probes fire when a sx(9) is acquired or released,
       respectively.   The first argument is a pointer to the structure which describes the lock being acquired.
       The second argument is 0 if the shared lock is being acquired or released, and 1 if the exclusive lock is
       being acquired or released.

       The lockstat:::sx-block() probe fires when a thread takes itself off the CPU while waiting to  acquire  a
       sx(9).   The lockstat:::sx-spin() probe fires when a thread spins while waiting to acquire a sx(9).  Both
       probes take the same set of arguments.  The first argument is  a  pointer  to  the  lock  structure  that
       describes  the  lock.  The second argument is the length of time, in nanoseconds, that the waiting thread
       was off the CPU or spinning for the lock.  The third argument is 0 if the thread is attempting to acquire
       the lock as a writer, and 1 if the thread is attempting to acquire the lock  as  a  reader.   The  fourth
       argument  is  0 if the thread is waiting for a writer to release the lock, and 1 if the thread is waiting
       for a reader to release the lock.  The fifth argument is the number of readers that held  the  lock  when
       the thread first attempted to acquire the lock.  This argument will be 0 if the fourth argument is 0.

       The  lockstat:::sx-upgrade()  probe fires when a thread successfully upgrades a held sx(9) shared lock to
       an exclusive lock.  The only argument is a pointer to  the  structure  which  describes  the  lock  being
       acquired.  The lockstat:::sx-downgrade() probe fires when a thread downgrades a held sx(9) exclusive lock
       to a shared lock.

       The  lockstat:::thread-spin()  probe  fires  when a thread spins on a thread lock, which is a specialized
       MTX_SPIN mutex(9).  The first argument is a pointer to the structure that  describes  the  lock  and  the
       second argument is the length of time, in nanoseconds, that the thread was spinning.

SEE ALSO

       dtrace(1), lockstat(1), locking(9), mutex(9), rwlock(9), SDT(9), sx(9)

HISTORY

       The   dtrace_lockstat   provider   first   appeared  in  Solaris.   The  FreeBSD  implementation  of  the
       dtrace_lockstat provider first appeared in FreeBSD 9.

AUTHORS

       This manual page was written by George V. Neville-Neil <gnn@FreeBSD.org>.

BUGS

       Probes for lockmgr(9) and rmlock(9) locks have not yet been added.

Debian                                            March 2, 2018                               DTRACE_LOCKSTAT(4)