From: "Blue Swirl" <blauwirbel@gmail.com>
To: Andrea Arcangeli <aarcange@redhat.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [RFC 1/2] pci-dma-api-v1
Date: Fri, 28 Nov 2008 19:59:13 +0200 [thread overview]
Message-ID: <f43fc5580811280959k3410e62eq7a2a46417b438b64@mail.gmail.com> (raw)
In-Reply-To: <20081128015602.GA31011@random.random>
On 11/28/08, Andrea Arcangeli <aarcange@redhat.com> wrote:
> On Thu, Nov 27, 2008 at 09:14:45PM +0200, Blue Swirl wrote:
> > The previous similar attempt by Anthony for generic DMA using vectored
> > IO was abandoned because the malloc/free overhead was more than the
>
>
> Even if there were dynamic allocations in the fast path, the overhead
> of malloc/free is nothing if compared to running and waiting a host
> kernel syscall to return every 4k, not to tell with O_DIRECT enabled
> which is the whole point of having a direct-dma API that truly doesn't
> pollute the cache. With O_DIRECT, without a real readv/writev I/O
> performance would be destroyed going down to something like 10M/sec
> even on the fastest storage/CPU/ram combinations.
>
> So the question is how those benchmarks were run, with or without a
> real readv/writev and with or without O_DIRECT to truly eliminate all
> CPU cache pollution out of the memory copies?
I don't know, here's a pointer:
http://lists.gnu.org/archive/html/qemu-devel/2008-08/msg00092.html
> About malloc, all we care about is the direct-io fast path, and with
> my patch there is no allocation whatsoever in the fast path. About the
> bounce layer, that is there for correctness only (purely to do DMA to
> non-RAM or in non-linear RAM ranges with non-RAM holes in between) and
> we don't care about it in performance terms.
>
>
> > performance gain. Have you made any performance measurements? How does
> > this version compare to the previous ones?
>
>
> I run some minor benchmark but it's basically futile to benchmark with
> the bdrv_aio_readv/writev_em.
>
>
> > I think the pci_ prefix can be removed, there is little PCI specific.
>
>
> Adding the pci_ prefix looked a requirement in naming terms from
> previous threads on the topic. Before I learnt about it, I didn't want
> to have a pci_ prefix too so I can certainly agree with you ;).
>
> There's is nothing PCI specific so far. Anyway this is just a naming
> matter, it's up to you to decide what you like :).
>
>
> > For Sparc32 IOMMU (and probably other IOMMUS), it should be possible
> > to register a function used in place of cpu_physical_memory_rw,
> > c_p_m_can_dma etc. The goal is that it should be possible to stack the
> > DMA resolvers (think of devices behind a number of buses).
>
>
> The hardware thing being emulated in the real world wouldn't attach to
> both buses I think, hence you can specify it in the driver what kind
> of iommu it has (then behind it you can emulate whatever hardware you
> want but still the original device was pci or not-pci). I personally
> don't see much difference as renaming later wouldn't be harder than a
> sed script...
Sorry, my description seems to have lead you to a totally wrong track.
I meant this scenario: device (Lance Ethernet) -> DMA controller
(MACIO) -> IOMMU -> physical memory. (In this case vectored DMA won't
be useful since there is byte swapping involved, but serves as an
example about generic DMA). At each step the DMA address is rewritten.
It would be nice if the interface between Lance and DMA, DMA and IOMMU
and IOMMU and memory was the same.
Here's some history, please have a look.
My first failed attempt:
http://lists.gnu.org/archive/html/qemu-devel/2007-08/msg00179.html
My second failed rough sketch:
http://lists.gnu.org/archive/html/qemu-devel/2007-10/msg00626.html
Anthony's version:
http://lists.gnu.org/archive/html/qemu-devel/2008-03/msg00474.html
Anthony's second version:
http://lists.gnu.org/archive/html/qemu-devel/2008-04/msg00077.html
next prev parent reply other threads:[~2008-11-28 17:59 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-11-27 12:35 [Qemu-devel] [RFC 1/2] pci-dma-api-v1 Andrea Arcangeli
2008-11-27 12:43 ` [Qemu-devel] [RFC 2/2] bdrv_aio_readv/writev_em Andrea Arcangeli
2008-11-28 11:09 ` Jamie Lokier
2008-11-27 19:14 ` [Qemu-devel] [RFC 1/2] pci-dma-api-v1 Blue Swirl
2008-11-28 1:56 ` Andrea Arcangeli
2008-11-28 17:59 ` Blue Swirl [this message]
2008-11-28 18:50 ` Andrea Arcangeli
2008-11-28 19:03 ` Blue Swirl
2008-11-28 19:18 ` Jamie Lokier
2008-11-29 19:49 ` Avi Kivity
2008-11-30 17:20 ` Andrea Arcangeli
2008-11-30 22:31 ` Anthony Liguori
2008-11-30 18:04 ` Andrea Arcangeli
2008-11-30 17:41 ` [Qemu-devel] [RFC 1/1] pci-dma-api-v2 Andrea Arcangeli
2008-11-30 18:36 ` [Qemu-devel] " Blue Swirl
2008-11-30 19:04 ` Andrea Arcangeli
2008-11-30 19:11 ` Blue Swirl
2008-11-30 19:20 ` Andrea Arcangeli
2008-11-30 21:36 ` Blue Swirl
2008-11-30 22:54 ` Anthony Liguori
2008-11-30 22:50 ` [Qemu-devel] " Anthony Liguori
2008-12-01 9:41 ` Avi Kivity
2008-12-01 16:37 ` Anthony Liguori
2008-12-02 9:45 ` Avi Kivity
2008-11-30 22:38 ` [Qemu-devel] [RFC 1/2] pci-dma-api-v1 Anthony Liguori
2008-11-30 22:51 ` Jamie Lokier
2008-11-30 22:34 ` Anthony Liguori
2008-11-29 19:48 ` Avi Kivity
2008-11-30 17:29 ` Andrea Arcangeli
2008-11-30 20:27 ` Avi Kivity
2008-11-30 22:33 ` Andrea Arcangeli
2008-11-30 22:33 ` Anthony Liguori
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=f43fc5580811280959k3410e62eq7a2a46417b438b64@mail.gmail.com \
--to=blauwirbel@gmail.com \
--cc=aarcange@redhat.com \
--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).