76 lines
2.2 KiB
Bash
Executable file
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
|