head	1.1;
access;
symbols
	RELENG_9:1.1.0.2;
locks; strict;
comment	@# @;


1.1
date	2012.05.12.21.25.48;	author gnn;	state Exp;
branches
	1.1.2.1;
next	;

1.1.2.1
date	2012.05.12.21.25.48;	author svnexp;	state dead;
branches;
next	1.1.2.2;

1.1.2.2
date	2013.06.13.19.01.54;	author svnexp;	state Exp;
branches;
next	;


desc
@@


1.1
log
@SVN rev 235380 on 2012-05-12 21:25:48Z by gnn

Import dtracetoolkit into cddl/contrib
@
text
@#!/usr/bin/ksh
#
# diskhits - disk access by file offset.
#            Written using DTrace (Solaris 10 3/05).
#
# $Id: diskhits 3 2007-08-01 10:50:08Z brendan $
#
# This prints how a file was accessed, the locations on a distribution plot.
# This is for the cache misses only - the file activity that resulted in
# disk events.
#
# USAGE:	diskhits pathname
#	eg,
#		diskhits /var/adm/messages
#
# FIELDS:
#		Location (KB)	The file offset of the disk activity, Kbytes.
#		Size (KB)	Size of the disk activity, Kbytes.
#		Total RW	Total disk activity, reads + writes.
#
# BASED ON: /usr/demo/dtrace/applicat.d
#
# SEE ALSO: DTrace Guide "io Provider" chapter (docs.sun.com)
#           iosnoop (DTraceToolkit)
#
# PORTIONS: Copyright (c) 2005, 2006 Brendan Gregg.
#
# CDDL HEADER START
#
#  The contents of this file are subject to the terms of the
#  Common Development and Distribution License, Version 1.0 only
#  (the "License").  You may not use this file except in compliance
#  with the License.
#
#  You can obtain a copy of the license at Docs/cddl1.txt
#  or http://www.opensolaris.org/os/licensing.
#  See the License for the specific language governing permissions
#  and limitations under the License.
#
# CDDL HEADER END
#
# 08-Jun-2005   Brendan Gregg   Created this.
# 20-Apr-2006	   "      "	Last update.
#

### Usage
function usage
{
	cat <<-END >&2
	USAGE: diskhits pathname
	   eg,
	       diskhits /var/adm/wtmpx
	END
	exit 1
}

### Process arguments
if (( $# != 1 )); then
	usage
fi
if [[ $1 == "-h" ]]; then
	usage
fi
pathname=$1
if [[ ! -e $pathname ]]; then
	print "ERROR2: file $pathname not found" >&2
	exit 2
fi

### Calculate output scale
report_lines=20
set -- `ls -l $pathname`
filesize=$5
(( file_kb_max = filesize / 1024 ))
(( scale_kb = filesize / (1024 * report_lines) ))
if (( file_kb_max < 20 )); then file_kb_max=20; fi
if (( scale_kb < 1 )); then scale_kb=1; fi

#
#  Run DTrace
#
/usr/sbin/dtrace -n '
 #pragma D option quiet

 inline string PATHNAME = "'$pathname'";
 inline int FILE_KB_MAX = '$file_kb_max';
 inline int SCALE_KB = '$scale_kb';

 dtrace:::BEGIN
 {
	printf("Tracing... Hit Ctrl-C to end.\n");
 }

 io:::start
 /args[2]->fi_pathname == PATHNAME/
 {
	this->kb = args[2]->fi_offset == -1 ? -1 : args[2]->fi_offset / 1024;
	@@Location = lquantize(this->kb, 0, FILE_KB_MAX, SCALE_KB);
	@@Size = quantize(args[0]->b_bcount/1024);
	@@Total = sum(args[0]->b_bcount/1024);
 }

 dtrace:::END
 {
	printf("Location (KB),");
	printa(@@Location);

	printf("Size (KB),");
	printa(@@Size);

	printa("Total RW: %@@d KB\n", @@Total);
 }
'
@


1.1.2.1
log
@file diskhits was added on branch RELENG_9 on 2013-06-13 19:01:54 +0000
@
text
@d1 113
@


1.1.2.2
log
@## SVN ## Exported commit - http://svnweb.freebsd.org/changeset/base/251697
## SVN ## CVS IS DEPRECATED: http://wiki.freebsd.org/CvsIsDeprecated
@
text
@a0 113
#!/usr/bin/ksh
#
# diskhits - disk access by file offset.
#            Written using DTrace (Solaris 10 3/05).
#
# $Id: diskhits 3 2007-08-01 10:50:08Z brendan $
#
# This prints how a file was accessed, the locations on a distribution plot.
# This is for the cache misses only - the file activity that resulted in
# disk events.
#
# USAGE:	diskhits pathname
#	eg,
#		diskhits /var/adm/messages
#
# FIELDS:
#		Location (KB)	The file offset of the disk activity, Kbytes.
#		Size (KB)	Size of the disk activity, Kbytes.
#		Total RW	Total disk activity, reads + writes.
#
# BASED ON: /usr/demo/dtrace/applicat.d
#
# SEE ALSO: DTrace Guide "io Provider" chapter (docs.sun.com)
#           iosnoop (DTraceToolkit)
#
# PORTIONS: Copyright (c) 2005, 2006 Brendan Gregg.
#
# CDDL HEADER START
#
#  The contents of this file are subject to the terms of the
#  Common Development and Distribution License, Version 1.0 only
#  (the "License").  You may not use this file except in compliance
#  with the License.
#
#  You can obtain a copy of the license at Docs/cddl1.txt
#  or http://www.opensolaris.org/os/licensing.
#  See the License for the specific language governing permissions
#  and limitations under the License.
#
# CDDL HEADER END
#
# 08-Jun-2005   Brendan Gregg   Created this.
# 20-Apr-2006	   "      "	Last update.
#

### Usage
function usage
{
	cat <<-END >&2
	USAGE: diskhits pathname
	   eg,
	       diskhits /var/adm/wtmpx
	END
	exit 1
}

### Process arguments
if (( $# != 1 )); then
	usage
fi
if [[ $1 == "-h" ]]; then
	usage
fi
pathname=$1
if [[ ! -e $pathname ]]; then
	print "ERROR2: file $pathname not found" >&2
	exit 2
fi

### Calculate output scale
report_lines=20
set -- `ls -l $pathname`
filesize=$5
(( file_kb_max = filesize / 1024 ))
(( scale_kb = filesize / (1024 * report_lines) ))
if (( file_kb_max < 20 )); then file_kb_max=20; fi
if (( scale_kb < 1 )); then scale_kb=1; fi

#
#  Run DTrace
#
/usr/sbin/dtrace -n '
 #pragma D option quiet

 inline string PATHNAME = "'$pathname'";
 inline int FILE_KB_MAX = '$file_kb_max';
 inline int SCALE_KB = '$scale_kb';

 dtrace:::BEGIN
 {
	printf("Tracing... Hit Ctrl-C to end.\n");
 }

 io:::start
 /args[2]->fi_pathname == PATHNAME/
 {
	this->kb = args[2]->fi_offset == -1 ? -1 : args[2]->fi_offset / 1024;
	@@Location = lquantize(this->kb, 0, FILE_KB_MAX, SCALE_KB);
	@@Size = quantize(args[0]->b_bcount/1024);
	@@Total = sum(args[0]->b_bcount/1024);
 }

 dtrace:::END
 {
	printf("Location (KB),");
	printa(@@Location);

	printf("Size (KB),");
	printa(@@Size);

	printa("Total RW: %@@d KB\n", @@Total);
 }
'
@


