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

Re: [Xen-ia64-devel] paravirt_ops and its alternatives



On Tue, Feb 05, 2008 at 07:41:05AM +0800, Dong, Eddie wrote:
> Yang, Fred wrote:
> > Alex Williamson wrote:
> >> On Mon, 2008-02-04 at 09:53 +0800, Dong, Eddie wrote:
> >>> Yang, Fred wrote:
> >>>> Dong, Eddie wrote:
> >>>>> Re-post it to warmup discussion in case people can't read PPT
> >>>>> format,
> >>>> 
> >>>> IVT is very performance sensitive for the native Linux, how about
> >>>> dual IVT tables alternative for CPU virtualization?  It would need
> >>>> maintainance effort but it would be much cleaner forIA64 situation.
> >>>> -Fred
> >>> 
> >>> Dual IVT table could be a night mare for Tony, I guess. But yes we
> >>> need to have more active discussion to kick it off.
> >> 
> >>    Yes, two separate IVTs with 95+% of the code being the same would
> >> not be ideal.  I think we should aim for a single ivt.S that gets
> >> compiled a couple times with different options, once for native and
> >> again for each virtualization option.  It looks like more than half
> >> of the changes in xenivt.S could be easily converted to macros that
> >> could be switched by compile options.  Perhaps a pattern will emerge
> >> for the rest.
> > If it is not necessarily to stick with a single image and runtime to
> > determine code path, multi-compile paths to generate different PV or
> > native image then macros can possibly work.. -Fred 
> 
> Dual compile could be a good approach. Another alternative will be X86
> pv_ops like dynamic binary patching per compile time hints. The later 
> method also uses macro for those different path, but this macro will 
> generate a special section including the information for runtime patch
> base on pv_ops hook. (some kind of similar to Yamahata's binary
> patch method though it addresses C side code)
> 
> With dynamic pv_ops patch, the native machine side will again see
> original single instruction + some nop. So I guess the performance lose
> will be very minor. Both approach is very similar and could be left
> to Linux community's favorite in future :)

Actually already we adopted dual compilatin approach for gate page.
See gate.S in xenLinux arch/ia64/kernel/gate.S and Makefile.
I'm guessing that dual compiling approach is easier than binary
patching approach because some modification of xenivt.S doesn't 
correspond to single instruction.
Yes I agree that we can go for either way according to upstream favor.


> Another problem I want to raise is about pv_ops calling convention.
> Unlike X86 where stack is mostly available, IPF ASM code such as
> IVT entrance doesn't invoke stack, so I think we have to define 
> static registers only pv_ops & stacked registers pv_ops like PAL.

With respect to hypervisor ABI, we have already differentiate them.
ia64 specific HYPERVIRVOPS as static registers convention and
normal xen hypercall as stacked registers convention.


> For most ASM code (ivt), it have to use static registers only pv_ops.
> We need to carefully define the clobber registers used and do 
> manual modification to Linux IVT.s. Dual IVT table or binary 
> patching is preferred for performance.
> 
> Stacked register pv_ops could follow C convention and it is less
> performance critical, so probably no need to do dynamic patching.

I'm guessing one important exception is masking/unmasking interrupts.
i.e. ssm/rsm psr.i. Anyway we will see during our merge effort.

-- 
yamahata

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


 


Rackspace

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