All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kanchan Joshi <joshi.k@samsung.com>
To: Christoph Hellwig <hch@lst.de>
Cc: axboe@kernel.dk, kbusch@kernel.org, asml.silence@gmail.com,
	io-uring@vger.kernel.org, linux-nvme@lists.infradead.org,
	linux-block@vger.kernel.org, sbates@raithlin.com,
	logang@deltatee.com, pankydev8@gmail.com, javier@javigon.com,
	mcgrof@kernel.org, a.manzanares@samsung.com, joshiiitr@gmail.com,
	anuj20.g@samsung.com
Subject: Re: [PATCH 05/17] nvme: wire-up support for async-passthru on char-device.
Date: Wed, 16 Mar 2022 12:57:27 +0530	[thread overview]
Message-ID: <20220316072727.GA2104@test-zns> (raw)
In-Reply-To: <20220315085410.GA4132@lst.de>

[-- Attachment #1: Type: text/plain, Size: 4086 bytes --]

On Tue, Mar 15, 2022 at 09:54:10AM +0100, Christoph Hellwig wrote:
>On Mon, Mar 14, 2022 at 09:53:56PM +0530, Kanchan Joshi wrote:
>>>> +struct nvme_uring_cmd_pdu {
>>>> +	u32 meta_len;
>>>> +	union {
>>>> +		struct bio *bio;
>>>> +		struct request *req;
>>>> +	};
>>>> +	void *meta; /* kernel-resident buffer */
>>>> +	void __user *meta_buffer;
>>>> +} __packed;
>>>
>>> Why is this marked __packed?
>> Did not like doing it, but had to.
>> If not packed, this takes 32 bytes of space. While driver-pdu in struct
>> io_uring_cmd can take max 30 bytes. Packing nvme-pdu brought it down to
>> 28 bytes, which fits and gives 2 bytes back.
>
>What if you move meta_len to the end?  Even if we need the __packed
>that will avoid all the unaligned access to pointers, which on some
>architectures will crash the kernel.
ah, right. Will move that to the end.

>> And on moving meta elements outside the driver, my worry is that it
>> reduces scope of uring-cmd infra and makes it nvme passthru specific.
>> At this point uring-cmd is still generic async ioctl/fsctl facility
>> which may find other users (than nvme-passthru) down the line. Organization
>> of fields within "struct io_uring_cmd" is around the rule
>> that a field is kept out (of 28 bytes pdu) only if is accessed by both
>> io_uring and driver.
>
>We have plenty of other interfaces of that kind.  Sockets are one case
>already, and regular read/write with protection information will be
>another one.  So having some core infrastrucure for "secondary data"
>seems very useful.
So what is the picture that you have in mind for struct io_uring_cmd?
Moving meta fields out makes it look like this - 

@@ -28,7 +28,10 @@ struct io_uring_cmd {
        u32             cmd_op;
        u16             cmd_len;
        u16             unused;
-       u8              pdu[28]; /* available inline for free use */
+       void __user     *meta_buffer; /* nvme pt specific */
+       u32             meta_len; /* nvme pt specific */
+       u8              pdu[16]; /* available inline for free use */
+
 };
And corresponding nvme 16 byte pdu - 
 struct nvme_uring_cmd_pdu {
-       u32 meta_len;
        union {
                struct bio *bio;
                struct request *req;
        };
        void *meta; /* kernel-resident buffer */
-       void __user *meta_buffer;
 } __packed;

I do not understand how this helps. Only the generic space (28 bytes)
got reduced to 16 bytes.

>> I see, so there is room for adding some efficiency.
>> Hope it will be ok if I carry this out as a separate effort.
>> Since this is about touching blk_mq_complete_request at its heart, and
>> improving sync-direct-io, this does not seem best-fit and slow this
>> series down.
>
>I really rather to this properly.  Especially as the current effort
>adds new exported interfaces.

Seems you are referring to io_uring_cmd_complete_in_task().

We would still need to use/export that even if we somehow manage to move
task-work trigger from nvme-function to blk_mq_complete_request.
io_uring's task-work infra is more baked than raw task-work infra.
It would not be good to repeat all that code elsewhere.
I tried raw one in the first attempt, and Jens suggested to move to baked
one. Here is the link that gave birth to this interface -
https://lore.kernel.org/linux-nvme/6d847f4a-65a5-bc62-1d36-52e222e3d142@kernel.dk/
 

>> Deferring by ipi or softirq never occured. Neither for block nor for
>> char. Softirq is obvious since I was not running against scsi (or nvme with
>> single queue). I could not spot whether this is really a overhead, at
>> least for nvme.
>
>This tends to kick in if you have less queues than cpu cores.  Quite
>command with either a high core cound or a not very high end nvme
>controller.
I will check that.
But swtiching (irq to task-work) is more generic and not about this series.
Triggering task-work anyway happens for regular read/write
completion too (in io_uring)...in the same return path involving
blk_mq_complete_request. For passthru, we are just triggering this
somewhat earlier in the completion path. 

[-- Attachment #2: Type: text/plain, Size: 0 bytes --]



  reply	other threads:[~2022-03-16  7:35 UTC|newest]

Thread overview: 125+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CGME20220308152651epcas5p1ebd2dc7fa01db43dd587c228a3695696@epcas5p1.samsung.com>
2022-03-08 15:20 ` [PATCH 00/17] io_uring passthru over nvme Kanchan Joshi
2022-03-08 15:20   ` [PATCH 01/17] io_uring: add support for 128-byte SQEs Kanchan Joshi
2022-03-08 15:20   ` [PATCH 02/17] fs: add file_operations->async_cmd() Kanchan Joshi
2022-03-08 15:20   ` [PATCH 03/17] io_uring: add infra and support for IORING_OP_URING_CMD Kanchan Joshi
2022-03-11  1:51     ` Luis Chamberlain
2022-03-11  2:43       ` Jens Axboe
2022-03-11 17:11         ` Luis Chamberlain
2022-03-11 18:47           ` Paul Moore
2022-03-11 18:47             ` Paul Moore
2022-03-11 20:57             ` Luis Chamberlain
2022-03-11 20:57               ` Luis Chamberlain
2022-03-11 21:03               ` Paul Moore
2022-03-11 21:03                 ` Paul Moore
2022-03-14 16:25           ` Casey Schaufler
2022-03-14 16:32             ` Luis Chamberlain
2022-03-14 18:05               ` Casey Schaufler
2022-03-14 19:40                 ` Luis Chamberlain
2022-03-08 15:20   ` [PATCH 04/17] nvme: modify nvme_alloc_request to take an additional parameter Kanchan Joshi
2022-03-11  6:38     ` Christoph Hellwig
2022-03-08 15:20   ` [PATCH 05/17] nvme: wire-up support for async-passthru on char-device Kanchan Joshi
2022-03-10  0:02     ` Clay Mayers
2022-03-10  8:32       ` Kanchan Joshi
2022-03-11  7:01     ` Christoph Hellwig
2022-03-14 16:23       ` Kanchan Joshi
2022-03-15  8:54         ` Christoph Hellwig
2022-03-16  7:27           ` Kanchan Joshi [this message]
2022-03-24  6:22             ` Christoph Hellwig
2022-03-24 17:45               ` Kanchan Joshi
2022-03-11 17:56     ` Luis Chamberlain
2022-03-11 18:53       ` Paul Moore
2022-03-11 21:02         ` Luis Chamberlain
2022-03-13 21:53     ` Sagi Grimberg
2022-03-14 17:54       ` Kanchan Joshi
2022-03-15  9:02         ` Sagi Grimberg
2022-03-16  9:21           ` Kanchan Joshi
2022-03-16 10:56             ` Sagi Grimberg
2022-03-16 11:51               ` Kanchan Joshi
2022-03-16 13:52                 ` Sagi Grimberg
2022-03-16 14:35                   ` Jens Axboe
2022-03-16 14:50                     ` Sagi Grimberg
2022-03-24  6:20                       ` Christoph Hellwig
2022-03-24 10:42                         ` Sagi Grimberg
2022-03-22 15:18     ` Clay Mayers
2022-03-22 16:57       ` Kanchan Joshi
2022-03-08 15:20   ` [PATCH 06/17] io_uring: prep for fixed-buffer enabled uring-cmd Kanchan Joshi
2022-03-08 15:20   ` [PATCH 07/17] io_uring: add support for uring_cmd with fixed-buffer Kanchan Joshi
2022-03-08 15:20   ` [PATCH 08/17] nvme: enable passthrough " Kanchan Joshi
2022-03-10  8:32     ` Christoph Hellwig
2022-03-11  6:43     ` Christoph Hellwig
2022-03-14 13:06       ` Kanchan Joshi
2022-03-15  8:55         ` Christoph Hellwig
2022-03-14 12:18     ` Ming Lei
2022-03-14 13:09       ` Kanchan Joshi
2022-03-08 15:20   ` [PATCH 09/17] io_uring: plug for async bypass Kanchan Joshi
2022-03-10  8:33     ` Christoph Hellwig
2022-03-14 14:33       ` Ming Lei
2022-03-15  8:56         ` Christoph Hellwig
2022-03-11 17:15     ` Luis Chamberlain
2022-03-08 15:20   ` [PATCH 10/17] block: wire-up support for plugging Kanchan Joshi
2022-03-10  8:34     ` Christoph Hellwig
2022-03-10 12:40       ` Kanchan Joshi
2022-03-14 14:40         ` Ming Lei
2022-03-21  7:02           ` Kanchan Joshi
2022-03-23  1:27             ` Ming Lei
2022-03-23  1:41               ` Jens Axboe
2022-03-23  1:58                 ` Jens Axboe
2022-03-23  2:10                   ` Ming Lei
2022-03-23  2:17                     ` Jens Axboe
2022-03-08 15:20   ` [PATCH 11/17] block: factor out helper for bio allocation from cache Kanchan Joshi
2022-03-10  8:35     ` Christoph Hellwig
2022-03-10 12:25       ` Kanchan Joshi
2022-03-24  6:30         ` Christoph Hellwig
2022-03-24 17:45           ` Kanchan Joshi
2022-03-25  5:38             ` Christoph Hellwig
2022-03-08 15:21   ` [PATCH 12/17] nvme: enable bio-cache for fixed-buffer passthru Kanchan Joshi
2022-03-11  6:48     ` Christoph Hellwig
2022-03-14 18:18       ` Kanchan Joshi
2022-03-15  8:57         ` Christoph Hellwig
2022-03-08 15:21   ` [PATCH 13/17] nvme: allow user passthrough commands to poll Kanchan Joshi
2022-03-08 17:08     ` Keith Busch
2022-03-09  7:03       ` Kanchan Joshi
2022-03-11  6:49         ` Christoph Hellwig
2022-03-08 15:21   ` [PATCH 14/17] io_uring: add polling support for uring-cmd Kanchan Joshi
2022-03-11  6:50     ` Christoph Hellwig
2022-03-14 10:16       ` Kanchan Joshi
2022-03-15  8:57         ` Christoph Hellwig
2022-03-16  5:09           ` Kanchan Joshi
2022-03-24  6:30             ` Christoph Hellwig
2022-03-08 15:21   ` [PATCH 15/17] nvme: wire-up polling for uring-passthru Kanchan Joshi
2022-03-08 15:21   ` [PATCH 16/17] io_uring: add support for non-inline uring-cmd Kanchan Joshi
2022-03-08 15:21   ` [PATCH 17/17] nvme: enable non-inline passthru commands Kanchan Joshi
2022-03-10  8:36     ` Christoph Hellwig
2022-03-10 11:50       ` Kanchan Joshi
2022-03-10 14:19         ` Christoph Hellwig
2022-03-10 18:43           ` Kanchan Joshi
2022-03-11  6:27             ` Christoph Hellwig
2022-03-22 17:10               ` Kanchan Joshi
2022-03-24  6:32                 ` Christoph Hellwig
2022-03-25 13:39                   ` Kanchan Joshi
2022-03-28  4:44                     ` Kanchan Joshi
2022-03-30 12:59                       ` Christoph Hellwig
2022-03-30 13:02                     ` Christoph Hellwig
2022-03-30 13:14                       ` Kanchan Joshi
2022-04-01  1:25                         ` Jens Axboe
2022-04-01  2:33                           ` Kanchan Joshi
2022-04-01  2:44                             ` Jens Axboe
2022-04-01  3:05                               ` Jens Axboe
2022-04-01  6:32                               ` Kanchan Joshi
2022-04-19 17:31                               ` Kanchan Joshi
2022-04-19 18:19                                 ` Jens Axboe
2022-04-20 15:14                                   ` Kanchan Joshi
2022-04-20 15:28                                     ` Kanchan Joshi
2022-04-01  1:23                       ` Jens Axboe
2022-04-01  1:22                 ` Jens Axboe
2022-04-01  6:29                   ` Kanchan Joshi
2022-03-24 21:09     ` Clay Mayers
2022-03-24 23:36       ` Jens Axboe
2022-03-10  8:29   ` [PATCH 00/17] io_uring passthru over nvme Christoph Hellwig
2022-03-10 10:05     ` Kanchan Joshi
2022-03-11 16:43       ` Luis Chamberlain
2022-03-11 23:35         ` Adam Manzanares
2022-03-12  2:27           ` Adam Manzanares
2022-03-13  5:07             ` Kanchan Joshi
2022-03-14 20:30               ` Adam Manzanares
2022-03-13  5:10         ` Kanchan Joshi

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=20220316072727.GA2104@test-zns \
    --to=joshi.k@samsung.com \
    --cc=a.manzanares@samsung.com \
    --cc=anuj20.g@samsung.com \
    --cc=asml.silence@gmail.com \
    --cc=axboe@kernel.dk \
    --cc=hch@lst.de \
    --cc=io-uring@vger.kernel.org \
    --cc=javier@javigon.com \
    --cc=joshiiitr@gmail.com \
    --cc=kbusch@kernel.org \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-nvme@lists.infradead.org \
    --cc=logang@deltatee.com \
    --cc=mcgrof@kernel.org \
    --cc=pankydev8@gmail.com \
    --cc=sbates@raithlin.com \
    /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.