[Top][All Lists]

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

Re: [Qemu-devel] buffer alignment for block backends

From: Anthony Liguori
Subject: Re: [Qemu-devel] buffer alignment for block backends
Date: Thu, 09 Apr 2009 08:11:27 -0500
User-agent: Thunderbird (X11/20090320)

Stefano Stabellini wrote:
Anthony Liguori wrote:

If you do not want to do that, another possible solution is to create a
new function called "qemu_blockalign" that would be implemented as
qemu_memalign(512, size);
This is fine, but this is purely an optimization, it cannot be relied upon in the general case.

well, there aren't many places that allocate buffers for the block
backends, I can count only the following for dma operations:

- block.c:bdrv_aio_rw_vector

This bounces a scatter/gather list into a single linear buffer since not all backends handle scatter/gather lists today.

and this one for other ide read and write operations:

- ide.c:ide_init2

This buffer is only used when not doing DMA. When doing DMA, we are able to do zero-copy IO so the alignment of the request depends on how the guest aligned the request. I suspect you'll find a lot of guests that, in practice, do not align requests at 4k boundaries. I don't know what the requirements are for IDE but I would be surprised if it was 4k.

I think it would be important at least for dma operations.

We have a lot of places with explicit memalign's because the block raw backend code degrades into synchronous IO when performing non-aligned IO with cache=off. I've never liked this much personally.

That's not saying that I think we shouldn't try to align DMA buffers when we're allocating them in QEMU. A block level function to do this would be pretty nice in fact.

 so we don't have to write 512 bytes everywhere
but only in one place, thus making life easier to people like me that
have to change the value for a special case.

Thanks in advance for your sympathy :)
Why does your backend requirement page alignment and who's notion of page?

my backend (block-vbd) needs page aligned buffers because blkfront needs
page aligned buffers. I could allocate a new page aligned buffer every
time and the memcpy but it is just a waste.

You'll need to check the alignment of the request and bounce it if necessary. In the case that you have zero-copy requests coming from the guest that aren't page aligned, someone has to bounce the thing to make it page aligned.

So I presume you're implementing blkfront in userspace? Does minios provide a userspace interface for grant tables that looks similar to the interfaces on Linux? Were you planning on submitting this for inclusion in upstream QEMU?

I think it's a reasonable thing to include provided it's relatively self-contained.


Anthony Liguori

reply via email to

[Prev in Thread] Current Thread [Next in Thread]