Skip to content

Instantly share code, notes, and snippets.

@fbs
Last active July 14, 2019 16:17
Show Gist options
  • Save fbs/b810395270e3d0d3c7c2eae96656f17d to your computer and use it in GitHub Desktop.
Save fbs/b810395270e3d0d3c7c2eae96656f17d to your computer and use it in GitHub Desktop.
bpftrace issue 817
#!/bin/bash
# Let bpftrace count kills
# do a lot of kills for x seconds
# Setup extra kill tracer
# Setup bpftrace map clear tracer
# Loop:
# Send single kill
# dump map content
tmpdir=$(mktemp -d)
logfile="${tmpdir}/log"
mkfifo $logfile
echo "tempdir: ${tmpdir}"
sudo bpftrace -o "$logfile" -e "
t:syscalls:sys_enter_kill {
@kills[probe] = count();
}
interval:s:1 {
time(); print(@kills); clear(@kills);
}" & TRACE_PID=$!
cat $logfile > /dev/null & CAT_PID=$!
# give bpftrace time to setup maps
sleep 3
MAPS=$(sudo bpftool map | awk '$2 ~ /percpu_hash/ { print $1 }' | tr -d ':')
starttime=$(date +%s)
echo "Killing for a while"
while [ $(date +%s) -le $((starttime + 20)) ]; do
kill 3 &>/dev/null &
done
kill $CAT_PID
cat $logfile & CAT_PID=$!
sudo bpftrace -e 'uretprobe:./bpftrace/src/bpftrace:*clear_mapE* { printf("Clear returned at: "); time(); }' & CLEAR_PID=$!
sudo bpftrace -e 'tracepoint:syscalls:sys_enter_kill { @ = count(); } i:s:10 { printf("Kill count: "); print(@) }' & KILL_PID=$!
for i in {1..60}; do
date
if [[ -n $1 && $1 == "kill" ]]; then
echo "Sending kill"
kill 3 &>/dev/null #; kill 3 &>/dev/null; kill 3 &>/dev/null; kill 3 &>/dev/null
fi
echo "Map contents"
echo $MAPS | xargs -n 1 sudo bpftool map dump id
sleep 1;
done
kill $CAT_PID
sudo pkill -P $$
sudo pkill bpftrace
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment