Re: [PATCH v3 00/26] Split netmem from struct page

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2023/1/11 12:21, Matthew Wilcox (Oracle) wrote:
> The MM subsystem is trying to reduce struct page to a single pointer.
> The first step towards that is splitting struct page by its individual
> users, as has already been done with folio and slab.  This patchset does
> that for netmem which is used for page pools.

As page pool is only used for rx side in the net stack depending on the
driver, a lot more memory for the net stack is from page_frag_alloc_align(),
kmem cache, etc.
naming it netmem seems a little overkill, perhaps a more specific name for
the page pool? such as pp_cache.

@Jesper & Ilias
Any better idea?
And it seem some API may need changing too, as we are not pooling 'pages'
now.

> 
> There are some relatively significant reductions in kernel text size
> from these changes.  They don't appear to affect performance at all,
> but it's nice to save a bit of memory.
> 
> v3:
>  - Rebase to next-20230110
>  - Add received Acked-by and Reviewed-by tags (thanks!)
>  - Mark compat functions in page_pool.h (Ilias)
>  - Correct a patch title
>  - Convert hns3 driver (and page_pool_dev_alloc_frag())
>  - Make page_pool_recycle_direct() accept a netmem or page pointer
> 
> Matthew Wilcox (Oracle) (26):
>   netmem: Create new type
>   netmem: Add utility functions
>   page_pool: Add netmem_set_dma_addr() and netmem_get_dma_addr()
>   page_pool: Convert page_pool_release_page() to
>     page_pool_release_netmem()
>   page_pool: Start using netmem in allocation path.
                                                    ^
nit: there is a '.' at the end of patch titile.

>   page_pool: Convert page_pool_return_page() to
>     page_pool_return_netmem()
>   page_pool: Convert __page_pool_put_page() to __page_pool_put_netmem()
>   page_pool: Convert pp_alloc_cache to contain netmem
>   page_pool: Convert page_pool_defrag_page() to
>     page_pool_defrag_netmem()
>   page_pool: Convert page_pool_put_defragged_page() to netmem
>   page_pool: Convert page_pool_empty_ring() to use netmem
>   page_pool: Convert page_pool_alloc_pages() to page_pool_alloc_netmem()
>   page_pool: Convert page_pool_dma_sync_for_device() to take a netmem
>   page_pool: Convert page_pool_recycle_in_cache() to netmem
>   page_pool: Remove __page_pool_put_page()
>   page_pool: Use netmem in page_pool_drain_frag()
>   page_pool: Convert page_pool_return_skb_page() to use netmem
>   page_pool: Allow page_pool_recycle_direct() to take a netmem or a page
>   page_pool: Convert frag_page to frag_nmem
>   xdp: Convert to netmem
>   mm: Remove page pool members from struct page
>   page_pool: Pass a netmem to init_callback()
>   net: Add support for netmem in skb_frag
>   mvneta: Convert to netmem
>   mlx5: Convert to netmem
>   hns3: Convert to netmem
> 
>  Documentation/networking/page_pool.rst        |   5 +
>  .../net/ethernet/hisilicon/hns3/hns3_enet.c   |  16 +-
>  drivers/net/ethernet/marvell/mvneta.c         |  48 +--
>  drivers/net/ethernet/mellanox/mlx5/core/en.h  |  10 +-
>  .../net/ethernet/mellanox/mlx5/core/en/txrx.h |   4 +-
>  .../net/ethernet/mellanox/mlx5/core/en/xdp.c  |  24 +-
>  .../net/ethernet/mellanox/mlx5/core/en/xdp.h  |   2 +-
>  .../net/ethernet/mellanox/mlx5/core/en_main.c |  12 +-
>  .../net/ethernet/mellanox/mlx5/core/en_rx.c   | 130 +++++----
>  include/linux/mm_types.h                      |  22 --
>  include/linux/skbuff.h                        |  11 +
>  include/net/page_pool.h                       | 228 ++++++++++++---
>  include/trace/events/page_pool.h              |  28 +-
>  net/bpf/test_run.c                            |   4 +-
>  net/core/page_pool.c                          | 274 +++++++++---------
>  net/core/xdp.c                                |   7 +-
>  16 files changed, 493 insertions(+), 332 deletions(-)
> 




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux