Re: [PATCH -v2 1/2] mm, swap: Use kvzalloc to allocate some swap data structure

From: Tim Chen
Date: Fri Mar 24 2017 - 12:52:23 EST


On Fri, 2017-03-24 at 06:56 -0700, Dave Hansen wrote:
> On 03/24/2017 12:33 AM, John Hubbard wrote:
> >
> > There might be some additional information you are using to come up with
> > that conclusion, that is not obvious to me. Any thoughts there? These
> > calls use the same underlying page allocator (and I thought that both
> > were subject to the same constraints on defragmentation, as a result of
> > that). So I am not seeing any way that kmalloc could possibly be a
> > less-fragmenting call than vmalloc.
> You guys are having quite a discussion over a very small point.
>
> But, Ying is right.
>
> Let's say we have a two-page data structure.ÂÂvmalloc() takes two
> effectively random order-0 pages, probably from two different 2M pages
> and pins them.ÂÂThat "kills" two 2M pages.
>
> kmalloc(), allocating two *contiguous* pages, is very unlikely to cross
> a 2M boundary (it theoretically could).ÂÂThat means it will only "kill"
> the possibility of a single 2M page.ÂÂMore 2M pages == less fragmentation.

In vmalloc, it eventually calls __vmalloc_area_node that allocates the
page one at a time. ÂThere's no attempt there to make the pages contiguous
if I am reading the code correctly. ÂSo that will increase the memory
fragmentation as we will be piecing together pages from all over the places. Â

Tim Â