使用systemtap分析ceph源码流程
来源:互联网 发布:unity3d spine 编辑:程序博客网 时间:2024/05/16 07:25
说明:之前一直用gdb和lttng 调试ceph源码,后来又发现了systemtap,下面对比下这三种工具。
一,3种源码分析工具的比较
1,gdb
优点:擅长做精细化的调试。比如查看变量内容,查看内存内容,下条件断点等。
缺点:不适合跟很长的流程,频繁打断点,回溯函数堆栈很累。
2,lttng
优点:ceph自带,兼容性好。适当的时候可以打印关键变量内容。
缺点:需要修改源码,写入tracepoint,然后重新编译源码。过程比较繁琐。
3,systemtap
优点:擅长分析代码流程,打印函数调用关系,不需要修改源码,据说还能分析性能瓶颈。
缺点:需要写点调试脚本。
1,2 两种工具已经介绍过,安装编译过程,在ceph源码群里有。下面重点介绍systemtap
二, 安装systemtap环境
1,部署ceph环境
这个就不多说了。
2,安装systemtap工具
安装下面2个包
systemtap
systemtap-runtime
#yum install systemtap systemtap-runtime
3, 安装内核调试信息
连上外网,使用stap-prep 命令安装
# stap-prep
如果不能连上外网,或者没有yum源,需要手动下载内核调试信息安装
首先查看内核版本号uname -r
[root@ceph1 ~]# uname -r
3.10.0-123.el7.x86_64
那么需要安装的内核包如下:
kernel-debuginfo-3.10.0-123.el7.x86_64
kernel-debuginfo-common-x86_64-3.10.0-123.el7.x86_64
kernel-devel.x86_64-3.10.0-123.el7.x86_64
4, 安装ceph调试信息包
去官网下载ceph调试包
ceph-debuginfo.x86_64
并安装,ceph调试包的版本号,必须和所部署的ceph的版本号一致。
三,编辑systemtap调试脚本
1,加入我们要调试osd
#ps -ef | grep osd
查看osd的进程号
2,编辑systemtap脚本
#vi osd.stp
3,编辑我们想要分析的内容
比如我们想打印出当前正在运行的osd的OSD类的所有函数
probe process("ceph-osd").function("OSD::*").call
, process("ceph-osd").function("OSDService::*").call
{
printf("%s -> %s\n", thread_indent(4), ppfunc());
}
写入osd.stp文件。
process表示程序的名称,function表示函数的名字,如果OSD::*,表示输出所有OSD类的相关函数。
printf表示打印出,用法类似c语言的printf,thread_indent表示打印线程号,ppfunc()表示打印出函数名
4,运行我们编辑的脚本
#stap -x {osdpid} osd.stp
-x后面跟osd进程id, osd.stp就是我们刚才编辑的脚本
5,查看osd打印的日志结果。
所有osd进程里,与OSD类和OSDService相关的类的函数,和调用关系,都被打印出来啦!
四,总结
systemtap是个非常神奇的工具。不需要编译源码,下断点。只要写好脚本,分析源码流程简单方便。内容打印详细。还可以用来分析内核哦。
- 使用systemtap分析ceph源码流程
- 【SystemTap】 Linux下安装使用SystemTap源码安装SystemTap
- ceph perf counter 源码分析及使用
- ceph源码分析之读写操作流程(1)
- ceph源码分析之读写操作流程(2)
- ceph写流程分析
- [Ceph分析]Fuse流程分析
- ceph存储 ceph-fuse源码分析一
- ceph源码分析: Log实现
- Ceph Crush 算法源码分析
- 《ceph源码分析》 学习笔记
- 小伙伴们的ceph源码分析二——monitor启动流程
- 小伙伴们的ceph源码分析三——monitor消息处理流程
- Ceph学习——Librbd块存储库与RBD读写流程源码分析
- Ceph 学习——OSD读写流程与源码分析(一)
- [置顶]Ceph源码解析:读写流程
- [Ceph分析]源码目录结构分析
- ceph存储 FUSE调用流程代码分析
- 六边形网格向量工具
- JavaScript正则表达式详解
- IOS基础--线程的使用
- 数组指针和指针数组
- Guardian of Decency UVA
- 使用systemtap分析ceph源码流程
- 微信第三方平台授权时域名问题
- php综合复习题大全(上)——基础篇
- HDU
- CentOS7.3安装Python3.6
- Linux内核|实验一 Shell编程
- Sort it (南阳理工oj-233)
- 数据库冗余字段的理解。
- IOS基础--异步调用