All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jiebin Sun <jiebin.sun@intel.com>
To: namhyung@kernel.org
Cc: acme@kernel.org, mingo@redhat.com, peterz@infradead.org,
	adrian.hunter@intel.com, alexander.shishkin@linux.intel.com,
	irogers@google.com, james.clark@linaro.org, jolsa@kernel.org,
	mark.rutland@arm.com, dapeng1.mi@linux.intel.com,
	thomas.falcon@intel.com, tianyou.li@intel.com,
	wangyang.guo@intel.com, linux-perf-users@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: [PATCH v7 2/9] perf c2c: add function view browser skeleton
Date: Thu,  6 Aug 2026 15:42:10 +0800	[thread overview]
Message-ID: <20260806074217.2846596-3-jiebin.sun@intel.com> (raw)
In-Reply-To: <20260806074217.2846596-1-jiebin.sun@intel.com>

Add the skeleton of the c2c function view: a new TUI browser in
tools/perf/ui/browsers/c2c-function.c reached by pressing TAB in the
cacheline view. This commit wires up the entry point (a stub that will be
filled in by later patches), declares perf_c2c__browse_function_view() in
c2c.h, and adds the TAB key handler and help text to the cacheline browser.

Link c2c-function.o directly into perf rather than libperf-ui.a. The
browser is part of the c2c command and later patches make it depend on
state and callbacks provided by builtin-c2c.o. libperf-ui.a is also linked
into python/perf.so under --whole-archive, without the builtin command
objects, which would leave those command-private symbols unresolved.
Build the browser only with CONFIG_SLANG, matching its TUI-only entry
point.

Signed-off-by: Jiebin Sun <jiebin.sun@intel.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Dapeng Mi <dapeng1.mi@linux.intel.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: James Clark <james.clark@linaro.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Falcon <thomas.falcon@intel.com>
Reviewed-by: Tianyou Li <tianyou.li@intel.com>
Reviewed-by: Wangyang Guo <wangyang.guo@intel.com>
---
 tools/perf/Build                      |  1 +
 tools/perf/builtin-c2c.c              |  4 ++
 tools/perf/c2c.h                      | 12 +++--
 tools/perf/ui/browsers/c2c-function.c | 77 +++++++++++++++++++++++++++
 4 files changed, 91 insertions(+), 3 deletions(-)
 create mode 100644 tools/perf/ui/browsers/c2c-function.c

diff --git a/tools/perf/Build b/tools/perf/Build
index e18c80a5c1bc..21b509f3a23d 100644
--- a/tools/perf/Build
+++ b/tools/perf/Build
@@ -21,6 +21,7 @@ perf-y += builtin-mem.o
 perf-y += builtin-data.o
 perf-y += builtin-version.o
 perf-y += builtin-c2c.o
+perf-$(CONFIG_SLANG) += ui/browsers/c2c-function.o
 perf-y += builtin-daemon.o
 
 perf-$(CONFIG_LIBTRACEEVENT) += builtin-kmem.o
diff --git a/tools/perf/builtin-c2c.c b/tools/perf/builtin-c2c.c
index 4a3cf8c906f9..12b18208d3dd 100644
--- a/tools/perf/builtin-c2c.c
+++ b/tools/perf/builtin-c2c.c
@@ -2737,6 +2737,7 @@ static int perf_c2c__hists_browse(struct hists *hists)
 	static const char help[] =
 	" d             Display cacheline details \n"
 	" ENTER         Toggle callchains (if present) \n"
+	" TAB           Switch to function view\n"
 	" q             Quit \n";
 
 	browser = perf_c2c_browser__new(hists);
@@ -2758,6 +2759,9 @@ static int perf_c2c__hists_browse(struct hists *hists)
 		case 'd':
 			perf_c2c__browse_cacheline(browser->he_selection);
 			break;
+		case '\t':
+			perf_c2c__browse_function_view();
+			break;
 		case '?':
 			ui_browser__help_window(&browser->b, help);
 			break;
diff --git a/tools/perf/c2c.h b/tools/perf/c2c.h
index aac01d4f6760..704b452aa390 100644
--- a/tools/perf/c2c.h
+++ b/tools/perf/c2c.h
@@ -132,18 +132,24 @@ void c2c_fmt_free(struct perf_hpp_fmt *fmt);
 bool c2c_fmt_equal(struct perf_hpp_fmt *a, struct perf_hpp_fmt *b);
 
 /*
- * The TUI browser is only built with SLANG support. The stub below keeps the
- * header self-contained for NO_SLANG builds, as util/hist.h does for its own
- * TUI entry points.
+ * The TUI browsers are only built with SLANG support. The stubs below keep
+ * the header self-contained for NO_SLANG builds, as util/hist.h does for its
+ * own TUI entry points.
  */
 #ifdef HAVE_SLANG_SUPPORT
 int perf_c2c__browse_cacheline(struct hist_entry *he);
+int perf_c2c__browse_function_view(void);
 #else
 static inline int
 perf_c2c__browse_cacheline(struct hist_entry *he __maybe_unused)
 {
 	return 0;
 }
+
+static inline int perf_c2c__browse_function_view(void)
+{
+	return 0;
+}
 #endif
 
 #endif /* _PERF_C2C_H_ */
diff --git a/tools/perf/ui/browsers/c2c-function.c b/tools/perf/ui/browsers/c2c-function.c
new file mode 100644
index 000000000000..c0fd7799e4f8
--- /dev/null
+++ b/tools/perf/ui/browsers/c2c-function.c
@@ -0,0 +1,77 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * C2C Function Browser - function-level cacheline sharing analysis
+ *
+ * Displays a 3-level hierarchy showing which functions share cachelines:
+ *   Level 1: Read-side functions sorted by Cycles % (estimated load cycles)
+ *   Level 2: Functions sampled writing the shared lines read by level 1
+ *   Level 3: The specific cachelines where the two functions contend
+ *
+ * Builds the hierarchy from the existing cacheline histograms
+ * (c2c_hist_entry->hists), reusing the shared c2c data structures.
+ */
+
+#include <errno.h>
+#include <inttypes.h>
+#include <stdlib.h>
+#include <string.h>
+#include <tools/libc_compat.h> /* reallocarray */
+#include <asm/bug.h>
+#include <linux/list.h>
+#include <linux/rbtree.h>
+#include <linux/zalloc.h>
+
+#include "../browser.h"
+#include "../keysyms.h"
+#include "../libslang.h"
+#include "../ui.h"
+#include "../../util/addr_location.h"
+#include "../../util/cacheline.h"
+#include "../../util/debug.h"
+#include "../../util/hist.h"
+#include "../../util/map.h"
+#include "../../util/mem-events.h"
+#include "../../util/mem-info.h"
+#include "../../util/sort.h"
+#include "../../util/symbol.h"
+#include "../../util/thread.h"
+#include "../../c2c.h"
+#include "hists.h"
+
+struct perf_c2c_ext {
+	struct c2c_hists	function_hists;
+	/* Total estimated cycles across all level-1 entries. */
+	u64			total_cycles;
+};
+
+static struct perf_c2c_ext c2c_ext __maybe_unused;
+
+struct c2c_function_browser {
+	struct hist_browser	hb;
+};
+
+static inline __maybe_unused u64 c2c_hitm_count(const struct c2c_stats *stats)
+{
+	return stats->tot_hitm;
+}
+
+static inline __maybe_unused bool symbol_name_equal(struct symbol *a, struct symbol *b)
+{
+	/* Two unknown symbols compare equal, matching cmp_null() in util/sort.c. */
+	if (!a || !b)
+		return a == b;
+	return arch__compare_symbol_names(a->name, b->name) == 0;
+}
+
+static inline __maybe_unused u64 hist_entry__iaddr(struct hist_entry *he)
+{
+	if (he->mem_info)
+		return mem_info__iaddr(he->mem_info)->addr;
+	return he->ip;
+}
+
+int perf_c2c__browse_function_view(void)
+{
+	ui__warning("C2C function view is not implemented yet.\n");
+	return 0;
+}
-- 
2.52.0


  parent reply	other threads:[~2026-08-06  7:35 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-06  7:42 [PATCH v7 0/9] perf c2c: add a function view Jiebin Sun
2026-08-06  7:42 ` [PATCH v7 1/9] perf c2c: extract shared data structures into c2c.h Jiebin Sun
2026-08-06  7:42 ` Jiebin Sun [this message]
2026-08-07  6:13   ` [PATCH v7 2/9] perf c2c: add function view browser skeleton Namhyung Kim
2026-08-10  5:34     ` Jiebin Sun
2026-08-06  7:42 ` [PATCH v7 3/9] perf c2c: add column rendering for function view Jiebin Sun
2026-08-06  7:47   ` sashiko-bot
2026-08-06  7:42 ` [PATCH v7 4/9] perf c2c: add HPP list parsing for function view columns Jiebin Sun
2026-08-06  7:42 ` [PATCH v7 5/9] perf c2c: add function view stats merge and memory management Jiebin Sun
2026-08-06  7:42 ` [PATCH v7 6/9] perf c2c: add function view hierarchy entry creation Jiebin Sun
2026-08-06  7:54   ` sashiko-bot
2026-08-06  7:42 ` [PATCH v7 7/9] perf c2c: build and finalize the function view hierarchy Jiebin Sun
2026-08-06  7:42 ` [PATCH v7 8/9] perf c2c: add function view browser UI and cacheline detail Jiebin Sun
2026-08-06  7:42 ` [PATCH v7 9/9] perf c2c: document function view in perf-c2c man page Jiebin Sun

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=20260806074217.2846596-3-jiebin.sun@intel.com \
    --to=jiebin.sun@intel.com \
    --cc=acme@kernel.org \
    --cc=adrian.hunter@intel.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=dapeng1.mi@linux.intel.com \
    --cc=irogers@google.com \
    --cc=james.clark@linaro.org \
    --cc=jolsa@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=mingo@redhat.com \
    --cc=namhyung@kernel.org \
    --cc=peterz@infradead.org \
    --cc=thomas.falcon@intel.com \
    --cc=tianyou.li@intel.com \
    --cc=wangyang.guo@intel.com \
    /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.