From: Hao Xu <hao.xu@linux.dev>
To: Pavel Begunkov <asml.silence@gmail.com>, io-uring@vger.kernel.org
Cc: Jens Axboe <axboe@kernel.dk>
Subject: Re: [PATCH v3] io_uring: switch cancel_hash to use per entry spinlock
Date: Sat, 11 Jun 2022 12:34:16 +0800 [thread overview]
Message-ID: <8d60fad9-6445-8a6b-d051-947f8ea04582@linux.dev> (raw)
In-Reply-To: <37d73555-197b-29e1-d2cc-b7313501a394@gmail.com>
On 6/10/22 18:21, Pavel Begunkov wrote:
> On 6/8/22 12:12, Hao Xu wrote:
>> From: Hao Xu <howeyxu@tencent.com>
>>
>> Add a new io_hash_bucket structure so that each bucket in cancel_hash
>> has separate spinlock. Use per entry lock for cancel_hash, this removes
>> some completion lock invocation and remove contension between different
>> cancel_hash entries.
>>
>> Signed-off-by: Hao Xu <howeyxu@tencent.com>
>> ---
>>
>> v1->v2:
>> - Add per entry lock for poll/apoll task work code which was missed
>> in v1
>> - add an member in io_kiocb to track req's indice in cancel_hash
>>
>> v2->v3:
>> - make struct io_hash_bucket align with cacheline to avoid cacheline
>> false sharing.
>> - re-calculate hash value when deleting an entry from cancel_hash.
>> (cannot leverage struct io_poll to store the indice since it's
>> already 64 Bytes)
>>
>> io_uring/cancel.c | 14 +++++++--
>> io_uring/cancel.h | 6 ++++
>> io_uring/fdinfo.c | 9 ++++--
>> io_uring/io_uring.c | 8 +++--
>> io_uring/io_uring_types.h | 2 +-
>> io_uring/poll.c | 64 +++++++++++++++++++++------------------
>> 6 files changed, 65 insertions(+), 38 deletions(-)
>>
>> diff --git a/io_uring/cancel.c b/io_uring/cancel.c
>> index 83cceb52d82d..bced5d6b9294 100644
>> --- a/io_uring/cancel.c
>> +++ b/io_uring/cancel.c
>> @@ -93,14 +93,14 @@ int io_try_cancel(struct io_kiocb *req, struct
>> io_cancel_data *cd)
>> if (!ret)
>> return 0;
>> - spin_lock(&ctx->completion_lock);
>> ret = io_poll_cancel(ctx, cd);
>> if (ret != -ENOENT)
>> goto out;
>> + spin_lock(&ctx->completion_lock);
>> if (!(cd->flags & IORING_ASYNC_CANCEL_FD))
>> ret = io_timeout_cancel(ctx, cd);
>> -out:
>> spin_unlock(&ctx->completion_lock);
>> +out:
>> return ret;
>> }
>> @@ -192,3 +192,13 @@ int io_async_cancel(struct io_kiocb *req,
>> unsigned int issue_flags)
>> io_req_set_res(req, ret, 0);
>> return IOU_OK;
>> }
>> +
>> +inline void init_hash_table(struct io_hash_bucket *hash_table,
>> unsigned size)
>
> Not inline, it can break builds
>
What do you mean? It's compiled well.
next prev parent reply other threads:[~2022-06-11 4:34 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-08 11:12 [PATCH v3] io_uring: switch cancel_hash to use per entry spinlock Hao Xu
2022-06-08 11:27 ` Pavel Begunkov
2022-06-10 10:21 ` Pavel Begunkov
2022-06-10 15:45 ` Hao Xu
2022-06-10 16:10 ` Pavel Begunkov
2022-06-10 17:40 ` Hao Xu
2022-06-10 17:45 ` Pavel Begunkov
2022-06-11 4:34 ` Hao Xu [this message]
2022-06-11 13:18 ` 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=8d60fad9-6445-8a6b-d051-947f8ea04582@linux.dev \
--to=hao.xu@linux.dev \
--cc=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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.