zoukankan      html  css  js  c++  java
  • Centos6下通过 oprofile分析CPU性能

    Centos6下通过 oprofile分析CPU性能

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
    本文链接:https://blog.csdn.net/bobpen/article/details/18444885

    环境

    Centos 6.4 x86_64

    oprofile-0.9.9

    oprofile安装

    #wget http://ncu.dl.sourceforge.net/project/oprofile/oprofile/oprofile-0.9.9/oprofile-0.9.9.tar.gz
    #tar -zxvf oprofile-0.9.9.tar.gz
    #cd oprofile-0.9.9
    #./configure
    #make
    #make install


    oprofile使用

    常用命令:

    使用oprofile检测CPU,需要经过初始化、启动、导出数据、查看结果四个步骤。

    初始化

    opcontrol --no-vmlinux : oprofile启动后,不记录内核模块、内核代码相关统计数据

    opcontrol --init : 加载oprofile模块、oprofile驱动程序

    oprofile控制

    opcontrol --start : 指示oprofile启动检测

    opcontrol --dump : 指示将oprofile检测到的数据写入文件

    opcontrol --reset : 清空之前检测的数据记录

    opcontrol --h : 关闭oprofile进程

    查看结果

    opreport :默认查看oprofile检测结果

    opreport -l : 以函数的角度显示检测结果

    opreport -l oprofile_test : 以函数的角度,针对oprofile_test进程显示检测结果

    opannotate -s oprofile_test : 以代码的角度,针对oprofile_test进程显示检测结果

    opannotate -s /lib64/libc-2.12.so : 以代码的角度,针对libc-2.4.so库显示检测结果

    在oprofile安装完成后,第一步初始化oprofile

    [root@compute oprofile-0.9.9]# opcontrol --init


    而后启动oprofile

    [root@compute oprofile-0.9.9]# opcontrol --start --no-vmlinux
    ATTENTION: Use of opcontrol is discouraged.  Please see the man page for operf.
    Using default event: CPU_CLK_UNHALTED:100000:0:1:1
    Using 2.6+ OProfile kernel interface.
    Using log file /var/lib/oprofile/samples/oprofiled.log
    Daemon started.
    Profiler running.
    


    通过默认的方式查看CPU检测报告

    [root@compute oprofile-0.9.9]# opreport | less
    Using /var/lib/oprofile/samples/ for samples directory.
    CPU: Intel Westmere microarchitecture, speed 2393.96 MHz (estimated)
    Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (No unit mask) count 100000
    CPU_CLK_UNHALT...|
      samples|      %|
    ------------------
       361031 83.4576 vmlinux
        32789  7.5797 ext4
        14667  3.3905 jbd2
        10162  2.3491 no-vmlinux
         3178  0.7346 libc-2.12.so
         1798  0.4156 mptbase
         1386  0.3204 oprofiled
         1380  0.3190 oprofile
         1267  0.2929 opannotate
         1242  0.2871 libpython2.6.so.1.0
         1102  0.2547 mptscsih
          924  0.2136 bash
          290  0.0670 ld-2.12.so
          201  0.0465 kvm
          159  0.0368 bnx2
          159  0.0368 libstdc++.so.6.0.13
          120  0.0277 sd_mod
    

    通过函数方式显示检测结果

    [root@compute oprofile-0.9.9]# opreport -l | less
    CPU: Intel Westmere microarchitecture, speed 2393.96 MHz (estimated)
    Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (No unit mask) count 100000
    samples  %        image name               app name                 symbol name
    107138   20.1679  no-vmlinux               no-vmlinux               /no-vmlinux
    51905     9.7707  vmlinux                  vmlinux                  intel_idle
    32789     6.1723  ext4                     ext4                     /ext4
    32755     6.1659  vmlinux                  vmlinux                  port_inb
    21769     4.0978  vmlinux                  vmlinux                  copy_user_generic_string
    16469     3.1002  vmlinux                  vmlinux                  __clear_user
    14667     2.7609  jbd2                     jbd2                     /jbd2
    13871     2.6111  vmlinux                  vmlinux                  native_sched_clock
    8691      1.6360  vmlinux                  vmlinux                  get_page_from_freelist
    5864      1.1039  vmlinux                  vmlinux                  find_busiest_group
    5701      1.0732  vmlinux                  vmlinux                  mark_page_accessed
    2894      0.5448  vmlinux                  vmlinux                  __schedule
    2888      0.5436  vmlinux                  vmlinux                  __list_del_entry
    2817      0.5303  vmlinux                  vmlinux                  menu_select
    2772      0.5218  vmlinux                  vmlinux                  kmem_cache_alloc
    2652      0.4992  vmlinux                  vmlinux                  __alloc_pages_slowpath
    2478      0.4665  vmlinux                  vmlinux                  __wake_up_bit
    2438      0.4589  vmlinux                  vmlinux                  __hrtimer_start_range_ns
    2428      0.4571  vmlinux                  vmlinux                  kmem_cache_free
    2262      0.4258  vmlinux                  vmlinux                  __list_add


    下同编写简单代码消耗CPU,通过opannotate来了解CPU的占用情况,代码如下:

    #vi test.c
    int main()
    {
            int a = 0, b = 0;
            for (; a < 1000000000; a++  )
                    {
                            b++;
                    }
    }
    #gcc -o oprofile_test test.c


    执行该代码

    #./oprofile_test &


    将检测数据写入文件

    #opcontrol --dump


    查看该代码的CPU检测数据

    [root@compute ~]# opreport -l oprofile_test
    Using /var/lib/oprofile/samples/ for samples directory.
    CPU: Intel Westmere microarchitecture, speed 2393.96 MHz (estimated)
    Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (No unit mask) count 100000
    samples  %        symbol name
    492407   100.000  main
    


    通过opannotate查看代码层CPU的占用情况

    [root@compute ~]# opannotate -s oprofile_test 
    Using /var/lib/oprofile/samples/ for session-dir
    /* 
     * Command line: opannotate -s oprofile_test 
     * 
     * Interpretation of command line:
     * Output annotated source file with samples
     * Output all files
     * 
     * CPU: Intel Westmere microarchitecture, speed 2393.96 MHz (estimated)
     * Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (No unit mask) count 100000
     */
    /* 
     * Total samples for file : "/root/test.c"
     * 
     * 492407 100.000
     */
    
    
                   :int main()
                   :{ /* main total: 492407 100.000 */
                   :        int a = 0, b = 0;
    343285 69.7157 :        for (; a < 1000000000; a++  )
                   :                {
    149122 30.2843 :                        b++;
                   :                }
                   :}
  • 相关阅读:
    光遇————墓土(补充)蜡烛收集
    光遇————雨林
    每日光遇日记
    光遇————墓土
    光遇————云野超级不详细的蜡烛收集
    光遇————晨岛超级详细的蜡烛收集
    高精度
    HDU 1002: A + B Problem II (大数加法)
    HDU 1018:Big Number (位数递推公式)
    D2. Remove the Substring (hard version) (KMP-next数组 ) ( Codeforces Round #579 (Div. 3) )
  • 原文地址:https://www.cnblogs.com/xuanbjut/p/11884251.html
Copyright © 2011-2022 走看看