All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net-next V3 0/3] page_pool: API for numa node change handling
@ 2019-11-20  0:15 Saeed Mahameed
  2019-11-20  0:15 ` [PATCH net-next V3 1/3] page_pool: Add API to update numa node Saeed Mahameed
                   ` (3 more replies)
  0 siblings, 4 replies; 9+ messages in thread
From: Saeed Mahameed @ 2019-11-20  0:15 UTC (permalink / raw)
  To: Jesper Dangaard Brouer, David S. Miller; +Cc: netdev, Saeed Mahameed

This series extends page pool API to allow page pool consumers to update
page pool numa node on the fly. This is required since on some systems,
rx rings irqs can migrate between numa nodes, due to irq balancer or user
defined scripts, current page pool has no way to know of such migration
and will keep allocating and holding on to pages from a wrong numa node,
which is bad for the consumer performance.

1) Add API to update numa node id of the page pool
Consumers will call this API to update the page pool numa node id.

2) Don't recycle non-reusable pages:
Page pool will check upon page return whether a page is suitable for
recycling or not. 
 2.1) when it belongs to a different num node.
 2.2) when it was allocated under memory pressure.

3) mlx5 will use the new API to update page pool numa id on demand.

The series is a joint work between me and Jonathan, we tested it and it
proved itself worthy to avoid page allocator bottlenecks and improve
packet rate and cpu utilization significantly for the described
scenarios above.

Performance testing:
XDP drop/tx rate and TCP single/multi stream, on mlx5 driver
while migrating rx ring irq from close to far numa:

mlx5 internal page cache was locally disabled to get pure page pool
results.

CPU: Intel(R) Xeon(R) CPU E5-2603 v4 @ 1.70GHz
NIC: Mellanox Technologies MT27700 Family [ConnectX-4] (100G)

XDP Drop/TX single core:
NUMA  | XDP  | Before    | After
---------------------------------------
Close | Drop | 11   Mpps | 10.9 Mpps
Far   | Drop | 4.4  Mpps | 5.8  Mpps

Close | TX   | 6.5 Mpps  | 6.5 Mpps
Far   | TX   | 3.5 Mpps  | 4   Mpps

Improvement is about 30% drop packet rate, 15% tx packet rate for numa
far test.
No degradation for numa close tests.

TCP single/multi cpu/stream:
NUMA  | #cpu | Before  | After
--------------------------------------
Close | 1    | 18 Gbps | 18 Gbps
Far   | 1    | 15 Gbps | 18 Gbps
Close | 12   | 80 Gbps | 80 Gbps
Far   | 12   | 68 Gbps | 80 Gbps

In all test cases we see improvement for the far numa case, and no
impact on the close numa case.

==================

Performance analysis and conclusions by Jesper [1]:
Impact on XDP drop x86_64 is inconclusive and shows only 0.3459ns
slow-down, as this is below measurement accuracy of system.

v2->v3:
 - Rebase on top of latest net-next and Jesper's page pool object
   release patchset [2]
 - No code changes
 - Performance analysis by Jesper added to the cover letter.

v1->v2:
  - Drop last patch, as requested by Ilias and Jesper.
  - Fix documentation's performance numbers order.

[1] https://github.com/xdp-project/xdp-project/blob/master/areas/mem/page_pool04_inflight_changes.org#performance-notes
[2] https://patchwork.ozlabs.org/cover/1192098/

Thanks,
Saeed.

---

Saeed Mahameed (3):
  page_pool: Add API to update numa node
  page_pool: Don't recycle non-reusable pages
  net/mlx5e: Rx, Update page pool numa node when changed

 .../net/ethernet/mellanox/mlx5/core/en_rx.c   |  3 +++
 include/net/page_pool.h                       |  7 ++++++
 include/trace/events/page_pool.h              | 22 +++++++++++++++++++
 net/core/page_pool.c                          | 22 ++++++++++++++++++-
 4 files changed, 53 insertions(+), 1 deletion(-)

-- 
2.21.0


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH net-next V3 1/3] page_pool: Add API to update numa node
  2019-11-20  0:15 [PATCH net-next V3 0/3] page_pool: API for numa node change handling Saeed Mahameed
@ 2019-11-20  0:15 ` Saeed Mahameed
  2019-11-20 12:15   ` Jesper Dangaard Brouer
  2019-11-20  0:15 ` [PATCH net-next V3 2/3] page_pool: Don't recycle non-reusable pages Saeed Mahameed
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 9+ messages in thread
From: Saeed Mahameed @ 2019-11-20  0:15 UTC (permalink / raw)
  To: Jesper Dangaard Brouer, David S. Miller
  Cc: netdev, Saeed Mahameed, Jonathan Lemon, Ilias Apalodimas

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@mellanox.com>
Acked-by: Jonathan Lemon <jonathan.lemon@gmail.com>
Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
---
 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 ace881c15dcb..e2e1b7b1e8ba 100644
--- a/include/net/page_pool.h
+++ b/include/net/page_pool.h
@@ -204,4 +204,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 2f2a10e8eb56..ad0aa7f31675 100644
--- a/include/trace/events/page_pool.h
+++ b/include/trace/events/page_pool.h
@@ -89,6 +89,28 @@ TRACE_EVENT(page_pool_state_hold,
 		  __entry->pool, __entry->page, __entry->pfn, __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 e28db2ef8e12..9b704ea3f4b2 100644
--- a/net/core/page_pool.c
+++ b/net/core/page_pool.c
@@ -436,3 +436,11 @@ void page_pool_destroy(struct page_pool *pool)
 	schedule_delayed_work(&pool->release_dw, DEFER_TIME);
 }
 EXPORT_SYMBOL(page_pool_destroy);
+
+/* 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


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH net-next V3 2/3] page_pool: Don't recycle non-reusable pages
  2019-11-20  0:15 [PATCH net-next V3 0/3] page_pool: API for numa node change handling Saeed Mahameed
  2019-11-20  0:15 ` [PATCH net-next V3 1/3] page_pool: Add API to update numa node Saeed Mahameed
@ 2019-11-20  0:15 ` Saeed Mahameed
  2019-11-20 12:16   ` Jesper Dangaard Brouer
  2019-11-20  0:15 ` [PATCH net-next V3 3/3] net/mlx5e: Rx, Update page pool numa node when changed Saeed Mahameed
  2019-11-20 12:15 ` [PATCH net-next V3 0/3] page_pool: API for numa node change handling Jesper Dangaard Brouer
  3 siblings, 1 reply; 9+ messages in thread
From: Saeed Mahameed @ 2019-11-20  0:15 UTC (permalink / raw)
  To: Jesper Dangaard Brouer, David S. Miller
  Cc: netdev, Saeed Mahameed, Jonathan Lemon, Ilias Apalodimas

A page is NOT reusable when at least one of the following is true:
1) allocated when system was under some pressure. (page_is_pfmemalloc)
2) belongs to a different NUMA node than pool->p.nid.

To update pool->p.nid users should call page_pool_update_nid().

Holding on to such pages in the pool will hurt the consumer performance
when the pool migrates to a different numa node.

Performance testing:
XDP drop/tx rate and TCP single/multi stream, on mlx5 driver
while migrating rx ring irq from close to far numa:

mlx5 internal page cache was locally disabled to get pure page pool
results.

CPU: Intel(R) Xeon(R) CPU E5-2603 v4 @ 1.70GHz
NIC: Mellanox Technologies MT27700 Family [ConnectX-4] (100G)

XDP Drop/TX single core:
NUMA  | XDP  | Before    | After
---------------------------------------
Close | Drop | 11   Mpps | 10.9 Mpps
Far   | Drop | 4.4  Mpps | 5.8  Mpps

Close | TX   | 6.5 Mpps  | 6.5 Mpps
Far   | TX   | 3.5 Mpps  | 4  Mpps

Improvement is about 30% drop packet rate, 15% tx packet rate for numa
far test.
No degradation for numa close tests.

TCP single/multi cpu/stream:
NUMA  | #cpu | Before  | After
--------------------------------------
Close | 1    | 18 Gbps | 18 Gbps
Far   | 1    | 15 Gbps | 18 Gbps
Close | 12   | 80 Gbps | 80 Gbps
Far   | 12   | 68 Gbps | 80 Gbps

In all test cases we see improvement for the far numa case, and no
impact on the close numa case.

The impact of adding a check per page is very negligible, and shows no
performance degradation whatsoever, also functionality wise it seems more
correct and more robust for page pool to verify when pages should be
recycled, since page pool can't guarantee where pages are coming from.

Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
Acked-by: Jonathan Lemon <jonathan.lemon@gmail.com>
Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
---
 net/core/page_pool.c | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/net/core/page_pool.c b/net/core/page_pool.c
index 9b704ea3f4b2..6c7f78bd6421 100644
--- a/net/core/page_pool.c
+++ b/net/core/page_pool.c
@@ -281,6 +281,17 @@ static bool __page_pool_recycle_direct(struct page *page,
 	return true;
 }
 
+/* page is NOT reusable when:
+ * 1) allocated when system is under some pressure. (page_is_pfmemalloc)
+ * 2) belongs to a different NUMA node than pool->p.nid.
+ *
+ * To update pool->p.nid users must call page_pool_update_nid.
+ */
+static bool pool_page_reusable(struct page_pool *pool, struct page *page)
+{
+	return !page_is_pfmemalloc(page) && page_to_nid(page) == pool->p.nid;
+}
+
 void __page_pool_put_page(struct page_pool *pool,
 			  struct page *page, bool allow_direct)
 {
@@ -290,7 +301,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))) {
 		/* Read barrier done in page_ref_count / READ_ONCE */
 
 		if (allow_direct && in_serving_softirq())
-- 
2.21.0


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH net-next V3 3/3] net/mlx5e: Rx, Update page pool numa node when changed
  2019-11-20  0:15 [PATCH net-next V3 0/3] page_pool: API for numa node change handling Saeed Mahameed
  2019-11-20  0:15 ` [PATCH net-next V3 1/3] page_pool: Add API to update numa node Saeed Mahameed
  2019-11-20  0:15 ` [PATCH net-next V3 2/3] page_pool: Don't recycle non-reusable pages Saeed Mahameed
@ 2019-11-20  0:15 ` Saeed Mahameed
  2019-11-20 12:16   ` Jesper Dangaard Brouer
  2019-11-20 12:15 ` [PATCH net-next V3 0/3] page_pool: API for numa node change handling Jesper Dangaard Brouer
  3 siblings, 1 reply; 9+ messages in thread
From: Saeed Mahameed @ 2019-11-20  0:15 UTC (permalink / raw)
  To: Jesper Dangaard Brouer, David S. Miller
  Cc: netdev, Saeed Mahameed, Jonathan Lemon

Once every napi poll cycle, check if numa node is different than
the page pool's numa id, and update it using page_pool_update_nid().

Alternatively, we could have registered an irq affinity change handler,
but page_pool_update_nid() must be called from napi context anyways, so
the handler won't actually help.

Performance testing:
XDP drop/tx rate and TCP single/multi stream, on mlx5 driver
while migrating rx ring irq from close to far numa:

mlx5 internal page cache was locally disabled to get pure page pool
results.

CPU: Intel(R) Xeon(R) CPU E5-2603 v4 @ 1.70GHz
NIC: Mellanox Technologies MT27700 Family [ConnectX-4] (100G)

XDP Drop/TX single core:
NUMA  | XDP  | Before    | After
---------------------------------------
Close | Drop | 11   Mpps | 10.9 Mpps
Far   | Drop | 4.4  Mpps | 5.8  Mpps

Close | TX   | 6.5 Mpps  | 6.5 Mpps
Far   | TX   | 3.5 Mpps  | 4  Mpps

Improvement is about 30% drop packet rate, 15% tx packet rate for numa
far test.
No degradation for numa close tests.

TCP single/multi cpu/stream:
NUMA  | #cpu | Before  | After
--------------------------------------
Close | 1    | 18 Gbps | 18 Gbps
Far   | 1    | 15 Gbps | 18 Gbps
Close | 12   | 80 Gbps | 80 Gbps
Far   | 12   | 68 Gbps | 80 Gbps

In all test cases we see improvement for the far numa case, and no
impact on the close numa case.

Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
Acked-by: Jonathan Lemon <jonathan.lemon@gmail.com>
---
 drivers/net/ethernet/mellanox/mlx5/core/en_rx.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c b/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
index 82cffb3a9964..9e9960146e5b 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
@@ -1386,6 +1386,9 @@ int mlx5e_poll_rx_cq(struct mlx5e_cq *cq, int budget)
 	if (unlikely(!test_bit(MLX5E_RQ_STATE_ENABLED, &rq->state)))
 		return 0;
 
+	if (rq->page_pool)
+		page_pool_nid_changed(rq->page_pool, numa_mem_id());
+
 	if (rq->cqd.left) {
 		work_done += mlx5e_decompress_cqes_cont(rq, cqwq, 0, budget);
 		if (rq->cqd.left || work_done >= budget)
-- 
2.21.0


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH net-next V3 0/3] page_pool: API for numa node change handling
  2019-11-20  0:15 [PATCH net-next V3 0/3] page_pool: API for numa node change handling Saeed Mahameed
                   ` (2 preceding siblings ...)
  2019-11-20  0:15 ` [PATCH net-next V3 3/3] net/mlx5e: Rx, Update page pool numa node when changed Saeed Mahameed
@ 2019-11-20 12:15 ` Jesper Dangaard Brouer
  2019-11-20 19:48   ` David Miller
  3 siblings, 1 reply; 9+ messages in thread
From: Jesper Dangaard Brouer @ 2019-11-20 12:15 UTC (permalink / raw)
  To: Saeed Mahameed; +Cc: David S. Miller, netdev, brouer

On Wed, 20 Nov 2019 00:15:14 +0000
Saeed Mahameed <saeedm@mellanox.com> wrote:

> Performance analysis and conclusions by Jesper [1]:
> Impact on XDP drop x86_64 is inconclusive and shows only 0.3459ns
> slow-down, as this is below measurement accuracy of system.

Yes, I have had time to micro-benchmark this (on Intel), and given I
cannot demonstrate statistically significant slowdown, I'm going to
accept this change to the fast-path of page_pool.

For series:

Acked-by: Jesper Dangaard Brouer <brouer@redhat.com>

(I'm going to ack each patch, in-order to make patchwork pickup the
ACK, and hopefully make this easier for DaveM).


> v2->v3:
>  - Rebase on top of latest net-next and Jesper's page pool object
>    release patchset [2]
>  - No code changes
>  - Performance analysis by Jesper added to the cover letter.
> 
> v1->v2:
>   - Drop last patch, as requested by Ilias and Jesper.
>   - Fix documentation's performance numbers order.

> 
> [1] https://github.com/xdp-project/xdp-project/blob/master/areas/mem/page_pool04_inflight_changes.org#performance-notes
> [2] https://patchwork.ozlabs.org/cover/1192098/



-- 
Best regards,
  Jesper Dangaard Brouer
  MSc.CS, Principal Kernel Engineer at Red Hat
  LinkedIn: http://www.linkedin.com/in/brouer


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH net-next V3 1/3] page_pool: Add API to update numa node
  2019-11-20  0:15 ` [PATCH net-next V3 1/3] page_pool: Add API to update numa node Saeed Mahameed
@ 2019-11-20 12:15   ` Jesper Dangaard Brouer
  0 siblings, 0 replies; 9+ messages in thread
From: Jesper Dangaard Brouer @ 2019-11-20 12:15 UTC (permalink / raw)
  To: Saeed Mahameed
  Cc: David S. Miller, netdev, Jonathan Lemon, Ilias Apalodimas, brouer

On Wed, 20 Nov 2019 00:15:17 +0000
Saeed Mahameed <saeedm@mellanox.com> 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@mellanox.com>
> Acked-by: Jonathan Lemon <jonathan.lemon@gmail.com>
> Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>

Acked-by: Jesper Dangaard Brouer <brouer@redhat.com>

-- 
Best regards,
  Jesper Dangaard Brouer
  MSc.CS, Principal Kernel Engineer at Red Hat
  LinkedIn: http://www.linkedin.com/in/brouer


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH net-next V3 2/3] page_pool: Don't recycle non-reusable pages
  2019-11-20  0:15 ` [PATCH net-next V3 2/3] page_pool: Don't recycle non-reusable pages Saeed Mahameed
@ 2019-11-20 12:16   ` Jesper Dangaard Brouer
  0 siblings, 0 replies; 9+ messages in thread
From: Jesper Dangaard Brouer @ 2019-11-20 12:16 UTC (permalink / raw)
  To: Saeed Mahameed
  Cc: David S. Miller, netdev, Jonathan Lemon, Ilias Apalodimas, brouer

On Wed, 20 Nov 2019 00:15:19 +0000
Saeed Mahameed <saeedm@mellanox.com> wrote:

> A page is NOT reusable when at least one of the following is true:
> 1) allocated when system was under some pressure. (page_is_pfmemalloc)
> 2) belongs to a different NUMA node than pool->p.nid.
> 
> To update pool->p.nid users should call page_pool_update_nid().
> 
> Holding on to such pages in the pool will hurt the consumer performance
> when the pool migrates to a different numa node.
> 
> Performance testing:
> XDP drop/tx rate and TCP single/multi stream, on mlx5 driver
> while migrating rx ring irq from close to far numa:
> 
> mlx5 internal page cache was locally disabled to get pure page pool
> results.
> 
> CPU: Intel(R) Xeon(R) CPU E5-2603 v4 @ 1.70GHz
> NIC: Mellanox Technologies MT27700 Family [ConnectX-4] (100G)
> 
> XDP Drop/TX single core:
> NUMA  | XDP  | Before    | After
> ---------------------------------------
> Close | Drop | 11   Mpps | 10.9 Mpps
> Far   | Drop | 4.4  Mpps | 5.8  Mpps
> 
> Close | TX   | 6.5 Mpps  | 6.5 Mpps
> Far   | TX   | 3.5 Mpps  | 4  Mpps
> 
> Improvement is about 30% drop packet rate, 15% tx packet rate for numa
> far test.
> No degradation for numa close tests.
> 
> TCP single/multi cpu/stream:
> NUMA  | #cpu | Before  | After
> --------------------------------------
> Close | 1    | 18 Gbps | 18 Gbps
> Far   | 1    | 15 Gbps | 18 Gbps
> Close | 12   | 80 Gbps | 80 Gbps
> Far   | 12   | 68 Gbps | 80 Gbps
> 
> In all test cases we see improvement for the far numa case, and no
> impact on the close numa case.
> 
> The impact of adding a check per page is very negligible, and shows no
> performance degradation whatsoever, also functionality wise it seems more
> correct and more robust for page pool to verify when pages should be
> recycled, since page pool can't guarantee where pages are coming from.
> 
> Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
> Acked-by: Jonathan Lemon <jonathan.lemon@gmail.com>
> Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>

Acked-by: Jesper Dangaard Brouer <brouer@redhat.com>

-- 
Best regards,
  Jesper Dangaard Brouer
  MSc.CS, Principal Kernel Engineer at Red Hat
  LinkedIn: http://www.linkedin.com/in/brouer


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH net-next V3 3/3] net/mlx5e: Rx, Update page pool numa node when changed
  2019-11-20  0:15 ` [PATCH net-next V3 3/3] net/mlx5e: Rx, Update page pool numa node when changed Saeed Mahameed
@ 2019-11-20 12:16   ` Jesper Dangaard Brouer
  0 siblings, 0 replies; 9+ messages in thread
From: Jesper Dangaard Brouer @ 2019-11-20 12:16 UTC (permalink / raw)
  To: Saeed Mahameed; +Cc: David S. Miller, netdev, Jonathan Lemon, brouer

On Wed, 20 Nov 2019 00:15:21 +0000
Saeed Mahameed <saeedm@mellanox.com> wrote:

> Once every napi poll cycle, check if numa node is different than
> the page pool's numa id, and update it using page_pool_update_nid().
> 
> Alternatively, we could have registered an irq affinity change handler,
> but page_pool_update_nid() must be called from napi context anyways, so
> the handler won't actually help.
> 
> Performance testing:
> XDP drop/tx rate and TCP single/multi stream, on mlx5 driver
> while migrating rx ring irq from close to far numa:
> 
> mlx5 internal page cache was locally disabled to get pure page pool
> results.
> 
> CPU: Intel(R) Xeon(R) CPU E5-2603 v4 @ 1.70GHz
> NIC: Mellanox Technologies MT27700 Family [ConnectX-4] (100G)
> 
> XDP Drop/TX single core:
> NUMA  | XDP  | Before    | After
> ---------------------------------------
> Close | Drop | 11   Mpps | 10.9 Mpps
> Far   | Drop | 4.4  Mpps | 5.8  Mpps
> 
> Close | TX   | 6.5 Mpps  | 6.5 Mpps
> Far   | TX   | 3.5 Mpps  | 4  Mpps
> 
> Improvement is about 30% drop packet rate, 15% tx packet rate for numa
> far test.
> No degradation for numa close tests.
> 
> TCP single/multi cpu/stream:
> NUMA  | #cpu | Before  | After
> --------------------------------------
> Close | 1    | 18 Gbps | 18 Gbps
> Far   | 1    | 15 Gbps | 18 Gbps
> Close | 12   | 80 Gbps | 80 Gbps
> Far   | 12   | 68 Gbps | 80 Gbps
> 
> In all test cases we see improvement for the far numa case, and no
> impact on the close numa case.
> 
> Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
> Acked-by: Jonathan Lemon <jonathan.lemon@gmail.com>

Acked-by: Jesper Dangaard Brouer <brouer@redhat.com>

-- 
Best regards,
  Jesper Dangaard Brouer
  MSc.CS, Principal Kernel Engineer at Red Hat
  LinkedIn: http://www.linkedin.com/in/brouer


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH net-next V3 0/3] page_pool: API for numa node change handling
  2019-11-20 12:15 ` [PATCH net-next V3 0/3] page_pool: API for numa node change handling Jesper Dangaard Brouer
@ 2019-11-20 19:48   ` David Miller
  0 siblings, 0 replies; 9+ messages in thread
From: David Miller @ 2019-11-20 19:48 UTC (permalink / raw)
  To: brouer; +Cc: saeedm, netdev

From: Jesper Dangaard Brouer <brouer@redhat.com>
Date: Wed, 20 Nov 2019 13:15:12 +0100

> On Wed, 20 Nov 2019 00:15:14 +0000
> Saeed Mahameed <saeedm@mellanox.com> wrote:
> 
>> Performance analysis and conclusions by Jesper [1]:
>> Impact on XDP drop x86_64 is inconclusive and shows only 0.3459ns
>> slow-down, as this is below measurement accuracy of system.
> 
> Yes, I have had time to micro-benchmark this (on Intel), and given I
> cannot demonstrate statistically significant slowdown, I'm going to
> accept this change to the fast-path of page_pool.
> 
> For series:
> 
> Acked-by: Jesper Dangaard Brouer <brouer@redhat.com>

Series applied.

> (I'm going to ack each patch, in-order to make patchwork pickup the
> ACK, and hopefully make this easier for DaveM).

Thanks Jesper.

I usually still look for replies to the introduction posting and collects
ACKs I find :-)

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2019-11-20 19:48 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-11-20  0:15 [PATCH net-next V3 0/3] page_pool: API for numa node change handling Saeed Mahameed
2019-11-20  0:15 ` [PATCH net-next V3 1/3] page_pool: Add API to update numa node Saeed Mahameed
2019-11-20 12:15   ` Jesper Dangaard Brouer
2019-11-20  0:15 ` [PATCH net-next V3 2/3] page_pool: Don't recycle non-reusable pages Saeed Mahameed
2019-11-20 12:16   ` Jesper Dangaard Brouer
2019-11-20  0:15 ` [PATCH net-next V3 3/3] net/mlx5e: Rx, Update page pool numa node when changed Saeed Mahameed
2019-11-20 12:16   ` Jesper Dangaard Brouer
2019-11-20 12:15 ` [PATCH net-next V3 0/3] page_pool: API for numa node change handling Jesper Dangaard Brouer
2019-11-20 19:48   ` David Miller

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.