All of lore.kernel.org
 help / color / mirror / Atom feed
From: Avi Kivity <avi@redhat.com>
To: Alexander Graf <agraf@suse.de>
Cc: "Passera, Pablo R" <pablo.r.passera@intel.com>,
	"kvm@vger.kernel.org" <kvm@vger.kernel.org>
Subject: Re: Checking  guest memory pages changes from host userspace
Date: Mon, 22 Jun 2009 14:38:01 +0300	[thread overview]
Message-ID: <4A3F6D19.50609@redhat.com> (raw)
In-Reply-To: <DC72E7E7-2494-48BF-96C6-F543A29888B1@suse.de>

On 06/22/2009 12:57 PM, Alexander Graf wrote:
>>> Yeah, the current implementation is probably the fastest you'll get. 
>>> I didn't want to slow down shadow page setup due to the dirty 
>>> update, but I guess compared to the rest of the overhead that 
>>> doesn't really weight as much.
>>
>> I didn't explain myself well, I now think using the dirty bits is better.
>>
>> Currently we do the following:
>> 1. sweep all sptes to drop write permissions
>
> sweep = flush / remove from spt?

sweep = iterate over all (dropping write permissions from each spte)

>> 2. on write faults, mark the page dirty
>> 3. retrieve the log
>>
>> We could do instead:
>> 1. sweep all sptes to drop the dirty bit
>
> sweep = modify pte to set dirty=0?

sweep = iterate over all (dropping dirty bits)


>> 2. on writes, set the dirty bit (the cpu does this)
>> 3. sweep all sptes to read the dirty bit, and return the log
>>
>> Since step 1 occurs after step 3 of the previous iteration, we could 
>> merge them, and lose nothing.
>
> Hm - so in both cases we need to loop through all PTEs anyways, 
> because we need to either remove/unset dirty them?

Yes.  Although for the write-protect case, we could alternatively look 
at the bitmap to see which sptes we need to drop.

>
> Then it really does make sense to use the dirty bit :-).
> Also doing a #vmexit is rather expensive, so I'd rather loop through 
> 1000 entries in the host context than taking 10 #vmexits. And dirty 
> bits don't #vmexit.

It's not that trivial.  A #vmexit is about 2000 cycles (including mmu 
code), while a cache miss is 100-200 cycles.  So is we don't scan the 
sptes carefully, the cache miss cost could be greater.

> Maybe it'd make sense to use the higher order PTE dirty bits too (do 
> they have dirty bits on x86?) to not loop through all PTEs to generate 
> the dirty map. In most cases it'll be 0 anyways.

There are no higher dirty bits, but we can write protect the higher 
level.  I'm not sure it's worthwhile; if 1% of memory is dirty, but it's 
scattered randomly, then all 2MB ranges will be dirty.

> That way we'd save 90% of the loop time, because we only need to check 
> a couple of 2/4mb pte entries.

You have a 4MB guest?  Okay, you're only considering the vga tracking.  
I don't think that's a problem in practice, worst case is a few hundred 
faults in a 30ms time period.

-- 
error compiling committee.c: too many arguments to function


      parent reply	other threads:[~2009-06-22 11:37 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-06-19 18:09 Checking guest memory pages changes from host userspace Passera, Pablo R
2009-06-20  6:47 ` Amit Shah
2009-06-21 15:51 ` Avi Kivity
2009-06-21 18:46   ` Alexander Graf
2009-06-21 20:01     ` Avi Kivity
2009-06-22  8:50       ` Avi Kivity
2009-06-22  9:42         ` Alexander Graf
2009-06-22  9:48           ` Avi Kivity
     [not found]             ` <DC72E7E7-2494-48BF-96C6-F543A29888B1@suse.de>
2009-06-22 11:38               ` Avi Kivity [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=4A3F6D19.50609@redhat.com \
    --to=avi@redhat.com \
    --cc=agraf@suse.de \
    --cc=kvm@vger.kernel.org \
    --cc=pablo.r.passera@intel.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 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.