From: Avi Kivity <avi@redhat.com>
To: Jan Kiszka <jan.kiszka@web.de>
Cc: Blue Swirl <blauwirbel@gmail.com>, qemu-devel <qemu-devel@nongnu.org>
Subject: Re: [Qemu-devel] [PATCH] memory: Reintroduce dirty flag to optimize changes on disabled regions
Date: Sun, 04 Nov 2012 21:21:40 +0200 [thread overview]
Message-ID: <5096C044.7060504@redhat.com> (raw)
In-Reply-To: <509627A2.3040509@web.de>
On 11/04/2012 10:30 AM, Jan Kiszka wrote:
> From: Jan Kiszka <jan.kiszka@siemens.com>
>
> Cirrus is triggering this, e.g. during Win2k boot: Changes only on
> disabled regions require no topology update when transaction depth drops
> to 0 again.
817dcc5368988b0 (pci: give each device its own address space) mad this
much worse by multiplying the number of address spaces. Each change is
now evaluated N+2 times, where N is the number of PCI devices. It also
causes a corresponding expansion in memory usage.
I want to address this by caching AddressSpaceDispatch trees with the
key being the contents of the FlatView for that address space. This
will drop the number of distinct trees to 2-4 (3 if some devices have
PCI_COMMAND_MASTER disabled, 4 if the PCI address space is different
from the cpu memory address space) but will fail if we make each address
space different (for example filtering out the device's own BARs).
If this change also improves cpu usage sufficiently, then it will be
better than your patch, which doesn't recognize changes in an enabled
region inside a disabled or hidden region. In other words, your patch
fits the problem at hand but isn't general. On the other hand my
approach doesn't eliminate render_memory_region(), just the exec.c stuff
and listener updates. So we need to understand where the slowness comes
from.
>
> @@ -1543,6 +1554,7 @@ void address_space_init(AddressSpace *as, MemoryRegion *root)
> flatview_init(as->current_map);
> QTAILQ_INSERT_TAIL(&address_spaces, as, address_spaces_link);
> as->name = NULL;
> + memory_region_update_pending = true;
> memory_region_transaction_commit();
> address_space_init_dispatch(as);
> }
> @@ -1552,6 +1564,7 @@ void address_space_destroy(AddressSpace *as)
> /* Flush out anything from MemoryListeners listening in on this */
> memory_region_transaction_begin();
> as->root = NULL;
> + memory_region_update_pending = true;
> memory_region_transaction_commit();
> QTAILQ_REMOVE(&address_spaces, as, address_spaces_link);
> address_space_destroy_dispatch(as);
init and destroy cannot happen to a region that is mapped (and cannot
happen within a transaction), so these two are redundant.
--
I have a truly marvellous patch that fixes the bug which this
signature is too narrow to contain.
next prev parent reply other threads:[~2012-11-04 19:21 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-11-04 8:30 [Qemu-devel] [PATCH] memory: Reintroduce dirty flag to optimize changes on disabled regions Jan Kiszka
2012-11-04 19:21 ` Avi Kivity [this message]
2012-11-05 6:26 ` Jan Kiszka
2012-11-05 8:12 ` Avi Kivity
2012-11-05 8:51 ` Jan Kiszka
2012-11-05 12:33 ` Avi Kivity
2012-11-05 12:37 ` Jan Kiszka
2012-11-25 10:18 ` Avi Kivity
2012-11-25 10:45 ` Jan Kiszka
2012-11-25 12:47 ` Avi Kivity
2012-11-05 15:45 ` [Qemu-devel] [PATCH v2] " Jan Kiszka
2012-11-10 19:28 ` Blue Swirl
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=5096C044.7060504@redhat.com \
--to=avi@redhat.com \
--cc=blauwirbel@gmail.com \
--cc=jan.kiszka@web.de \
--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).