All of lore.kernel.org
 help / color / mirror / Atom feed
From: Damien Le Moal <damien.lemoal@opensource.wdc.com>
To: Keith Busch <kbusch@kernel.org>, Eric Biggers <ebiggers@kernel.org>
Cc: Keith Busch <kbusch@fb.com>,
	linux-fsdevel@vger.kernel.org, linux-block@vger.kernel.org,
	axboe@kernel.dk, Kernel Team <Kernel-team@fb.com>,
	hch@lst.de, bvanassche@acm.org
Subject: Re: [PATCHv2 3/3] block: relax direct io memory alignment
Date: Thu, 19 May 2022 08:45:55 +0200	[thread overview]
Message-ID: <283d37e8-868a-990b-e953-4b7bb940135c@opensource.wdc.com> (raw)
In-Reply-To: <YoXN5CpSGGe7+OJs@kbusch-mbp.dhcp.thefacebook.com>

On 2022/05/19 6:56, Keith Busch wrote:
> On Wed, May 18, 2022 at 08:27:31PM -0700, Eric Biggers wrote:
>>
>> So the bio ends up with a total length that is a multiple of the logical block
>> size, but the lengths of the individual bvecs in the bio are *not* necessarily
>> multiples of the logical block size.  That's the problem.
> 
> I'm surely missing something here. I know the bvecs are not necessarily lbs
> aligned, but why does that matter? Is there some driver that can only take
> exactly 1 bvec, but allows it to be unaligned? If so, we could take the segment
> queue limit into account, but I am not sure that we need to.

For direct IO, the first bvec will always be aligned to a logical block size.
See __blkdev_direct_IO() and __blkdev_direct_IO_simple():

        if ((pos | iov_iter_alignment(iter)) &
            (bdev_logical_block_size(bdev) - 1))
                return -EINVAL;

And given that, all bvecs should also be LBA aligned since the LBA size is
always a divisor of the page size. Since splitting is always done on an LBA
boundary, I do not see how we can ever get bvecs that are not LBA aligned.
Or I am missing something too...

>  
>> Note, there's also lots of code that assumes that bio_vec::bv_len is a multiple
>> of 512.  
> 
> Could you point me to some examples?
> 
>> That was implied by it being a multiple of the logical block size.  But
>> the DMA alignment can be much lower, like 8 bytes (see nvme_set_queue_limits()).
> 
> That's the driver this was tested on, though I just changed it to 4 bytes for
> 5.19.


-- 
Damien Le Moal
Western Digital Research

  reply	other threads:[~2022-05-19  6:46 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-18 17:11 [PATCHv2 0/3] direct io alignment relax Keith Busch
2022-05-18 17:11 ` [PATCHv2 1/3] block/bio: remove duplicate append pages code Keith Busch
2022-05-18 20:21   ` Chaitanya Kulkarni
2022-05-19  4:28   ` Bart Van Assche
2022-05-19  7:32   ` Christoph Hellwig
2022-05-19 14:19     ` Keith Busch
2022-05-18 17:11 ` [PATCHv2 2/3] block: export dma_alignment attribute Keith Busch
2022-05-18 20:22   ` Chaitanya Kulkarni
2022-05-19  4:30   ` Bart Van Assche
2022-05-19  7:33   ` Christoph Hellwig
2022-05-18 17:11 ` [PATCHv2 3/3] block: relax direct io memory alignment Keith Busch
2022-05-19  0:14   ` Eric Biggers
2022-05-19  1:00     ` Keith Busch
2022-05-19  1:53       ` Eric Biggers
2022-05-19  1:59         ` Keith Busch
2022-05-19  2:08           ` Eric Biggers
2022-05-19  2:25             ` Keith Busch
2022-05-19  3:27               ` Eric Biggers
2022-05-19  4:40                 ` Bart Van Assche
2022-05-19  4:56                 ` Keith Busch
2022-05-19  6:45                   ` Damien Le Moal [this message]
2022-05-19 17:19                     ` Eric Biggers
2022-05-20  3:41                       ` Damien Le Moal
2022-05-19  7:41                   ` Christoph Hellwig
2022-05-19 16:35                     ` Keith Busch
2022-05-20  6:07                       ` Christoph Hellwig
2022-05-19 17:01                   ` Keith Busch
2022-05-19 17:27                     ` Eric Biggers
2022-05-19 17:43                       ` Keith Busch
2022-05-19  7:39       ` Christoph Hellwig
2022-05-19 22:31         ` Keith Busch
2022-05-19  7:38   ` Christoph Hellwig
2022-05-19 14:08     ` Keith Busch
2022-05-20  6:10       ` Christoph Hellwig
2022-05-18 22:45 ` [PATCHv2 0/3] direct io alignment relax Jens Axboe
2022-05-19  7:42   ` Christoph Hellwig
2022-05-19 12:46     ` Jens Axboe
2022-05-18 23:26 ` Eric Biggers
2022-05-19  0:51   ` Keith Busch
2022-05-19  1:02     ` Chaitanya Kulkarni
2022-05-19  2:02       ` Eric Biggers
2022-05-19  7:43         ` hch

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=283d37e8-868a-990b-e953-4b7bb940135c@opensource.wdc.com \
    --to=damien.lemoal@opensource.wdc.com \
    --cc=Kernel-team@fb.com \
    --cc=axboe@kernel.dk \
    --cc=bvanassche@acm.org \
    --cc=ebiggers@kernel.org \
    --cc=hch@lst.de \
    --cc=kbusch@fb.com \
    --cc=kbusch@kernel.org \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-fsdevel@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.