当前位置: 技术问答>linux和unix
arm11下Oprofile的使用
来源: 互联网 发布时间:2016-05-28
本文导语: 有没人在arm11下用过Oprofile? kernel:2.6.21.5 board:s3m6400 cpu:arm1176jz 问题: #opcontrol -e ###:##:#####//设置enent eval: line 1: timer: not found You cannot specify any performance counter events because OProfile is in timer mode. /dev/Oprofile/cpu_typ...
有没人在arm11下用过Oprofile?
kernel:2.6.21.5
board:s3m6400
cpu:arm1176jz
问题:
#opcontrol -e ###:##:#####//设置enent
eval: line 1: timer: not found
You cannot specify any performance counter events
because OProfile is in timer mode.
/dev/Oprofile/cpu_type :timer
我已参照maemo上的800介绍patch了Oprofile对ARM11的支持,但还是由于模式为timer interrupt,所以无法获得cpu事件,
其实也就是所有事件都无法setup.监测程序的函数调用什么的都正常.只是事件无法绑定.
有没人解决过这个问题,万分感谢.
ps:Oprofile已交叉编译,objdump,objcopy都是交叉编译的可用.kernel的Profile已打开.
kernel:2.6.21.5
board:s3m6400
cpu:arm1176jz
问题:
#opcontrol -e ###:##:#####//设置enent
eval: line 1: timer: not found
You cannot specify any performance counter events
because OProfile is in timer mode.
/dev/Oprofile/cpu_type :timer
我已参照maemo上的800介绍patch了Oprofile对ARM11的支持,但还是由于模式为timer interrupt,所以无法获得cpu事件,
其实也就是所有事件都无法setup.监测程序的函数调用什么的都正常.只是事件无法绑定.
有没人解决过这个问题,万分感谢.
ps:Oprofile已交叉编译,objdump,objcopy都是交叉编译的可用.kernel的Profile已打开.
|
oprofile 在Linux 上分两部分,一个是内核模块(oprofile.ko),一个为用户空间的守护进程(oprofiled)。前者负责访问性能计数器或者注册基于时间采样的函数(使用register_timer_hook注册之,使时钟中断处理程序最后执行profile_tick 时可以访问之),并采样置于内核的缓冲区内。后者在后台运行,负责从内核空间收集数据,写入文件。
1. kernel patch
完整之 patch 位于: http://people.openrays.org/~comcat/patch/patch-2.6.18-oprofile-comcat
主要是当计数器溢出(31位为1)时,触发IP6 中断,其处理程序的 godson2e_pmc_handler 的编写。
注意一下在用户空间设置的样本计数,在内核空间是怎么处理的。例如使用
opcontrol --setup --event=CYCLES:1000 设置样本计数为1000,
则计数器被初始化的值为0x8000 0000 - 1000
即: CYCLES 事件发生 1000 次后,计数溢出,触发处理程序 godson2e_pmc_handler 添加一个样本 add_sample。
diff -uNr src/arch/mips/oprofile/op_model_godson2e.c pmc/arch/mips/oprofile/op_model_godson2e.c
--- src/arch/mips/oprofile/op_model_godson2e.c 1970-01-01 08:00:00.000000000 +0800
+++ pmc/arch/mips/oprofile/op_model_godson2e.c 2007-05-25 14:59:54.000000000 +0800
@@ -0,0 +1,171 @@
+/*
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License. See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ * Copyright (C) 2007 by comcat
+ */
+
+#include
+#include
+#include
+#include
+
+#include "op_impl.h"
+
+#define GODSON2E_PERFCTL_EXL (1UL
1. kernel patch
完整之 patch 位于: http://people.openrays.org/~comcat/patch/patch-2.6.18-oprofile-comcat
主要是当计数器溢出(31位为1)时,触发IP6 中断,其处理程序的 godson2e_pmc_handler 的编写。
注意一下在用户空间设置的样本计数,在内核空间是怎么处理的。例如使用
opcontrol --setup --event=CYCLES:1000 设置样本计数为1000,
则计数器被初始化的值为0x8000 0000 - 1000
即: CYCLES 事件发生 1000 次后,计数溢出,触发处理程序 godson2e_pmc_handler 添加一个样本 add_sample。
diff -uNr src/arch/mips/oprofile/op_model_godson2e.c pmc/arch/mips/oprofile/op_model_godson2e.c
--- src/arch/mips/oprofile/op_model_godson2e.c 1970-01-01 08:00:00.000000000 +0800
+++ pmc/arch/mips/oprofile/op_model_godson2e.c 2007-05-25 14:59:54.000000000 +0800
@@ -0,0 +1,171 @@
+/*
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License. See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ * Copyright (C) 2007 by comcat
+ */
+
+#include
+#include
+#include
+#include
+
+#include "op_impl.h"
+
+#define GODSON2E_PERFCTL_EXL (1UL