Both parts are now applied to xen-unstable.
-- Keir
On 19/10/07 06:52, "Kouya Shimura" <kouya@xxxxxxxxxxxxxx> wrote:
> 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
|