WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] Re: [Xen-ia64-devel] [PATCH][IA64] configure VHPT size per H

To: Kouya Shimura <kouya@xxxxxxxxxxxxxx>
Subject: [Xen-devel] Re: [Xen-ia64-devel] [PATCH][IA64] configure VHPT size per HVM domain
From: Isaku Yamahata <yamahata@xxxxxxxxxxxxx>
Date: Tue, 16 Oct 2007 17:00:26 +0900
Cc: xen-devel@xxxxxxxxxxxxxxxxxxx, Alex Williamson <alex.williamson@xxxxxx>, xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
Delivery-date: Tue, 16 Oct 2007 01:01:16 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
In-reply-to: <7kzlyjtw98.fsf@xxxxxxxxxxxxxxxxxxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <7kzlyjtw98.fsf@xxxxxxxxxxxxxxxxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mutt/1.4.2.1i
Hi Kouya.

I guess Linux PV domains (especially dom0) possibly can gain similar
performance improvement by increasing VHPT size too.
So would it be easy to make vhpt parameter non hvm specific?
I know your concern is hvm domain, though.

On Tue, Oct 16, 2007 at 03:21:39PM +0900, Kouya Shimura wrote:
Content-Description: message body text
> 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-ia64-devel mailing list
> Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-ia64-devel

-- 
yamahata

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