Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix dtrace system level scripts #1560

Merged
merged 2 commits into from
Nov 15, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions tools/dtrace/get-ds-state.d
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/*
* Print a status line for a given PID.
* Exit after 5 seconds.
*/
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

question in the header comment: this prints for all PIDs rather than a given PID right?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That was copy cruft from where I copied the script from. I've fixed the comment to address reality.

#pragma D option quiet
#pragma D option strsize=1k

crucible_upstairs*:::up-status
{
my_sesh = json(copyinstr(arg1), "ok.session_id");

printf("%6d %8s %17s %17s %17s\n",
pid,
substr(my_sesh, 0, 8),
json(copyinstr(arg1), "ok.ds_state[0]"),
json(copyinstr(arg1), "ok.ds_state[1]"),
json(copyinstr(arg1), "ok.ds_state[2]"));
}

tick-5s
{
exit(0);
}
21 changes: 14 additions & 7 deletions tools/dtrace/get-ds-state.sh
Original file line number Diff line number Diff line change
@@ -1,9 +1,16 @@
#!/bin/bash
#
# This script will display the downstairs states for any propolis zones it
# finds running on a system.
for zzz in $(zoneadm list | grep propolis); do
echo -n "$zzz "
ppid=$(zlogin "$zzz" pgrep propolis-server)
dtrace -xstrsize=1k -p $ppid -q -n 'crucible_upstairs*:::up-status { printf("%6d %17s %17s %17s", pid, json(copyinstr(arg1), "ok.ds_state[0]"), json(copyinstr(arg1), "ok.ds_state[1]"), json(copyinstr(arg1), "ok.ds_state[2]")); exit(0); }'
done
# This script will display the downstairs states for each pid/session
# it finds running on a system.
filename='/tmp/get-ds-state.out'

# Gather state on all running propolis servers, record summary to a file
dtrace -s /opt/oxide/crucible_dtrace/get-ds-state.d | sort -n | uniq | awk 'NF' > "$filename"
# Walk the lines in the file, append the zone name to each line.
while read p; do
# For each line in the file, pull out the PID we are looking at and
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: probably doesnt matter too much here, but should be while read -r p to avoid escape character expansion by the shell

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

# print the zone that process is running in.
pid=$(echo $p | awk '{print $1}')
zone=$(ps -o zone -p $pid | tail -1 | cut -c 1-28)
echo "$zone $p"
done < "$filename"
26 changes: 26 additions & 0 deletions tools/dtrace/get-lr-state.d
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
/*
* Print a live reapir status line.
* Exit after 5 seconds.
*/
#pragma D option quiet
#pragma D option strsize=1k

crucible_upstairs*:::up-status
{
my_sesh = json(copyinstr(arg1), "ok.session_id");

printf("%6d %8s %s %s %s %s %s %s\n",
pid,
substr(my_sesh, 0, 8),
json(copyinstr(arg1), "ok.ds_live_repair_completed[0]"),
json(copyinstr(arg1), "ok.ds_live_repair_completed[1]"),
json(copyinstr(arg1), "ok.ds_live_repair_completed[2]"),
json(copyinstr(arg1), "ok.ds_live_repair_aborted[0]"),
json(copyinstr(arg1), "ok.ds_live_repair_aborted[1]"),
json(copyinstr(arg1), "ok.ds_live_repair_aborted[2]"));
}

tick-5s
{
exit(0);
}
23 changes: 15 additions & 8 deletions tools/dtrace/get-lr-state.sh
Original file line number Diff line number Diff line change
@@ -1,9 +1,16 @@
#!/bin/bash
#
# This script will log into every propolis zone it finds and get the
# DTrace live repair counters from propolis-server in each zone.
for zzz in $(zoneadm list | grep propolis); do
echo -n "$zzz "
ppid=$(zlogin "$zzz" pgrep propolis-server)
dtrace -xstrsize=1k -p $ppid -q -n 'crucible_upstairs*:::up-status { printf("%6d %s %s %s %s %s %s", pid, json(copyinstr(arg1), "ok.ds_live_repair_completed[0]"), json(copyinstr(arg1), "ok.ds_live_repair_completed[1]"), json(copyinstr(arg1), "ok.ds_live_repair_completed[2]"), json(copyinstr(arg1), "ok.ds_live_repair_aborted[0]"), json(copyinstr(arg1), "ok.ds_live_repair_aborted[1]"), json(copyinstr(arg1), "ok.ds_live_repair_aborted[2]")); exit(0); }'
done

# This script will display the downstairs live repair for each
# pid/session it finds running on a system.
filename='/tmp/get-lr-state.out'

# Gather state on all running propolis servers, record summary to a file
dtrace -s /opt/oxide/crucible_dtrace/get-lr-state.d | sort -n | uniq | awk 'NF' > "$filename"
# Walk the lines in the file, append the zone name to each line.
while read p; do
# For each line in the file, pull out the PID we are looking at and
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same thing about read -r from above

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done, thanks for the comments.

# print the zone that process is running in.
pid=$(echo $p | awk '{print $1}')
zone=$(ps -o zone -p $pid | tail -1 | cut -c 1-28)
echo "$zone $p"
done < "$filename"
2 changes: 2 additions & 0 deletions tools/make-dtrace.sh
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,9 @@ tar cvf ../../out/crucible-dtrace.tar \
README.md \
all_downstairs.d \
downstairs_count.d \
get-ds-state.d \
get-ds-state.sh \
get-lr-state.d \
get-lr-state.sh \
perf-downstairs-os.d \
perf-downstairs-three.d \
Expand Down