From: Ingo Molnar <mingo@elte.hu>
To: "Metzger, Markus T" <markus.t.metzger@intel.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
"a.p.zijlstra@chello.nl" <a.p.zijlstra@chello.nl>,
"markus.t.metzger@gmail.com" <markus.t.metzger@gmail.com>,
"roland@redhat.com" <roland@redhat.com>,
"eranian@googlemail.com" <eranian@googlemail.com>,
"oleg@redhat.com" <oleg@redhat.com>,
"Villacis, Juan" <juan.villacis@intel.com>,
"ak@linux.jf.intel.com" <ak@linux.jf.intel.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"tglx@linutronix.de" <tglx@linutronix.de>,
"hpa@zytor.com" <hpa@zytor.com>
Subject: Re: [rfc 2/2] x86, bts: use physically non-contiguous trace buffer
Date: Sun, 26 Apr 2009 18:08:59 +0200 [thread overview]
Message-ID: <20090426160859.GA5420@elte.hu> (raw)
In-Reply-To: <928CFBE8E7CB0040959E56B4EA41A77E9BA9BB93@irsmsx504.ger.corp.intel.com>
* Metzger, Markus T <markus.t.metzger@intel.com> wrote:
> >-----Original Message-----
> >From: Ingo Molnar [mailto:mingo@elte.hu]
> >Sent: Friday, April 24, 2009 10:31 AM
> >To: Andrew Morton
> >Cc: Metzger, Markus T; a.p.zijlstra@chello.nl; markus.t.metzger@gmail.com; roland@redhat.com;
> >eranian@googlemail.com; oleg@redhat.com; Villacis, Juan; 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
> >
> >
> >* 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.
>
> OK. I'll drop 2/2 and send out 1/2 as a patch, then.
ok - i've already applied 1/2 so unless you can see a bug we should
be fine.
> The original suggestion was to use the page allocator and vmap().
> I assume you don't want that, either.
Yeah - i'd rather suggest to avoid that complexity - unless there
are good reasons.
Ingo
next prev parent reply other threads:[~2009-04-26 16:09 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
2009-04-24 8:39 ` Metzger, Markus T
2009-04-26 16:08 ` Ingo Molnar [this message]
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=20090426160859.GA5420@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.