mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Namhyung Kim <namhyung@gmail.com>
To: Don Zickus <dzickus@redhat.com>
Cc: acme@ghostprotocols.net, LKML <linux-kernel@vger.kernel.org>,
	jolsa@redhat.com, jmario@redhat.com, fowles@inreach.com,
	peterz@infradead.org, eranian@google.com, andi.kleen@intel.com
Subject: Re: [PATCH 09/15 V3] perf, c2c: Sort based on hottest cache line
Date: Tue, 08 Apr 2014 17:23:41 +0900	[thread overview]
Message-ID: <877g70w7oy.fsf@sejong.aot.lge.com> (raw)
In-Reply-To: <1395689826-215033-10-git-send-email-dzickus@redhat.com> (Don Zickus's message of "Mon, 24 Mar 2014 15:37:00 -0400")

On Mon, 24 Mar 2014 15:37:00 -0400, Don Zickus wrote:
> Now that we have all the events sort on a unique address, we can walk
> the rbtree sequential and count up all the HITMs for each cacheline
> fairly easily.
>
> Once we encounter a new event on a different cacheline, process the previous
> cacheline.  That includes determining if any HITMs were present on that
> cacheline and if so, add it to another rbtree sorted on the number of HITMs.
>
> This second rbtree sorted on number of HITMs will be the interesting data
> we want to report and will be displayed in a follow up patch.
>
> For now, organize the data properly.

just a few minor nitpicks below..


> +static int c2c_hitm__add_to_list(struct rb_root *root, struct c2c_hit *h)

Why does it have 'list' in the name while it's not a list?  Maybe just
using c2c_hit__add_entry() ?


> +{
> +	struct rb_node **p;
> +	struct rb_node *parent = NULL;
> +	struct c2c_hit *he;
> +	int64_t cmp;
> +	u64 l_hitms, r_hitms;
> +
> +	p = &root->rb_node;
> +
> +	while (*p != NULL) {
> +		parent = *p;
> +		he = rb_entry(parent, struct c2c_hit, rb_node);
> +
> +		/* sort on remote hitms first */
> +		l_hitms = he->stats.t.rmt_hitm;
> +		r_hitms = h->stats.t.rmt_hitm;
> +		cmp = r_hitms - l_hitms;
> +
> +		if (!cmp) {
> +			/* sort on local hitms */
> +			l_hitms = he->stats.t.lcl_hitm;
> +			r_hitms = h->stats.t.lcl_hitm;
> +			cmp = r_hitms - l_hitms;
> +		}
> +
> +		if (cmp > 0)
> +			p = &(*p)->rb_left;
> +		else
> +			p = &(*p)->rb_right;
> +	}
> +
> +	rb_link_node(&h->rb_node, parent, p);
> +	rb_insert_color(&h->rb_node, root);
> +
> +	return 0;
> +}


[SNIP]
> +static void c2c_hit__update_strings(struct c2c_hit *h,
> +				    struct hist_entry *n)

This one also has nothing with any string IMHO.


> +{
> +	if (h->pid != n->thread->pid_)
> +		h->pid = -1;
> +
> +	if (h->tid != n->thread->tid)
> +		h->tid = -1;
> +
> +	/* use original addresses here, not adjusted al_addr */
> +	if (h->iaddr != n->mem_info->iaddr.addr)
> +		h->iaddr = -1;
> +
> +	if (CLADRS(h->daddr) != CLADRS(n->mem_info->daddr.addr))
> +		h->daddr = -1;
> +
> +	CPU_SET(n->cpu, &h->stats.cpuset);
> +}


[SNIP]
> +static void c2c_analyze_hitms(struct perf_c2c *c2c)
> +{
> +
> +	struct rb_node *next = rb_first(c2c->hists.entries_in);
> +	struct hist_entry *he;
> +	struct c2c_hit *h = NULL;
> +	struct c2c_stats hitm_stats;
> +	struct rb_root hitm_tree = RB_ROOT;
> +	int shared_clines = 0;

It seems the shared_clines is set but not used in this patch.  Maybe
it'd better moving it to a patch which use it actually.

Thanks,
Namhyung


> +	u64 cl = 0;
> +
> +	memset(&hitm_stats, 0, sizeof(struct c2c_stats));
> +
> +	/* find HITMs */
> +	while (next) {
> +		he = rb_entry(next, struct hist_entry, rb_node_in);
> +		next = rb_next(&he->rb_node_in);
> +
> +		cl = he->mem_info->daddr.al_addr;
> +
> +		/* switch cache line objects */
> +		/* 'color' forces a boundary change based on the original sort */
> +		if (!h || !he->color || (CLADRS(cl) != h->cacheline)) {
> +			if (h && HAS_HITMS(h)) {
> +				c2c_hit__update_stats(&hitm_stats, &h->stats);
> +
> +				/* sort based on hottest cacheline */
> +				c2c_hitm__add_to_list(&hitm_tree, h);
> +				shared_clines++;
> +			} else {
> +				/* stores-only are un-interesting */
> +				free(h);
> +			}
> +			h = c2c_hit__new(CLADRS(cl), he);
> +			if (!h)
> +				goto cleanup;
> +		}
> +
> +
> +		c2c_decode_stats(&h->stats, he);
> +
> +		/* filter out non-hitms as un-interesting noise */
> +		if (valid_hitm_or_store(&he->mem_info->data_src)) {
> +			/* save the entry for later processing */
> +			list_add_tail(&he->pairs.node, &h->list);
> +
> +			c2c_hit__update_strings(h, he);
> +		}
> +	}
> +
> +	/* last chunk */
> +	if (h && HAS_HITMS(h)) {
> +		c2c_hit__update_stats(&hitm_stats, &h->stats);
> +		c2c_hitm__add_to_list(&hitm_tree, h);
> +		shared_clines++;
> +	} else
> +		free(h);
> +
> +cleanup:
> +	next = rb_first(&hitm_tree);
> +	while (next) {
> +		h = rb_entry(next, struct c2c_hit, rb_node);
> +		next = rb_next(&h->rb_node);
> +		rb_erase(&h->rb_node, &hitm_tree);
> +
> +		free(h);
> +	}
> +	return;
> +}

  reply	other threads:[~2014-04-08  8:23 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-03-24 19:36 [PATCH 00/15 V3] perf, c2c: Add new tool to analyze cacheline contention on NUMA systems Don Zickus
2014-03-24 19:36 ` [PATCH 01/15 V3] perf: Fix stddev calculation Don Zickus
2014-03-24 19:36 ` [PATCH 02/15 V3] perf, callchain: Add generic callchain print handler for stdio Don Zickus
2014-03-24 19:36 ` [PATCH 03/15 V3] perf c2c: Shared data analyser Don Zickus
2014-04-08  6:59   ` Namhyung Kim
2014-04-08 14:22     ` Don Zickus
2014-04-09  0:58       ` Namhyung Kim
2014-04-09  1:29         ` Andi Kleen
2014-04-08 14:23     ` Don Zickus
2014-03-24 19:36 ` [PATCH 04/15 V3] perf c2c: Dump raw records, decode data_src bits Don Zickus
2014-04-08  7:09   ` Namhyung Kim
2014-03-24 19:36 ` [PATCH 05/15 V3] perf, c2c: Rework setup code to prepare for features Don Zickus
2014-03-29 17:10   ` Jiri Olsa
2014-04-01  2:52     ` Don Zickus
2014-04-08  7:41     ` Namhyung Kim
2014-04-08 14:11       ` Don Zickus
2014-04-09  1:12         ` Namhyung Kim
2014-04-09  1:36           ` Don Zickus
2014-04-11 14:57             ` Jiri Olsa
2014-04-08  7:18   ` Namhyung Kim
2014-03-24 19:36 ` [PATCH 06/15 V3] perf, c2c: Add in new options to configure latency and stores Don Zickus
2014-03-29 17:11   ` Jiri Olsa
2014-04-01  2:55     ` Don Zickus
2014-04-06 13:14       ` Jiri Olsa
2014-04-07 18:16         ` Don Zickus
2014-04-09  0:17           ` Namhyung Kim
2014-04-08  7:37         ` Namhyung Kim
2014-04-08  7:31   ` Namhyung Kim
2014-03-24 19:36 ` [PATCH 07/15 V3] perf, c2c: Add in sort on physid Don Zickus
2014-04-08  7:56   ` Namhyung Kim
2014-04-08 14:17     ` Don Zickus
2014-04-09  1:30       ` Namhyung Kim
2014-04-09  1:56         ` Don Zickus
2014-03-24 19:36 ` [PATCH 08/15 V3] perf, c2c: Add stats to track data source bits and cpu to node maps Don Zickus
2014-04-08  8:05   ` Namhyung Kim
2014-03-24 19:37 ` [PATCH 09/15 V3] perf, c2c: Sort based on hottest cache line Don Zickus
2014-04-08  8:23   ` Namhyung Kim [this message]
2014-03-24 19:37 ` [PATCH 10/15 V3] perf, c2c: Display cacheline HITM analysis to stdout Don Zickus
2014-04-08  8:26   ` Namhyung Kim
2014-04-08 23:46   ` Namhyung Kim
2014-03-24 19:37 ` [PATCH 11/15 V3] perf, c2c: Add callchain support Don Zickus
2014-03-24 19:37 ` [PATCH 12/15 V3] perf, c2c: Output summary stats Don Zickus
2014-03-24 19:37 ` [PATCH 13/15 V3] perf, c2c: Dump rbtree for debugging Don Zickus
2014-03-24 19:37 ` [PATCH 14/15 V3] perf, c2c: Add symbol count table Don Zickus
2014-03-24 19:37 ` [PATCH 15/15 V3] perf, c2c: Add shared cachline summary table Don Zickus

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=877g70w7oy.fsf@sejong.aot.lge.com \
    --to=namhyung@gmail.com \
    --cc=acme@ghostprotocols.net \
    --cc=andi.kleen@intel.com \
    --cc=dzickus@redhat.com \
    --cc=eranian@google.com \
    --cc=fowles@inreach.com \
    --cc=jmario@redhat.com \
    --cc=jolsa@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=peterz@infradead.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome