Re: unit tests and get_user_pages_ptes_fast()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Oct 05, 2010 at 04:25:05PM +0200, Avi Kivity wrote:
>   On 10/05/2010 04:15 PM, Andrea Arcangeli wrote:
> > On Tue, Oct 05, 2010 at 06:22:17AM -0300, Marcelo Tosatti wrote:
> > >  It'll not be so advantageous for ksm because there should be read-faults
> > >  very rarely on that case.
> >
> > It'll also make all clean swapcache dirty for no good.
> >
> > >  Will post.
> >
> > If we've to walk pagetables twice, why don't you do this:
> >
> > writable=1
> > get_user_pages_fast(write=write_fault)
> > if (!write_fault)
> >     writable = __get_user_pages_fast(write=1)
> >
> > That will solve the debugging knob and it'll solve ksm and it'll be
> > optimal for read swapins on exclusive clean swapcache too.
> 
> But it means an extra vmexit in the following case:
> 
> - read fault
> - page is present and writeable in the Linux page table
> 
> which is very common.  For this you need get_user_pages_ptes_fast().

With a read fault, the VM already sets the pte as writable if the VM
permissions allows that and the page isn't shared (i.e. if it's an
exclusive swap page). We've just to check if it did that or not. So
when it's a read fault we've to run __get_user_pages_fast(write=1)
before we can assume the page is mapped writable in the pte.

So I don't see the problem... in terms of page faults is optimal. Only
downside is having to walk the pagetables twice, the second time to
verify if the first gup_fast has marked the host pte writable or not.
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux