Message ID | 20240325160635.3215855-1-aleksander.lobakin@intel.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 341ee1a584c8f55068cc5d7024cf1711ab81e388 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net-next] net: pin system percpu page_pools to the corresponding NUMA nodes | expand |
Hello: This patch was applied to netdev/net-next.git (main) by Jakub Kicinski <kuba@kernel.org>: On Mon, 25 Mar 2024 17:06:35 +0100 you wrote: > System page_pools are percpu and one instance can be used only on > one CPU. > %NUMA_NO_NODE is fine for allocating pages, as the PP core always > allocates local pages in this case. But for the struct &page_pool > itself, this node ID means they are allocated on the boot CPU, > which may belong to a different node than the target CPU. > Pin system page_pools to the corresponding nodes when creating, > so that all the allocated data will always be local. Use > cpu_to_mem() to account memless nodes. > Nodes != 0 win some Kpps when testing with xdp-trafficgen. > > [...] Here is the summary with links: - [net-next] net: pin system percpu page_pools to the corresponding NUMA nodes https://git.kernel.org/netdev/net-next/c/341ee1a584c8 You are awesome, thank you!
diff --git a/net/core/dev.c b/net/core/dev.c index 9a67003e49db..fefa484d715a 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -11712,7 +11712,7 @@ static int net_page_pool_create(int cpuid) struct page_pool_params page_pool_params = { .pool_size = SYSTEM_PERCPU_PAGE_POOL_SIZE, .flags = PP_FLAG_SYSTEM_POOL, - .nid = NUMA_NO_NODE, + .nid = cpu_to_mem(cpuid), }; struct page_pool *pp_ptr;
System page_pools are percpu and one instance can be used only on one CPU. %NUMA_NO_NODE is fine for allocating pages, as the PP core always allocates local pages in this case. But for the struct &page_pool itself, this node ID means they are allocated on the boot CPU, which may belong to a different node than the target CPU. Pin system page_pools to the corresponding nodes when creating, so that all the allocated data will always be local. Use cpu_to_mem() to account memless nodes. Nodes != 0 win some Kpps when testing with xdp-trafficgen. Signed-off-by: Alexander Lobakin <aleksander.lobakin@intel.com> --- net/core/dev.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)