From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
To: Juan Quintela <quintela@redhat.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [RFC] Split migration bitmaps by ramblock
Date: Fri, 31 Mar 2017 18:50:40 +0100 [thread overview]
Message-ID: <20170331175039.GD2408@work-vm> (raw)
In-Reply-To: <87tw6co47w.fsf@secure.mitica>
* Juan Quintela (quintela@redhat.com) wrote:
> "Dr. David Alan Gilbert" <dgilbert@redhat.com> wrote:
> > * Juan Quintela (quintela@redhat.com) wrote:
> >> Note that there are two reason for this, ARM and PPC do things like
> >> guests with 4kb pages on hosts with 16/64kb hosts, and then we have
> >> HugePages. Note all the workarounds that postcopy has to do because
> >> to work in HugePages size.
> >
> > There are some fun problems with changing the bitmap page size;
> > off the top of my head, the ones I can remember include:
> > a) I'm sure I've seen rare cases where a target page is marked as
> > dirty inside a hostpage; I'm guessing that was qemu's doing, but
> > there are more subtle cases, e.g. running a 4kb guest on a 64kb host;
> > it's legal - and 4kb power guests used to exist; I think in those
> > cases you see KVM only marking one target page as dirty.
>
> /*
> * bitmap-traveling is faster than memory-traveling (for addr...)
> * especially when most of the memory is not dirty.
> */
> for (i = 0; i < len; i++) {
> if (bitmap[i] != 0) {
> c = leul_to_cpu(bitmap[i]);
> do {
> j = ctzl(c);
> c &= ~(1ul << j);
> page_number = (i * HOST_LONG_BITS + j) * hpratio;
> addr = page_number * TARGET_PAGE_SIZE;
> ram_addr = start + addr;
> cpu_physical_memory_set_dirty_range(ram_addr,
> TARGET_PAGE_SIZE * hpratio, clients);
> } while (c != 0);
> }
> }
>
>
> Thisis the code that we end using when we are synchronizing from kvm, so
> if we don't have all pages of a host page set to one (or zero) I think
> we are doing something wrong, no? Or I am missunderstanding the code?
Hmm, that does look like that - so perhaps the case I was seeing was just
qemu setting it somewhere?
(I definitely remember seeing it because I remember dumping the bitmaps
and checking for them; but I can't remember the circumstance)
> > b) Are we required to support migration across hosts of different pagesize;
> > and if we do that what size should a bit represent?
> > People asked about it during postcopy but I think it's restricted to
> > matching sizes. I don't think precopy has any requirement for matching
> > host pagesize at the moment. 64bit ARM does 4k, 64k and I think 16k was
> > added later.
>
> With current precopy, we should work independently of the host page size
> (famous last words), and in a 1st step, I will only send pages of the
> size TARGET_PAGE_SIZE. I will only change the bitmaps. We can add
> bigger pages later.
>
> > c) Hugepages have similar issues; precopy doesn't currently have any
> > requirement for the hugepage selection on the two hosts to match,
> > but it does on postcopy. Also you don't want to have a single dirty
> > bit for a 1GB host hugepage if you can handle detecting changes at
> > a finer grain level.
>
> I agree here, I was thinking more on the Power/ARM case than the
> HugePage case. For the 2MB page, we could think about doing it, for the
> 1GB case, it is not gonna work.
Yep,
Dave
> Later, Juan.
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
prev parent reply other threads:[~2017-03-31 17:50 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-03-23 21:01 [Qemu-devel] [RFC] Split migration bitmaps by ramblock Juan Quintela
2017-03-23 21:01 ` [Qemu-devel] [PATCH] ram: Split dirty bitmap by RAMBlock Juan Quintela
2017-03-24 1:57 ` [Qemu-devel] [RFC] Split migration bitmaps by ramblock Yang Hongyang
2017-03-24 8:34 ` Juan Quintela
2017-03-24 9:23 ` Yang Hongyang
2017-03-28 18:52 ` Dr. David Alan Gilbert
2017-03-28 19:05 ` Dr. David Alan Gilbert
2017-03-29 8:51 ` Juan Quintela
2017-03-31 17:50 ` Dr. David Alan Gilbert [this message]
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=20170331175039.GD2408@work-vm \
--to=dgilbert@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
/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).