* [PATCH 1/2] io_uring/rsrc: declare io_find_buf_node() in header file
@ 2025-03-01 0:16 Caleb Sander Mateos
2025-03-01 0:16 ` [PATCH 2/2] io_uring/nop: use io_find_buf_node() Caleb Sander Mateos
` (2 more replies)
0 siblings, 3 replies; 17+ messages in thread
From: Caleb Sander Mateos @ 2025-03-01 0:16 UTC (permalink / raw)
To: Jens Axboe, Pavel Begunkov; +Cc: Caleb Sander Mateos, io-uring, linux-kernel
Declare io_find_buf_node() in io_uring/rsrc.h so it can be called from
other files.
Signed-off-by: Caleb Sander Mateos <[email protected]>
---
io_uring/rsrc.c | 4 ++--
io_uring/rsrc.h | 2 ++
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/io_uring/rsrc.c b/io_uring/rsrc.c
index 45bfb37bca1e..4c4f57cd77f9 100644
--- a/io_uring/rsrc.c
+++ b/io_uring/rsrc.c
@@ -1066,12 +1066,12 @@ static int io_import_fixed(int ddir, struct iov_iter *iter,
}
return 0;
}
-static inline struct io_rsrc_node *io_find_buf_node(struct io_kiocb *req,
- unsigned issue_flags)
+struct io_rsrc_node *io_find_buf_node(struct io_kiocb *req,
+ unsigned issue_flags)
{
struct io_ring_ctx *ctx = req->ctx;
struct io_rsrc_node *node;
if (req->flags & REQ_F_BUF_NODE)
diff --git a/io_uring/rsrc.h b/io_uring/rsrc.h
index 6fe7b9e615bf..8f912aa6bcc9 100644
--- a/io_uring/rsrc.h
+++ b/io_uring/rsrc.h
@@ -53,10 +53,12 @@ void io_rsrc_cache_free(struct io_ring_ctx *ctx);
struct io_rsrc_node *io_rsrc_node_alloc(struct io_ring_ctx *ctx, int type);
void io_free_rsrc_node(struct io_ring_ctx *ctx, struct io_rsrc_node *node);
void io_rsrc_data_free(struct io_ring_ctx *ctx, struct io_rsrc_data *data);
int io_rsrc_data_alloc(struct io_rsrc_data *data, unsigned nr);
+struct io_rsrc_node *io_find_buf_node(struct io_kiocb *req,
+ unsigned issue_flags);
int io_import_reg_buf(struct io_kiocb *req, struct iov_iter *iter,
u64 buf_addr, size_t len, int ddir,
unsigned issue_flags);
int io_register_clone_buffers(struct io_ring_ctx *ctx, void __user *arg);
--
2.45.2
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH 2/2] io_uring/nop: use io_find_buf_node()
2025-03-01 0:16 [PATCH 1/2] io_uring/rsrc: declare io_find_buf_node() in header file Caleb Sander Mateos
@ 2025-03-01 0:16 ` Caleb Sander Mateos
2025-03-01 1:41 ` Pavel Begunkov
2025-03-01 1:46 ` [PATCH 1/2] io_uring/rsrc: declare io_find_buf_node() in header file Pavel Begunkov
2025-03-01 2:23 ` Jens Axboe
2 siblings, 1 reply; 17+ messages in thread
From: Caleb Sander Mateos @ 2025-03-01 0:16 UTC (permalink / raw)
To: Jens Axboe, Pavel Begunkov; +Cc: Caleb Sander Mateos, io-uring, linux-kernel
Call io_find_buf_node() to avoid duplicating it in io_nop().
Signed-off-by: Caleb Sander Mateos <[email protected]>
---
io_uring/nop.c | 13 ++-----------
1 file changed, 2 insertions(+), 11 deletions(-)
diff --git a/io_uring/nop.c b/io_uring/nop.c
index ea539531cb5f..28f06285fdc2 100644
--- a/io_uring/nop.c
+++ b/io_uring/nop.c
@@ -59,21 +59,12 @@ int io_nop(struct io_kiocb *req, unsigned int issue_flags)
ret = -EBADF;
goto done;
}
}
if (nop->flags & IORING_NOP_FIXED_BUFFER) {
- struct io_ring_ctx *ctx = req->ctx;
- struct io_rsrc_node *node;
-
- ret = -EFAULT;
- io_ring_submit_lock(ctx, issue_flags);
- node = io_rsrc_node_lookup(&ctx->buf_table, req->buf_index);
- if (node) {
- io_req_assign_buf_node(req, node);
- ret = 0;
- }
- io_ring_submit_unlock(ctx, issue_flags);
+ if (!io_find_buf_node(req, issue_flags))
+ ret = -EFAULT;
}
done:
if (ret < 0)
req_set_fail(req);
io_req_set_res(req, nop->result, 0);
--
2.45.2
^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: [PATCH 2/2] io_uring/nop: use io_find_buf_node()
2025-03-01 0:16 ` [PATCH 2/2] io_uring/nop: use io_find_buf_node() Caleb Sander Mateos
@ 2025-03-01 1:41 ` Pavel Begunkov
2025-03-01 1:58 ` Caleb Sander Mateos
2025-03-01 2:15 ` Pavel Begunkov
0 siblings, 2 replies; 17+ messages in thread
From: Pavel Begunkov @ 2025-03-01 1:41 UTC (permalink / raw)
To: Caleb Sander Mateos, Jens Axboe; +Cc: io-uring
On 3/1/25 00:16, Caleb Sander Mateos wrote:
> Call io_find_buf_node() to avoid duplicating it in io_nop().
IORING_NOP_FIXED_BUFFER interface looks odd, instead of pretending
to use a buffer, it basically pokes directly into internal infra,
it's not something userspace should be able to do.
Jens, did use it anywhere? It's new, I'd rather kill it or align with
how requests consume buffers, i.e. addr+len, and then do
io_import_reg_buf() instead. That'd break the api though, but would
anyone care?
> Signed-off-by: Caleb Sander Mateos <[email protected]>
> ---
> io_uring/nop.c | 13 ++-----------
> 1 file changed, 2 insertions(+), 11 deletions(-)
>
> diff --git a/io_uring/nop.c b/io_uring/nop.c
> index ea539531cb5f..28f06285fdc2 100644
> --- a/io_uring/nop.c
> +++ b/io_uring/nop.c
> @@ -59,21 +59,12 @@ int io_nop(struct io_kiocb *req, unsigned int issue_flags)
> ret = -EBADF;
> goto done;
> }
> }
> if (nop->flags & IORING_NOP_FIXED_BUFFER) {
> - struct io_ring_ctx *ctx = req->ctx;
> - struct io_rsrc_node *node;
> -
> - ret = -EFAULT;
> - io_ring_submit_lock(ctx, issue_flags);
> - node = io_rsrc_node_lookup(&ctx->buf_table, req->buf_index);
> - if (node) {
> - io_req_assign_buf_node(req, node);
> - ret = 0;
> - }
> - io_ring_submit_unlock(ctx, issue_flags);
> + if (!io_find_buf_node(req, issue_flags))
> + ret = -EFAULT;
> }
> done:
> if (ret < 0)
> req_set_fail(req);
> io_req_set_res(req, nop->result, 0);
--
Pavel Begunkov
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 2/2] io_uring/nop: use io_find_buf_node()
2025-03-01 1:41 ` Pavel Begunkov
@ 2025-03-01 1:58 ` Caleb Sander Mateos
2025-03-01 2:10 ` Jens Axboe
2025-03-01 2:11 ` Pavel Begunkov
2025-03-01 2:15 ` Pavel Begunkov
1 sibling, 2 replies; 17+ messages in thread
From: Caleb Sander Mateos @ 2025-03-01 1:58 UTC (permalink / raw)
To: Pavel Begunkov; +Cc: Jens Axboe, io-uring
On Fri, Feb 28, 2025 at 5:40 PM Pavel Begunkov <[email protected]> wrote:
>
> On 3/1/25 00:16, Caleb Sander Mateos wrote:
> > Call io_find_buf_node() to avoid duplicating it in io_nop().
>
> IORING_NOP_FIXED_BUFFER interface looks odd, instead of pretending
> to use a buffer, it basically pokes directly into internal infra,
> it's not something userspace should be able to do.
I assumed it was just for benchmarking the overhead of fixed buffer
lookup. Since a normal IORING_OP_NOP doesn't use any buffer, it makes
sense for IORING_NOP_FIXED_BUFFER not to do anything with the fixed
buffer either.
Added in this commit:
commit a85f31052bce52111b4e9d5a536003481d0421d0
Author: Jens Axboe <[email protected]>
Date: Sun Oct 27 08:59:10 2024
io_uring/nop: add support for testing registered files and buffers
Useful for testing performance/efficiency impact of registered files
and buffers, vs (particularly) non-registered files.
Signed-off-by: Jens Axboe <[email protected]>
Best,
Caleb
>
> Jens, did use it anywhere? It's new, I'd rather kill it or align with
> how requests consume buffers, i.e. addr+len, and then do
> io_import_reg_buf() instead. That'd break the api though, but would
> anyone care?
>
>
> > Signed-off-by: Caleb Sander Mateos <[email protected]>
> > ---
> > io_uring/nop.c | 13 ++-----------
> > 1 file changed, 2 insertions(+), 11 deletions(-)
> >
> > diff --git a/io_uring/nop.c b/io_uring/nop.c
> > index ea539531cb5f..28f06285fdc2 100644
> > --- a/io_uring/nop.c
> > +++ b/io_uring/nop.c
> > @@ -59,21 +59,12 @@ int io_nop(struct io_kiocb *req, unsigned int issue_flags)
> > ret = -EBADF;
> > goto done;
> > }
> > }
> > if (nop->flags & IORING_NOP_FIXED_BUFFER) {
> > - struct io_ring_ctx *ctx = req->ctx;
> > - struct io_rsrc_node *node;
> > -
> > - ret = -EFAULT;
> > - io_ring_submit_lock(ctx, issue_flags);
> > - node = io_rsrc_node_lookup(&ctx->buf_table, req->buf_index);
> > - if (node) {
> > - io_req_assign_buf_node(req, node);
> > - ret = 0;
> > - }
> > - io_ring_submit_unlock(ctx, issue_flags);
> > + if (!io_find_buf_node(req, issue_flags))
> > + ret = -EFAULT;
> > }
> > done:
> > if (ret < 0)
> > req_set_fail(req);
> > io_req_set_res(req, nop->result, 0);
>
> --
> Pavel Begunkov
>
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 2/2] io_uring/nop: use io_find_buf_node()
2025-03-01 1:58 ` Caleb Sander Mateos
@ 2025-03-01 2:10 ` Jens Axboe
2025-03-01 2:11 ` Pavel Begunkov
1 sibling, 0 replies; 17+ messages in thread
From: Jens Axboe @ 2025-03-01 2:10 UTC (permalink / raw)
To: Caleb Sander Mateos, Pavel Begunkov; +Cc: io-uring
On 2/28/25 6:58 PM, Caleb Sander Mateos wrote:
> On Fri, Feb 28, 2025 at 5:40 PM Pavel Begunkov <[email protected]> wrote:
>>
>> On 3/1/25 00:16, Caleb Sander Mateos wrote:
>>> Call io_find_buf_node() to avoid duplicating it in io_nop().
>>
>> IORING_NOP_FIXED_BUFFER interface looks odd, instead of pretending
>> to use a buffer, it basically pokes directly into internal infra,
>> it's not something userspace should be able to do.
>
> I assumed it was just for benchmarking the overhead of fixed buffer
> lookup. Since a normal IORING_OP_NOP doesn't use any buffer, it makes
> sense for IORING_NOP_FIXED_BUFFER not to do anything with the fixed
> buffer either.
That's exactly right, it's just for benchmarking purposes. NOP doesn't
transfer anything, obviously, so it doesn't do anything with it.
--
Jens Axboe
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 2/2] io_uring/nop: use io_find_buf_node()
2025-03-01 1:58 ` Caleb Sander Mateos
2025-03-01 2:10 ` Jens Axboe
@ 2025-03-01 2:11 ` Pavel Begunkov
1 sibling, 0 replies; 17+ messages in thread
From: Pavel Begunkov @ 2025-03-01 2:11 UTC (permalink / raw)
To: Caleb Sander Mateos; +Cc: Jens Axboe, io-uring
On 3/1/25 01:58, Caleb Sander Mateos wrote:
> On Fri, Feb 28, 2025 at 5:40 PM Pavel Begunkov <[email protected]> wrote:
>>
>> On 3/1/25 00:16, Caleb Sander Mateos wrote:
>>> Call io_find_buf_node() to avoid duplicating it in io_nop().
>>
>> IORING_NOP_FIXED_BUFFER interface looks odd, instead of pretending
>> to use a buffer, it basically pokes directly into internal infra,
>> it's not something userspace should be able to do.
>
> I assumed it was just for benchmarking the overhead of fixed buffer
Right
> lookup. Since a normal IORING_OP_NOP doesn't use any buffer, it makes
> sense for IORING_NOP_FIXED_BUFFER not to do anything with the fixed
> buffer either.
That's a special api that benchmarks internal details that no
other request knows about, no, that's not great.
--
Pavel Begunkov
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 2/2] io_uring/nop: use io_find_buf_node()
2025-03-01 1:41 ` Pavel Begunkov
2025-03-01 1:58 ` Caleb Sander Mateos
@ 2025-03-01 2:15 ` Pavel Begunkov
2025-03-01 2:21 ` Jens Axboe
1 sibling, 1 reply; 17+ messages in thread
From: Pavel Begunkov @ 2025-03-01 2:15 UTC (permalink / raw)
To: Caleb Sander Mateos, Jens Axboe; +Cc: io-uring
On 3/1/25 01:41, Pavel Begunkov wrote:
> On 3/1/25 00:16, Caleb Sander Mateos wrote:
>> Call io_find_buf_node() to avoid duplicating it in io_nop().
>
> IORING_NOP_FIXED_BUFFER interface looks odd, instead of pretending
> to use a buffer, it basically pokes directly into internal infra,
> it's not something userspace should be able to do.
>
> Jens, did use it anywhere? It's new, I'd rather kill it or align with
> how requests consume buffers, i.e. addr+len, and then do
> io_import_reg_buf() instead. That'd break the api though, but would
> anyone care?
3rd option is to ignore the flag and let the req succeed.
--
Pavel Begunkov
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 2/2] io_uring/nop: use io_find_buf_node()
2025-03-01 2:15 ` Pavel Begunkov
@ 2025-03-01 2:21 ` Jens Axboe
2025-03-01 2:36 ` Pavel Begunkov
0 siblings, 1 reply; 17+ messages in thread
From: Jens Axboe @ 2025-03-01 2:21 UTC (permalink / raw)
To: Pavel Begunkov, Caleb Sander Mateos; +Cc: io-uring
On 2/28/25 7:15 PM, Pavel Begunkov wrote:
> On 3/1/25 01:41, Pavel Begunkov wrote:
>> On 3/1/25 00:16, Caleb Sander Mateos wrote:
>>> Call io_find_buf_node() to avoid duplicating it in io_nop().
>>
>> IORING_NOP_FIXED_BUFFER interface looks odd, instead of pretending
>> to use a buffer, it basically pokes directly into internal infra,
>> it's not something userspace should be able to do.
>>
>> Jens, did use it anywhere? It's new, I'd rather kill it or align with
>> how requests consume buffers, i.e. addr+len, and then do
>> io_import_reg_buf() instead. That'd break the api though, but would
>> anyone care?
>
> 3rd option is to ignore the flag and let the req succeed.
Honestly what is the problem here? NOP isn't doing anything that
other commands types can't or aren't already. So no, it should stay,
it's been handy for testing overheads, which is why it was added in
the first place.
--
Jens Axboe
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 2/2] io_uring/nop: use io_find_buf_node()
2025-03-01 2:21 ` Jens Axboe
@ 2025-03-01 2:36 ` Pavel Begunkov
2025-03-01 2:39 ` Jens Axboe
0 siblings, 1 reply; 17+ messages in thread
From: Pavel Begunkov @ 2025-03-01 2:36 UTC (permalink / raw)
To: Jens Axboe, Caleb Sander Mateos; +Cc: io-uring
On 3/1/25 02:21, Jens Axboe wrote:
> On 2/28/25 7:15 PM, Pavel Begunkov wrote:
>> On 3/1/25 01:41, Pavel Begunkov wrote:
>>> On 3/1/25 00:16, Caleb Sander Mateos wrote:
>>>> Call io_find_buf_node() to avoid duplicating it in io_nop().
>>>
>>> IORING_NOP_FIXED_BUFFER interface looks odd, instead of pretending
>>> to use a buffer, it basically pokes directly into internal infra,
>>> it's not something userspace should be able to do.
>>>
>>> Jens, did use it anywhere? It's new, I'd rather kill it or align with
>>> how requests consume buffers, i.e. addr+len, and then do
>>> io_import_reg_buf() instead. That'd break the api though, but would
>>> anyone care?
>>
>> 3rd option is to ignore the flag and let the req succeed.
>
> Honestly what is the problem here? NOP isn't doing anything that
> other commands types can't or aren't already. So no, it should stay,
It completely ignores any checking and buffer importing stopping
half way at looking at nodes, the behaviour other requests don't
do. We can also add a request that take a lock and releases it
back because other requests do that as well but as a part of some
useful sequence of actions.
> it's been handy for testing overheads, which is why it was added in
> the first place.
--
Pavel Begunkov
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 2/2] io_uring/nop: use io_find_buf_node()
2025-03-01 2:36 ` Pavel Begunkov
@ 2025-03-01 2:39 ` Jens Axboe
2025-03-01 3:02 ` Pavel Begunkov
0 siblings, 1 reply; 17+ messages in thread
From: Jens Axboe @ 2025-03-01 2:39 UTC (permalink / raw)
To: Pavel Begunkov, Caleb Sander Mateos; +Cc: io-uring
On 2/28/25 7:36 PM, Pavel Begunkov wrote:
> On 3/1/25 02:21, Jens Axboe wrote:
>> On 2/28/25 7:15 PM, Pavel Begunkov wrote:
>>> On 3/1/25 01:41, Pavel Begunkov wrote:
>>>> On 3/1/25 00:16, Caleb Sander Mateos wrote:
>>>>> Call io_find_buf_node() to avoid duplicating it in io_nop().
>>>>
>>>> IORING_NOP_FIXED_BUFFER interface looks odd, instead of pretending
>>>> to use a buffer, it basically pokes directly into internal infra,
>>>> it's not something userspace should be able to do.
>>>>
>>>> Jens, did use it anywhere? It's new, I'd rather kill it or align with
>>>> how requests consume buffers, i.e. addr+len, and then do
>>>> io_import_reg_buf() instead. That'd break the api though, but would
>>>> anyone care?
>>>
>>> 3rd option is to ignore the flag and let the req succeed.
>>
>> Honestly what is the problem here? NOP isn't doing anything that
>> other commands types can't or aren't already. So no, it should stay,
>
> It completely ignores any checking and buffer importing stopping
> half way at looking at nodes, the behaviour other requests don't
> do. We can also add a request that take a lock and releases it
> back because other requests do that as well but as a part of some
> useful sequence of actions.
Let's not resort to hyperbole - it's useful to be able to test (and
hence quantify) provided buffer usage. I used it while doing the
resource node rework. We also have a NOP opcode to be able to test
generic overhead for that very reason. For testing _io_uring_
infrastructure it was already useful for me. Of course we should not add
random things that test things like lock acquire and release, that's not
the scope of NOP.
Sure you could add import as well, but a) nop doesn't touch the data,
and b) that's largely testing generic kernel infrastructure as well.
The whole point of NOP is to be able to test io_uring infrastructure.
--
Jens Axboe
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 2/2] io_uring/nop: use io_find_buf_node()
2025-03-01 2:39 ` Jens Axboe
@ 2025-03-01 3:02 ` Pavel Begunkov
0 siblings, 0 replies; 17+ messages in thread
From: Pavel Begunkov @ 2025-03-01 3:02 UTC (permalink / raw)
To: Jens Axboe, Caleb Sander Mateos; +Cc: io-uring
On 3/1/25 02:39, Jens Axboe wrote:
> On 2/28/25 7:36 PM, Pavel Begunkov wrote:
>> On 3/1/25 02:21, Jens Axboe wrote:
>>> On 2/28/25 7:15 PM, Pavel Begunkov wrote:
>>>> On 3/1/25 01:41, Pavel Begunkov wrote:
>>>>> On 3/1/25 00:16, Caleb Sander Mateos wrote:
>>>>>> Call io_find_buf_node() to avoid duplicating it in io_nop().
>>>>>
>>>>> IORING_NOP_FIXED_BUFFER interface looks odd, instead of pretending
>>>>> to use a buffer, it basically pokes directly into internal infra,
>>>>> it's not something userspace should be able to do.
>>>>>
>>>>> Jens, did use it anywhere? It's new, I'd rather kill it or align with
>>>>> how requests consume buffers, i.e. addr+len, and then do
>>>>> io_import_reg_buf() instead. That'd break the api though, but would
>>>>> anyone care?
>>>>
>>>> 3rd option is to ignore the flag and let the req succeed.
>>>
>>> Honestly what is the problem here? NOP isn't doing anything that
>>> other commands types can't or aren't already. So no, it should stay,
>>
>> It completely ignores any checking and buffer importing stopping
>> half way at looking at nodes, the behaviour other requests don't
>> do. We can also add a request that take a lock and releases it
>> back because other requests do that as well but as a part of some
>> useful sequence of actions.
>
> Let's not resort to hyperbole - it's useful to be able to test (and
That's not a hyperbole, it's a direct analogy.
> hence quantify) provided buffer usage. I used it while doing the
> resource node rework. We also have a NOP opcode to be able to test
> generic overhead for that very reason. For testing _io_uring_
> infrastructure it was already useful for me. Of course we should not add
> random things that test things like lock acquire and release, that's not
> the scope of NOP.
>
> Sure you could add import as well, but a) nop doesn't touch the data,
> and b) that's largely testing generic kernel infrastructure as well.
>
> The whole point of NOP is to be able to test io_uring infrastructure.
And now we add overhead to test overhead of the very path we
add overhead to, just splendid. It's intrusive, it looks into
guts of infra that can change, and the way not to be intrusive
is to follow the way others use the concept, which is why I'm
suggesting importing the buffer, and that would be another
direct analogy with the pure NOP (w/o flags).
--
Pavel Begunkov
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 1/2] io_uring/rsrc: declare io_find_buf_node() in header file
2025-03-01 0:16 [PATCH 1/2] io_uring/rsrc: declare io_find_buf_node() in header file Caleb Sander Mateos
2025-03-01 0:16 ` [PATCH 2/2] io_uring/nop: use io_find_buf_node() Caleb Sander Mateos
@ 2025-03-01 1:46 ` Pavel Begunkov
2025-03-01 2:04 ` Caleb Sander Mateos
2025-03-01 2:23 ` Jens Axboe
2 siblings, 1 reply; 17+ messages in thread
From: Pavel Begunkov @ 2025-03-01 1:46 UTC (permalink / raw)
To: Caleb Sander Mateos, Jens Axboe; +Cc: io-uring, linux-kernel
On 3/1/25 00:16, Caleb Sander Mateos wrote:
> Declare io_find_buf_node() in io_uring/rsrc.h so it can be called from
> other files.
>
> Signed-off-by: Caleb Sander Mateos <[email protected]>
> ---
> io_uring/rsrc.c | 4 ++--
> io_uring/rsrc.h | 2 ++
> 2 files changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/io_uring/rsrc.c b/io_uring/rsrc.c
> index 45bfb37bca1e..4c4f57cd77f9 100644
> --- a/io_uring/rsrc.c
> +++ b/io_uring/rsrc.c
> @@ -1066,12 +1066,12 @@ static int io_import_fixed(int ddir, struct iov_iter *iter,
> }
>
> return 0;
> }
>
> -static inline struct io_rsrc_node *io_find_buf_node(struct io_kiocb *req,
> - unsigned issue_flags)
That's a hot path, an extra function call wouldn't be great,
and it's an internal detail as well. Let's better see what we
can do with the nop situation.
btw, don't forget cover letters for series.
--
Pavel Begunkov
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 1/2] io_uring/rsrc: declare io_find_buf_node() in header file
2025-03-01 1:46 ` [PATCH 1/2] io_uring/rsrc: declare io_find_buf_node() in header file Pavel Begunkov
@ 2025-03-01 2:04 ` Caleb Sander Mateos
2025-03-01 2:22 ` Jens Axboe
0 siblings, 1 reply; 17+ messages in thread
From: Caleb Sander Mateos @ 2025-03-01 2:04 UTC (permalink / raw)
To: Pavel Begunkov; +Cc: Jens Axboe, io-uring, linux-kernel
On Fri, Feb 28, 2025 at 5:45 PM Pavel Begunkov <[email protected]> wrote:
>
> On 3/1/25 00:16, Caleb Sander Mateos wrote:
> > Declare io_find_buf_node() in io_uring/rsrc.h so it can be called from
> > other files.
> >
> > Signed-off-by: Caleb Sander Mateos <[email protected]>
> > ---
> > io_uring/rsrc.c | 4 ++--
> > io_uring/rsrc.h | 2 ++
> > 2 files changed, 4 insertions(+), 2 deletions(-)
> >
> > diff --git a/io_uring/rsrc.c b/io_uring/rsrc.c
> > index 45bfb37bca1e..4c4f57cd77f9 100644
> > --- a/io_uring/rsrc.c
> > +++ b/io_uring/rsrc.c
> > @@ -1066,12 +1066,12 @@ static int io_import_fixed(int ddir, struct iov_iter *iter,
> > }
> >
> > return 0;
> > }
> >
> > -static inline struct io_rsrc_node *io_find_buf_node(struct io_kiocb *req,
> > - unsigned issue_flags)
>
> That's a hot path, an extra function call wouldn't be great,
> and it's an internal detail as well. Let's better see what we
> can do with the nop situation.
I can add back inline. With that, there shouldn't be any difference to
the generated instructions for io_import_reg_buf().
>
> btw, don't forget cover letters for series.
Okay, I didn't have much else to add to the brief commit messages. But
sure, I'll add a cover letter in the future.
Best,
Caleb
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 1/2] io_uring/rsrc: declare io_find_buf_node() in header file
2025-03-01 2:04 ` Caleb Sander Mateos
@ 2025-03-01 2:22 ` Jens Axboe
2025-03-01 2:31 ` Pavel Begunkov
0 siblings, 1 reply; 17+ messages in thread
From: Jens Axboe @ 2025-03-01 2:22 UTC (permalink / raw)
To: Caleb Sander Mateos, Pavel Begunkov; +Cc: io-uring, linux-kernel
On 2/28/25 7:04 PM, Caleb Sander Mateos wrote:
> On Fri, Feb 28, 2025 at 5:45 PM Pavel Begunkov <[email protected]> wrote:
>>
>> On 3/1/25 00:16, Caleb Sander Mateos wrote:
>>> Declare io_find_buf_node() in io_uring/rsrc.h so it can be called from
>>> other files.
>>>
>>> Signed-off-by: Caleb Sander Mateos <[email protected]>
>>> ---
>>> io_uring/rsrc.c | 4 ++--
>>> io_uring/rsrc.h | 2 ++
>>> 2 files changed, 4 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/io_uring/rsrc.c b/io_uring/rsrc.c
>>> index 45bfb37bca1e..4c4f57cd77f9 100644
>>> --- a/io_uring/rsrc.c
>>> +++ b/io_uring/rsrc.c
>>> @@ -1066,12 +1066,12 @@ static int io_import_fixed(int ddir, struct iov_iter *iter,
>>> }
>>>
>>> return 0;
>>> }
>>>
>>> -static inline struct io_rsrc_node *io_find_buf_node(struct io_kiocb *req,
>>> - unsigned issue_flags)
>>
>> That's a hot path, an extra function call wouldn't be great,
>> and it's an internal detail as well. Let's better see what we
>> can do with the nop situation.
>
> I can add back inline. With that, there shouldn't be any difference to
> the generated instructions for io_import_reg_buf().
Yeah, in general I don't like manual inlines, unless it's been proven
that the compiler messes it up for some reason. If it's short enough
it'll be inlined.
>> btw, don't forget cover letters for series.
>
> Okay, I didn't have much else to add to the brief commit messages. But
> sure, I'll add a cover letter in the future.
Indeed, cover letters are always great to have.
--
Jens Axboe
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 1/2] io_uring/rsrc: declare io_find_buf_node() in header file
2025-03-01 2:22 ` Jens Axboe
@ 2025-03-01 2:31 ` Pavel Begunkov
2025-03-01 2:33 ` Jens Axboe
0 siblings, 1 reply; 17+ messages in thread
From: Pavel Begunkov @ 2025-03-01 2:31 UTC (permalink / raw)
To: Jens Axboe, Caleb Sander Mateos; +Cc: io-uring, linux-kernel
On 3/1/25 02:22, Jens Axboe wrote:
> On 2/28/25 7:04 PM, Caleb Sander Mateos wrote:
>> On Fri, Feb 28, 2025 at 5:45 PM Pavel Begunkov <[email protected]> wrote:
>>>
>>> On 3/1/25 00:16, Caleb Sander Mateos wrote:
>>>> Declare io_find_buf_node() in io_uring/rsrc.h so it can be called from
>>>> other files.
>>>>
>>>> Signed-off-by: Caleb Sander Mateos <[email protected]>
>>>> ---
>>>> io_uring/rsrc.c | 4 ++--
>>>> io_uring/rsrc.h | 2 ++
>>>> 2 files changed, 4 insertions(+), 2 deletions(-)
>>>>
>>>> diff --git a/io_uring/rsrc.c b/io_uring/rsrc.c
>>>> index 45bfb37bca1e..4c4f57cd77f9 100644
>>>> --- a/io_uring/rsrc.c
>>>> +++ b/io_uring/rsrc.c
>>>> @@ -1066,12 +1066,12 @@ static int io_import_fixed(int ddir, struct iov_iter *iter,
>>>> }
>>>>
>>>> return 0;
>>>> }
>>>>
>>>> -static inline struct io_rsrc_node *io_find_buf_node(struct io_kiocb *req,
>>>> - unsigned issue_flags)
>>>
>>> That's a hot path, an extra function call wouldn't be great,
>>> and it's an internal detail as well. Let's better see what we
>>> can do with the nop situation.
>>
>> I can add back inline. With that, there shouldn't be any difference to
>> the generated instructions for io_import_reg_buf().
>
> Yeah, in general I don't like manual inlines, unless it's been proven
> that the compiler messes it up for some reason. If it's short enough
> it'll be inlined.
It will _not_ be inlined in this case.
--
Pavel Begunkov
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 1/2] io_uring/rsrc: declare io_find_buf_node() in header file
2025-03-01 2:31 ` Pavel Begunkov
@ 2025-03-01 2:33 ` Jens Axboe
0 siblings, 0 replies; 17+ messages in thread
From: Jens Axboe @ 2025-03-01 2:33 UTC (permalink / raw)
To: Pavel Begunkov, Caleb Sander Mateos; +Cc: io-uring, linux-kernel
On 2/28/25 7:31 PM, Pavel Begunkov wrote:
> On 3/1/25 02:22, Jens Axboe wrote:
>> On 2/28/25 7:04 PM, Caleb Sander Mateos wrote:
>>> On Fri, Feb 28, 2025 at 5:45?PM Pavel Begunkov <[email protected]> wrote:
>>>>
>>>> On 3/1/25 00:16, Caleb Sander Mateos wrote:
>>>>> Declare io_find_buf_node() in io_uring/rsrc.h so it can be called from
>>>>> other files.
>>>>>
>>>>> Signed-off-by: Caleb Sander Mateos <[email protected]>
>>>>> ---
>>>>> io_uring/rsrc.c | 4 ++--
>>>>> io_uring/rsrc.h | 2 ++
>>>>> 2 files changed, 4 insertions(+), 2 deletions(-)
>>>>>
>>>>> diff --git a/io_uring/rsrc.c b/io_uring/rsrc.c
>>>>> index 45bfb37bca1e..4c4f57cd77f9 100644
>>>>> --- a/io_uring/rsrc.c
>>>>> +++ b/io_uring/rsrc.c
>>>>> @@ -1066,12 +1066,12 @@ static int io_import_fixed(int ddir, struct iov_iter *iter,
>>>>> }
>>>>>
>>>>> return 0;
>>>>> }
>>>>>
>>>>> -static inline struct io_rsrc_node *io_find_buf_node(struct io_kiocb *req,
>>>>> - unsigned issue_flags)
>>>>
>>>> That's a hot path, an extra function call wouldn't be great,
>>>> and it's an internal detail as well. Let's better see what we
>>>> can do with the nop situation.
>>>
>>> I can add back inline. With that, there shouldn't be any difference to
>>> the generated instructions for io_import_reg_buf().
>>
>> Yeah, in general I don't like manual inlines, unless it's been proven
>> that the compiler messes it up for some reason. If it's short enough
>> it'll be inlined.
>
> It will _not_ be inlined in this case.
Hmm ok - I wonder why that is. But if we want to force it to do that,
then we can just re-add the inline for the local definition, that'll be
fine with it still being non-static and available.
--
Jens Axboe
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 1/2] io_uring/rsrc: declare io_find_buf_node() in header file
2025-03-01 0:16 [PATCH 1/2] io_uring/rsrc: declare io_find_buf_node() in header file Caleb Sander Mateos
2025-03-01 0:16 ` [PATCH 2/2] io_uring/nop: use io_find_buf_node() Caleb Sander Mateos
2025-03-01 1:46 ` [PATCH 1/2] io_uring/rsrc: declare io_find_buf_node() in header file Pavel Begunkov
@ 2025-03-01 2:23 ` Jens Axboe
2 siblings, 0 replies; 17+ messages in thread
From: Jens Axboe @ 2025-03-01 2:23 UTC (permalink / raw)
To: Pavel Begunkov, Caleb Sander Mateos; +Cc: io-uring, linux-kernel
On Fri, 28 Feb 2025 17:16:07 -0700, Caleb Sander Mateos wrote:
> Declare io_find_buf_node() in io_uring/rsrc.h so it can be called from
> other files.
>
>
Applied, thanks!
[1/2] io_uring/rsrc: declare io_find_buf_node() in header file
commit: 98ddbefafecf270d51902cabfe289df10a702cef
[2/2] io_uring/nop: use io_find_buf_node()
commit: 15d86dd9019c7a97bd8c5b6880870b97e7cc74ea
Best regards,
--
Jens Axboe
^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2025-03-01 3:01 UTC | newest]
Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-01 0:16 [PATCH 1/2] io_uring/rsrc: declare io_find_buf_node() in header file Caleb Sander Mateos
2025-03-01 0:16 ` [PATCH 2/2] io_uring/nop: use io_find_buf_node() Caleb Sander Mateos
2025-03-01 1:41 ` Pavel Begunkov
2025-03-01 1:58 ` Caleb Sander Mateos
2025-03-01 2:10 ` Jens Axboe
2025-03-01 2:11 ` Pavel Begunkov
2025-03-01 2:15 ` Pavel Begunkov
2025-03-01 2:21 ` Jens Axboe
2025-03-01 2:36 ` Pavel Begunkov
2025-03-01 2:39 ` Jens Axboe
2025-03-01 3:02 ` Pavel Begunkov
2025-03-01 1:46 ` [PATCH 1/2] io_uring/rsrc: declare io_find_buf_node() in header file Pavel Begunkov
2025-03-01 2:04 ` Caleb Sander Mateos
2025-03-01 2:22 ` Jens Axboe
2025-03-01 2:31 ` Pavel Begunkov
2025-03-01 2:33 ` Jens Axboe
2025-03-01 2:23 ` Jens Axboe
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox