diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 17:20:00 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 17:20:00 +0000 |
commit | 8daa83a594a2e98f39d764422bfbdbc62c9efd44 (patch) | |
tree | 4099e8021376c7d8c05bdf8503093d80e9c7bad0 /examples/systemtap/gencache.stp | |
parent | Initial commit. (diff) | |
download | samba-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-x | examples/systemtap/gencache.stp | 147 |
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])) + } +} |