Re: [PATCH v7 4/6] block: loop: prepare for supporing direct IO
From: Dave Chinner <hidden>
Date: 2015-07-29 22:10:14
Also in:
lkml
On Wed, Jul 29, 2015 at 07:21:47AM -0400, Ming Lei wrote:
On Wed, Jul 29, 2015 at 4:41 AM, Dave Chinner [off-list ref] wrote:quoted
On Wed, Jul 29, 2015 at 03:33:52AM -0400, Ming Lei wrote:quoted
On Mon, Jul 27, 2015 at 1:33 PM, Christoph Hellwig [off-list ref] wrote:quoted
On Mon, Jul 27, 2015 at 05:53:33AM -0400, Ming Lei wrote:quoted
Because size has to be 4k aligned too.Yes. But again I don't see any reason to limit us to a hardcoded 512 byte block size here, especially considering the patches to finallyFrom loop block's view, the request size can be any count of 512-byte sectors, then the transfer size to backing device can't guarantee to be 4k aligned always.In theory, yes. In practise, doesn't happen very often.quoted
quoted
allow enabling other block sizes from userspace.I have some questions about the patchset, and looks the author doesn't reply it yet. On Mon, Jul 27, 2015 at 6:06 PM, Dave Chinner [off-list ref] wrote:quoted
quoted
Because size has to be 4k aligned too.So check that, too. Any >= 4k block size filesystem should be doing mostly 4k aligned and sized IO...I guess you mean we only use direct IO for the 4k aligned and sized IO? If so, that won't be efficient because the page cache has to be flushed during the switch.It will be extremely rare for a 4k block size filesystem to do anything other than 4k aligned and sized IO. Think about it for a minute: what does the page cache do to unaligned IO patterns (i.e. buffered IO)? It does IO in page sizes, and so if the application if doing badly aligned or sized IO with buffered IO, then the underlying device will only ever size page sized and aligned IO. Hence sector aligned IO will only come from applications doing direct IO. If the application is doing direct IO and it's not properly aligned, then it already is going to get sucky performance because most filesystem serialise sub-block size direct IO because concurrent sub-block IOs to the same block usually leads to data corruption.The blocksize of filesysten over loop can be 512, 1024, 2048, and suppose sector size of backing device is 4096, then filesystem can see aligned direct IO when IO size/offset from application is aligned with fs block size, but loop still can't do direct IO for all this kind of requests against backing file.
Sure, but again you're talking about a fairly rare configuration. The vast majority of filesystems use 4k block sizes, just like the vast majority of applications use buffered IO. Don't jump through hoops to optimise a case that probably doesn't need optimising. Make it work correctly first, then optimise performance later when someone has a need for it to be really fast.
Another case is that application may access loop block directly, such as 'dd if=/dev/loopN', but it may not be common, and maybe it needn't to consider.
'dd if=/dev/loopN bs=4k....' Cheers, Dave. -- Dave Chinner david-FqsqvQoI3Ljby3iVrkZq2A@public.gmane.org