技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 系统运维 --> oprofile抓不到采样数据问题和解决方法

oprofile抓不到采样数据问题和解决方法

浏览:1340次  出处信息
    最近有同学反映在某些新机器上做性能调优的时候, oprofile 有时抓不到数据,我之前也遇到这个情况,很是无语,今天特地验证了下。
# 我们的操作系统和机器配置大概是这样的:
$sudo aspersa/summary
# Aspersa System Summary Report ##############################
        Date | 2011-03-31 16:26:05 UTC (local TZ: CST +0800)
    Hostname | my031226.sqa.cm4
      Uptime | 10:00,  4 users,  load average: 0.00, 0.78, 5.29
      System | Huawei Technologies Co., Ltd.; Tecal RH2285; vV100R001 (Main Server Chassis)
 Service Tag | 2102317716N0AA000062
     Release | Red Hat Enterprise Linux Server release 5.4 (Tikanga)
      Kernel | 2.6.18-164.el5
Architecture | CPU = 64-bit, OS = 64-bit
   Threading | NPTL 2.5
    Compiler | GNU CC version 4.1.2 20080704 (Red Hat 4.1.2-44).
     SELinux | Disabled
# Processor ##################################################
  Processors | physical = 2, cores = 12, virtual = 24, hyperthreading = yes
      Speeds | 24x2400.151
      Models | 24xIntel(R) Xeon(R) CPU X5670 @ 2.93GHz
      Caches | 24x12288 KB
..

$sudo rm -f /root/.oprofile/daemonrc

$sudo opcontrol --setup --no-vmlinux
$sudo opcontrol --init
$sudo opcontrol --reset
$sudo opcontrol --start
Using 2.6+ OProfile kernel interface.
Using log file /var/lib/oprofile/samples/oprofiled.log
Daemon started.
Profiler running.

$sudo opcontrol --status
Daemon running: pid 9253
Separate options: none
vmlinux file: none
Image filter: none
Call-graph depth: 0

#这里喝杯茶,让子弹飞一会儿

$sudo opcontrol --shutdown
Stopping profiling.
Killing daemon.

$opreport
opreport error: No sample file found: try running opcontrol --dump
or specify a session containing sample files

$tree /var/lib/oprofile/samples/current/
/var/lib/oprofile/samples/current/

0 directories, 0 files

    确实是没抓到sample文件!

    经过无数次的分析和判断,再加上goolge大神的帮助,找到问题的根源了:

    

$dmesg|grep oprofile
oprofile: using NMI timer interrupt.

#如果你的CPU不被oprofile认识,或者说认识有问题,oprofile就会进入 timer interrupt模式
#表现就是

$ophelp
Using timer interrupt.

$sudo opcontrol --setup -e CPU_CLK_UNHALTED:6000:0:0:1
You cannot specify any performance counter events
because OProfile is in timer mode.

    如果你看到上面的字,对不起你肯定抓不到数据的,解决方案是这样的:

     在oprofile模块加载的时候强制使用 timer=1.

$sudo opcontrol --deinit
Daemon not running
Unloading oprofile module

$sudo modprobe oprofile timer=1    

$dmesg|grep oprofile|tail -n 1
oprofile: using timer interrupt.

    如果你看到上面的字说明你成功了。

     我们再试验下:

$sudo opcontrol --init && sudo opcontrol --reset && sudo opcontrol --start
Using 2.6+ OProfile kernel interface.
Using log file /var/lib/oprofile/samples/oprofiled.log
Daemon started.
Profiler running.

#这里可以再喝杯咖啡,让子弹飞一会儿

$sudo opcontrol --shutdown
Stopping profiling.
Killing daemon.

$opreport
CPU: CPU with timer interrupt, speed 0 MHz (estimated)
Profiling through timer interrupt
          TIMER:0|
  samples|      %|
------------------
   719496 46.1320 no-vmlinux
   432567 27.7349 ha_innodb_plugin.so.0.0.0
   293343 18.8083 libc-2.5.so
   111575  7.1539 mysqld
      959  0.0615 perl
      873  0.0560 libpthread-2.5.so
      205  0.0131 oprofiled
      188  0.0121 libmysqlclient.so.16.0.0
      181  0.0116 ld-2.5.so
      145  0.0093 bash
       23  0.0015 libproc-3.2.7.so
       16  0.0010 libnss_files-2.5.so
       16  0.0010 libperl.so
       11 7.1e-04 mysql
        9 5.8e-04 ps
        8 5.1e-04 gawk
        8 5.1e-04 grep
        5 3.2e-04 libm-2.5.so
        3 1.9e-04 libcrypto.so.0.9.8e
        3 1.9e-04 pkg-config
        2 1.3e-04 libdl-2.5.so
        2 1.3e-04 dircolors
        2 1.3e-04 sshd
        1 6.4e-05 ksh93
        1 6.4e-05 more
        1 6.4e-05 libselinux.so.1
        1 6.4e-05 du
        1 6.4e-05 sudo
        1 6.4e-05 wc
        1 6.4e-05 libnetsnmp.so.10.0.3
...

$tree current/
current/
|-- {kern}
|   `-- no-vmlinux
|       `-- {dep}
|           `-- {kern}
|               `-- no-vmlinux
|                   `-- TIMER.0.0.all.all.all
`-- {root}
    |-- bin
...
196 directories, 30 files

    收工,回家睡觉,困了! 项目要用oprofile,本来我12:00前要睡觉的,唉!

QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1