[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20191024045013.GA537@apalos.home>
Date: Thu, 24 Oct 2019 07:50:13 +0300
From: Ilias Apalodimas <ilias.apalodimas@...aro.org>
To: Saeed Mahameed <saeedm@...lanox.com>
Cc: "David S. Miller" <davem@...emloft.net>,
Jesper Dangaard Brouer <brouer@...hat.com>,
"netdev@...r.kernel.org" <netdev@...r.kernel.org>,
Jonathan Lemon <jonathan.lemon@...il.com>
Subject: Re: [PATCH net-nex V2 1/3] page_pool: Add API to update numa node
On Wed, Oct 23, 2019 at 07:36:58PM +0000, Saeed Mahameed wrote:
> Add page_pool_update_nid() to be called by page pool consumers when they
> detect numa node changes.
>
> It will update the page pool nid value to start allocating from the new
> effective numa node.
>
> This is to mitigate page pool allocating pages from a wrong numa node,
> where the pool was originally allocated, and holding on to pages that
> belong to a different numa node, which causes performance degradation.
>
> For pages that are already being consumed and could be returned to the
> pool by the consumer, in next patch we will add a check per page to avoid
> recycling them back to the pool and return them to the page allocator.
>
> Signed-off-by: Saeed Mahameed <saeedm@...lanox.com>
> Acked-by: Jonathan Lemon <jonathan.lemon@...il.com>
> ---
> include/net/page_pool.h | 7 +++++++
> include/trace/events/page_pool.h | 22 ++++++++++++++++++++++
> net/core/page_pool.c | 8 ++++++++
> 3 files changed, 37 insertions(+)
>
> diff --git a/include/net/page_pool.h b/include/net/page_pool.h
> index 2cbcdbdec254..f46b78408e44 100644
> --- a/include/net/page_pool.h
> +++ b/include/net/page_pool.h
> @@ -226,4 +226,11 @@ static inline bool page_pool_put(struct page_pool *pool)
> return refcount_dec_and_test(&pool->user_cnt);
> }
>
> +/* Caller must provide appropriate safe context, e.g. NAPI. */
> +void page_pool_update_nid(struct page_pool *pool, int new_nid);
> +static inline void page_pool_nid_changed(struct page_pool *pool, int new_nid)
> +{
> + if (unlikely(pool->p.nid != new_nid))
> + page_pool_update_nid(pool, new_nid);
> +}
> #endif /* _NET_PAGE_POOL_H */
> diff --git a/include/trace/events/page_pool.h b/include/trace/events/page_pool.h
> index 47b5ee880aa9..b58b6a3a3e57 100644
> --- a/include/trace/events/page_pool.h
> +++ b/include/trace/events/page_pool.h
> @@ -81,6 +81,28 @@ TRACE_EVENT(page_pool_state_hold,
> __entry->pool, __entry->page, __entry->hold)
> );
>
> +TRACE_EVENT(page_pool_update_nid,
> +
> + TP_PROTO(const struct page_pool *pool, int new_nid),
> +
> + TP_ARGS(pool, new_nid),
> +
> + TP_STRUCT__entry(
> + __field(const struct page_pool *, pool)
> + __field(int, pool_nid)
> + __field(int, new_nid)
> + ),
> +
> + TP_fast_assign(
> + __entry->pool = pool;
> + __entry->pool_nid = pool->p.nid;
> + __entry->new_nid = new_nid;
> + ),
> +
> + TP_printk("page_pool=%p pool_nid=%d new_nid=%d",
> + __entry->pool, __entry->pool_nid, __entry->new_nid)
> +);
> +
> #endif /* _TRACE_PAGE_POOL_H */
>
> /* This part must be outside protection */
> diff --git a/net/core/page_pool.c b/net/core/page_pool.c
> index 5bc65587f1c4..953af6d414fb 100644
> --- a/net/core/page_pool.c
> +++ b/net/core/page_pool.c
> @@ -397,3 +397,11 @@ bool __page_pool_request_shutdown(struct page_pool *pool)
> return __page_pool_safe_to_destroy(pool);
> }
> EXPORT_SYMBOL(__page_pool_request_shutdown);
> +
> +/* Caller must provide appropriate safe context, e.g. NAPI. */
> +void page_pool_update_nid(struct page_pool *pool, int new_nid)
> +{
> + trace_page_pool_update_nid(pool, new_nid);
> + pool->p.nid = new_nid;
> +}
> +EXPORT_SYMBOL(page_pool_update_nid);
> --
> 2.21.0
>
Reviewed-by: Ilias Apalodimas <ilias.apalodimas@...aro.org>
Powered by blists - more mailing lists