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

Re: [Xen-devel] [PATCH 00/19] Virtual NUMA for PV and HVM



On Fri, Nov 21, 2014 at 03:06:42PM +0000, Wei Liu wrote:
> Hi all
> 
> This patch series implements virtual NUMA support for both PV and HVM guest.
> That is, admin can configure via libxl what virtual NUMA topology the guest
> sees.
> 
> This is the stage 1 (basic vNUMA support) and part of stage 2 (vNUMA-ware
> ballooning, hypervisor side) described in my previous email to xen-devel [0].
> 
> This series is broken into several parts:
> 
> 1. xen patches: vNUMA debug output and vNUMA-aware memory hypercall support.
> 2. libxc/libxl support for PV vNUMA.
> 3. libxc/libxl support for HVM vNUMA.
> 4. xl vNUMA configuration documentation and parser.
> 
> I think one significant difference from Elena's work is that this patch series
> makes use of multiple vmemranges should there be a memory hole, instead of
> shrinking ram. This matches the behaviour of real hardware.

Are some of the patches then borrowed from Elena? If so, she should be credited
in the patches?
> 
> The vNUMA auto placement algorithm is missing at the moment and Dario is
> working on it.
> 
> This series can be found at:
>  git://xenbits.xen.org/people/liuw/xen.git wip.vnuma-v1 
> 
> With this series, the following configuration can be used to enabled virtual
> NUMA support, and it works for both PV and HVM guests.
> 
> memory = 6000
> vnuma_memory = [3000, 3000]
> vnuma_vcpu_map = [0, 1]
> vnuma_pnode_map = [0, 0]
> vnuma_vdistances = [10, 30] # optional
> 
> dmesg output for HVM guest:
> 
> [    0.000000] ACPI: SRAT 00000000fc009ff0 000C8 (v01    Xen      HVM 
> 00000000 HVML 00000000)
> [    0.000000] ACPI: SLIT 00000000fc00a0c0 00030 (v01    Xen      HVM 
> 00000000 HVML 00000000)
> <...snip...>
> [    0.000000] SRAT: PXM 0 -> APIC 0x00 -> Node 0
> [    0.000000] SRAT: PXM 1 -> APIC 0x02 -> Node 1
> [    0.000000] SRAT: Node 0 PXM 0 [mem 0x00000000-0xbb7fffff]
> [    0.000000] SRAT: Node 1 PXM 1 [mem 0xbb800000-0xefffffff]
> [    0.000000] SRAT: Node 1 PXM 1 [mem 0x100000000-0x186ffffff]
> [    0.000000] NUMA: Initialized distance table, cnt=2
> [    0.000000] NUMA: Node 1 [mem 0xbb800000-0xefffffff] + [mem 
> 0x100000000-0x1867fffff] -> [mem 0xbb800000-0x1867fffff]
> [    0.000000] Initmem setup node 0 [mem 0x00000000-0xbb7fffff]
> [    0.000000]   NODE_DATA [mem 0xbb7fc000-0xbb7fffff]
> [    0.000000] Initmem setup node 1 [mem 0xbb800000-0x1867fffff]
> [    0.000000]   NODE_DATA [mem 0x1867f7000-0x1867fafff]
> [    0.000000]  [ffffea0000000000-ffffea00029fffff] PMD -> 
> [ffff8800b8600000-ffff8800baffffff] on node 0
> [    0.000000]  [ffffea0002a00000-ffffea00055fffff] PMD -> 
> [ffff880183000000-ffff8801859fffff] on node 1
> <...snip...>
> [    0.000000] Early memory node ranges
> [    0.000000]   node   0: [mem 0x00001000-0x0009efff]
> [    0.000000]   node   0: [mem 0x00100000-0xbb7fffff]
> [    0.000000]   node   1: [mem 0xbb800000-0xefffefff]
> [    0.000000]   node   1: [mem 0x100000000-0x1867fffff]
> 
> numactl output for HVM guest:
> 
> available: 2 nodes (0-1)
> node 0 cpus: 0
> node 0 size: 2999 MB
> node 0 free: 2546 MB
> node 1 cpus: 1
> node 1 size: 2991 MB
> node 1 free: 2144 MB
> node distances:
> node   0   1 
>   0:  10  30 
>   1:  30  10 
> 
> dmesg output for PV guest:
> 
> [    0.000000] NUMA: Initialized distance table, cnt=2
> [    0.000000] NUMA: Node 1 [mem 0xbb800000-0xce68efff] + [mem 
> 0x100000000-0x1a8970fff] -> [mem 0xbb800000-0x1a8970fff]
> [    0.000000] NODE_DATA(0) allocated [mem 0xbb7fc000-0xbb7fffff]
> [    0.000000] NODE_DATA(1) allocated [mem 0x1a8969000-0x1a896cfff]
> 
> numactl output for PV guest:
> 
> available: 2 nodes (0-1)
> node 0 cpus: 0
> node 0 size: 2944 MB
> node 0 free: 2917 MB
> node 1 cpus: 1
> node 1 size: 2934 MB
> node 1 free: 2904 MB
> node distances:
> node   0   1 
>   0:  10  30
>   1:  30  10
> 
> And for a HVM guest on a real NUMA-capable machine:
> 
> (XEN) Memory location of each domain:
> (XEN) Domain 0 (total: 262144):
> (XEN)     Node 0: 245758
> (XEN)     Node 1: 16386
> (XEN) Domain 2 (total: 2097226):
> (XEN)     Node 0: 1046335
> (XEN)     Node 1: 1050891
> (XEN)      2 vnodes, 4 vcpus
> (XEN)        vnode   0 - pnode 0
> (XEN)         3840 MB:  0x0 - 0xf0000000
> (XEN)         256 MB:  0x100000000 - 0x110000000
> (XEN)         vcpus: 0 1 
> (XEN)        vnode   1 - pnode 1
> (XEN)         4096 MB:  0x110000000 - 0x210000000
> (XEN)         vcpus: 2 3 
> 
> Wei.
> 
> [0] <20141111173606.GC21312@xxxxxxxxxxxxxxxxxxxxx>
> 
> Wei Liu (19):
>   xen: dump vNUMA information with debug key "u"
>   xen: make two memory hypercalls vNUMA-aware
>   libxc: allocate memory with vNUMA information for PV guest
>   libxl: add emacs local variables in libxl_{x86,arm}.c
>   libxl: introduce vNUMA types
>   libxl: add vmemrange to libxl__domain_build_state
>   libxl: introduce libxl__vnuma_config_check
>   libxl: x86: factor out e820_host_sanitize
>   libxl: functions to build vmemranges for PV guest
>   libxl: build, check and pass vNUMA info to Xen for PV guest
>   hvmloader: add new fields for vNUMA information
>   hvmloader: construct SRAT
>   hvmloader: construct SLIT
>   hvmloader: disallow memory relocation when vNUMA is enabled
>   libxc: allocate memory with vNUMA information for HVM guest
>   libxl: build, check and pass vNUMA info to Xen for HVM guest
>   libxl: refactor hvm_build_set_params
>   libxl: fill vNUMA information in hvm info
>   xl: vNUMA support
> 
>  docs/man/xl.cfg.pod.5                   |   32 +++++
>  tools/firmware/hvmloader/acpi/acpi2_0.h |   61 +++++++++
>  tools/firmware/hvmloader/acpi/build.c   |  104 ++++++++++++++
>  tools/firmware/hvmloader/pci.c          |   13 ++
>  tools/libxc/include/xc_dom.h            |    5 +
>  tools/libxc/include/xenguest.h          |    7 +
>  tools/libxc/xc_dom_x86.c                |   72 ++++++++--
>  tools/libxc/xc_hvm_build_x86.c          |  224 +++++++++++++++++++-----------
>  tools/libxc/xc_private.h                |    2 +
>  tools/libxl/Makefile                    |    2 +-
>  tools/libxl/libxl_arch.h                |    6 +
>  tools/libxl/libxl_arm.c                 |   17 +++
>  tools/libxl/libxl_create.c              |    9 ++
>  tools/libxl/libxl_dom.c                 |  172 ++++++++++++++++++++---
>  tools/libxl/libxl_internal.h            |   18 +++
>  tools/libxl/libxl_types.idl             |    9 ++
>  tools/libxl/libxl_vnuma.c               |  228 
> +++++++++++++++++++++++++++++++
>  tools/libxl/libxl_x86.c                 |  113 +++++++++++++--
>  tools/libxl/xl_cmdimpl.c                |  151 ++++++++++++++++++++
>  xen/arch/x86/numa.c                     |   46 ++++++-
>  xen/common/memory.c                     |   58 +++++++-
>  xen/include/public/features.h           |    3 +
>  xen/include/public/hvm/hvm_info_table.h |   19 +++
>  xen/include/public/memory.h             |    2 +
>  24 files changed, 1247 insertions(+), 126 deletions(-)
>  create mode 100644 tools/libxl/libxl_vnuma.c
> 
> -- 
> 1.7.10.4
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxx
> http://lists.xen.org/xen-devel

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

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