summaryrefslogtreecommitdiffstats
path: root/cddl
diff options
context:
space:
mode:
authorgnn <gnn@FreeBSD.org>2014-07-26 19:21:53 +0000
committergnn <gnn@FreeBSD.org>2014-07-26 19:21:53 +0000
commitf9b34399a67b7e5176d7eeb634a7bb259e71b15f (patch)
tree59bd1153fc30ab8614677bf9f9834879d93fb780 /cddl
parented9fc3677bb57c5c8fcb4bb57d3031fb936c8d85 (diff)
downloadFreeBSD-src-f9b34399a67b7e5176d7eeb634a7bb259e71b15f.zip
FreeBSD-src-f9b34399a67b7e5176d7eeb634a7bb259e71b15f.tar.gz
Port the rwsnoop DTrace Toolkit script to FreeBSD.
Remove dependency on the Korn Shell. Remove Zones in favor of Jails. Remove support (for now) for filename printing.
Diffstat (limited to 'cddl')
-rwxr-xr-xcddl/contrib/dtracetoolkit/rwsnoop53
1 files changed, 27 insertions, 26 deletions
diff --git a/cddl/contrib/dtracetoolkit/rwsnoop b/cddl/contrib/dtracetoolkit/rwsnoop
index 9d49324..e3b2ff4 100755
--- a/cddl/contrib/dtracetoolkit/rwsnoop
+++ b/cddl/contrib/dtracetoolkit/rwsnoop
@@ -1,10 +1,10 @@
-#!/usr/bin/ksh
+#!/bin/sh
#
# rwsnoop - snoop read/write events.
-# Written using DTrace (Solaris 10 3/05).
+# Originally written using DTrace (Solaris 10 3/05).
#
# This is measuring reads and writes at the application level. This matches
-# the syscalls read, write, pread and pwrite.
+# the syscalls read, and write.
#
# $Id: rwsnoop 3 2007-08-01 10:50:08Z brendan $
#
@@ -12,15 +12,14 @@
#
# rwsnoop # default output
#
-# -j # print project ID
# -P # print parent process ID
# -t # print timestamp, us
# -v # print time, string
-# -Z # print zone ID
+# -J # print jail ID
# -n name # this process name only
# -p PID # this PID only
# eg,
-# rwsnoop -Z # print zone ID
+# rwsnoop -J # print jail ID
# rwsnoop -n bash # monitor processes named "bash"
# rwsnoop > out.txt # recommended
#
@@ -32,8 +31,7 @@
# FIELDS:
# TIME Timestamp, us
# TIMESTR Time, string
-# ZONE Zone ID
-# PROJ Project ID
+# JAIL JAIL ID
# UID User ID
# PID Process ID
# PPID Parent Process ID
@@ -71,6 +69,7 @@
# 24-Jul-2005 Brendan Gregg Created this.
# 17-Sep-2005 " " Increased switchrate.
# 17-Sep-2005 " " Last update.
+# 26-Jul-2014 George Neville-Neil Port to FreeBSD
#
@@ -78,9 +77,11 @@
# --- Process Arguments ---
#
+set -x
+set -v
### default variables
-opt_name=0; opt_pid=0; opt_proj=0; opt_zone=0; opt_time=0; opt_timestr=0
-opt_bytes=1; filter=0; pname=.; pid=0; opt_ppid=0
+opt_name=0; opt_pid=0; opt_jailid=0; opt_time=0; opt_timestr=0
+opt_bytes=1; filter=0; pname=.; pid=0; opt_ppid=0;
### process options
while getopts n:Pp:jtvZ name
@@ -89,23 +90,21 @@ do
n) opt_name=1; pname=$OPTARG ;;
p) opt_pid=1; pid=$OPTARG ;;
P) opt_ppid=1 ;;
- j) opt_proj=1 ;;
t) opt_time=1 ;;
v) opt_timestr=1 ;;
- Z) opt_zone=1 ;;
+ J) opt_jailid=1 ;;
h|?) cat <<-END >&2
USAGE: rwsnoop [-jPtvZ] [-n name] [-p pid]
- -j # print project ID
-P # print parent process ID
-t # print timestamp, us
-v # print time, string
- -Z # print zone ID
+ -J # print jail ID
-n name # this process name only
-p PID # this PID only
eg,
rwsnoop # default output
- rwsnoop -Z # print zone ID
+ rwsnoop -J # print jail ID
rwsnoop -n bash # monitor processes named "bash"
END
exit 1
@@ -115,11 +114,13 @@ done
shift $(( $OPTIND - 1 ))
### option logic
-if (( opt_name || opt_pid )); then
+if [ $opt_name -ne 0 ]; then
filter=1
fi
-
+if [ $opt_pid -ne 0 ]; then
+ filter=1
+fi
#################################
# --- Main Program, DTrace ---
@@ -128,8 +129,7 @@ fi
/*
* Command line arguments
*/
- inline int OPT_proj = '$opt_proj';
- inline int OPT_zone = '$opt_zone';
+ inline int OPT_jailid = '$opt_jailid';
inline int OPT_bytes = '$opt_bytes';
inline int OPT_name = '$opt_name';
inline int OPT_ppid = '$opt_ppid';
@@ -151,8 +151,7 @@ fi
/* print header */
OPT_time ? printf("%-14s ", "TIME") : 1;
OPT_timestr ? printf("%-20s ", "TIMESTR") : 1;
- OPT_proj ? printf("%5s ", "PROJ") : 1;
- OPT_zone ? printf("%5s ", "ZONE") : 1;
+ OPT_jailid ? printf("%5s ", "JAILID") : 1;
OPT_ppid ? printf("%6s ", "PPID") : 1;
printf("%5s %6s %-12s %1s %7s %s\n",
"UID", "PID", "CMD", "D", "BYTES", "FILE");
@@ -205,7 +204,10 @@ fi
{
/*
* Fetch filename
+ * XXX Not yet implemented.
*/
+/*
+
this->filistp = curthread->t_procp->p_user.u_finfo.fi_list;
this->ufentryp = (uf_entry_t *)((uint64_t)this->filistp +
(uint64_t)self->fd * (uint64_t)sizeof(uf_entry_t));
@@ -213,17 +215,16 @@ fi
this->vnodep = this->filep != 0 ? this->filep->f_vnode : 0;
self->vpath = this->vnodep ? (this->vnodep->v_path != 0 ?
cleanpath(this->vnodep->v_path) : "<unknown>") : "<unknown>";
-
+*/
/*
* Print details
*/
OPT_time ? printf("%-14d ", timestamp / 1000) : 1;
OPT_timestr ? printf("%-20Y ", walltimestamp) : 1;
- OPT_proj ? printf("%5d ", curpsinfo->pr_projid) : 1;
- OPT_zone ? printf("%5d ", curpsinfo->pr_zoneid) : 1;
+ OPT_jailid ? printf("%5d ", curpsinfo->pr_jailid) : 1;
OPT_ppid ? printf("%6d ", ppid) : 1;
- printf("%5d %6d %-12.12s %1s %7d %s\n",
- uid, pid, execname, self->rw, (int)self->size, self->vpath);
+ printf("%5d %6d %-12.12s %1s %7d \n",
+ uid, pid, execname, self->rw, (int)self->size);
self->ok = 0;
self->fd = 0;
OpenPOWER on IntegriCloud