Q: 为什么按照网上的做法,opgrof生成的gmon.out 生成不了图形?
A: 指定生成callgraph , 命令:opcontrol --callgraph=n -i program
设置后,可以通过opcontrol --status查看
Q:采样有时出现处理缓冲区溢出,怎么办?oprofile sample buffer overflows
A:1.减少采样频率;
命令:opcontrol -e CPU_CLK_UNHALTED:10000:0:1:0
表示cpu时钟周期事件,每10000个cycle触发一次中断,适当调整这个值。
2.增大采样缓冲区;
命令:opcontrol --buffer-size=1000000
opcontrol --buffer-watershed=256000
opcontrol --cpu-buffer-size=16000
Q: 安装graphviz失败,报错找不到头文件ft2build.h.
A: 需首先安装依赖库freetype.
Q:oprofile抓不到采样数据,opreport error: No sample file found
A:确定采样模式,NMI,Timer interrupt.
设置定时模式:
opcontrol --deinit && modprobe oprofile timer=1
Q: 因无源代码,opannotate无法分析出结果
A:用opreport -d 输出16进制函数地址,写perl脚本解析文本,
调用add2line将地址指针转换成函数行号。
以下是项目中的优化实践:
CASE1: 优化配置(config)
项目中Json配置序列化耗时,耗CPU,思想:分而治之。
CASE2: 优化文件读写 (disk io)
文件系统IO优化, 思想:HASH缓冲,对齐。
CASE3: netra系统平台,(mutex,memory , memcpy, times)
这是平台级的系统优化,思想:发现热点,各个击破。