public inbox for io-uring@vger.kernel.org
 help / color / mirror / Atom feed
From: Pavel Begunkov <asml.silence@gmail.com>
To: Jens Axboe <axboe@kernel.dk>, io-uring@vger.kernel.org
Subject: Re: [PATCH 2/4] io_uring: move locking inside overflow posting
Date: Wed, 14 May 2025 18:18:36 +0100	[thread overview]
Message-ID: <d63f55e8-7453-46fb-a85a-03e6de14402f@gmail.com> (raw)
In-Reply-To: <d6634082-86c0-4393-b270-ede60397695e@kernel.dk>

On 5/14/25 17:42, Jens Axboe wrote:
> On 5/14/25 2:07 AM, Pavel Begunkov wrote:
...>> +static bool io_cqring_event_overflow(struct io_ring_ctx *ctx, bool locked,
>> +				     u64 user_data, s32 res, u32 cflags,
>> +				     u64 extra1, u64 extra2)
>> +{
>> +	bool queued;
>> +
>> +	if (locked) {
>> +		queued = __io_cqring_event_overflow(ctx, user_data, res, cflags,
>> +						    extra1, extra2);
>> +	} else {
>> +		spin_lock(&ctx->completion_lock);
>> +		queued = __io_cqring_event_overflow(ctx, user_data, res, cflags,
>> +						    extra1, extra2);
>> +		spin_unlock(&ctx->completion_lock);
>> +	}
>> +	return queued;
>> +}
> 
> Really not a fan of passing in locking state and having a split helper
> like that.

I'd agree in general, but it's the same thing that's already in
__io_submit_flush_completions(), just with a named argument
instead of backflipping on ctx->lockless_cq.

> It's also pretty unwieldy with 7 arguments.

It's 6 vs 7, not much difference, and the real problem here is
passing all cqe parts as separate arguments, which this series
doesn't touch.

> Overall, why do we care about atomic vs non-atomic allocations for
> overflows? If you're hitting overflow, you've messed up... And if it's

Not really, it's not far fetched to overflow with multishots unless
you're overallocating CQ quite a bit, especially if traffic is not so
homogeneous and has spikes. Expensive and should be minimised b/c of
that, but it's still reasonably possible in a well structured app.

> about cost, gfp atomic alloc will be predictable, vs GFP_KERNEL which
> can be a lot more involved.

Not the cost but reliability. If overflowing fails, the userspace can't
reasonably do anything to recover, so either terminate or leak. And
it's taking the atomic reserves from those who actually need it
like irq.

-- 
Pavel Begunkov


  reply	other threads:[~2025-05-14 17:17 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-05-14  8:07 [PATCH 0/4] overflow completion enhancements Pavel Begunkov
2025-05-14  8:07 ` [PATCH 1/4] io_uring: open code io_req_cqe_overflow() Pavel Begunkov
2025-05-14  8:07 ` [PATCH 2/4] io_uring: move locking inside overflow posting Pavel Begunkov
2025-05-14 16:42   ` Jens Axboe
2025-05-14 17:18     ` Pavel Begunkov [this message]
2025-05-14 19:25       ` Jens Axboe
2025-05-14 20:00         ` Pavel Begunkov
2025-05-14 20:05           ` Jens Axboe
2025-05-14 21:52             ` Jens Axboe
2025-05-15 11:04               ` Pavel Begunkov
2025-05-14  8:07 ` [PATCH 3/4] io_uring: alloc overflow entry before locking Pavel Begunkov
2025-05-14  8:07 ` [PATCH 4/4] io_uring: add lockdep warning for overflow posting Pavel Begunkov

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=d63f55e8-7453-46fb-a85a-03e6de14402f@gmail.com \
    --to=asml.silence@gmail.com \
    --cc=axboe@kernel.dk \
    --cc=io-uring@vger.kernel.org \
    /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