From 7faa876a18a2c03272ec2a2f49f0bbf572c7d0cd Mon Sep 17 00:00:00 2001 From: Jan Lindemann Date: Mon, 11 Dec 2017 14:03:05 +0000 Subject: [PATCH] profiler.mk: Add profiler.mk Signed-off-by: Jan Lindemann --- make/profiler.mk | 105 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 make/profiler.mk diff --git a/make/profiler.mk b/make/profiler.mk new file mode 100644 index 00000000..556379d1 --- /dev/null +++ b/make/profiler.mk @@ -0,0 +1,105 @@ +all: +clean: + +PROF_EXE_PATH ?= $(EXE_PATH) +CALLGRIND_OUT ?= callgrind.out +OPROF_OUT_DIR ?= oprofile-dir + +ifeq ($(USE_GPROF),true) + PROJECT_CPPFLAGS += -pg + PROJECT_CFLAGS += -pg + PROJECT_LDFLAGS += -pg +clean: clean.gprof +endif + +ifeq ($(USE_GCOV),true) + PROJECT_CPPFLAGS += -fprofile-arcs -ftest-coverage + PROJECT_CFLAGS += -fprofile-arcs -ftest-coverage + PROJECT_LDFLAGS += -fprofile-arcs -ftest-coverage +clean: clean.gcov +endif + +# ---- callgrind + +clean: clean.callgrind + +callgrind: run-prereq + $(RM) -f core.* + valgrind --tool=callgrind $(VALGRIND_OPTS) $(EXE_PATH) $(EXE_ARGS) +callgrind-noinst: run-prereq + $(RM) -f core.* + valgrind --tool=callgrind --callgrind-out-file=$(CALLGRIND_OUT) --instr-atstart=no $(VALGRIND_OPTS) $(EXE_PATH) $(EXE_ARGS) +$(CALLGRIND_OUT): callgrind +kcachegrind: $(CALLGRIND_OUT) + kcachegrind $< +callgrind-startinst: + ps aux | grep callgrind | grep -v "grep\|make\|callgrind_control" | awk '{print $$2}' | xargs callgrind_control --instr=on +callgrind-stopinst: + ps aux | grep callgrind | grep -v "grep\|make\|callgrind_control" | awk '{print $$2}' | xargs callgrind_control --instr=off +callgrind-dump: + ps aux | grep callgrind | grep -v "grep\|make\|callgrind_control" | awk '{print $$2}' | xargs callgrind_control --dump +clean.callgrind: + rm -f $(CALLGRIND_OUT) + +# ---- oprofile + +clean: clean.oprof + +operf: | $(OPROF_OUT_DIR) + +$(OPROF_OUT_DIR): + mkdir -p $@ +oprof-setup: + echo 0 | sudo tee /proc/sys/kernel/kptr_restrict + echo 0 | sudo tee /proc/sys/kernel/perf_event_paranoid +oprof-callgraph.txt: + opreport --session-dir $(OPROF_OUT_DIR) --callgraph > $@.tmp + mv $@.tmp $@ +oprof-view-callgraph-txt: oprof-callgraph.txt + less -S $< +oprof-callgraph.dot: oprof-callgraph.txt + cat $< | gprof2dot -f oprofile > $@.tmp + mv $@.tmp $@ +oprof-callgraph.pdf: oprof-callgraph.dot + dot -Tpdf $< -o $@.tmp + mv $@.tmp $@ +oprof-view-callgraph-pdf: oprof-callgraph.pdf + okular $< +oprof-view-callgraph-dot: oprof-callgraph.dot + xdot $< + +#operf: operf.txt +#operf.txt: +# operf --session-dir $(OPROF_OUT_DIR) $(PROF_CMD) +#operf-view-txt: operf.txt +# less -S $< +#operf-callgraph.pdf: gmon.out +# operf $(PROF_EXE_PATH) | operf2dot | dot -Tpdf -o $@.tmp +# mv $@.tmp $@ +#operf-pdf: operf-callgraph.pdf + +clean.oprof: + rm -rf $(OPROF_OUT_DIR) oprof-callgraph.txt oprof-callgraph.pdf oprof-callgraph.dot + +# ---- gcov + +clean.gcov: + rm -f *.gcda *.gcov + +# ---- gprof + +clean: clean.gprof +gprof: gprof.txt +gprof.txt: + gprof $(PROF_EXE_PATH) > $@.tmp + mv $@.tmp $@ +gprof-view-txt: gprof.txt + less -S $< +gprof-callgraph.pdf: gmon.out + gprof $(PROF_EXE_PATH) | gprof2dot | dot -Tpdf -o $@.tmp + mv $@.tmp $@ +gprof-pdf: gprof-callgraph.pdf +gprof-view-callgraph-pdf: gprof-callgraph.pdf + okular $< +clean.gprof: + rm -f gmon.out gprof.txt *.tmp gprof-callgraph.pdf