nginx-profile-setup/run.sh
Ava Hahn 78baa850a8 fixes for worker process profiling
Signed-off-by: Ava Hahn <a.hahn@f5.com>
2025-09-18 00:04:23 +00:00

76 lines
2.2 KiB
Bash
Executable file

#!/bin/zsh
if [[ ! $1 ]]; then
echo "Error: expected one argument (nginx code directory)"
exit
fi
if [[ ! -d $1 ]]; then
echo "Error: provided nginx code directory is invalid"
exit
fi
PROFILE_OUTPUT=PROFILE.LOG
if [ -f $PROFILE_OUTPUT ]; then
mv $PROFILE_OUTPUT $PROFILE_OUTPUT.old
fi
KACLIENT=nginx-profile-setup-kaclient-1
KAPROXY=nginx-profile-setup-kaproxy-1
echo "Callgrind output info:" >> $PROFILE_OUTPUT
echo "Dr: number of memory reads" >> $PROFILE_OUTPUT
echo "D1mr: D1 cache read misses" >> $PROFILE_OUTPUT
echo "DLmr: LL (last level) cache data read misses" >> $PROFILE_OUTPUT
echo "Dw: number of memory writes" >> $PROFILE_OUTPUT
echo "D1mw: D1 cache write misses" >> $PROFILE_OUTPUT
echo "DLmw: LL (last level) cache data write misses" >> $PROFILE_OUTPUT
echo "Ir: number of instructions executed" >> $PROFILE_OUTPUT
echo "I1mr: I1 cache read misses" >> $PROFILE_OUTPUT
echo "ILmr: LL (last level) cache instruction read misses" >> $PROFILE_OUTPUT
echo "\n\n" >> $PROFILE_OUTPUT
echo "[+] building and deploying containers"
go build keepalive-svc.go
mv keepalive-svc kasvc/
rsync -avz $1 kaproxy/
sudo docker-compose up --build -d
sudo docker exec $KAPROXY callgrind_control -i off
sudo docker wait $KACLIENT
echo "[+] client finished, triggering reload"
sudo docker exec $KAPROXY callgrind_control -i on
sudo docker kill -s CONT $KAPROXY
echo "[+] wait five seconds for reload complete"
sleep 5
echo " > restarting client"
sudo docker-compose restart kaclient
sudo docker wait $KACLIENT
echo "[+] client finished again. reloading NGINX and fetching profile data"
sudo docker kill -s CONT $KAPROXY
sudo docker exec $KAPROXY callgrind_control -i off
sudo docker kill -s INT $KAPROXY
sleep 10
echo "[+] building profiling report"
sudo docker exec $KAPROXY bash -c "find /tmp -iname \"callgrind.out*\"" | while read file
do
echo " > processing: " $file
F=$(basename $file)
sudo docker cp $KAPROXY:$file $F;
sudo chmod 777 $F
echo "Output file: $F" >> $PROFILE_OUTPUT
callgrind_annotate \
--auto=yes \
$F >> $PROFILE_OUTPUT
echo "End of profile: $F\n\n\n" >> $PROFILE_OUTPUT
rm -f $F
done
echo "[+] cleaning up"
sudo docker-compose down
less $PROFILE_OUTPUT