Thread (62 messages) 62 messages, 13 authors, 2023-09-08

Re: [RFC PATCH v2 06/11] page-pool: add device memory support

From: Willem de Bruijn <willemdebruijn.kernel@gmail.com>
Date: 2023-08-22 00:58:42
Also in: dri-devel, linux-media

On Mon, Aug 21, 2023 at 5:31 PM Jakub Kicinski [off-list ref] wrote:
On Sat, 19 Aug 2023 12:12:16 -0400 Willem de Bruijn wrote:
quoted
:-) For the record, there is a prior version that added a separate type.

I did not like the churn it brought and asked for this.
It does end up looking cleaner that I personally expected, FWIW.
quoted
quoted
Use of the LSB (or bits depending on alignment expectations) is a common
trick and already done in quite a few places in the networking stack.
This trick is essential to any realistic change here to incorporate gpu
memory; way too much code will have unnecessary churn without it.
We'll end up needing the LSB trick either way, right? The only question
is whether the "if" is part of page pool or the caller of page pool.
Indeed. Adding layering does not remove this.
Having seen zctap I'm afraid if we push this out of pp every provider
will end up re-implementing page pool's recycling/caching functionality
:(

Maybe we need to "fork" the API? The device memory "ifs" are only needed
for data pages. Which means that we can retain a faster, "if-less" API
for headers and XDP. Or is that too much duplication?
I don't think that would be faster. Just a different structuring of
the code. We still need to take one of multiple paths for, say, page
allocation (page_pool_alloc_pages).

If having a struct page_pool and struct mem_pool, there would still be
a type-based branch. But now either in every caller (yech), or in some
thin shim layer. Why not just have it behind the existing API? That is
what your memory provider does. The only difference now is that one of
the providers really does not deal with pages.

I think this multiplexing does not have to introduce performance
regressions with well placed static_branch. Benchmarks and
side-by-side comparison of assembly will have to verify that.

Indirect function calls need to be avoided, of course, in favor of a
type based switch. And unless the non_default_providers static branch
is enabled, the default path is taken unconditionally.

If it no longer is a pure page pool, maybe it can be renamed. I
personally don't care.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help