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

Re: [Xen-devel][PATCH][RFC] Supporting Enlightened Windows 2008Server




>>> On Thu, Mar 6, 2008 at  5:15 AM, in message
<20080306101542.GA22422@xxxxxxxxxxxxxxxxxxxxx>, Tim Deegan
<Tim.Deegan@xxxxxxxxxx> wrote: 
> At 07:28 +0000 on 06 Mar (1204788507), Keir Fraser wrote:
>> Personally I think the approach is ugly, and also you have not yet presented
>> evidence that supporting the Viridian paravirtualisations improves
>> performance. If it doesn't then it's a waste of time; if it does then it
>> raises the question of which hypercalls provide the benefit, and do we get a
>> smaller neater patch by supporting just those? One final comment is that the
>> TLB management code that this slaps on top of the core hypervisor looks a
>> bit scary to me. Tim Deegan may care to comment more on that.
> 
> Some blame lies with the mismatch between the Viridian interface and
> Xen's; there needs to be a way for the TLB flush hypercall to block
> indefinitely.  But I can't see how that turns into more than an atomic_t
> for TlbFlushInhibit and a block-and-schedule operation.  In the current
> patches, there's quite a lot of locking and ownership going on as well.
> I'm confused by the use of wait_on_xen_event_channel(0, xyz); event
> channels don't seem to come into it.

The Veridian API allows the guest to pass in a variable list of arguments to 
the TLB flush call ( HvFlushVirtualAddressList). Furthermore, both forms of the 
flush APIs (HvFlushVirtualAddressSpace and HvFlushVirtualAdressList) can 
specify a list of vcpus that should be involved in the flush process. So, as 
you have noted we will need a mechanism to co-ordinate the flush operation 
amongst the set of vcpus involved which means we need to be able give up the 
physical CPU in the hypervisor waiting for the flush to complete. I have used 
wait_on_xen_event_channel() to implement this synchronization. Since we don't 
preserve the stack state when we block in the hypervisor, I have used a 
seperate per-vcpu page for dealing with hypercall input parameters for calls 
that can potentially block in the hypervisor. From what I have seen, win2k8 
server mostly specifies  all the processors in ProcessorMask. So, I chose to 
implement TLB flush operations using a single serialization object that keeps 
track of both the set of vcpus involved in the flush operation as well as the 
list of pages to be flushed.

> 
> I'll mention now, since I have the patch in front of me, that I dislike
> the addition of an "ext_id" field to the HVM save format header and
> associated special treatment in the save/restore code; you should be
> able to figure out that this is a w2k8 domain from the presence of your
> other records in the save file.

I can fix this.

> 
> 
> 
> More generally, I agree that the approach is very heavyweight.  I don't
> see the need for a framework here, since there's no other proposed user
> of it that would want the same interface.

I agree that there is no need to isolate the shim's dependence on the base Xen 
code (xen_call_vector_t). I implemented this shim a year ago and at that point 
it was not clear what Microsoft might do with the Veridian specification.  So, 
clearly some of the design choices that I made a year ago may not be the right 
choice today. However, I still think that having an intercept framework where  
one can implement Veridian specific functionality without cluttering up the 
base Xen code is still the right approach. 
    
> It seems to duplicate a lot
> of things (does it really need its own spinlock implementation?)

Clearly not! As I noted in an earlier email to Kier, I will be the first to 
admit that these patches require significant cleanup and I am willing to clean 
them up. A lot of what you see has historical baggage and I wanted to get some 
feedback before I invested the time to clean things up.

> 
> It's certainly not in Xen coding style, even in the framework
> implementation.  (The MS habit of encoding scope and type information in
> variable names annoys the heck out of me.  Why does a lock field in an
> nsPartition_t need to be called "nsLock"?)

Agreed. 

> 
> The naming in general could do with a kicking -- calling everything
> "Novell Shim" is understandable for historical reasons but not really
> descriptive of its function.   But maybe that can wait.
Agreed.

Regards,

K. Y
> 
> Tim



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