From: Anthony Liguori <anthony@codemonkey.ws>
To: Avi Kivity <avi@redhat.com>
Cc: Andrea Arcangeli <aarcange@redhat.com>,
chrisw@redhat.com, qemu-devel@nongnu.org, kvm@vger.kernel.org,
Gerd Hoffmann <kraxel@redhat.com>
Subject: Re: [Qemu-devel] Re: [PATCH 2 of 5] add can_dma/post_dma for direct IO
Date: Sun, 14 Dec 2008 17:08:39 -0600 [thread overview]
Message-ID: <494591F7.3080002@codemonkey.ws> (raw)
In-Reply-To: <49456337.4000000@redhat.com>
Avi Kivity wrote:
> Anthony Liguori wrote:
>> I've thought quite a bit about it, and I'm becoming less convinced
>> that this sort of API is going to be helpful.
>>
>> I was thinking that we need to make one minor change to the map API I
>> proposed. It should return a mapped size as an output parameter and
>> take a flag as to whether partial mappings can be handled. The
>> effect would be that you never bounce to RAM which means that you can
>> also quite accurately determine the maximum amount of bouncing (it
>> should be proportional to the amount of MMIO memory that's registered).
>
> That's pointless; cirrus for example has 8MB of mmio while a
> cpu-to-vram blit is in progress, and some random device we'll add
> tomorrow could easily introduce more. Our APIs shouldn't depend on
> properties of emulated hardware, at least as much as possible.
One way to think of what I'm suggesting, is that if for every
cpu_register_physical_memory call for MMIO, we allocated a buffer, then
whenever map() was called on MMIO, we would return that already
allocated buffer. The overhead is fixed and honestly relatively small.
Much smaller than dma.c proposes.
But you can be smarter, and lazily allocate those buffers for MMIO.
That will reduce the up front memory consumption. I'd be perfectly
happy though if the first implementation just malloc() on
cpu_register_physical_memory for the sake of simplicity.
> I'll enumerate the functions that dma.c provides:
> - convert guest physical addresses to host virtual addresses
The map() api does this.
> - construct an iovec for scatter/gather
The map() api does not do this.
> - handle guest physical addresses for which no host virtual addresses
> exist, while controlling memory use
> - take care of the dirty bit
> - provide a place for adding hooks to hardware that can modify dma
> operations generically (emulated iommus, transforming dma engines)
The map() api does all of this.
> I believe that a dma api that fails to address all of these
> requirements is trying to solve too few problems at the same time, and
> will either cause dma clients to be unduly complicated, or will
> require rewriting.
I think there's a disconnect between what you describe and what the
current code does. I think there's a very simple solution, let's start
with the map() api. I'm convinced that the virtio support for it will
be trivial and that virtio will not benefit from the dma.c api
proposed. I'm willing to do the virtio map implementation to
demonstrate this. Let's see two implementations that use the dma.c api
before we commit to it. I'd like to see at least a network device and a
block device. I don't believe network devices will benefit from it
because they don't support partial submissions.
I like any API that reduces duplicate code. It's easy to demonstrate
that with patches. Based on my current understanding of the API and
what I expect from the devices using it, I don't believe the API will
actually do that. It's quite easy to prove me wrong though.
Regards,
Anthony Liguori
next prev parent reply other threads:[~2008-12-14 23:08 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-12-12 18:16 [Qemu-devel] [PATCH 0 of 5] dma api v3 Andrea Arcangeli
2008-12-12 18:16 ` [Qemu-devel] [PATCH 1 of 5] fix cpu_physical_memory len Andrea Arcangeli
2008-12-12 19:06 ` [Qemu-devel] " Anthony Liguori
2008-12-12 19:26 ` Andrea Arcangeli
2008-12-12 18:16 ` [Qemu-devel] [PATCH 2 of 5] add can_dma/post_dma for direct IO Andrea Arcangeli
2008-12-12 19:00 ` Blue Swirl
2008-12-12 19:18 ` Anthony Liguori
2008-12-12 20:05 ` Blue Swirl
2008-12-12 20:10 ` Anthony Liguori
2008-12-12 19:15 ` [Qemu-devel] " Anthony Liguori
2008-12-12 19:37 ` Andrea Arcangeli
2008-12-12 20:09 ` Anthony Liguori
2008-12-12 20:25 ` Gerd Hoffmann
2008-12-12 19:39 ` Anthony Liguori
2008-12-13 9:22 ` Avi Kivity
2008-12-13 16:45 ` Anthony Liguori
2008-12-13 19:48 ` Avi Kivity
2008-12-13 21:07 ` Anthony Liguori
2008-12-14 6:03 ` Avi Kivity
2008-12-14 19:10 ` Anthony Liguori
2008-12-14 19:49 ` Avi Kivity
2008-12-14 23:08 ` Anthony Liguori [this message]
2008-12-15 0:57 ` Paul Brook
2008-12-15 2:09 ` Anthony Liguori
2008-12-15 6:23 ` Avi Kivity
2008-12-15 18:35 ` Blue Swirl
2008-12-15 22:06 ` Anthony Liguori
2008-12-16 9:41 ` Avi Kivity
2008-12-16 16:55 ` Blue Swirl
2008-12-16 17:09 ` Avi Kivity
2008-12-16 17:48 ` Anthony Liguori
2008-12-16 18:11 ` Blue Swirl
2008-12-16 15:57 ` Blue Swirl
2008-12-16 16:29 ` Paul Brook
2008-12-16 16:35 ` Blue Swirl
2008-12-14 17:30 ` Jamie Lokier
2008-12-13 14:39 ` Andrea Arcangeli
2008-12-13 16:46 ` Anthony Liguori
2008-12-13 16:53 ` Andrea Arcangeli
2008-12-13 17:54 ` Andreas Färber
2008-12-13 21:11 ` Anthony Liguori
2008-12-14 16:47 ` Andrea Arcangeli
2008-12-14 17:01 ` Avi Kivity
2008-12-14 17:15 ` Andrea Arcangeli
2008-12-14 19:59 ` Avi Kivity
2008-12-22 16:44 ` Ian Jackson
2008-12-22 19:44 ` Avi Kivity
2008-12-23 0:03 ` Thiemo Seufer
2008-12-23 1:02 ` Andrea Arcangeli
2008-12-23 17:31 ` Avi Kivity
2008-12-22 19:46 ` Avi Kivity
2009-01-05 10:27 ` Gerd Hoffmann
2008-12-13 22:47 ` Anthony Liguori
2008-12-14 6:07 ` Avi Kivity
2008-12-12 18:16 ` [Qemu-devel] [PATCH 3 of 5] rename dma.c to isa_dma.c Andrea Arcangeli
2008-12-12 18:16 ` [Qemu-devel] [PATCH 4 of 5] dma api Andrea Arcangeli
2008-12-12 18:55 ` Blue Swirl
2008-12-12 18:16 ` [Qemu-devel] [PATCH 5 of 5] bdrv_aio_readv/writev Andrea Arcangeli
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=494591F7.3080002@codemonkey.ws \
--to=anthony@codemonkey.ws \
--cc=aarcange@redhat.com \
--cc=avi@redhat.com \
--cc=chrisw@redhat.com \
--cc=kraxel@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=qemu-devel@nongnu.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).