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

RE: [Xen-devel] Does Dom0 always get interrupts first before they are delivered to other guest domains?



> I have another question about using VT-X and Hypercall to support
> para-virtualized and full-virtualized domain simultaneously:

Sure, sorry for the delay...

> It seems Xen does not need to use hypercall to replace all problematic
> instructions (e.g. HLT, POPF etc.). For example, there is an instruction
> called CLTS. Instead of replacing it with a hypercall, Xen hypervisor will
> first delegate it to ring 0 when a GP fault occurs and then run it from
> there to solve ring aliasing issue.
> (http://www.linuxjournal.com/comment/reply/8909 talked about this).
> 

If instructions are trappable then Xen can catch their execution and
emulate them - it sometimes does this, even for paravirt guests.  Since
a GPF occurs it's possible to catch the CLTS instruction.  Some
instructions fail silently when run outside ring 0, which is one cas
ewhere a hypercall is more important (broadly speaking, the other cases
for using hypercalls being performance and improved manageability).

> Now my first question comes up: if I 'm running both para-virtualized and
> full-virtualized domain on single CPU (I think Xen hypervisor will set up
> the exception bitmap for CLTS instruction for HVM domain). Then Xen
> hypervisor will be confused and does not know how to handle it when running
> CLTS in ring 1. 

It'll know which form of handling is required because it changes the
necessary data structures when context switching between the two
domains.

The other stuff is a bit too specific in HVM-land for me to answer
fully, but I vaguely remember Mats having already responded.

Cheers,
Mark

> Does Xen hypervisor do a VM EXIT or still delegate CLTS to ring 0? How does
> Xen hypervisor distinguish the instruction is from para-virtualized domain
> or is from a full-virtualized domain? Does Xen have to replace all
> problematic instructions with hypercalls for Para-domain (even for CLTS)?
> Why does Xen need to use different strategies in para-virtualized domain to
> handle CLTS (delegation to ring 0) and other problematic instructions
> (hypercall)?
> 
> 
> My second question:
> It seems each processor has its own exception bitmap. If I have
> multi-processors (vt-x enabled), does Xen hypervisor use the same exception
> bitmap in all processors or does Xen allow different processor have its own
> (maybe different) exception bitmap?
> 
> Best regards,
> 
> Liang
> 
> -----Original Message-----
> From: M.A. Williamson [mailto:maw48@xxxxxxxxxxxxxxxx] On Behalf Of Mark
> Williamson
> Sent: Tuesday, March 20, 2007 5:37 PM
> To: xen-devel@xxxxxxxxxxxxxxxxxxx
> Cc: Liang Yang; Petersson, Mats
> Subject: Re: [Xen-devel] Does Dom0 always get interrupts first before they
> are delivered to other guest domains?
> 
> Hi,
> 
> > First, you once gave another excellent explanation about the communication
> > between HVM domain and HV (15 Feb 2007 ). Here I quote part of it
> > "...Since these IO events are synchronous in a real processor, the
> > hypervisor will wait for a "return event" before the guest is allowed to
> > continue. Qemu-dm runs as a normal user-process in Dom0..."
> > My question is about those Synchronous I/O events. Why can't we make them
> > asynchronous? e.g. whenever I/O are done, we can interrupt HV again and
> let
> > HV resume I/O processing. Is there any specific limiation to force Xen
> > hypervisor do I/O in synchronous mode?
> 
> Was this talking about IO port reads / writes?
> 
> The problem with IO port reads is that the guest expects the hardware to
> have 
> responded to an IO port read and for the result to be available as soon as 
> the inb (or whatever) instruction has finished...  Therefore in a virtual 
> machine, we can't return to the guest until we've figured out (by emulating 
> using the device model) what that read should return.
> 
> Consecutive writes can potentially be batched, I believe, and there has been
> 
> talk of implementing that.
> 
> I don't see any reason why other VCPUs shouldn't keep running in the
> meantime, 
> though.
> 
> > Second,  you just mentioned there is big difference between the number of
> > HV-to-domain0 events for device model and split driver model. Could you
> > elaborate the details about how split driver model can reduce the
> > HV-to-domain0 events compared with using qemu device model?
> 
> The PV split drivers are designed to minimise events: they'll queue up a
> load 
> of IO requests in a batch and then notify dom0 that the IO requests are 
> ready.
> 
> In contrast, the FV device emulation can't do this: we have to consult dom0 
> for the emulation of any device operations the guest does (e.g. each IO port
> 
> read the guest does) so the batching is less efficient.
> 
> Cheers,
> Mark
> 
> > Have a wonderful weekend,
> >
> > Liang
> >
> > ----- Original Message -----
> > From: "Petersson, Mats" <Mats.Petersson@xxxxxxx>
> > To: "Liang Yang" <multisyncfe991@xxxxxxxxxxx>;
> > <xen-devel@xxxxxxxxxxxxxxxxxxx>
> > Sent: Friday, March 16, 2007 10:40 AM
> > Subject: RE: [Xen-devel] Does Dom0 always get interrupts first before they
> > are delivered to other guest domains?
> >
> > > -----Original Message-----
> > > From: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
> > > [mailto:xen-devel-bounces@xxxxxxxxxxxxxxxxxxx] On Behalf Of Liang Yang
> > > Sent: 16 March 2007 17:30
> > > To: xen-devel@xxxxxxxxxxxxxxxxxxx
> > > Subject: [Xen-devel] Does Dom0 always get interrupts first
> > > before they are delivered to other guest domains?
> > >
> > > Hello,
> > >
> > > It seems if HVM domains access device using emulation mode
> > > w/ device model
> > > in domain0, Xen hypervisor will send the interrupt event to
> > > domain0 first
> > > and then the device model in domain0 will send event to HVM domains.
> >
> > Ok, so let's see if I've understood your question first:
> > If we do a disk-read (for example), the actual disk-read operation
> > itself will generate an interrupt, which goes into Xen HV where it's
> > converted to an event that goes to Dom0, which in turn wakes up the
> > pending call to read (in this case) that was requesting the disk IO, and
> > then when the read-call is finished an event is sent to the HVM DomU. Is
> > this the sequence of events that you're talking about?
> >
> > If that's what you are talking about, it must be done this way.
> >
> > > However, if I'm using split driver model and I only run BE driver on
> > > domain0. Does domain0 still get the interrupt first (assume
> > > this interupt is
> > > not owned by the Xen hypervisor ,e.g. local APIC timer) or
> > > Xen hypervisor
> > > will send event directly to HVM domain bypass domain0 for
> > > split driver
> > > model?
> >
> > Not in the above type of scenario. The interrupt must go to the
> > driver-domain (normally Dom0) to indicate that the hardware is ready to
> > deliver the data. This will wake up the user-mode call that waited for
> > the data, and then the data can be delivered to the guest domain from
> > there (which in turn is awakened by the event sent from the driver
> > domain).
> >
> > There is no difference in the number of events in these two cases.
> >
> > There is however a big difference in the number of hypervisor-to-dom0
> > events that occur: the HVM model will require something in the order of
> > 5 writes to the IDE controller to perform one disk read/write operation.
> > Each of those will incur one event to wake up qemu-dm, and one event to
> > wake the domu (which will most likely just to one or two instructions
> > forward to hit the next write to the IDE controller).
> >
> > > Another question is: for interrupt delivery, does Xen treat
> > > para-virtualized
> > > domain differently from HVM domain considering using device
> > > model and split
> > > driver model?
> >
> > Not in interrupt delivery, no. Except for the fact that HVM domains
> > obviously have full hardware interfaces for interrupt controllers etc,
> > which adds a little bit of overhead (because each interrupt needs to be
> > acknowledged/cancelled on the interrupt controller, for example).
> >
> > --
> > Mats
> >
> > > Thanks a lot,
> > >
> > > Liang
> > >
> > >
> > > _______________________________________________
> > > Xen-devel mailing list
> > > Xen-devel@xxxxxxxxxxxxxxxxxxx
> > > http://lists.xensource.com/xen-devel
> >
> > _______________________________________________
> > Xen-devel mailing list
> > Xen-devel@xxxxxxxxxxxxxxxxxxx
> > http://lists.xensource.com/xen-devel
> 


_______________________________________________
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®.