oprofile:
内核需要打开
CONFIG_PERF_EVENTS=y
CONFIG_PERF_COUNTERS=y
CONFIG_HW_PERF_EVENTS=y
重新编译内核。
重新编译你的程序。
操作步骤:
- 加载内核模块: insmod /lib/modules/3.0.8/oprofile.ko timer=1
(使用定时中断方式, 因为内核中 mach_hi3520d 未初始化pmu) - opcontrol --init
- opcontrol --setup --no-vmlinux
- opcontrol --start
- 运行测试程序足够长时间
- opcontrol --shutdown
- 运行opreport,打印出报告
采样的时间精度是怎样的?
oprofile完。
DMALLOC:
+#ifdef DMALLOC
+#define DMALLOC_SETUP "debug=log-stats,log-non-free,log-bad-space,\
+log-elapsed-time,check-fence,check-heap,check-blank,check-funcs,\
+realloc-copy,free-blank,error-abort,alloc-blank,catch-null,\
+inter=100,log=/tmp/myprog.log"
+
+ dmalloc_debug_setup(DMALLOC_SETUP);
+
+ unsigned long mark;
+ mark = dmalloc_mark();
+ dmalloc_message("%s-%d: dmalloc_mark\n", __FUNCTION__, __LINE__);
+#endif
+
SLOG(SLOG_SYSLOG, "My program start up - OK.\n");
/* code to test */
xxx_func(arg);
+#ifdef DMALLOC
+ /*
+ * log unfreed pointers that have been added to
+ * the heap since mark
+ */
+ dmalloc_log_changed(mark,
+ 1 /* log unfreed pointers */,
+ 0 /* do not log freed pointers */,
+ 1 /* log each pnt otherwise summary */);
+ dmalloc_message("%s-%d: dmalloc_log_changed\n", __FUNCTION__, __LINE__);
+
+ dmalloc_shutdown();
+#endif