Re: alloc_pages_bulk()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Jesper-

> On Feb 9, 2021, at 5:31 AM, Jesper Dangaard Brouer <brouer@xxxxxxxxxx> wrote:
> 
> On Mon, 8 Feb 2021 17:50:51 +0000
> Chuck Lever <chuck.lever@xxxxxxxxxx> wrote:
> 
>> Sorry for resending. I misremembered the linux-mm address.
>> 
>>> Begin forwarded message:
>>> 
>>> [ please Cc: me, I'm not subscribed to linux-mm ]
>>> 
>>> We've been discussing how NFSD can more efficiently refill its
>>> receive buffers (currently alloc_page() in a loop; see
>>> net/sunrpc/svc_xprt.c::svc_alloc_arg()).
>>> 
> 
> It looks like you could also take advantage of bulk free in:
> svc_free_res_pages()

We started there. Those pages often have a non-zero reference count,
so that call site didn't seem to be a candidate for a bulk free.


> I would like to use the page bulk alloc API here:
> https://github.com/torvalds/linux/blob/master/net/core/page_pool.c#L201-L209
> 
> 
>>> Neil Brown pointed me to this old thread:
>>> 
>>> https://lore.kernel.org/lkml/20170109163518.6001-1-mgorman@xxxxxxxxxxxxxxxxxxx/
>>> 
>>> We see that many of the prerequisites are in v5.11-rc, but
>>> alloc_page_bulk() is not. I tried forward-porting 4/4 in that
>>> series, but enough internal APIs have changed since 2017 that
>>> the patch does not come close to applying and compiling.
> 
> I forgot that this was never merged.  It is sad as Mel showed huge
> improvement with his work.
> 
>>> I'm wondering:
>>> 
>>> a) is there a newer version of that work?
>>> 
> 
> Mel, why was this work never merged upstream?
> 
> 
>>> b) if not, does there exist a preferred API in 5.11 for bulk
>>> page allocation?
>>> 
>>> Many thanks for any guidance!
> 
> I have a kernel module that micro-bench the API alloc_pages_bulk() here:
> https://github.com/netoptimizer/prototype-kernel/blob/master/kernel/mm/bench/page_bench04_bulk.c#L97
> 
> -- 
> Best regards,
>  Jesper Dangaard Brouer
>  MSc.CS, Principal Kernel Engineer at Red Hat
>  LinkedIn: http://www.linkedin.com/in/brouer
> 

--
Chuck Lever








[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux