diff options
author | gnn <gnn@FreeBSD.org> | 2014-07-26 19:21:53 +0000 |
---|---|---|
committer | gnn <gnn@FreeBSD.org> | 2014-07-26 19:21:53 +0000 |
commit | f9b34399a67b7e5176d7eeb634a7bb259e71b15f (patch) | |
tree | 59bd1153fc30ab8614677bf9f9834879d93fb780 /cddl | |
parent | ed9fc3677bb57c5c8fcb4bb57d3031fb936c8d85 (diff) | |
download | FreeBSD-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-x | cddl/contrib/dtracetoolkit/rwsnoop | 53 |
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; |