当我们使用oprofile时(不论是虚拟机还是实体机里)
若一:报:Cannot find event CPU_CLK_UNHALTED
若二:报:You cannot specify any performance counter events because OProfile is in timer mode.
我们可以使用下面的方法进行处理。
# 我们的操作系统和机器配置大概是这样的: $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 .. #profile 的基本步骤 $sudo rm -f /root/.oprofile/daemonrc #删除某个文件 $sudo opcontrol --setup --no-vmlinux #设置operfile配置 $sudo opcontrol --init #初始化 $sudo opcontrol --reset #重新设置 $sudo opcontrol --start #opcontrol 开始工作 Using 2.6+ OProfile kernel interface. Using log file /var/lib/oprofile/samples/oprofiled.log Daemon started. #守护进程开启了 Profiler running. #profiler正在跑 $sudo opcontrol --status #profile的当前状态 Daemon running: pid 9253 Separate options: none vmlinux file: none Image filter: none Call-graph depth: 0 #这里喝杯茶,让子弹飞一会儿 $sudo opcontrol --shutdown #结束profile 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文件!
#出现问题描述 没有抓到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
。。。。。
浙公网安备 33010602011771号