注意

本文档适用于 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

由 Ceph 基金会为您呈现

Ceph 文档是由非营利性 Ceph 基金会 资助和托管的社区资源。如果您希望支持这项工作和我们的其他努力,请考虑 立即加入