summaryrefslogtreecommitdiffstats
path: root/examples/systemtap/gencache.stp
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 17:20:00 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 17:20:00 +0000
commit8daa83a594a2e98f39d764422bfbdbc62c9efd44 (patch)
tree4099e8021376c7d8c05bdf8503093d80e9c7bad0 /examples/systemtap/gencache.stp
parentInitial commit. (diff)
downloadsamba-8daa83a594a2e98f39d764422bfbdbc62c9efd44.tar.xz
samba-8daa83a594a2e98f39d764422bfbdbc62c9efd44.zip
Adding upstream version 2:4.20.0+dfsg.upstream/2%4.20.0+dfsg
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'examples/systemtap/gencache.stp')
-rwxr-xr-xexamples/systemtap/gencache.stp147
1 files changed, 147 insertions, 0 deletions
diff --git a/examples/systemtap/gencache.stp b/examples/systemtap/gencache.stp
new file mode 100755
index 0000000..95fcff3
--- /dev/null
+++ b/examples/systemtap/gencache.stp
@@ -0,0 +1,147 @@
+#!/usr/bin/stap
+#
+# Systemtap script to instrument the Samba gencache subsystem
+#
+# Usage:
+#
+# Instrument all smbd processes:
+# # stap gencache.stp smbd
+#
+# Instrument all winbindd processes:
+# # stap gencache.stp winbindd
+#
+# Instrument a specific smbd process:
+# # stap -x PID gencache.stp smbd
+#
+# Instrument a specific winbindd process:
+# # stap -x PID gencache.stp winbindd
+#
+
+global running, intervals
+global cache_misses, cache_hits, neg_cache_hits
+
+probe begin {
+ printf("Collecting data, press ctrl-C to stop... ")
+}
+
+probe process(@1).library("*").function("gencache_parse") {
+ running["gencache_parse", tid()] = gettimeofday_us()
+}
+
+probe process(@1).library("*").function("gencache_parse").return {
+ if (!(["gencache_parse", tid()] in running))
+ next
+
+ end = gettimeofday_us()
+ begin = running["gencache_parse", tid()]
+ delete running["gencache_parse", tid()]
+
+ duration = end - begin
+ intervals["gencache_parse"] <<< duration
+
+ if ($return == 0) {
+ cache_misses++
+ } else {
+ cache_hits++
+ }
+}
+
+probe process(@1).library("*").function("gencache_get_data_blob_parser") {
+ if ($timeout == 0) {
+ neg_cache_hits++
+ }
+}
+
+probe process(@1).library("*").function("gencache_get_data_blob") {
+ running["gencache_get_data_blob", tid()] = gettimeofday_us()
+}
+
+probe process(@1).library("*").function("gencache_get_data_blob").return {
+ if (!(["gencache_get_data_blob", tid()] in running))
+ next
+
+ end = gettimeofday_us()
+ begin = running["gencache_get_data_blob", tid()]
+ delete running["gencache_get_data_blob", tid()]
+
+ duration = end - begin
+ intervals["gencache_get_data_blob"] <<< duration
+}
+
+probe process(@1).library("*").function("gencache_set_data_blob") {
+ running["gencache_set_data_blob", tid()] = gettimeofday_us()
+}
+
+probe process(@1).library("*").function("gencache_set_data_blob").return {
+ if (!(["gencache_set_data_blob", tid()] in running))
+ next
+
+ end = gettimeofday_us()
+ begin = running["gencache_set_data_blob", tid()]
+ delete running["gencache_set_data_blob", tid()]
+
+ duration = end - begin
+ intervals["gencache_set_data_blob"] <<< duration
+}
+
+probe process(@1).library("*").function("gencache_del") {
+ running["gencache_del", tid()] = gettimeofday_us()
+}
+
+probe process(@1).library("*").function("gencache_del").return {
+ if (!(["gencache_del", tid()] in running))
+ next
+
+ end = gettimeofday_us()
+ begin = running["gencache_del", tid()]
+ delete running["gencache_del", tid()]
+
+ duration = end - begin
+ intervals["gencache_del"] <<< duration
+}
+
+probe process(@1).library("*").function("gencache_stabilize") {
+ running["gencache_stabilize", tid()] = gettimeofday_us()
+}
+
+probe process(@1).library("*").function("gencache_stabilize").return {
+ if (!(["gencache_stabilize", tid()] in running))
+ next
+
+ end = gettimeofday_us()
+ begin = running["gencache_stabilize", tid()]
+ delete running["gencache_stabilize", tid()]
+
+ duration = end - begin
+ intervals["gencache_stabilize"] <<< duration
+}
+
+probe end {
+ printf("\n\n")
+
+ printf("Summary of cache access stats\n")
+ printf("=============================\n\n")
+ printf("%-10s %-10s %-10s\n",
+ "Hits", "Misses", "Negative-Hits");
+ printf("--------------------------------------\n")
+ printf("%-10d %-10d %-10d\n",
+ cache_hits, cache_misses, neg_cache_hits);
+
+ printf("\n")
+
+ foreach ([name] in intervals) {
+ printf("%-30s count: %d sum: %d us (min: %d us avg: %d us max: %d us)\n",
+ name,
+ @count(intervals[name]),
+ @sum(intervals[name]),
+ @min(intervals[name]),
+ @avg(intervals[name]),
+ @max(intervals[name]))
+ }
+
+ printf("\n")
+ foreach ([name] in intervals) {
+ printf("%s time distribution histogram:\n", name)
+ println(@hist_log(intervals[name]))
+ }
+}