mirror of
https://github.com/samba-team/samba.git
synced 2024-12-22 13:34:15 +03:00
b2f2ce0acc
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
148 lines
3.6 KiB
Plaintext
Executable File
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]))
|
|
}
|
|
}
|