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

Re: [Xen-devel] device-mmio emulation in Xen



At 16:32 +0000 on 05 Jan (1262709121), Abhinav Srivastava wrote:
> 1. How does Xen know which code path to execute? What I am noticing is
> that sometimes it goes to all the way till the end of the page fault
> handler code to call handle_mmio function, and sometimes it goes into
> the fast path to call this function, bypassing all the page fault
> handlers code? Why it does not go into the fast path all the time? OR
> Xen does something at the first time so that second time, the execution
> can directly go into the fast path? 

Yes.  In the slow path, it creates a deliberately invalid shadow PTE.
When the MMU signals an invalid-PTE fault, Xen knows tro take the fast
path.

> And, does this needs to be done for all physical pages given to MMIO?

Yes.  Some kind of pagefault needs to happen for emulated MMIO.  The
fast-path trick just makes the fault handler faster. 

Tim.

> 
> Thanks,
> Abhinav
> 
> 
> 
> --- On Tue, 5/1/10, Tim Deegan <Tim.Deegan@xxxxxxxxxx> wrote:
> 
> > From: Tim Deegan <Tim.Deegan@xxxxxxxxxx>
> > Subject: Re: [Xen-devel] device-mmio emulation in Xen
> > To: "Abhinav Srivastava" <abhinavs_iitkgp@xxxxxxxxxxx>
> > Cc: "xen-devel@xxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxx>
> > Date: Tuesday, 5 January, 2010, 9:30 PM
> > Hi, 
> > 
> > At 15:32 +0000 on 05 Jan (1262705557), Abhinav Srivastava
> > wrote:
> > > I noticed that during a network copy operation Xen
> > page faults a lot and control goes to sh_page_fault
> > function. When I printed some debugging info, it showed me
> > gmfn = -1. Then the execution goes through the regular path
> > of the page fault handler code, which means it creates an
> > entry using shadow_get_and_create_l1e, propagates it using
> > l1e_propagate_from_guest, and finally updates the entry
> > using shadow_set_l1e. It finally goes into the device-model
> > mmio condition. In this condition, it extracts a guest
> > physical address and calls "goto mmio", which in turn calls
> > handle_mmio function that emulates the instruction.
> > > 
> > > However with the gmfn = -1 condition, the execution
> > sometimes directly goto
> > > to handle_mmio function using the fast_fault_path with
> > going through the regular path. It seems like there are two
> > possible execution paths, and I did not understand which one
> > is chosen when?
> > > 
> > 
> > /******************************************************************************
> >  * We implement a "fast path" for two special cases: faults
> > that require
> >  * MMIO emulation, and faults where the guest PTE is not
> > present.  We
> >  * record these as shadow l1 entries that have reserved
> > bits set in
> >  * them, so we can spot them immediately in the fault
> > handler and handle
> >  * them without needing to hold the shadow lock or walk the
> > guest
> >  * pagetables.
> >  *
> >  * This is only feasible for PAE and 64bit Xen: 32-bit
> > non-PAE PTEs don't
> >  * have reserved bits that we can use for this.
> >  */
> > 
> > > I have some questions related to this behavior:
> > > 
> > > 1. Why are there so many faults duing network copy
> > operation?
> > 
> > The faults are a HVM guest doing MMIO operations to control
> > its emulated
> > network card.
> > 
> > > 2. What does gmfn = -1 signify? Is it reserved for
> > mmio addresses?
> > 
> > It's INVALID_MFN.  It means there is no memory mapped
> > at the address the
> > guest accessed.  Xen treats that as MMIO, though
> > there's a plan to have
> > MMIO regions explicitly registered instead.
> > 
> > > 3. How does Xen handle this gmfn = -1? It seems like
> > on the regular path
> > > it still creates, propagates, and updates entries for
> > gmfn = -1. How does Xen handles this at the shadow page
> > table level?
> > 
> > Yes, it creates a deliberately invalid shadow PTE; then in
> > the pagefault
> > handler it can use the pagefault error code and the
> > contents of the PTE 
> > to skip the bulk of the shadow fault handling and go
> > straight to handle_mmio.
> > 
> > > 4. What are these two code execution paths, and when
> > does Xen decide which
> > > path to choose?
> > > 
> > > 5. Finally, is there anyway these faults can be
> > reduced?
> > 
> > Yes, use PV drivers in the guest.  That eliminates the
> > whole
> > emulated-MMIO system, and all the pagefaults associated
> > with it. 
> > 
> > Cheers,
> > 
> > Tim.
> > 
> > > I would very appreciate any help in this regard.
> > > 
> > > Thanks,
> > > Abhinav
> > > 
> > > 
> > > 
> > >       The INTERNET now has a
> > personality. YOURS! See your Yahoo! Homepage. http://in.yahoo.com/
> > > 
> > > _______________________________________________
> > > Xen-devel mailing list
> > > Xen-devel@xxxxxxxxxxxxxxxxxxx
> > > http://lists.xensource.com/xen-devel
> > 
> > -- 
> > Tim Deegan <Tim.Deegan@xxxxxxxxxx>
> > Principal Software Engineer, Citrix Systems (R&D) Ltd.
> > [Company #02300071, SL9 0DZ, UK.]
> > 
> 
> 
>       The INTERNET now has a personality. YOURS! See your Yahoo! Homepage. 
> http://in.yahoo.com/

-- 
Tim Deegan <Tim.Deegan@xxxxxxxxxx>
Principal Software Engineer, Citrix Systems (R&D) Ltd.
[Company #02300071, SL9 0DZ, UK.]

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.