Profiling

There are two main options for performance profiling: perf and gperf.

perf

The perf top option is useful to quickly identify functions that are taking a larger than expected portion of the execution time.:

sudo perf top -p `pidof traffic_server`

For more details use the record subcommand to gather profiling data on the traffic_server process. Using the -g option will gather call stack information. Compiling with -ggdb and -fno-omit-frame-pointer will make it more likely that perf record will gather complete callstacks.:

sudo perf record -g -p `pidof traffic_server`

After gathering profilng data with perf record, use perf report to display the call stacks with their corresponding contribution to total execution time.:

sudo perf report

gperf

Gperftools also provides libraries to statistically sample the callstacks of a process. The --with-profile=yes option for configure will link with the gperftools profiling library and add profile stop and profile dump function calls at the beginning and end of the traffic_server main function. The profilng data will be dumped in /tmp/ts.prof.

Once the profiling data file is present, you can use the pprof tool to generate a pdf callgraph of the data to see which call stacks contribute most to the execution time.:

pprof --pdf /opt/trafficserver/9.0/bin/traffic_server ts.prof > prof.pdf