oprofile使用简介

作者: 秋刀鱼杂记 | 来源:发表于2018-01-12 16:52 被阅读0次

    Oprofile使用

    1 介绍

    Oprofile是linux上的性能监测工具,通过CPU硬件提供的性能计数器对事件进行采样,从代码层面分析程序的性能消耗情况,找出程序性能的问题点。

    2 oprofile安装

    RHEL6.8GA上直接提供了安装包,配置好yum源直接安装即可。

    yum install oprofile

    3 oprofile使用

    1. 设置检测事件

    opcontrol --event=<event-name>:<sample-rate>:<unit-mask>:<kernel>:<user>

    各字段含义如下:

    event-name 事件名称,如CPU_CLK_UNHALTED,支持的事件列表可以通过opcontrol --list-events命令列出
    sample-rate 触发一次采样的事件计数值,如100000
    unit-mask 硬件单元掩码,如0x0F
    kernel 是否对内核进行监测,取值0或1
    user 是否对用户空间进行监测,取值0或1

    实际检测案例:

    opcontrol --event=CPU_CLK_UNHALTED:6000:0x00:0:1 #对core cycle进行profile

    1. 开始检测启动

    opcontrol --init #加载模块

    opcontrol --reset #清除当前会话中的数据

    opcontrol --start #开始profiling

    注:如果opcontrol –start报错,可以使用以下命令解决

    opcontrol --deinit

    echo 0 > /proc/sys/kernel/nmi_watchdog

    1. 保存检测数据

    程序业务执行完成后,使用下面的命令将监测数据转储下来:

    opcontrol --dump #把收集到的数据写入文件

    1. 停止检测

    opcontrol –stop #停止profiling

    opcontrol –shutdown #关闭守护进程oprofiled

    opcontrol –deinit #卸载模块

    4 oprofile其他用法

    除了监测事件以外,oprofile还提供了以下的使用

    1. 是否监测内核文件

    当要对内核进行监测时,需要指定内核的文件路径,使用下面的命令(其中file为内核文件完整路径):

    opcontrol --vmlinux=file

    如果不需要对内核进行性能监测,则此处直接使用--no-vmlinux参数:

    opcontrol --no-vmlinux

    1. 设置监测数据分离方式

    opcontrol --separate=<choice>

    <choice> 有几下几个参数:

    none do not separate the profiles (default)
    library generate per-application profiles for libraries
    kernel generate per-application profiles for the kernel and kernel modules
    all generate per-application profiles for libraries and per-application profiles for the kernel and kernel modules

    例:

    Opcontrol --separate=library

    1. oprofile更多用法使用opcontrol –help查看

    5 性能数据分析

    监测数据转储后,即可以通过opreportopannotate命令查看性能消耗情况了。

    1) 显示各模块整体的性能消耗情况

    opreport

    2) 显示各函数的性能消耗情况

    opreport -l

    3) 显示代码级别的性能消息情况

    opannotate -s

    6 脚本实例
    下面的脚本是以前测试过程中临时写的,采集的思路可供参考。

    LOGFILE="/tmp/OProfile_LOG"
    DURATION=600
    echo "start OProfile ($DURATION s)"
    echo "set up OProfile"
    opcontrol --deinit 2>> $LOGFILE  -- 加载
    modprobe oprofile timer=1  
    opcontrol --setup --vmlinux=/usr/lib/debug/lib/modules/`uname -r`/vmlinux  -- 设置跟踪vmlinux
    opcontrol -c 0
    
    opcontrol –reset  --清空当面的信息
    echo "start OProfile" 
    opcontrol --start >> $LOGFILE 2>&1   -- 开始跟踪
    sleep $DURATION
    echo "shutdown OProfile"
    opcontrol --shutdown >> $LOGFILE 2>&1  -- 结束跟踪
    
    echo "report OProfile"
    opreport -l > $OUTDIR/opreport_-l.txt 2>> $LOGFILE  --以函数的角度显示检测结果
    
    echo "oprofile temp data size: $(du -sh /var/lib/oprofile)"
    echo "cleanup OProfile"
    opcontrol --reset
    opcontrol --deinit 2>> $LOGFILE
    echo "finish OProfile"
    
    

    参考文献

    1. http://hutaow.com/blog/2013/12/29/performance-analysis-with-oprofile/

    注:如需转载,请标注出处。

    相关文章

      网友评论

        本文标题:oprofile使用简介

        本文链接:https://www.haomeiwen.com/subject/umufoxtx.html