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

来源:互联网 发布:js关闭当前页面并跳转 编辑:程序博客网 时间:2024/04/29 10:41

http://blog.yufeng.info/archives/1283#more-1283

原创文章,转载请注明: 转载自系统技术非业余研究

本文链接地址: oprofile抓不到采样数据问题和解决方法

最近有同学反映在某些新机器上做性能调优的时候, oprofile 有时抓不到数据,我之前也遇到这个情况,很是无语,今天特地验证了下。

view source
print?
# 我们的操作系统和机器配置大概是这样的:
$sudoaspersa/summary
# Aspersa System Summary Report ##############################
        Date | 2011-03-31 16:26:05 UTC (localTZ: CST +0800)
    Hostname | my031226.sqa.cm4
      Uptime | 10:00,  4users,  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
..
  
$sudorm -f /root/.oprofile/daemonrc
  
$sudoopcontrol --setup --no-vmlinux
$sudoopcontrol --init
$sudoopcontrol --reset
$sudoopcontrol --start
Using 2.6+ OProfile kernel interface.
Using log file/var/lib/oprofile/samples/oprofiled.log
Daemon started.
Profiler running.
  
$sudoopcontrol --status
Daemon running: pid 9253
Separate options: none
vmlinux file: none
Image filter: none
Call-graph depth: 0
  
#这里喝杯茶,让子弹飞一会儿
  
$sudoopcontrol --shutdown
Stopping profiling.
Killing daemon.
  
$opreport 
opreport error: No sample filefound: 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大神的帮助,找到问题的根源了:

view source
print?
$dmesg|grepoprofile
oprofile: using NMI timer interrupt.
  
#如果你的CPU不被oprofile认识,或者说认识有问题,oprofile就会进入 timer interrupt模式
#表现就是
  
$ophelp
Using timer interrupt.
  
$sudoopcontrol --setup -e CPU_CLK_UNHALTED:6000:0:0:1
You cannot specify any performance counter events
because OProfile is intimer mode.

如果你看到上面的字,对不起你肯定抓不到数据的,解决方案是这样的:
在oprofile模块加载的时候强制使用 timer=1.

view source
print?
$sudoopcontrol --deinit
Daemon not running
Unloading oprofile module
  
$sudomodprobe oprofile timer=1    
  
$dmesg|grepoprofile|tail-n 1
oprofile: using timer interrupt.

如果你看到上面的字说明你成功了。
我们再试验下:

view source
print?
$sudoopcontrol --init && sudoopcontrol --reset && sudoopcontrol --start
Using 2.6+ OProfile kernel interface.
Using log file/var/lib/oprofile/samples/oprofiled.log
Daemon started.
Profiler running.
  
#这里可以再喝杯咖啡,让子弹飞一会儿
  
$sudoopcontrol --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.0093bash
       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-04ps
        8 5.1e-04gawk
        8 5.1e-04grep
        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-04dircolors
        2 1.3e-04 sshd
        1 6.4e-05 ksh93
        1 6.4e-05more
        1 6.4e-05 libselinux.so.1
        1 6.4e-05du
        1 6.4e-05sudo
        1 6.4e-05wc
        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前要睡觉的,唉!

玩得开心!

Post Footer automatically generated by wp-posturl plugin for wordpress.


0 0
原创粉丝点击