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

[Xen-devel] [PATCH 0/2][IA64] configure VHPT size per domain



Hi Keir and Alex,

I merged the patch and added support for PV domain.
Please apply for Xen 3.2.0.

patch 1/2: common part
patch 2/2: ia64 part

Thanks,
Kouya

Keir Fraser writes:
 > I've cleaned up the xc.hvm_build() interface in changeset 16116. Please
 > merge against that. The main change will be that you will set the new HVM
 > parameter in IA64_HVM_ImageHandler.buildDomain(), rather than passing the
 > new parameter down to xc.hvm_build().
 > 
 >  -- Keir
 > 
 > On 16/10/07 07:21, "Kouya Shimura" <kouya@xxxxxxxxxxxxxx> wrote:
 > 
 > > Hi Keir and Alex,
 > > 
 > > A Virtual Hash Page Table(VHPT) is a special feature of IA64.
 > > It's an extension of TLB that resides in memory and can be
 > > automatically searched by the processor.
 > > 
 > > This patch allows user to configure VHPT size per HVM domain.
 > > 
 > > We have an interesting result.
 > > We tried some large transaction benchmark,
 > > for VHPT size in 512K, 2M, 4M, 8M:
 > >  - Linux is getting a better score (totally 20% up)
 > >  - Windows is getting a worse score (totally 10% down)
 > > 
 > > The reason of windows degradation is, windows OS flushes
 > > TLB more frequently. Xen hypervisor must clear the memory of VHPT
 > > with TLB flushing, that becomes an overhead.
 > > 
 > > This patch is significant for IA64 to support both linux guest
 > > and windows guest simultaneously.
 > > 
 > > Thanks,
 > > Kouya
 > > 
 > > Signed-off-by: Kouya Shimura <kouya@xxxxxxxxxxxxxx>
 > > 
 > > diff -r 2863852e02f6 tools/examples/xmexample.vti
 > > --- a/tools/examples/xmexample.vti Mon Oct 15 11:41:28 2007 -0600
 > > +++ b/tools/examples/xmexample.vti Tue Oct 16 11:31:53 2007 +0900
 > > @@ -34,6 +34,10 @@ name = "ExampleVTIDomain"
 > >  #cpus = ""         # leave to Xen to pick
 > >  #cpus = "0"        # all vcpus run on CPU0
 > >  #cpus = "0-3,5,^1" # run on cpus 0,2,3,5
 > > +
 > > +# VHPT size(2**n), default=23 (8MB), minimum=15 (32KB).
 > > +# In Windows OS, smaller size shows better performance.
 > > +#vhpt = 23
 > >  
 > >  # Optionally define mac and/or bridge for the network interfaces.
 > >  # Random MACs are assigned if not given.
 > > diff -r 2863852e02f6 tools/python/xen/lowlevel/xc/xc.c
 > > --- a/tools/python/xen/lowlevel/xc/xc.c Mon Oct 15 11:41:28 2007 -0600
 > > +++ b/tools/python/xen/lowlevel/xc/xc.c Tue Oct 16 10:03:46 2007 +0900
 > > @@ -538,15 +538,20 @@ static PyObject *pyxc_hvm_build(XcObject
 > >  #endif
 > >      char *image;
 > >      int store_evtchn, memsize, vcpus = 1, pae = 0, acpi = 0, apic = 1;
 > > +    int vhpt = 0;
 > >      unsigned long store_mfn;
 > >  
 > >      static char *kwd_list[] = { "domid", "store_evtchn",
 > > "memsize", "image", "vcpus", "pae", "acpi",
 > > -    "apic", NULL };
 > > -    if ( !PyArg_ParseTupleAndKeywords(args, kwds, "iiis|iiii", kwd_list,
 > > -                                      &dom, &store_evtchn, &memsize,
 > > -                                      &image, &vcpus, &pae, &acpi, &apic) 
 > > )
 > > -        return NULL;
 > > +    "apic", "vhpt", NULL };
 > > +    if ( !PyArg_ParseTupleAndKeywords(args, kwds, "iiis|iiiii", kwd_list,
 > > +                                      &dom, &store_evtchn, &memsize, 
 > > &image,
 > > +                                      &vcpus, &pae, &acpi, &apic, &vhpt) )
 > > +        return NULL;
 > > +
 > > +#ifdef __ia64__
 > > +    xc_set_hvm_param(self->xc_handle, dom, HVM_PARAM_VHPT_SIZE, vhpt);
 > > +#endif
 > >  
 > >      if ( xc_hvm_build(self->xc_handle, dom, memsize, image) != 0 )
 > >          return pyxc_error_to_exception();
 > > diff -r 2863852e02f6 tools/python/xen/xend/XendConfig.py
 > > --- a/tools/python/xen/xend/XendConfig.py Mon Oct 15 11:41:28 2007 -0600
 > > +++ b/tools/python/xen/xend/XendConfig.py Tue Oct 16 10:21:25 2007 +0900
 > > @@ -127,7 +127,7 @@ XENAPI_PLATFORM_CFG = [ 'acpi', 'apic',
 > >                          'nographic', 'pae', 'rtc_timeoffset', 'serial',
 > > 'sdl',
 > >                          'soundhw','stdvga', 'usb', 'usbdevice', 'vnc',
 > >                          'vncconsole', 'vncdisplay', 'vnclisten',
 > > -                        'vncpasswd', 'vncunused', 'xauthority', 'pci']
 > > +                        'vncpasswd', 'vncunused', 'xauthority', 'pci',
 > > 'vhpt']
 > >  
 > >  # Xen API console 'other_config' keys.
 > >  XENAPI_CONSOLE_OTHER_CFG = ['vncunused', 'vncdisplay', 'vnclisten',
 > > diff -r 2863852e02f6 tools/python/xen/xend/image.py
 > > --- a/tools/python/xen/xend/image.py Mon Oct 15 11:41:28 2007 -0600
 > > +++ b/tools/python/xen/xend/image.py Tue Oct 16 10:03:46 2007 +0900
 > > @@ -277,6 +277,7 @@ class HVMImageHandler(ImageHandler):
 > >          self.pae  = int(vmConfig['platform'].get('pae',  0))
 > >          self.apic = int(vmConfig['platform'].get('apic', 0))
 > >          self.acpi = int(vmConfig['platform'].get('acpi', 0))
 > > +        self.vhpt = int(vmConfig['platform'].get('vhpt', 0))
 > >          
 > >  
 > >      def buildDomain(self):
 > > @@ -292,6 +293,7 @@ class HVMImageHandler(ImageHandler):
 > >          log.debug("pae            = %d", self.pae)
 > >          log.debug("acpi           = %d", self.acpi)
 > >          log.debug("apic           = %d", self.apic)
 > > +        log.debug("vhpt           = %d", self.vhpt)
 > >  
 > >          rc = xc.hvm_build(domid          = self.vm.getDomid(),
 > >                            image          = self.kernel,
 > > @@ -300,7 +302,8 @@ class HVMImageHandler(ImageHandler):
 > >                            vcpus          = self.vm.getVCpuCount(),
 > >                            pae            = self.pae,
 > >                            acpi           = self.acpi,
 > > -                          apic           = self.apic)
 > > +                          apic           = self.apic,
 > > +                          vhpt           = self.vhpt)
 > >          rc['notes'] = { 'SUSPEND_CANCEL': 1 }
 > >          return rc
 > >  
 > > diff -r 2863852e02f6 tools/python/xen/xm/create.py
 > > --- a/tools/python/xen/xm/create.py Mon Oct 15 11:41:28 2007 -0600
 > > +++ b/tools/python/xen/xm/create.py Tue Oct 16 11:22:10 2007 +0900
 > > @@ -209,6 +209,10 @@ gopts.var('vcpu_avail', val='VCPUS',
 > >  gopts.var('vcpu_avail', val='VCPUS',
 > >            fn=set_long, default=None,
 > >            use="Bitmask for virtual CPUs to make available immediately.")
 > > +
 > > +gopts.var('vhpt', val='VHPT',
 > > +          fn=set_int, default=0,
 > > +          use="VHPT Size(2**n) of IA64 HVM domain.")
 > >  
 > >  gopts.var('cpu_cap', val='CAP',
 > >            fn=set_int, default=None,
 > > @@ -721,7 +725,7 @@ def configure_hvm(config_image, vals):
 > >               'localtime', 'serial', 'stdvga', 'isa', 'nographic', 
 > > 'soundhw',
 > >               'vnc', 'vncdisplay', 'vncunused', 'vncconsole', 'vnclisten',
 > >               'sdl', 'display', 'xauthority', 'rtc_timeoffset', 'monitor',
 > > -             'acpi', 'apic', 'usb', 'usbdevice', 'keymap', 'pci' ]
 > > +             'acpi', 'apic', 'usb', 'usbdevice', 'keymap', 'pci', 'vhpt' ]
 > >      for a in args:
 > >          if a in vals.__dict__ and vals.__dict__[a] is not None:
 > >              config_image.append([a, vals.__dict__[a]])
 > > diff -r 2863852e02f6 xen/arch/ia64/vmx/vmmu.c
 > > --- a/xen/arch/ia64/vmx/vmmu.c Mon Oct 15 11:41:28 2007 -0600
 > > +++ b/xen/arch/ia64/vmx/vmmu.c Tue Oct 16 10:12:40 2007 +0900
 > > @@ -96,8 +96,14 @@ static int init_domain_vhpt(struct vcpu
 > >  static int init_domain_vhpt(struct vcpu *v)
 > >  {
 > >      int rc;
 > > -
 > > -    rc = thash_alloc(&(v->arch.vhpt), default_vhpt_sz, "vhpt");
 > > +    u64 size = v->domain->arch.hvm_domain.params[HVM_PARAM_VHPT_SIZE];
 > > +
 > > +    if (size == 0)
 > > +        size = default_vhpt_sz;
 > > +    else
 > > +        size = canonicalize_vhpt_size(size);
 > > +
 > > +    rc = thash_alloc(&(v->arch.vhpt), size, "vhpt");
 > >      v->arch.arch_vmx.mpta = v->arch.vhpt.pta.val;
 > >      return rc;
 > >  }
 > > diff -r 2863852e02f6 xen/include/public/hvm/params.h
 > > --- a/xen/include/public/hvm/params.h Mon Oct 15 11:41:28 2007 -0600
 > > +++ b/xen/include/public/hvm/params.h Tue Oct 16 10:03:54 2007 +0900
 > > @@ -52,7 +52,8 @@
 > >  
 > >  #ifdef __ia64__
 > >  #define HVM_PARAM_NVRAM_FD     7
 > > -#define HVM_NR_PARAMS          8
 > > +#define HVM_PARAM_VHPT_SIZE    8
 > > +#define HVM_NR_PARAMS          9
 > >  #else
 > >  #define HVM_NR_PARAMS          7
 > >  #endif
 > 
 > 
 > 
 > _______________________________________________
 > 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®.