注意
本文档适用于 Ceph 的开发版本。
使用 perf
Top
sudo perf top -p `pidof ceph-osd`
使用调用图捕获一些数据
sudo perf record -p `pidof ceph-osd` -F 99 --call-graph dwarf -- sleep 60
按调用方查看(可以看到每个顶部函数调用了什么)
sudo perf report --call-graph caller
按被调用方查看(可以看到谁调用了每个顶部函数)
sudo perf report --call-graph callee
- 注意:
如果调用方/被调用方视图看起来相同,您可能遇到了内核错误;请升级到 4.8 或更高版本。
常见问题
Ceph 使用 RelWithDebInfo 作为其默认的 CMAKE_BUILD_TYPE。因此,在这种情况下,使用 -O2 -g 来编译代码树。而 -O2 优化级别默认启用 -fomit-frame-pointer。但这会阻止堆栈分析器访问完整的堆栈信息。因此,您可以在启动 cmake 时禁用此选项
cmake -DCMAKE_CXX_FLAGS="-fno-omit-frame-pointer"
或在构建代码树时禁用此选项
make CMAKE_CXX_FLAGS="-fno-omit-frame-pointer"
火焰图
首先,进行设置
cd ~/src
git clone https://github.com/brendangregg/FlameGraph
运行 ceph,然后记录一些 perf 数据
sudo perf record -p `pidof ceph-osd` -F 99 --call-graph dwarf -- sleep 60
然后生成火焰图
sudo perf script | ~/src/FlameGraph/stackcollapse-perf.pl > /tmp/folded
~/src/FlameGraph/flamegraph.pl /tmp/folded > /tmp/perf.svg
firefox /tmp/perf.svg