pycod
很多人在说我们讲故事吹NB 但是我们吹过的NB ,正在一一变为现实 !!!!!

 

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++;
               :                }
               :}

 

posted on 2019-11-18 18:47  pycod  阅读(284)  评论(0编辑  收藏  举报