1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-22 13:34:15 +03:00
samba-mirror/examples/systemtap/gencache.stp
Ralph Boehme b2f2ce0acc examples: add cache effectiveness stats to gencache.stp
Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>

Autobuild-User(master): Ralph Böhme <slow@samba.org>
Autobuild-Date(master): Fri Aug 11 14:19:24 CEST 2017 on sn-devel-144
2017-08-11 14:19:24 +02:00

148 lines
3.6 KiB
Plaintext
Executable File

#!/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]))
}
}