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/generate-winbindd.stp.sh | |
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/generate-winbindd.stp.sh')
-rwxr-xr-x | examples/systemtap/generate-winbindd.stp.sh | 310 |
1 files changed, 310 insertions, 0 deletions
diff --git a/examples/systemtap/generate-winbindd.stp.sh b/examples/systemtap/generate-winbindd.stp.sh new file mode 100755 index 0000000..3a4d2d8 --- /dev/null +++ b/examples/systemtap/generate-winbindd.stp.sh @@ -0,0 +1,310 @@ +#!/bin/sh + +outfile="$(dirname $0)/winbindd.stp" + +child_funcs="winbindd_dual_init_connection +_wbint_InitConnection +_wbint_Ping +_wbint_PamAuth +_wbint_PamAuthCrap +_wbint_PamLogOff +_wbint_PamAuthChangePassword +_wbint_PamAuthCrapChangePassword +_wbint_ListTrustedDomains +_wbint_LookupSid +_wbint_LookupSids +_wbint_LookupName +_wbint_Sids2UnixIDs +_wbint_UnixIDs2Sids +_wbint_AllocateUid +_wbint_AllocateGid +_wbint_GetNssInfo +_wbint_LookupUserAliases +_wbint_LookupUserGroups +_wbint_QuerySequenceNumber +_wbint_LookupGroupMembers +_wbint_QueryGroupList +_wbint_QueryUserRidList +_wbint_DsGetDcName +_wbint_LookupRids +_wbint_CheckMachineAccount +_wbint_ChangeMachineAccount +_wbint_PingDc" + +async_funcs="wb_ping +winbindd_lookupsid +winbindd_lookupsids +winbindd_lookupname +winbindd_sids_to_xids +winbindd_xids_to_sids +winbindd_getpwsid +winbindd_getpwnam +winbindd_getpwuid +winbindd_getsidaliases +winbindd_getuserdomgroups +winbindd_getgroups +winbindd_show_sequence +winbindd_getgrgid +winbindd_getgrnam +winbindd_getusersids +winbindd_lookuprids +winbindd_setpwent +winbindd_getpwent +winbindd_endpwent +winbindd_dsgetdcname +winbindd_getdcname +winbindd_setgrent +winbindd_getgrent +winbindd_endgrent +winbindd_list_users +winbindd_list_groups +winbindd_check_machine_acct +winbindd_ping_dc +winbindd_pam_auth +winbindd_pam_logoff +winbindd_pam_chauthtok +winbindd_pam_chng_pswd_auth_crap +winbindd_wins_byip +winbindd_wins_byname +winbindd_allocate_uid +winbindd_allocate_gid +winbindd_change_machine_acct +winbindd_pam_auth_crap" + +backend_funcs="query_user_list +enum_dom_groups +enum_local_groups +name_to_sid +sid_to_name +rids_to_names +lookup_usergroups +lookup_useraliases +lookup_groupmem +sequence_number +lockout_policy +password_policy +trusted_domains" + +header='#!/usr/bin/stap +# +# Systemtap script to instrument winbindd +# +'"# Generated by examples/systemtap/$(basename $0) on $(date), do not edit +#"' +# Usage: +# +# Instrument all winbindd processes: +# # stap winbindd.stp +# +# Instrument a specific winbindd process: +# # stap -x PID winbindd.stp +# + +global dc_running, dc_svctime +global backend_running, backend_svctime +global send_running, recv_running +global start_time, idle_time +global async_svctime, async_runtime + +probe begin { + printf("Collecting data, press ctrl-C to stop... ") +}' + +domchild_req_template=' +# +# winbind domain child function XXX +# + +probe process("winbindd").function("XXX") { + dc_running[tid(), "XXX"] = gettimeofday_us() +} + +probe process("winbindd").function("XXX").return { + if (!([tid(), "XXX"] in dc_running)) + next + + end = gettimeofday_us() + begin = dc_running[tid(), "XXX"] + delete dc_running[tid(), "XXX"] + + duration = end - begin + dc_svctime["XXX"] <<< duration +}' + +backend_req_template=' +# +# winbind domain child backend function XXX +# + +probe process("winbindd").function("XXX@../source3/winbindd/winbindd_ads.c") { + backend_running[tid(), "XXX"] = gettimeofday_us() +} + +probe process("winbindd").function("XXX@../source3/winbindd/winbindd_ads.c").return { + if (!([tid(), "XXX"] in backend_running)) + next + + end = gettimeofday_us() + begin = backend_running[tid(), "XXX"] + delete backend_running[tid(), "XXX"] + + duration = end - begin + backend_svctime["XXX"] <<< duration +}' + +async_req_template=' +# +# winbind async function XXX +# + +probe process("winbindd").function("XXX_send") { + send_running["XXX_send"] = gettimeofday_us() +} + +probe process("winbindd").function("XXX_send").return { + if (!(["XXX_send"] in send_running)) + next + + end = gettimeofday_us() + start = send_running["XXX_send"] + delete send_running["XXX_send"] + + start_time["XXX_send", $return] = start + idle_time["XXX_send", $return] = end +} + +probe process("winbindd").function("XXX_recv") { + if (!(["XXX_send", $req] in start_time)) + next + + recv_running["XXX_recv"] = gettimeofday_us() +} + +probe process("winbindd").function("XXX_recv").return { + if (!(["XXX_recv"] in recv_running)) + next + + recv_end = gettimeofday_us() + recv_start = recv_running["XXX_recv"] + delete recv_running["XXX_recv"] + recv_runtime = recv_end - recv_start + + req = @entry($req) + + send_begin = start_time["XXX_send", req] + delete start_time["XXX_send", req] + svctime = recv_end - send_begin + + idle = idle_time["XXX_send", req] + delete idle_time["XXX_send", req] + runtime = (idle - send_begin) + recv_runtime + + async_svctime["XXX_send"] <<< svctime + async_runtime["XXX_send"] <<< runtime +}' + +footer=' +probe end { + printf("\n\n") + + printf("Winbind request service time\n") + printf("============================\n") + foreach ([name] in async_svctime) { + printf("%-40s count: %5d, sum: %6d ms (min: %6d us, avg: %6d us, max: %6d us)\n", + name, + @count(async_svctime[name]), + @sum(async_svctime[name]) / 1000, + @min(async_svctime[name]), + @avg(async_svctime[name]), + @max(async_svctime[name])) + } + printf("\n") + + printf("Winbind request runtime\n") + printf("=======================\n") + foreach ([name] in async_runtime) { + printf("%-40s count: %5d, sum: %6d ms (min: %6d us, avg: %6d us, max: %6d us)\n", + name, + @count(async_runtime[name]), + @sum(async_runtime[name]) / 1000, + @min(async_runtime[name]), + @avg(async_runtime[name]), + @max(async_runtime[name])) + } + printf("\n") + + printf("Winbind domain-child request service time\n") + printf("=========================================\n") + foreach ([name] in dc_svctime) { + printf("%-40s count: %5d, sum: %6d ms (min: %6d us, avg: %6d us, max: %6d us)\n", + name, + @count(dc_svctime[name]), + @sum(dc_svctime[name]) / 1000, + @min(dc_svctime[name]), + @avg(dc_svctime[name]), + @max(dc_svctime[name])) + } + printf("\n") + + printf("Winbind domain-child AD-backend service time\n") + printf("============================================\n") + foreach ([name] in backend_svctime) { + printf("%-40s count: %5d, sum: %6d ms (min: %6d us, avg: %6d us, max: %6d us)\n", + name, + @count(backend_svctime[name]), + @sum(backend_svctime[name]) / 1000, + @min(backend_svctime[name]), + @avg(backend_svctime[name]), + @max(backend_svctime[name])) + } + printf("\n") + + printf("Winbind request service time distributions (us)\n") + printf("===============================================\n") + foreach ([name] in async_svctime) { + printf("%s:\n", name); + println(@hist_log(async_svctime[name])) + } + printf("\n") + + printf("Winbind request runtime distributions (us)\n") + printf("==========================================\n") + foreach ([name] in async_runtime) { + printf("%s:\n", name); + println(@hist_log(async_runtime[name])) + } + + printf("Winbind domain-child request service time distributions (us)\n") + printf("============================================================\n") + foreach ([name] in dc_svctime) { + printf("%s:\n", name); + println(@hist_log(dc_svctime[name])) + } + + printf("Winbind domain-child AD-backend service time distributions (us)\n") + printf("===============================================================\n") + foreach ([name] in backend_svctime) { + printf("%s:\n", name); + println(@hist_log(backend_svctime[name])) + } +}' + +cat <<EOF >$outfile +$header +EOF + +printf "$child_funcs\n" | while read func; do + printf "$domchild_req_template\n" | sed -e s/XXX/$func/g >>$outfile +done + +printf "$backend_funcs\n" | while read func; do + printf "$backend_req_template\n" | sed -e "s|XXX|$func|g" >>$outfile +done + +printf "$async_funcs\n" | while read func; do + printf "$async_req_template\n" | sed -e s/XXX/$func/g >>$outfile +done + +cat <<EOF >>$outfile +$footer +EOF |