1 Star 0 Fork 999

fyf11 / apollo

forked from ApolloAuto / apollo 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
how_to_do_performance_profiling.md 2.92 KB
一键复制 编辑 原始数据 按行查看 历史
Qi Luo 提交于 2019-09-02 13:47 . Docs: fix profiling for new docker image

How to do performance profiling

The purpose of profiling a module is to use tools (here we use google-perftools) to examine the performance problems of a module.

The Apollo development docker has all the profiling tools you need configured. Therefore, you can do all the following steps in the Apollo development docker.

Build Apollo in profiling mode

First, build Apollo in profiling mode

bash apollo.sh clean
bash apollo.sh build_prof

Play a rosbag

To profile a module, you need to provide its input data to make sure the majority of its code can be exercised. You can start play an information-rich rosbag by

rosbag play -l your_rosbag.bag

or after Apollo 3.5, run

cyber_record play -f your_record.record

Start module in profiling mode

Start your module with the following command

CPUPROFILE=/tmp/${MODULE}.prof /path/to/module/bin/${MODULE} --flagfile=modules/${MODULE}/conf/${MODULE}.conf \
 --${MODULE}_test_mode \
 --${MODULE}_test_duration=60.0 \
 --log_dir=/apollo/data/log

Where MODULE is the name of the module you want to test.

or after Apollo 3.5, use

CPUPROFILE=/tmp/${MODULE}.prof mainboard -d /apollo/modules/${MODULE}/dag/${MODULE}.dag  --flagfile=modules/${MODULE}/conf/${MODULE}.conf \
 --${MODULE}_test_mode \
 --${MODULE}_test_duration=60.0 \
 --log_dir=/apollo/data/log

The profiling mode gflags

Each module should have a pre-defined ${MODULE}_test_mode and ${MODULE}_test_duration gflag. These two flags tells the module to run for ${MODULE}_test_duration amount of time when ${MODULE}_test_mode is true.

Most of Apollo modules already have these two gflags. If they does not exist in the module you are interested in, you can define it by yourself. You can refer to gflag planning_test_mode and planning_test_duration to see how they are being used.

Create pdf report

Finally you can create a pdf report to view the profiling result.

google-pprof --pdf --lines /path/to/module/bin/${MODULE} /tmp/${MODULE}.prof > ${MODULE}_profiling.pdf

or after 3.5, run

google-pprof --pdf --lines /path/to/module/component_lib/$lib{MODULE}_component_lib.so /tmp/${MODULE}.prof > ${MODULE}_profiling.pdf

Example

Here is an example command of starting the planning module.

CPUPROFILE=/tmp/planning.prof /apollo/bazel-bin/modules/planning/planning \
 --flagfile=modules/planning/conf/planning.conf \
 --log_dir=/apollo/data/log \
 --planning_test_mode \
 --test_duration=65.0

google-pprof --pdf --lines /apollo/bazel-bin/modules/planning/planning /tmp/planning.prof > planning_prof.pdf

or after Apollo 3.5, run

CPUPROFILE=/tmp/planning.prof mainboard -d /apollo/modules/planning/dag/planning.dag \
 --flagfile=modules/planning/conf/planning.conf \
 --log_dir=/apollo/data/log \
 --planning_test_mode \
 --test_duration=65.0

google-pprof --pdf --lines /apollo/bazel-bin/modules/planning/libplanning_component_lib.so  /tmp/planning.prof > planning_prof.pdf
C++
1
https://gitee.com/fyf11/apollo.git
git@gitee.com:fyf11/apollo.git
fyf11
apollo
apollo
master

搜索帮助