[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] PAGE_SIZE (64KB), while block driver 'struct request' deals with < PAGE_SIZE (up to 44Kb). Was:Re: [RFC] Support of non-indirect grant backend on 64KB guest

On Fri, Aug 21, 2015 at 05:08:35PM +0100, David Vrabel wrote:
> On 21/08/15 17:05, Konrad Rzeszutek Wilk wrote:
> > 
> > I have to concur with that. We can't mandate that ARM 64k page MUST use
> > indirect descriptors.
> Then it has to be fixed in the block layer to allow < PAGE_SIZE segments
> and to get the block layer to split requests for blkfront.

Hey Jens,

I am hoping you can help us figure this problem out.

The Linux ARM is capable of using 4KB pages and 64KB pages. Our block
driver (xen-blkfront) was built with 4KB pages in mind and without using
any fancy flags (which some backends lack) the maximum amount of I/O it can
fit on a ring is 44KB.

This has the unfortunate effect that when the xen-blkfront
gets an 'struct request' it can have on page (64KB) and it can't actually
fit it on the ring! And the lowest segment size it advertises is PAGE_SIZE
(64KB). I believe Julien (who found this) tried initially advertising
smaller segment size than PAGE_SIZE (32KB). However looking at
__blk_segment_map_sg it looks to assume smallest size is PAGE_SIZE so
that would explain why it did not work.

One wya to make this work is for the driver (xen-blkfront) to split
the 'struct request' I/O in two internal requests.

But this has to be a normal problem. Surely there are other drivers
(MMC?) that can't handle PAGE_SIZE and have to break their I/Os.
Would it make sense for the common block code to be able to deal
with this?

Thank you!

Xen-devel mailing list



Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.