freebsd-dev/share/dtrace
Pawel Jakub Dawidek af71f40a98 Add a little, but very useful script for use with programs that work using an
event loop and should sleep only when waiting for events (eg. via kevent(2)).
When a program is going to sleep in the kernel, the script will show its name,
PID, kernel stack trace and userland stack trace. Sleeping in kevent(2) is
ignored as it is expected to be valid.

Sample output:

# ./blocking lynxd

lynxd(15042) is blocking...

              kernel`_cv_wait_sig+0x124
              kernel`seltdwait+0xae
              kernel`sys_poll+0x3a3
              kernel`amd64_syscall+0x343
              kernel`0xffffffff806c79ab

              lynxd`poll+0xa
              lynxd`pqSocketCheck+0xa2
              lynxd`pqWaitTimed+0x29
              lynxd`connectDBComplete+0xd7
              lynxd`PQsetdbLogin+0x2ec
              lynxd`db_connect+0x3c
              lynxd`main+0x198
              lynxd`_start+0x16f
              0x2

lynxd(1925) is blocking...

              kernel`_cv_wait+0x125
              zfs.ko`zio_wait+0x5b
              zfs.ko`dmu_buf_hold_array_by_dnode+0x1dc
              zfs.ko`dmu_read+0xcb
              zfs.ko`zfs_freebsd_getpages+0x37b
              kernel`VOP_GETPAGES_APV+0xa7
              kernel`vnode_pager_getpages+0x9a
              kernel`vm_fault_hold+0x885
              kernel`vm_fault+0x77
              kernel`trap_pfault+0x211
              kernel`trap+0x506
              kernel`0xffffffff806c76c2

              lynxd`EVP_add_cipher+0x13
              lynxd`SSL_library_init+0x11
              lynxd`main+0x94
              lynxd`_start+0x16f
              0x2

lynxd(1925) is blocking...

              kernel`_cv_wait+0x125
              zfs.ko`zio_wait+0x5b
              zfs.ko`dbuf_read+0x791
              zfs.ko`dbuf_findbp+0x12f
              zfs.ko`dbuf_hold_impl+0xa2
              zfs.ko`dbuf_hold+0x1b
              zfs.ko`dmu_buf_hold_array_by_dnode+0x153
              zfs.ko`dmu_read_uio+0x66
              zfs.ko`zfs_freebsd_read+0x3a3
              kernel`VOP_READ_APV+0xa1
              kernel`vn_read+0x13a
              kernel`vn_io_fault+0x10b
              kernel`dofileread+0x95
              kernel`kern_readv+0x68
              kernel`sys_read+0x63
              kernel`amd64_syscall+0x343
              kernel`0xffffffff806c79ab

              lynxd`_read+0xa
              lynxd`__srefill+0x122
              lynxd`fgets+0x78
              lynxd`file_gets+0x1d
              lynxd`BIO_gets+0x64
              lynxd`PEM_read_bio+0xf5
              lynxd`PEM_X509_INFO_read_bio+0x90
              lynxd`X509_load_cert_crl_file+0x47
              lynxd`by_file_ctrl+0x2e
              lynxd`X509_STORE_load_locations+0x4a
              lynxd`sslctx_init+0x255
              lynxd`main+0x215
              lynxd`_start+0x16f
              0x2

Requested by:	gnn
Obtained from:	Wheel Systems http://wheelsystems.com
2015-10-04 00:40:12 +00:00
..
toolkit Add META_MODE support. 2015-06-13 19:20:56 +00:00
blocking Add a little, but very useful script for use with programs that work using an 2015-10-04 00:40:12 +00:00
disklatency add my scripts to measure io latency per disk... 2014-08-09 20:40:03 +00:00
disklatencycmd add my scripts to measure io latency per disk... 2014-08-09 20:40:03 +00:00
hotopen Use dtrace -s instead of /bin/sh for DTrace scripts. 2014-06-26 17:27:36 +00:00
Makefile Add a little, but very useful script for use with programs that work using an 2015-10-04 00:40:12 +00:00
nfsattrstats Update DTrace nfs scripts to track the proper provider names. 2015-09-08 00:30:10 +00:00
nfsclienttime Update DTrace nfs scripts to track the proper provider names. 2015-09-08 00:30:10 +00:00
README make the README a bit more clearer... 2014-08-09 20:25:17 +00:00
siftr Brief demo script showing the various values that can be read via the new SIFTR statically defined tracepoint (SDT). 2015-04-29 18:07:58 +00:00
tcpconn TCP connection tracker that uses aggregations to show where connections 2015-03-07 19:29:53 +00:00
tcpdebug dd DTrace probe points, translators and a corresponding script 2015-09-13 15:50:55 +00:00
tcpstate Summary: Remove the pid printing which does not currently work. 2015-03-08 02:47:38 +00:00
tcptrack Add a more complex TCP tracking script, which shows connections and 2015-03-07 19:16:09 +00:00
udptrack Summary: Update the ports to read from the packet rather than the 2015-03-08 04:33:53 +00:00

$FreeBSD$

This directory contains scripts for use with the DTrace system.  The
toolkit/ directory installs the latest vendor import of Brendan
Gregg's DTraceToolkit while the other files and directories
contain code generated by the FreeBSD Project for use with DTrace on
FreeBSD.

NOTE: Do not add new scripts to the toolkit directory. New DTraceToolkit
scripts should be send to the maintainer of the toolkit and then brought
back into FreeBSD via future vendor imports.