-
Notifications
You must be signed in to change notification settings - Fork 619
Valgrind
Valgrind is useful for performing dynamic analysis. Valgrind tools can automatically detect many memory management and threading bugs, and profile Peloton in detail.
Here's the command for using memcheck for detecting common memory errors.
valgrind --trace-children=yes --track-origins=yes peloton -D ./data
valgrind --trace-children=yes --track-origins=yes ./test/catalog_test
Here's the command for using callgrind for profiling Peloton.
valgrind --tool=callgrind --trace-children=yes ./src/peloton -D data &> /dev/null &
pg_ctl -D ./data stop
You can use kcachegrind for viewing the collected profile files (i.e. the callgrind.out.*
files).
kcachegrind
The Linux kernel
comes with a performance analysis tool
called perf that can even be used on production servers to analyze the call stack
of a server, or a process. This is useful to find the bottlenecks
of a query processing or simply of a server running and improve those.
It is usually found in the package "perf"
, at least it is the case of RHEL, CentOS and ArchLinux.
/proc/sys/kernel/perf_event_paranoid can be used to restrict access to the performance counters.
2, allow only user-space measurements
1, allow both kernel and user measurements (default)
0, allow access to CPU-specific data
-1, no paranoid at all
Record information
## Profile system as long as needed, can be cancelled with Ctrl-C
perf record -a -g
## Profile system for a given period of time
perf record -a -g -s sleep $TIME_IN_SECONDS
## For the duration of a command
perf record -a -g -s -- $COMMAND
Different things can be recorded:
-a to profile the whole system
-p $PID to profile only the given PID
-u $USER to profile only the given user
Reports are saved by default in $HOME/perf.data. Old reports are renamed as $HOME/perf.data.old.
## Real-time measurement is done by perf top, like system-wide profiling
perf top
## Profiling without accumulating stats
perf top -z
Viewing the records
## View profile recorded
perf report -n
## With a graph
perf report -g
## Run peloton under strace
strace -o trace.server -f -t peloton -D /path/to/data
## Run psql under strace
strace -o trace.client -f -t psql postgres
The first flag is -f
, which tells strace to follow the forked processes. The -o
flag sends all the output to a file. We can also use the -ff
flag, that sends the output corresponding to each forked process to a separate file. Very handy, that. Finally, we add a -t
flag, which prepends each line with a timestamp.