Thread (34 messages) flat view 34 messages, 7 authors, 2021-07-10

Re: [PATCH net-next RFC 1/2] page_pool: add page recycling support based on elevated refcnt

From: Yunsheng Lin <hidden>
Date: 2021-07-02 10:15:22
Also in: bpf, lkml

On 2021/7/2 17:42, Jesper Dangaard Brouer wrote:
On 30/06/2021 11.17, Yunsheng Lin wrote:
quoted
Currently page pool only support page recycling only when
refcnt of page is one, which means it can not support the
split page recycling implemented in the most ethernet driver.
Cc. Alex Duyck as I consider him an expert in this area.
Thanks.
quoted
So add elevated refcnt support in page pool, and support
allocating page frag to enable multi-frames-per-page based
on the elevated refcnt support.

As the elevated refcnt is per page, and there is no space
for that in "struct page" now, so add a dynamically allocated
"struct page_pool_info" to record page pool ptr and refcnt
corrsponding to a page for now. Later, we can recycle the
"struct page_pool_info" too, or use part of page memory to
record pp_info.
I'm not happy with allocating a memory (slab) object "struct page_pool_info" per page.

This also gives us an extra level of indirection.
I'm not happy with that either, if there is better way to
avoid that, I will be happy to change it:)

You are also adding a page "frag" API inside page pool, which I'm not 100% convinced belongs inside page_pool APIs.

Please notice the APIs that Alex Duyck added in mm/page_alloc.c:
Actually, that is where the idea of using "page frag" come from.

Aside from the performance improvement, there is memory usage
decrease for 64K page size kernel, which means a 64K page can
be used by 32 description with 2k buffer size, and that is a
lot of memory saving for 64 page size kernel comparing to the
current split page reusing implemented in the driver.

 __page_frag_cache_refill() + __page_frag_cache_drain() + page_frag_alloc_align()
[...]
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help