All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ingo Molnar <mingo@elte.hu>
To: Mel Gorman <mel@csn.ul.ie>, Jason Baron <jbaron@redhat.com>
Cc: Pekka Enberg <penberg@cs.helsinki.fi>,
	Eduard - Gabriel Munteanu <eduard.munteanu@linux360.ro>,
	linux-kernel@vger.kernel.org, mm-commits@vger.kernel.org,
	alexn@dsv.su.se, akpm@linux-foundation.org, alexn@telia.com,
	apw@shadowen.org, cl@linux-foundation.org, haveblue@us.ibm.com,
	kamezawa.hiroyu@jp.fujitu.com,
	Peter Zijlstra <a.p.zijlstra@chello.nl>,
	Steven Rostedt <rostedt@goodmis.org>,
	Fr?d?ric Weisbecker <fweisbec@gmail.com>
Subject: Re: + page-owner-tracking.patch added to -mm tree
Date: Wed, 1 Apr 2009 15:49:17 +0200	[thread overview]
Message-ID: <20090401134917.GC18677@elte.hu> (raw)
In-Reply-To: <20090401133220.GB6406@csn.ul.ie>


* Mel Gorman <mel@csn.ul.ie> wrote:

> On Wed, Apr 01, 2009 at 03:17:13PM +0200, Ingo Molnar wrote:
> > 
> > * Mel Gorman <mel@csn.ul.ie> wrote:
> > 
> > > On Wed, Apr 01, 2009 at 01:15:40PM +0200, Ingo Molnar wrote:
> > > > > <VAST AMOUNTS OF SNIPPAGE>
> > > > >
> > > > > +static inline void __stack_trace(struct page *page, unsigned long *stack,
> > > > > +			unsigned long bp)
> > > > > +{
> > > > > +	int i = 0;
> > > > > +	unsigned long addr;
> > > > > +	struct thread_info *tinfo = (struct thread_info *)
> > > > > +		((unsigned long)stack & (~(THREAD_SIZE - 1)));
> > > > > +
> > > > > +	memset(page->trace, 0, sizeof(long) * 8);
> > > > > +
> > > > > +#ifdef CONFIG_FRAME_POINTER
> > > > > +	if (bp) {
> > > > > +		while (valid_stack_ptr(tinfo, (void *)bp)) {
> > > > > +			addr = *(unsigned long *)(bp + sizeof(long));
> > > > > +			page->trace[i] = addr;
> > > > > +			if (++i >= 8)
> > > > > +				break;
> > > > > +			bp = *(unsigned long *)bp;
> > > > > +		}
> > > > > +		return;
> > > > > +	}
> > > > > +#endif /* CONFIG_FRAME_POINTER */
> > > > > +	while (valid_stack_ptr(tinfo, stack)) {
> > > > > +		addr = *stack++;
> > > > > +		if (__kernel_text_address(addr)) {
> > > > > +			page->trace[i] = addr;
> > > > > +			if (++i >= 8)
> > > > > +				break;
> > > > > +		}
> > > > > +	}
> > > > > +}
> > > > 
> > > > Uhm, this is not acceptable and broken, we have generic stacktrace 
> > > > saving facilities for this precise purpose. It has other problems 
> > > > too.
> > > > 
> > > > The purpose of the patch seems genuinely useful and i support the 
> > > > concept, but the current design is limiting (we could do much 
> > > > better) and the implementation is awful. Please.
> > > > 
> > > > Has this patch been reviewed by or Cc:-ed to anyone versed in kernel 
> > > > instrumentation details, before it was applied to -mm? Those folks 
> > > > hang around the tracing tree usually so they are easy to find. :)
> > > > 
> > > 
> > > This patch is ancient, predating most of the instrumentation stuff 
> > > by years. It was dropped from -mm a few months ago because of 
> > > changes in proc and this is a rebase because it came up as being 
> > > potentially useful pinning down memory leaks when they occur.
> > > 
> > > I'm not sure when exactly it was introduced to -mm, but I see 
> > > references going back as far as 2.6.12-rc1 so it's no surprise 
> > > this is now extremly odd looking. However, there is no plan to 
> > > merge this to mainline making the effort of redoing it from 
> > > scratch a questionable expenditure of time.
> > 
> > Hm, why not merge the concept upstream?
> > 
> 
> I suspect at the time the patch was put together, it was not 
> merged upstream because it severely bloated struct page and would 
> be something that was never enabled by default in distros. Anyone 
> wanted it for debugging could easily apply the patch. It's a 
> decision that simply has never been revisited as it's not used 
> that often - it's just seriously useful when you do need it.
> 
> I'm guessing though, I wasn't active in kernel development at the 
> time and I haven't dug through the archives to see the history.

it sounds plausible. The reason i replied is that i saw this patch 
pop up freshly with a lot of MM signoffs. There's been a few weird 
instrumentation patches from -mm to mainline lately so i'm more 
cautious ...

A [not-for-upstream] tag would be useful for such cases.

> > I'm sure the kmemtrace maintainers (Eduardo and Pekka) would be 
> > interested in this too: they are already tracking slab 
> > allocation events in a very finegrained way, extending that 
> > scheme to the page allocator seems genuinely useful to me.
> 
> In light of kmemtrace's success, it does make sense to revisit if 
> someone has the cycles to spare. Again bear in mind that this 
> owner patch was in -mm long before kmemtrace came along so it was 
> a good idea at the time whose implementation has not quite stood 
> the test of time.

it popped up new. And i commented on it a few months ago.

> > And that way the rather ugly bloating of struct page by this 
> > patch would be solved too: it's not needed and there's no need 
> > to actually save the callchain permanently, it's usually enough 
> > to _trace_ it - user-space can then save it into a permanent map 
> > if it's interested.
> 
> It's picky but you lose details from boot-time allocations that 
> way but that's a relatively small detail. If it's leaks you really 
> care about though, then tracing is probably sufficient.

You can build a full map from scratch as well via:

    echo 3 > /proc/sys/vm/drop_caches

Anything that is not flushed out by that is probably not that 
interesting from a tracking perspective.

> [...] Maybe this thread will prod someone familiar with tracing 
> with some time to spare to take a look at what that provides 
> reimplement in a sensible manner as you suggest?

Yeah - i've added tracing Cc:s.

There's a proposed set of MM tracepoints by Jason Baron. Not sure 
how far it got in terms of getting Ack's and Reviewed-by's from MM 
folks though.

And this info could be added to that, and it would sure be nice to 
hook it up to kmemtrace primarily, which does a lot of similar 
looking work in the slab space. (but Eduard and Pekka will know how 
feasible/interesting this is to them.)

	Ingo

  reply	other threads:[~2009-04-01 13:54 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-03-31 23:21 + page-owner-tracking.patch added to -mm tree akpm
2009-04-01 11:15 ` Ingo Molnar
2009-04-01 12:55   ` Mel Gorman
2009-04-01 13:17     ` Ingo Molnar
2009-04-01 13:32       ` Mel Gorman
2009-04-01 13:49         ` Ingo Molnar [this message]
2009-04-01 14:49           ` Pekka Enberg
2009-04-01 15:22             ` Ingo Molnar
2009-04-02  7:12               ` Pekka Enberg
2009-04-03  4:21                 ` Eduard - Gabriel Munteanu
2009-04-03 14:17                   ` Ingo Molnar
2009-04-03 14:36                     ` Pekka Enberg
2009-04-03 14:43                       ` Ingo Molnar
2009-04-04 14:08                         ` Eduard - Gabriel Munteanu
2009-04-06  7:12                         ` Pekka Enberg

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=20090401134917.GC18677@elte.hu \
    --to=mingo@elte.hu \
    --cc=a.p.zijlstra@chello.nl \
    --cc=akpm@linux-foundation.org \
    --cc=alexn@dsv.su.se \
    --cc=alexn@telia.com \
    --cc=apw@shadowen.org \
    --cc=cl@linux-foundation.org \
    --cc=eduard.munteanu@linux360.ro \
    --cc=fweisbec@gmail.com \
    --cc=haveblue@us.ibm.com \
    --cc=jbaron@redhat.com \
    --cc=kamezawa.hiroyu@jp.fujitu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mel@csn.ul.ie \
    --cc=mm-commits@vger.kernel.org \
    --cc=penberg@cs.helsinki.fi \
    --cc=rostedt@goodmis.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.