]> www.infradead.org Git - users/willy/xarray.git/commit
io_uring/sqpoll: wait on sqd->wait for thread parking
authorJens Axboe <axboe@kernel.dk>
Mon, 28 Oct 2024 19:18:27 +0000 (13:18 -0600)
committerJens Axboe <axboe@kernel.dk>
Tue, 29 Oct 2024 19:43:27 +0000 (13:43 -0600)
commitb898b8c99ead1ce8bee95083bba296e4a86a6c05
treef9726b0321d5d042fe987c68b170ff3b8aced273
parent79cfe9e59c2a12c3b3faeeefe38d23f3d8030972
io_uring/sqpoll: wait on sqd->wait for thread parking

io_sqd_handle_event() just does a mutex unlock/lock dance when it's
supposed to park, somewhat relying on full ordering with the thread
trying to park it which does a similar unlock/lock dance on sqd->lock.
However, with adaptive spinning on mutexes, this can waste an awful
lot of time. Normally this isn't very noticeable, as parking and
unparking the thread isn't a common (or fast path) occurence. However,
in testing ring resizing, it's testing exactly that, as each resize
will require the SQPOLL to safely park and unpark.

Have io_sq_thread_park() explicitly wait on sqd->park_pending being
zero before attempting to grab the sqd->lock again.

In a resize test, this brings the runtime of SQPOLL down from about
60 seconds to a few seconds, just like the !SQPOLL tests. And saves
a ton of spinning time on the mutex, on both sides.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
io_uring/sqpoll.c