summaryrefslogtreecommitdiffstats
path: root/cddl/contrib/dtracetoolkit/Kernel/dnlcstat
diff options
context:
space:
mode:
Diffstat (limited to 'cddl/contrib/dtracetoolkit/Kernel/dnlcstat')
-rwxr-xr-xcddl/contrib/dtracetoolkit/Kernel/dnlcstat162
1 files changed, 162 insertions, 0 deletions
diff --git a/cddl/contrib/dtracetoolkit/Kernel/dnlcstat b/cddl/contrib/dtracetoolkit/Kernel/dnlcstat
new file mode 100755
index 0000000..b29e8c2
--- /dev/null
+++ b/cddl/contrib/dtracetoolkit/Kernel/dnlcstat
@@ -0,0 +1,162 @@
+#!/usr/bin/sh
+#
+# dnlcstat - DNLC statistics.
+# Written in DTrace (Solaris 10 3/05).
+#
+# The DNLC is the Directory Name Lookup Cache. Filename lookups often
+# return a hit from here, before needing to traverse the regular file
+# system cache or go to disk.
+#
+# $Id: dnlcstat 3 2007-08-01 10:50:08Z brendan $
+#
+# USAGE: dnlcstat [interval [count]]
+#
+# FIELDS:
+#
+# %hit hit percentage for this sample
+# hit number of DNLC hits in this sample
+# miss number of DNLC misses in this sample
+#
+# SEE ALSO: CacheKit, http://www.brendangregg.com/cachekit.html
+# (contains a dnlcstat written in Perl, which uses less CPU)
+#
+# COPYRIGHT: Copyright (c) 2005 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
+#
+# 27-Mar-2004 Brendan Gregg Created this.
+# 14-Jun-2005 " " Updated style.
+# 14-Jun-2005 " " Last update.
+#
+
+##############################
+# --- Process Arguments ---
+#
+
+### default values
+interval=1; count=-1
+
+### check arguments
+if [ "$1" = "-h" -o "$1" = "--help" ]; then
+ cat <<-END >&2
+ USAGE: dnlcstat [interval [count]]
+ dnlcstat # 1 second samples, infinite
+ eg,
+ dnlcstat 1 # print every 1 second
+ dnlcstat 5 6 # print every 5 seconds, 6 times
+ END
+ exit 1
+fi
+
+### argument logic
+if [ "$1" -gt 0 ]; then
+ interval=$1; count=-1; shift
+fi
+if [ "$1" -gt 0 ]; then
+ count=$1; shift
+fi
+if [ $interval -eq 0 ]; then
+ interval=1
+fi
+
+
+#################################
+# --- Main Program, DTrace ---
+#
+/usr/sbin/dtrace -n '
+ #pragma D option quiet
+
+ /*
+ * Command line arguments
+ */
+ inline int INTERVAL = '$interval';
+ inline int COUNTER = '$count';
+ inline int SCREEN = 21;
+
+ int hits; /* hits */
+ int misses; /* misses */
+
+ /*
+ * Initialise variables
+ */
+ dtrace:::BEGIN
+ {
+ lines = SCREEN + 1;
+ counts = COUNTER;
+ secs = INTERVAL;
+ first = 1;
+ }
+
+ /*
+ * Print header
+ */
+ dtrace:::BEGIN,
+ tick-1sec
+ /first || (secs == 0 && lines > SCREEN)/
+ {
+ printf("%10s %8s %8s\n","dnlc %hit","hit","miss");
+ lines = 0;
+ first = 0;
+ }
+
+ /*
+ * Probe DNLC lookups
+ */
+ fbt:genunix:dnlc_lookup:return
+ {
+ hits += arg1 == 0 ? 0 : 1;
+ misses += arg1 == 0 ? 1 : 0;
+ }
+
+ profile:::tick-1sec
+ {
+ secs--;
+ }
+
+
+ /*
+ * Print output line
+ */
+ profile:::tick-1sec
+ /secs == 0/
+ {
+ /* calculate hit percent */
+ this->divide = misses + hits == 0 ? 1 : misses + hits;
+ ratio = hits * 100 / this->divide;
+
+ /* print output */
+ printf("%10d %8d %8d\n",ratio,hits,misses);
+
+ /* clear counters */
+ hits = 0;
+ misses = 0;
+
+ /* process counts */
+ secs = INTERVAL;
+ counts--;
+ lines++;
+
+ }
+
+ /*
+ * End
+ */
+ profile:::tick-1sec
+ /counts == 0/
+ {
+ exit(0);
+ }
+'
+
OpenPOWER on IntegriCloud