All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Ingo Molnar <mingo@kernel.org>
Cc: linux-kernel@vger.kernel.org, Linux Weekly News <lwn@lwn.net>,
	Jiri Olsa <jolsa@kernel.org>, Andi Kleen <andi@firstfloor.org>,
	David Ahern <dsahern@gmail.com>, Don Zickus <dzickus@redhat.com>,
	Joe Mario <jmario@redhat.com>, Namhyung Kim <namhyung@kernel.org>,
	Peter Zijlstra <a.p.zijlstra@chello.nl>,
	Arnaldo Carvalho de Melo <acme@redhat.com>
Subject: [PATCH 41/52] perf c2c report: Allow to report callchains
Date: Thu, 20 Oct 2016 12:04:25 -0300	[thread overview]
Message-ID: <1476975876-2522-42-git-send-email-acme@kernel.org> (raw)
In-Reply-To: <1476975876-2522-1-git-send-email-acme@kernel.org>

From: Jiri Olsa <jolsa@kernel.org>

Add --call-graph option to properly setup callchain code. Adding default
settings to display callchains whenever they are stored in the
perf.data.

Committer Notes:

Testing it:

  [root@jouet ~]# perf c2c record -a -g sleep 5
  [ perf record: Woken up 1 times to write data ]
  [ perf record: Captured and wrote 5.331 MB perf.data (4263 samples) ]
  [root@jouet ~]# perf evlist -v
  cpu/mem-loads,ldlat=30/P: type: 4, size: 112, config: 0x1cd, { sample_period, sample_freq }: 4000, sample_type: IP|TID|TIME|ADDR|CALLCHAIN|ID|CPU|PERIOD|DATA_SRC|WEIGHT, read_format: ID, disabled: 1, inherit: 1, mmap: 1, comm: 1, freq: 1, task: 1, precise_ip: 3, mmap_data: 1, sample_id_all: 1, mmap2: 1, comm_exec: 1, { bp_addr, config1 }: 0x1f
  cpu/mem-stores/P: type: 4, size: 112, config: 0x82d0, { sample_period, sample_freq }: 4000, sample_type: IP|TID|TIME|ADDR|CALLCHAIN|ID|CPU|PERIOD|DATA_SRC|WEIGHT, read_format: ID, disabled: 1, inherit: 1, freq: 1, precise_ip: 3, sample_id_all: 1
  [root@jouet ~]# perf c2c report --stats
  =================================================
              Trace Event Information
  =================================================
    Total records                     :       4263
    Locked Load/Store Operations      :        220
    Load Operations                   :       2130
    Loads - uncacheable               :          1
    Loads - IO                        :          7
    Loads - Miss                      :         86
    Loads - no mapping                :          5
    Load Fill Buffer Hit              :        609
    Load L1D hit                      :        612
  =================================================
              Trace Event Information
  =================================================
    Total records                     :       4263
    Locked Load/Store Operations      :        220
    Load Operations                   :       2130
    Loads - uncacheable               :          1
    Loads - IO                        :          7
    Loads - Miss                      :         86
    Loads - no mapping                :          5
    Load Fill Buffer Hit              :        609
    Load L1D hit                      :        612
    Load L2D hit                      :         27
    Load LLC hit                      :        607
    Load Local HITM                   :         15
    Load Remote HITM                  :          0
    Load Remote HIT                   :          0
    Load Local DRAM                   :        176
    Load Remote DRAM                  :          0
    Load MESI State Exclusive         :        176
    Load MESI State Shared            :          0
    Load LLC Misses                   :        176
    LLC Misses to Local DRAM          :      100.0%
    LLC Misses to Remote DRAM         :        0.0%
    LLC Misses to Remote cache (HIT)  :        0.0%
    LLC Misses to Remote cache (HITM) :        0.0%
    Store Operations                  :       2133
    Store - uncacheable               :          0
    Store - no mapping                :          1
    Store L1D Hit                     :       1967
    Store L1D Miss                    :        165
    No Page Map Rejects               :        145
    Unable to parse data source       :          0

  =================================================
      Global Shared Cache Line Event Information
  =================================================
    Total Shared Cache Lines          :         15
    Load HITs on shared lines         :         26
    Fill Buffer Hits on shared lines  :          7
    L1D hits on shared lines          :          3
    L2D hits on shared lines          :          0
    LLC hits on shared lines          :         16
    Locked Access on shared lines     :          2
    Store HITs on shared lines        :          8
    Store L1D hits on shared lines    :          7
    Total Merged records              :         23

  =================================================
                   c2c details
  =================================================
    Events                            : cpu/mem-loads,ldlat=30/P
                                      : cpu/mem-stores/P
  [root@jouet ~]#

  [root@jouet ~]# perf c2c report
Shared Data Cache Line Table (2378 entries)
                        Total           --- LLC Load Hitm --  -- Store Reference -  - Load Dram -   LLC      Total  - Core Load Hit -
           Cacheline  records    %hitm  Total   Lcl      Rmt  Total  L1Hit  L1Miss  Lcl  Rmt        Ld Miss  Loads   FB       L1   L2
- 0xffff880024380c00       10    0.00%      0     0        0      6      6       0    0    0        0            4    1        3    0
   - 0.13% _raw_spin_lock_irqsave
      - 0.07% ep_poll
           sys_epoll_wait
           do_syscall_64
           return_from_SYSCALL_64
         + 0x103573
      - 0.05% ep_poll_callback
           __wake_up_common
         - __wake_up_sync_key
            - 0.02% pipe_read
                 __vfs_read
                 vfs_read
                 sys_read
                 do_syscall_64
                 return_from_SYSCALL_64
                 0xfdad
            + 0.02% sock_def_readable
      + 0.02% ep_scan_ready_list.constprop.12
   + 0.00% mutex_lock
   + 0.00% __wake_up_common
+ 0xffff880024380c40        1    0.00%      0     0        0      1      1       0    0    0        0            0    0        0    0
+ 0xffff880024380c80        1    0.00%      0     0        0      0      0       0    0    0        0            1    0        0    0
- 0xffff8800243e9f00        1    0.00%      0     0        0      1      1       0    0    0        0            0    0        0    0
     enqueue_entity
     enqueue_task_fair
     activate_task
     ttwu_do_activate
     try_to_wake_up
     wake_up_process
     hrtimer_wakeup
     __hrtimer_run_queues
     hrtimer_interrupt
     local_apic_timer_interrupt
     smp_apic_timer_interrupt
     apic_timer_interrupt
     cpuidle_enter
     call_cpuidle
help

 -------------

And when presing 'd' to see the cacheline details:

Cacheline 0xffff880024380c00
  ----- HITM -----  -- Store Refs --                                       --------- cycles -----  cpu
      Rmt      Lcl   L1 Hit  L1 Miss    Off     Pid                   Tid  rmt hitm lcl hitm load  cnt                      Symbol
-   0.00%    0.00%  100.00%    0.00%    0x0    1473  1474:Chrome_ChildIOT         0        0   41    2  [k] _raw_spin_lock_irqsave [kernel]
   - _raw_spin_lock_irqsave
      - 51.52% ep_poll
           sys_epoll_wait
           do_syscall_64
           return_from_SYSCALL_64
         - 0x103573
              47.19% 0
              4.33% 0xc30bd
      - 35.93% ep_poll_callback
           __wake_up_common
         - __wake_up_sync_key
            - 18.20% pipe_read
                 __vfs_read
                 vfs_read
                 sys_read
                 do_syscall_64
                 return_from_SYSCALL_64
                 0xfdad
            - 17.73% sock_def_readable
                 unix_stream_sendmsg
                 sock_sendmsg
                 ___sys_sendmsg
                 __sys_sendmsg
                 sys_sendmsg
                 do_syscall_64
                 return_from_SYSCALL_64
                 __GI___libc_sendmsg
                 0x12c036af1fc0
                 0x16a4050
                 0x894928ec83485354
      + 12.45% ep_scan_ready_list.constprop.12
+   0.00%    0.00%    0.00%    0.00%    0x8    1473  1474:Chrome_ChildIOT         0        0  102    1  [k] mutex_lock             [kernel]
+   0.00%    0.00%    0.00%    0.00%   0x38    1473  1473:chrome                  0        0   88    1  [k] __wake_up_common       [kernel]

help

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Don Zickus <dzickus@redhat.com>
Cc: Joe Mario <jmario@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/n/tip-inykbom2f19difvsu1e18avr@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/builtin-c2c.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 67 insertions(+)

diff --git a/tools/perf/builtin-c2c.c b/tools/perf/builtin-c2c.c
index c36d1dc668ac..d51a6c3515cb 100644
--- a/tools/perf/builtin-c2c.c
+++ b/tools/perf/builtin-c2c.c
@@ -17,6 +17,7 @@
 #include "evsel.h"
 #include <asm/bug.h>
 #include "ui/browsers/hists.h"
+#include "evlist.h"
 
 struct c2c_hists {
 	struct hists		hists;
@@ -183,6 +184,11 @@ static int process_sample_event(struct perf_tool *tool __maybe_unused,
 		return -1;
 	}
 
+	ret = sample__resolve_callchain(sample, &callchain_cursor, NULL,
+					evsel, &al, sysctl_perf_event_max_stack);
+	if (ret)
+		goto out;
+
 	mi = sample__resolve_mem(sample, &al);
 	if (mi == NULL)
 		return -ENOMEM;
@@ -2117,6 +2123,58 @@ static void ui_quirks(void)
 	}
 }
 
+#define CALLCHAIN_DEFAULT_OPT  "graph,0.5,caller,function,percent"
+
+const char callchain_help[] = "Display call graph (stack chain/backtrace):\n\n"
+				CALLCHAIN_REPORT_HELP
+				"\n\t\t\t\tDefault: " CALLCHAIN_DEFAULT_OPT;
+
+static int
+parse_callchain_opt(const struct option *opt, const char *arg, int unset)
+{
+	struct callchain_param *callchain = opt->value;
+
+	callchain->enabled = !unset;
+	/*
+	 * --no-call-graph
+	 */
+	if (unset) {
+		symbol_conf.use_callchain = false;
+		callchain->mode = CHAIN_NONE;
+		return 0;
+	}
+
+	return parse_callchain_report_opt(arg);
+}
+
+static int setup_callchain(struct perf_evlist *evlist)
+{
+	u64 sample_type = perf_evlist__combined_sample_type(evlist);
+	enum perf_call_graph_mode mode = CALLCHAIN_NONE;
+
+	if ((sample_type & PERF_SAMPLE_REGS_USER) &&
+	    (sample_type & PERF_SAMPLE_STACK_USER))
+		mode = CALLCHAIN_DWARF;
+	else if (sample_type & PERF_SAMPLE_BRANCH_STACK)
+		mode = CALLCHAIN_LBR;
+	else if (sample_type & PERF_SAMPLE_CALLCHAIN)
+		mode = CALLCHAIN_FP;
+
+	if (!callchain_param.enabled &&
+	    callchain_param.mode != CHAIN_NONE &&
+	    mode != CALLCHAIN_NONE) {
+		symbol_conf.use_callchain = true;
+		if (callchain_register_param(&callchain_param) < 0) {
+			ui__error("Can't register callchain params.\n");
+			return -EINVAL;
+		}
+	}
+
+	callchain_param.record_mode = mode;
+	callchain_param.min_percent = 0;
+	return 0;
+}
+
 static int perf_c2c__report(int argc, const char **argv)
 {
 	struct perf_session *session;
@@ -2124,6 +2182,7 @@ static int perf_c2c__report(int argc, const char **argv)
 	struct perf_data_file file = {
 		.mode = PERF_DATA_MODE_READ,
 	};
+	char callchain_default_opt[] = CALLCHAIN_DEFAULT_OPT;
 	const struct option c2c_options[] = {
 	OPT_STRING('k', "vmlinux", &symbol_conf.vmlinux_name,
 		   "file", "vmlinux pathname"),
@@ -2138,6 +2197,10 @@ static int perf_c2c__report(int argc, const char **argv)
 #endif
 	OPT_BOOLEAN(0, "stats", &c2c.stats_only,
 		    "Use the stdio interface"),
+	OPT_CALLBACK_DEFAULT('g', "call-graph", &callchain_param,
+			     "print_type,threshold[,print_limit],order,sort_key[,branch],value",
+			     callchain_help, &parse_callchain_opt,
+			     callchain_default_opt),
 	OPT_END()
 	};
 	int err = 0;
@@ -2179,6 +2242,10 @@ static int perf_c2c__report(int argc, const char **argv)
 		goto out;
 	}
 
+	err = setup_callchain(session->evlist);
+	if (err)
+		goto out_session;
+
 	if (symbol__init(&session->header.env) < 0)
 		goto out_session;
 
-- 
2.7.4

  parent reply	other threads:[~2016-10-20 15:11 UTC|newest]

Thread overview: 64+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-10-20 15:03 [GIT PULL 00/52] New Tool: perf c2c Arnaldo Carvalho de Melo
2016-10-20 15:03 ` [PATCH 01/52] perf c2c: Introduce c2c_decode_stats function Arnaldo Carvalho de Melo
2016-10-20 15:03 ` [PATCH 02/52] perf c2c: Introduce c2c_add_stats function Arnaldo Carvalho de Melo
2016-10-20 15:03 ` [PATCH 03/52] perf c2c: Add c2c command Arnaldo Carvalho de Melo
2016-10-20 15:03 ` [PATCH 04/52] perf c2c: Add record subcommand Arnaldo Carvalho de Melo
2016-10-20 15:03 ` [PATCH 05/52] perf c2c: Add report subcommand Arnaldo Carvalho de Melo
2016-10-20 15:03 ` [PATCH 06/52] perf c2c report: Add dimension support Arnaldo Carvalho de Melo
2016-10-20 15:03 ` [PATCH 07/52] perf c2c report: Add sort_entry " Arnaldo Carvalho de Melo
2016-10-20 15:03 ` [PATCH 08/52] perf c2c report: Fallback to standard dimensions Arnaldo Carvalho de Melo
2016-10-20 15:03 ` [PATCH 09/52] perf c2c report: Add sample processing Arnaldo Carvalho de Melo
2016-10-20 15:03 ` [PATCH 10/52] perf c2c report: Add cacheline hists processing Arnaldo Carvalho de Melo
2016-10-20 15:03 ` [PATCH 11/52] perf c2c report: Decode c2c_stats for hist entries Arnaldo Carvalho de Melo
2016-10-20 15:03 ` [PATCH 12/52] perf c2c report: Add header macros Arnaldo Carvalho de Melo
2016-10-20 15:03 ` [PATCH 13/52] perf c2c report: Add 'dcacheline' dimension key Arnaldo Carvalho de Melo
2016-10-20 15:03 ` [PATCH 14/52] perf c2c report: Add 'offset' " Arnaldo Carvalho de Melo
2016-10-20 15:03 ` [PATCH 15/52] perf c2c report: Add 'iaddr' " Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 16/52] perf c2c report: Add hitm related dimension keys Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 17/52] perf c2c report: Add stores " Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 18/52] perf c2c report: Add loads " Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 19/52] perf c2c report: Add llc and remote " Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 20/52] perf c2c report: Add llc load miss dimension key Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 21/52] perf c2c report: Add total record sort key Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 22/52] perf c2c report: Add total loads " Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 23/52] perf c2c report: Add hitm percent " Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 24/52] perf c2c report: Add hitm/store percent related sort keys Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 25/52] perf c2c report: Add dram " Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 26/52] perf c2c report: Add 'pid' sort key Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 27/52] perf c2c report: Add 'tid' " Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 28/52] perf c2c report: Add 'symbol' and 'dso' sort keys Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 29/52] perf c2c report: Add 'node' sort key Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 30/52] perf c2c report: Add stats related sort keys Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 31/52] perf c2c report: Add 'cpucnt' sort key Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 32/52] perf c2c report: Add src line " Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 33/52] perf c2c report: Setup number of header lines for hists Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 34/52] perf c2c report: Set final resort fields Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 35/52] perf c2c report: Add stdio output support Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 36/52] perf c2c report: Add main TUI browser Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 37/52] perf c2c report: Add TUI cacheline browser Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 38/52] perf c2c report: Add global stats stdio output Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 39/52] perf c2c report: Add shared cachelines " Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 40/52] perf c2c report: Add c2c related " Arnaldo Carvalho de Melo
2016-10-20 15:04 ` Arnaldo Carvalho de Melo [this message]
2016-10-20 15:04 ` [PATCH 42/52] perf c2c report: Limit the cachelines table entries Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 43/52] perf c2c report: Add support to choose local HITMs Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 44/52] perf c2c report: Allow to set cacheline sort fields Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 45/52] perf c2c report: Recalc width of global sort entries Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 46/52] perf c2c report: Add cacheline index entry Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 47/52] perf c2c report: Add support to manage symbol name length Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 48/52] perf c2c report: Iterate node display in browser Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 49/52] perf c2c report: Add help windows Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 50/52] perf c2c: Add man page and credits Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 51/52] perf c2c report: Add --no-source option Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 52/52] perf c2c report: Add --show-all option Arnaldo Carvalho de Melo
2016-10-20 23:02 ` [GIT PULL 00/52] New Tool: perf c2c Kim Phillips
2016-10-21  0:17   ` [PATCH] perf c2c report: Properly check data presence in rb_tree loop Jiri Olsa
2016-10-21 19:23     ` Kim Phillips
2016-10-22  8:49     ` [tip:perf/core] perf c2c report: Add main TUI browser tip-bot for Jiri Olsa
2016-10-21  0:21   ` [GIT PULL 00/52] New Tool: perf c2c Jiri Olsa
2016-10-22  8:28 ` Ingo Molnar
2016-10-23 11:05   ` Jiri Olsa
2016-10-23 23:47     ` Andi Kleen
2016-10-24  6:32       ` Jiri Olsa
2016-10-24  9:23     ` Ingo Molnar
2016-10-24  9:42       ` Jiri Olsa

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1476975876-2522-42-git-send-email-acme@kernel.org \
    --to=acme@kernel.org \
    --cc=a.p.zijlstra@chello.nl \
    --cc=acme@redhat.com \
    --cc=andi@firstfloor.org \
    --cc=dsahern@gmail.com \
    --cc=dzickus@redhat.com \
    --cc=jmario@redhat.com \
    --cc=jolsa@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lwn@lwn.net \
    --cc=mingo@kernel.org \
    --cc=namhyung@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.