Messages in this thread | | | From | Jesper Dangaard Brouer <> | Date | Fri, 14 Jul 2023 15:13:15 +0200 | Subject | Re: [PATCH net-next] net: mana: Add page pool for RX buffers |
| |
On 14/07/2023 14.51, Haiyang Zhang wrote: > > >> -----Original Message----- >> From: Jesper Dangaard Brouer <jbrouer@redhat.com> >> On 14/07/2023 05.53, Jakub Kicinski wrote: >>> On Thu, 13 Jul 2023 14:48:45 +0000 Haiyang Zhang wrote: >>>> Add page pool for RX buffers for faster buffer cycle and reduce CPU >>>> usage. >>>> >>>> Get an extra ref count of a page after allocation, so after upper >>>> layers put the page, it's still referenced by the pool. We can reuse >>>> it as RX buffer without alloc a new page. >>> >>> Please use the real page_pool API from include/net/page_pool.h >>> We've moved past every driver reinventing the wheel, sorry. >> >> +1 >> >> Quoting[1]: Documentation/networking/page_pool.rst >> >> Basic use involves replacing alloc_pages() calls with the >> page_pool_alloc_pages() call. >> Drivers should use page_pool_dev_alloc_pages() replacing >> dev_alloc_pages(). > > Thank Jakub and Jesper for the reviews. > I'm aware of the page_pool.rst doc, and actually tried it before this > patch, but I got lower perf. If I understand correctly, we should call > page_pool_release_page() before passing the SKB to napi_gro_receive(). > > I found the page_pool_dev_alloc_pages() goes through the slow path, > because the page_pool_release_page() let the page leave the pool. > > Do we have to call page_pool_release_page() before passing the SKB > to napi_gro_receive()? Any better way to recycle the pages from the > upper layer of non-XDP case? >
Today SKB "upper layers" can recycle page_pool backed packet data/page.
Just use skb_mark_for_recycle(skb), then you don't need page_pool_release_page().
I guess, we should update the documentation, mentioning this.
--Jesper
| |