All of lore.kernel.org
 help / color / mirror / Atom feed
From: Avi Kivity <avi-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
To: Andrea Arcangeli <andrea-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
Subject: Re: [PATCH] kvm swapping with mmu notifiers + age_page
Date: Tue, 22 Jan 2008 16:53:37 +0200	[thread overview]
Message-ID: <47960371.8020709@qumranet.com> (raw)
In-Reply-To: <20080122144149.GD7331-lysg2Xt5kKMAvxtiuMwx3w@public.gmane.org>

Andrea Arcangeli wrote:
> On Tue, Jan 22, 2008 at 04:08:16PM +0200, Avi Kivity wrote:
>   
>> Andrea Arcangeli wrote:
>>     
>>> This is the same as before but it uses the age_page callback to
>>> prevent the guest OS working set to be swapped out. It works well here
>>> so far. This depends on the memslot locking with mmu lock patch and on
>>> the mmu notifiers #v3 patch that I'll post in CC with linux-mm shortly
>>> that implements the age_page callback and that changes follow_page to
>>> set the young bit in the pte instead of setting the referenced bit (so
>>> the age_page will be called again later when the VM clears the young
>>> bit).
>>>
>>>  +static void unmap_spte(struct kvm *kvm, u64 *spte)
>>> +{
>>> +	struct page *page = pfn_to_page((*spte & PT64_BASE_ADDR_MASK) >> 
>>> PAGE_SHIFT);
>>> +	get_page(page);
>>> +	rmap_remove(kvm, spte);
>>> +	set_shadow_pte(spte, shadow_trap_nonpresent_pte);
>>> +	kvm_flush_remote_tlbs(kvm);
>>> +	__free_page(page);
>>> +}
>>>   
>>>       
>> Why is get_page()/__free_page() needed here? Isn't kvm_release_page_*() 
>> sufficient?
>>     
>
> The other-cpus-tlb have to be flushed _before_ the page is visible in
> the host kernel freelist, otherwise other host-cpus with tlbs still
> mapping the page with write-access would be able to modify the page
> even after it's queued in the freelist. 

Right.  But doesn't this apply to other callers of rmap_remove()?  
Perhaps we need to put the flush in set_spte() or rmap_remove() and 
rmap_write_protect().

Oh, rmap_write_protect() already has the flush.

> The mmu_notifier are called in
> places like munmap where the __free_page will not be a put_page but a
> real __free_page. Furthermore kvm_release_page_ aren't calling
> __free_page but put_page that would leak ram in those paths (mostly
> invalidate_range). I'd rather not depend on the mmu_notifiers always
> being invoked with an additional reference count on the page (in
> addition to the spte reference count). The ->invalidate_* methods
> might be the ones that put the page in the freelist.
>   

I'm afraid I don't really understand the difference in semantics between 
put_page() and __free_page().  Maybe we need to switch 
kvm_release_page_*() to __free_page()?


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


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/

  parent reply	other threads:[~2008-01-22 14:53 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-01-21 12:41 [PATCH] kvm swapping with mmu notifiers + age_page Andrea Arcangeli
     [not found] ` <20080121124124.GG6970-lysg2Xt5kKMAvxtiuMwx3w@public.gmane.org>
2008-01-22 14:08   ` Avi Kivity
     [not found]     ` <4795F8D0.30102-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2008-01-22 14:41       ` Andrea Arcangeli
     [not found]         ` <20080122144149.GD7331-lysg2Xt5kKMAvxtiuMwx3w@public.gmane.org>
2008-01-22 14:53           ` Avi Kivity [this message]
     [not found]             ` <47960371.8020709-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2008-01-22 17:41               ` Andrea Arcangeli

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=47960371.8020709@qumranet.com \
    --to=avi-atkuwr5tajbwk0htik3j/w@public.gmane.org \
    --cc=andrea-atKUWr5tajBWk0Htik3J/w@public.gmane.org \
    --cc=kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.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.