[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <D051105A-B206-46E4-BD3C-BE3FE3D7BB9F@gmail.com>
Date: Fri, 25 Oct 2019 11:37:23 -0700
From: "Jonathan Lemon" <jonathan.lemon@...il.com>
To: "Jesper Dangaard Brouer" <brouer@...hat.com>
Cc: "Saeed Mahameed" <saeedm@...lanox.com>,
"David S. Miller" <davem@...emloft.net>, netdev@...r.kernel.org,
ilias.apalodimas@...aro.org
Subject: Re: [PATCH net-nex V2 2/3] page_pool: Don't recycle non-reusable
pages
On 25 Oct 2019, at 6:33, Jesper Dangaard Brouer wrote:
> On Wed, 23 Oct 2019 19:37:00 +0000
> Saeed Mahameed <saeedm@...lanox.com> wrote:
>
>> @@ -292,7 +303,8 @@ void __page_pool_put_page(struct page_pool *pool,
>> *
>> * refcnt == 1 means page_pool owns page, and can recycle it.
>> */
>> - if (likely(page_ref_count(page) == 1)) {
>> + if (likely(page_ref_count(page) == 1 &&
>> + pool_page_reusable(pool, page))) {
>
> I'm afraid that we are slowly chipping away the performance benefit
> with these incremental changes, adding more checks. We have an extreme
> performance use-case with XDP_DROP, where we want drivers to use this
> code path to hit __page_pool_recycle_direct(), that is a simple array
> update (protected under NAPI) into pool->alloc.cache[].
The checks have to be paid for somewhere. mlx4, mlx5, i40e, igb, etc
already do these in determining whether to recycle a page or not. The
pfmemalloc check can't be moved into the flush path. I'd rather have
a common point where this is performed, moving it out of each driver.
--
Jonathan
Powered by blists - more mailing lists