From: Avi Kivity <avi@redhat.com>
To: Jan Kiszka <jan.kiszka@siemens.com>
Cc: "qemu-devel@nongnu.org" <qemu-devel@nongnu.org>,
"kvm@vger.kernel.org" <kvm@vger.kernel.org>
Subject: Re: [PATCH] memory: transaction API
Date: Thu, 21 Jul 2011 17:39:22 +0300 [thread overview]
Message-ID: <4E283A1A.5070908@redhat.com> (raw)
In-Reply-To: <4E283866.7040601@siemens.com>
On 07/21/2011 05:32 PM, Jan Kiszka wrote:
> On 2011-07-21 15:50, Avi Kivity wrote:
> > On 07/21/2011 04:17 PM, Jan Kiszka wrote:
> >> On 2011-07-21 14:58, Avi Kivity wrote:
> >>> On 07/21/2011 03:52 PM, Jan Kiszka wrote:
> >>>>>
> >>>>> The problem is that "update" can change lots of things. offset, size,
> >>>>> whether it's mmio or RAM, read-onlyness, even the wierd things like
> >>>>> coalesced mmio. So it's either a function with 324.2 parameters (or a
> >>>>> large struct), or it's a series of functions with demarcation as to
> >>>>> where the update begins and ends.
> >>>>
> >>>> We do not need to provide update support for each and every bit, but for
> >>>> the common cases. memory_region_update_alias(region, offset, size) would
> >>>> be an excellent first candidate IMO.
> >>>
> >>> It's not enough, look at cirrus and PAM.
> >>
> >> It's a perfect fit for cirrus, but PAM indeed requires set_readonly in
> >> addition.
> >>
> >
> > It isn't a pefect fit for cirrus. If the mode changes in a way that
> > makes mapping the map as RAM possible, or vice versa, and if the banks
> > are contiguous, then _update() results in two mappings or unmappings,
> > while _commit() results in just one (since m_r_update_topology() merges
> > the two adjacent regions).
>
> Continuous banks or mode changes are uncommon compared to offset changes
> of the mapped window. Cirrus does not need to bother about continuity of
> its banks (the memory core will), and mode changes could be implemented
> by allowing updates of the priority, thus reordering the regions instead
> of continuously deleting and recreating them.
The point is _update() can only make changes for one region atomic,
while _commit() is more general. You can sometimes batch all changes
into a single container region, but sometimes it is clumsy, and
sometimes impossible.
Deletion and creation are needed because we can't update an alias'
offset. I guess I can add that functionality. But it still isn't as
general as _commit().
> >
> >> I also think now that describing a memory region offline via a struct
> >> and then passing that to an atomic add/del/update would be a more handy
> >> and future-proof API than an increasing number set functions.
> >
> > Maybe. But it's not sufficient for atomic changes involving multiple
> > regions.
>
> Right. The question is still if there are use cases where this matters
> (ie. update frequencies comparable to graphic scenarios).
Does even cirrus update this often? I would guess cirrus usually uses
the linear framebuffer, no?
I added support for aliases and the vga banks just to get Windows XP to
clear the screen quickly on bootup (used to take ~10 seconds).rary
changes in the cirrus remapping logs.
> > That causes some memory
> > to be temporarily inaccessible. I don't think it's a problem in
> > practice, but if it is, we can fix it by stopping all vcpus if we detect
> > this condition, and by adding an atomic
> > change-memory-map-and-get-dirty-log ioctl to kvm.
>
> I'm not sure if the cirrus or any similar hardware supports consistent
> memory accesses during ongoing bank remappings (ie. while the CPU
> issuing the remapping IO commands is blocked on QEMU executing them).
Point is, unaffected regions (and so unaffected devices) are also
modified. Consider a PAM modified from PCI to RAM. The adjacent RAM
regions are removed and re-added. If some code on another cpu is
running on this RAM, it would be a little confused.
The CPU that is issuing the command is unaffected.
> But such an IOCTL would resolve our problem with dropping a logged
> region as well, right?
Yes, if done right. Still we need to support older kernels.
--
error compiling committee.c: too many arguments to function
next prev parent reply other threads:[~2011-07-21 14:39 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-07-21 10:21 [PATCH] memory: transaction API Avi Kivity
2011-07-21 10:38 ` Jan Kiszka
2011-07-21 12:05 ` Avi Kivity
2011-07-21 12:08 ` Avi Kivity
2011-07-21 12:09 ` Jan Kiszka
2011-07-21 12:13 ` Avi Kivity
2011-07-21 12:52 ` Jan Kiszka
2011-07-21 12:58 ` Avi Kivity
2011-07-21 13:17 ` Jan Kiszka
2011-07-21 13:50 ` Avi Kivity
2011-07-21 14:32 ` Jan Kiszka
2011-07-21 14:39 ` Avi Kivity [this message]
2011-07-21 15:05 ` Jan Kiszka
2011-07-21 15:05 ` [Qemu-devel] " Jan Kiszka
2011-07-21 15:11 ` Avi Kivity
2011-07-21 15:11 ` [Qemu-devel] " Avi Kivity
2011-07-21 11:04 ` Ferry Huberts
2011-07-21 12:07 ` Avi Kivity
2011-07-21 12:26 ` Ferry Huberts
2011-07-21 12:46 ` Avi Kivity
2011-07-21 12:56 ` Ferry Huberts
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=4E283A1A.5070908@redhat.com \
--to=avi@redhat.com \
--cc=jan.kiszka@siemens.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.