All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ingo Molnar <mingo@elte.hu>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Markus Metzger <markus.t.metzger@intel.com>,
	a.p.zijlstra@chello.nl, markus.t.metzger@gmail.com,
	roland@redhat.com, eranian@googlemail.com, oleg@redhat.com,
	juan.villacis@intel.com, ak@linux.jf.intel.com,
	linux-kernel@vger.kernel.org, tglx@linutronix.de, hpa@zytor.com
Subject: Re: [rfc 2/2] x86, bts: use physically non-contiguous trace buffer
Date: Fri, 24 Apr 2009 10:31:28 +0200	[thread overview]
Message-ID: <20090424083128.GI24912@elte.hu> (raw)
In-Reply-To: <20090424011328.b5e949ce.akpm@linux-foundation.org>


* Andrew Morton <akpm@linux-foundation.org> wrote:

> On Fri, 24 Apr 2009 10:00:55 +0200 Markus Metzger <markus.t.metzger@intel.com> wrote:
> 
> > Use vmalloc to allocate the branch trace buffer.
> > 
> > Peter Zijlstra suggested to use vmalloc rather than kmalloc to
> > allocate the potentially multi-page branch trace buffer.
> 
> The changelog provides no reason for this change.  It should do so.
> 
> > Is there a way to have vmalloc allocate a physically non-contiguous
> > buffer for test purposes? Ideally, the memory area would have big
> > holes in it with sensitive data in between so I would know immediately
> > when this is overwritten.
> 
> I suppose you could allocate the pages by hand and then vmap() them. 
> Allocating 2* the number you need and then freeing every second one
> should make them physically holey.
> 
> > --- a/arch/x86/kernel/ptrace.c
> > +++ b/arch/x86/kernel/ptrace.c
> > @@ -22,6 +22,7 @@
> >  #include <linux/seccomp.h>
> >  #include <linux/signal.h>
> >  #include <linux/workqueue.h>
> > +#include <linux/vmalloc.h>
> >  
> >  #include <asm/uaccess.h>
> >  #include <asm/pgtable.h>
> > @@ -626,7 +627,7 @@ static int alloc_bts_buffer(struct bts_c
> >  	if (err < 0)
> >  		return err;
> >  
> > -	buffer = kzalloc(size, GFP_KERNEL);
> > +	buffer = vmalloc(size);
> >  	if (!buffer)
> >  		goto out_refund;
> >  
> > @@ -646,7 +647,7 @@ static inline void free_bts_buffer(struc
> >  	if (!context->buffer)
> >  		return;
> >  
> > -	kfree(context->buffer);
> > +	vfree(context->buffer);
> >  	context->buffer = NULL;
> >  
> 
> The patch looks like a regression to me.  vmalloc memory is slower 
> to allocate, slower to free, slower to access and can exhaust or 
> fragment the vmalloc arena.  Confused.

Performance does not matter here (this is really a slowpath), but 
fragmentation does matter, especially on 32-bit systems.

I'd not uglify the code via vmap() - and vmap has the same 
fundamental address space limitations on 32-bit as vmalloc().

The existing kmalloc() is fine. We do larger than PAGE_SIZE 
allocations elsewhere too (the kernel stack for example), and this 
is a debug facility, so failing the allocation is not a big problem 
even if it happens.

	Ingo

  reply	other threads:[~2009-04-24  8:33 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-04-24  8:00 [rfc 2/2] x86, bts: use physically non-contiguous trace buffer Markus Metzger
2009-04-24  8:13 ` Andrew Morton
2009-04-24  8:31   ` Ingo Molnar [this message]
2009-04-24  8:39     ` Metzger, Markus T
2009-04-26 16:08       ` Ingo Molnar
2009-04-27 10:53     ` Peter Zijlstra
2009-04-29  9:14       ` Metzger, Markus T
2009-04-25  6:40 ` Andi Kleen
2009-04-27  6:35   ` Metzger, Markus T

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=20090424083128.GI24912@elte.hu \
    --to=mingo@elte.hu \
    --cc=a.p.zijlstra@chello.nl \
    --cc=ak@linux.jf.intel.com \
    --cc=akpm@linux-foundation.org \
    --cc=eranian@googlemail.com \
    --cc=hpa@zytor.com \
    --cc=juan.villacis@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=markus.t.metzger@gmail.com \
    --cc=markus.t.metzger@intel.com \
    --cc=oleg@redhat.com \
    --cc=roland@redhat.com \
    --cc=tglx@linutronix.de \
    /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.