blob: e072a87299d277a299cf112a1a2d110901f9c171 [file] [log] [blame]
#!/bin/bash
# Copyright (c) 2017 FH Dortmund and others
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v10.html
#
# Description:
# Linux shell (bash) script that traces linux processes and converts
# the trace to common tracing format (CTF).
# perf module should be compiles with libbabeltrace in order to run
# the tracing utility correctly.
# Created out directory will contain Processes_List.txt (process IDs
# are listed), perf.data (trace in perf format), ctf_trace.tar.gz
# (trace in ctf format)
# The ctf_format.tar.gz can be extracted in order to visualize the
# perf streams using Eclipse TraceCompass.
#
# Usage:
# sudo ./TraceLinuxProcesses.sh -p <path/to/perf> -n <trace_name> -t <period_to_trace>
#
# Authors:
# M. Ozcelikors <mozcelikors@gmail.com>, FH Dortmund
#
helpwindow ()
{
echo "Arguments for TraceLinuxProcesses.sh are:"
echo "#################################################"
echo "-h or --help : Show these help instructions"
echo "-p or --path-to-perf : Path to Perf"
echo "-n or --name : Trace name to be created"
echo "-t or --time : Specify period in seconds to trace"
echo "#################################################"
echo "Example usage: sudo ./TraceLinuxProcesses.sh -p <path/to/perf> -n <trace_name> -t <period_to_trace>"
}
if [ "$1" == "" ] || [ "$1" == "-h" ] || [ "$1" == "--help" ]; then
helpwindow
exit 0
fi
while [[ $# -gt 1 ]]
do
key="$1"
case $key in
-p|--path-to-perf)
perf_directory="$2"
shift
;;
-n|--name)
trace_name="$2"
shift
;;
-t|--time)
seconds="$2"
shift
;;
*)
#Unknown
helpwindow
;;
esac
shift
done
if ! [[ -z ${perf_directory+x} ]]; then
if ! [[ -z ${trace_name+x} ]]; then
if ! [[ -z ${seconds+x} ]]; then
echo "### Creating directory.."
sudo mkdir out_$trace_name/
echo "### Writing out process names.."
ps -aux >> out_$trace_name/Processes_List.txt
echo "### Tracing with perf for $seconds seconds.."
sudo $perf_directory/./perf sched record -o out_$trace_name/perf.data -- sleep $seconds
echo "### Converting to data to CTF (Common Tracing Format).."
sudo LD_LIBRARY_PATH=/opt/libbabeltrace/lib $perf_directory/./perf data convert -i out_$trace_name/perf.data --to-ctf=./ctf
sudo tar -czvf out_$trace_name/trace.tar.gz ctf/
sudo rm -rf ctf/
echo "### Process IDs are written to out_$trace_name/Processes_List.txt"
echo "### Trace in Perf format is written to out_$trace_name/perf.data"
echo "### Trace in CTF format is written to out_$trace_name/ctf_trace.tar.gz"
echo "### Exiting.."
else
helpwindow
fi
else
helpwindow
fi
else
helpwindow
fi
exit $?