netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Olivier Langlois <olivier@trillion01.com>
To: Stefan Roesch <shr@devkernel.io>,
	io-uring@vger.kernel.org,  kernel-team@fb.com
Cc: axboe@kernel.dk, ammarfaizi2@gnuweeb.org, netdev@vger.kernel.org,
	 kuba@kernel.org
Subject: Re: [PATCH v15 0/7] io_uring: add napi busy polling support
Date: Tue, 30 Jan 2024 16:20:28 -0500	[thread overview]
Message-ID: <58bde897e724efd7771229734d8ad2fb58b3ca48.camel@trillion01.com> (raw)
In-Reply-To: <20230608163839.2891748-1-shr@devkernel.io>

Hi,

I was wondering what did happen to this patch submission...

It seems like Stefan did put a lot of effort in addressing every
reported issue for several weeks/months...

and then nothing... as if this patch has never been reviewed by
anyone...

has it been decided to not integrate NAPI busy looping in io_uring
privately finally?

On Thu, 2023-06-08 at 09:38 -0700, Stefan Roesch wrote:
> This adds the napi busy polling support in io_uring.c. It adds a new
> napi_list to the io_ring_ctx structure. This list contains the list
> of
> napi_id's that are currently enabled for busy polling. This list is
> used to determine which napi id's enabled busy polling. For faster
> access it also adds a hash table.
> 
> When a new napi id is added, the hash table is used to locate if
> the napi id has already been added. When processing the busy poll
> loop the list is used to process the individual elements.
> 
> io-uring allows specifying two parameters:
> - busy poll timeout and
> - prefer busy poll to call of io_napi_busy_loop()
> This sets the above parameters for the ring. The settings are passed
> with a new structure io_uring_napi.
> 
> There is also a corresponding liburing patch series, which enables
> this
> feature. The name of the series is "liburing: add add api for napi
> busy
> poll timeout". It also contains two programs to test the this.
> 
> Testing has shown that the round-trip times are reduced to 38us from
> 55us by enabling napi busy polling with a busy poll timeout of 100us.
> More detailled results are part of the commit message of the first
> patch.
> 
> Changes:
> - V15:
>   - Combined _napi_busy_loop() and __napi_busy_loop() function
>   - Rephrased comment
> - V14:
>   - Rephrased comment for napi_busy_loop_rcu() funnction
>   - Added new function _napi_busy_loop() to remove code
>     duplication in napi_busy_loop() and napi_busy_loop_rcu()
> - V13:
>   - split off __napi_busy_loop() from napi_busy_loop()
>   - introduce napi_busy_loop_no_lock()
>   - use napi_busy_loop_no_lock in io_napi_blocking_busy_loop
> - V12:
>   - introduce io_napi_hash_find()
>   - use rcu for changes to the hash table
>   - use rcu for searching if a napi id is in the napi hash table
>   - use rcu hlist functions for adding and removing items from the
> hash
>     table
>   - add stale entry detection in __io_napi_do_busy_loop and remove
> stale
>     entries in io_napi_blocking_busy_loop() and
> io_napi_sqpoll_busy_loop()
>   - create io_napi_remove_stale() and __io_napi_remove_stale()
>   - __io_napi_do_busy_loop() takes additional loop_end_arg and does
> stale
>     entry detection
>   - io_napi_multi_busy_loop is removed. Logic is moved to
>     io_napi_blocking_busy_loop()
>   - io_napi_free uses rcu function to free
>   - io_napi_busy_loop no longer splices
>   - io_napi_sqpoll_busy_poll uses rcu
> - V11:
>   - Fixed long comment lines and whitespace issues
>   - Refactor new code io_cqring_wait()
>   - Refactor io_napi_adjust_timeout() and remove adjust_timeout
>   - Rename io_napi_adjust_timeout to __io_napi_adjust_timeout
>   - Add new function io_napi_adjust_timeout
>   - Cleanup calls to list_is_singular() in io_napi_multi_busy_loop()
>     and io_napi_blocking_busy_loop()
>   - Cleanup io_napi_busy_loop_should_end()
>   - Rename __io_napi_busy_loop to __io_napi_do_busy_loop() 
> - V10:
>   - Refreshed to io-uring/for-6.4
>   - Repeated performance measurements for 6.4 (same/similar results)
> - V9:
>   - refreshed to io-uring/for-6.3
>   - folded patch 2 and 3 into patch 4
>   - fixed commit description for last 2 patches
>   - fixed some whitespace issues
>   - removed io_napi_busy_loop_on helper
>   - removed io_napi_setup_busy helper
>   - renamed io_napi_end_busy_loop to io_napi_busy_loop
>   - removed NAPI_LIST_HEAD macro
>   - split io_napi_blocking_busy_loop into two functions
>   - added io_napi function
>   - comment for sqpoll check
> - V8:
>   - added new file napi.c and add napi functions to this file
>   - added NAPI_LIST_HEAD function so no ifdef is necessary
>   - added io_napi_init and io_napi_free function
>   - added io_napi_setup_busy loop helper function
>   - added io_napi_adjust_busy_loop helper function
>   - added io_napi_end_busy_loop helper function
>   - added io_napi_sqpoll_busy_poll helper function
>   - some of the definitions in napi.h are macros to avoid ifdef
>     definitions in io_uring.c, poll.c and sqpoll.c
>   - changed signature of io_napi_add function
>   - changed size of hashtable to 16. The number of entries is limited
>     by the number of nic queues.
>   - Removed ternary in io_napi_blocking_busy_loop
>   - Rewrote io_napi_blocking_busy_loop to make it more readable
>   - Split off 3 more patches
> - V7:
>   - allow unregister with NULL value for arg parameter
>   - return -EOPNOTSUPP if CONFIG_NET_RX_BUSY_POLL is not enabled
> - V6:
>   - Add a hash table on top of the list for faster access during the
>     add operation. The linked list and the hash table use the same
>     data structure
> - V5:
>   - Refreshed to 6.1-rc6
>   - Use copy_from_user instead of memdup/kfree
>   - Removed the moving of napi_busy_poll_to
>   - Return -EINVAL if any of the reserved or padded fields are not 0.
> - V4:
>   - Pass structure for napi config, instead of individual parameters
> - V3:
>   - Refreshed to 6.1-rc5
>   - Added a new io-uring api for the prefer napi busy poll api and
> wire
>     it to io_napi_busy_loop().
>   - Removed the unregister (implemented as register)
>   - Added more performance results to the first commit message.
> - V2:
>   - Add missing defines if CONFIG_NET_RX_BUSY_POLL is not defined
>   - Changes signature of function io_napi_add_list to static inline
>     if CONFIG_NET_RX_BUSY_POLL is not defined
>   - define some functions as static
> 
> 
> Stefan Roesch (7):
>   net: split off __napi_busy_poll from napi_busy_poll
>   net: add napi_busy_loop_rcu()
>   io-uring: move io_wait_queue definition to header file
>   io-uring: add napi busy poll support
>   io-uring: add sqpoll support for napi busy poll
>   io_uring: add register/unregister napi function
>   io_uring: add prefer busy poll to register and unregister napi api
> 
>  include/linux/io_uring_types.h |  11 ++
>  include/net/busy_poll.h        |   4 +
>  include/uapi/linux/io_uring.h  |  12 ++
>  io_uring/Makefile              |   1 +
>  io_uring/io_uring.c            |  41 ++--
>  io_uring/io_uring.h            |  26 +++
>  io_uring/napi.c                | 331
> +++++++++++++++++++++++++++++++++
>  io_uring/napi.h                | 104 +++++++++++
>  io_uring/poll.c                |   2 +
>  io_uring/sqpoll.c              |   4 +
>  net/core/dev.c                 |  34 +++-
>  11 files changed, 544 insertions(+), 26 deletions(-)
>  create mode 100644 io_uring/napi.c
>  create mode 100644 io_uring/napi.h
> 
> 
> base-commit: f026be0e1e881e3395c3d5418ffc8c2a2203c3f3


  parent reply	other threads:[~2024-01-30 22:24 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-08 16:38 [PATCH v15 0/7] io_uring: add napi busy polling support Stefan Roesch
2023-06-08 16:38 ` [PATCH v15 1/7] net: split off __napi_busy_poll from napi_busy_poll Stefan Roesch
2023-06-08 19:33   ` kernel test robot
2023-06-08 16:38 ` [PATCH v15 2/7] net: add napi_busy_loop_rcu() Stefan Roesch
2023-06-08 16:38 ` [PATCH v15 3/7] io-uring: move io_wait_queue definition to header file Stefan Roesch
2023-06-08 16:38 ` [PATCH v15 4/7] io-uring: add napi busy poll support Stefan Roesch
2023-06-08 16:38 ` [PATCH v15 5/7] io-uring: add sqpoll support for napi busy poll Stefan Roesch
2023-06-08 16:38 ` [PATCH v15 6/7] io_uring: add register/unregister napi function Stefan Roesch
2023-06-08 16:38 ` [PATCH v15 7/7] io_uring: add prefer busy poll to register and unregister napi api Stefan Roesch
2024-01-30 21:20 ` Olivier Langlois [this message]
2024-01-30 22:59   ` [PATCH v15 0/7] io_uring: add napi busy polling support Jens Axboe
2024-01-31  5:30     ` Olivier Langlois
2024-01-31 17:22     ` Olivier Langlois
2024-01-31 17:32       ` Jens Axboe
2024-01-31 17:59         ` Olivier Langlois
2024-01-31 19:56           ` Olivier Langlois
2024-01-31 20:52             ` Jens Axboe
2024-01-31 21:03               ` Olivier Langlois
2024-02-02 20:20               ` Olivier Langlois
2024-02-02 22:58                 ` Jens Axboe

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=58bde897e724efd7771229734d8ad2fb58b3ca48.camel@trillion01.com \
    --to=olivier@trillion01.com \
    --cc=ammarfaizi2@gnuweeb.org \
    --cc=axboe@kernel.dk \
    --cc=io-uring@vger.kernel.org \
    --cc=kernel-team@fb.com \
    --cc=kuba@kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=shr@devkernel.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).