Re: [PATCH] perf_events: improve DS/BTS/PEBS buffer allocation

Stephane Eranian
2010-09-13T17:24:38Z

On Mon, Sep 13, 2010 at 5:41 PM, Peter Zijlstra <peterz@infradead.org> wrote:
> On Mon, 2010-09-13 at 17:31 +0200, Stephane Eranian wrote:
>> On Mon, Sep 13, 2010 at 5:24 PM, Peter Zijlstra <peterz@infradead.org> wrote:
>> > On Mon, 2010-09-13 at 17:20 +0200, Stephane Eranian wrote:
>> >
>> >> That is the case we the sizes you have chosen today. For DS, we
>> >> could round up to one page for now.
>> >
>> > Markus chose the BTS size, for PEBS a single page was plenty since we do
>> > single event things (although we could do multiple for attr.precise_ip <
>> > 2).
>> >
>> > For DS there's:
>> >  kmalloc_node(sizeof(struct ds), GFP_KERNEL | __GFP_ZERO, cpu_node(cpu));
>> >
>> Ok, let try again with alloc_pages_node() + kmalloc_node().
>> I think we can stick with kmalloc() for DS because we are far from
>> consuming a page.
>
> Thing is, if you're really seeing allocation failures,
> alloc_pages_node() isn't going to help. And the problem is, these
> allocations aren't movable, so memory compaction and all the other fancy
> stuff aren't really going to help much :/
>
Based on this comment, I assume that the only reason the allocation
of the sampling buffer in perf_buffer_alloc() is immune to this is because
you are allocating each page individually (order 0). Right?