some example dtrace scripts
authorRiver Tarnell <kateturner@users.mediawiki.org>
Mon, 15 Aug 2005 01:46:19 +0000 (01:46 +0000)
committerRiver Tarnell <kateturner@users.mediawiki.org>
Mon, 15 Aug 2005 01:46:19 +0000 (01:46 +0000)
maintenance/dtrace/counts.d [new file with mode: 0644]
maintenance/dtrace/tree.d [new file with mode: 0644]

diff --git a/maintenance/dtrace/counts.d b/maintenance/dtrace/counts.d
new file mode 100644 (file)
index 0000000..bedb454
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * This software is in the public domain.
+ *
+ * $Id$
+ */
+
+#pragma D option quiet
+
+self int tottime;
+BEGIN {
+       tottime = timestamp;
+}
+
+php$target:::function-entry
+       @counts[copyinstr(arg0)] = count();
+}
+
+END {
+       printf("Total time: %dus\n", (timestamp - tottime) / 1000);
+       printf("# calls by function:\n");
+       printa("%-40s %@d\n", @counts);
+}
+
diff --git a/maintenance/dtrace/tree.d b/maintenance/dtrace/tree.d
new file mode 100644 (file)
index 0000000..a799cb1
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * This software is in the public domain.
+ *
+ * $Id$
+ */
+
+#pragma D option quiet
+
+self int indent;
+self int times[int];
+
+php$target:::function-entry
+{
+       @counts[copyinstr(arg0)] = count();
+        printf("%*s", self->indent, "");
+        printf("-> %s\n", copyinstr(arg0));
+       self->times[self->indent] = timestamp;
+        self->indent += 2;
+}
+
+php$target:::function-return
+{
+        self->indent -= 2;
+        printf("%*s", self->indent, "");
+        printf("<- %s %dus\n", copyinstr(arg0), (timestamp - self->times[self->indent]) / 1000);
+}