* [PATCH for 4.6 v4 0/3] More vNUMA patches
@ 2015-09-11 13:50 Wei Liu
2015-09-11 13:50 ` [PATCH for 4.6 v4 1/3] libxc: introduce xc_domain_getvnuma Wei Liu
` (2 more replies)
0 siblings, 3 replies; 13+ messages in thread
From: Wei Liu @ 2015-09-11 13:50 UTC (permalink / raw)
To: Xen-devel; +Cc: Wei Liu, Ian Jackson, Ian Campbell
Wei Liu (3):
libxc: introduce xc_domain_getvnuma
xl/libxl: disallow saving a guest with vNUMA configured
xl: handle empty vnuma configuration
docs/man/xl.cfg.pod.5 | 2 ++
tools/libxc/include/xenctrl.h | 18 +++++++++++++++
tools/libxc/xc_domain.c | 53 +++++++++++++++++++++++++++++++++++++++++++
tools/libxl/libxl_dom.c | 16 +++++++++++++
tools/libxl/xl_cmdimpl.c | 3 +++
5 files changed, 92 insertions(+)
--
2.1.4
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH for 4.6 v4 1/3] libxc: introduce xc_domain_getvnuma
2015-09-11 13:50 [PATCH for 4.6 v4 0/3] More vNUMA patches Wei Liu
@ 2015-09-11 13:50 ` Wei Liu
2015-09-11 13:53 ` Wei Liu
2015-09-11 13:50 ` [PATCH for 4.6 v4 2/3] xl/libxl: disallow saving a guest with vNUMA configured Wei Liu
2015-09-11 13:50 ` [PATCH for 4.6 v4 3/3] xl: handle empty vnuma configuration Wei Liu
2 siblings, 1 reply; 13+ messages in thread
From: Wei Liu @ 2015-09-11 13:50 UTC (permalink / raw)
To: Xen-devel; +Cc: Wei Liu, Ian Jackson, Ian Campbell
A simple wrapper for XENMEM_get_vnumainfo.
Signed-off-by: Wei Liu <wei.liu2@citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
---
v4: rebase on top of staging
---
tools/libxc/include/xenctrl.h | 18 +++++++++++++++
tools/libxc/xc_domain.c | 53 +++++++++++++++++++++++++++++++++++++++++++
2 files changed, 71 insertions(+)
diff --git a/tools/libxc/include/xenctrl.h b/tools/libxc/include/xenctrl.h
index e019474..3482544 100644
--- a/tools/libxc/include/xenctrl.h
+++ b/tools/libxc/include/xenctrl.h
@@ -1287,6 +1287,24 @@ int xc_domain_setvnuma(xc_interface *xch,
unsigned int *vdistance,
unsigned int *vcpu_to_vnode,
unsigned int *vnode_to_pnode);
+/*
+ * Retrieve vnuma configuration
+ * domid: IN, target domid
+ * nr_vnodes: IN/OUT, number of vnodes, not NULL
+ * nr_vmemranges: IN/OUT, number of vmemranges, not NULL
+ * nr_vcpus: IN/OUT, number of vcpus, not NULL
+ * vmemranges: OUT, an array which has length of nr_vmemranges
+ * vdistance: OUT, an array which has length of nr_vnodes * nr_vnodes
+ * vcpu_to_vnode: OUT, an array which has length of nr_vcpus
+ */
+int xc_domain_getvnuma(xc_interface *xch,
+ uint32_t domid,
+ uint32_t *nr_vnodes,
+ uint32_t *nr_vmemranges,
+ uint32_t *nr_vcpus,
+ xen_vmemrange_t *vmemrange,
+ unsigned int *vdistance,
+ unsigned int *vcpu_to_vnode);
int xc_domain_soft_reset(xc_interface *xch,
uint32_t domid);
diff --git a/tools/libxc/xc_domain.c b/tools/libxc/xc_domain.c
index 62b2e45..e7278dd 100644
--- a/tools/libxc/xc_domain.c
+++ b/tools/libxc/xc_domain.c
@@ -2493,6 +2493,59 @@ int xc_domain_setvnuma(xc_interface *xch,
return rc;
}
+int xc_domain_getvnuma(xc_interface *xch,
+ uint32_t domid,
+ uint32_t *nr_vnodes,
+ uint32_t *nr_vmemranges,
+ uint32_t *nr_vcpus,
+ xen_vmemrange_t *vmemrange,
+ unsigned int *vdistance,
+ unsigned int *vcpu_to_vnode)
+{
+ int rc;
+ DECLARE_HYPERCALL_BOUNCE(vmemrange, sizeof(*vmemrange) * *nr_vmemranges,
+ XC_HYPERCALL_BUFFER_BOUNCE_OUT);
+ DECLARE_HYPERCALL_BOUNCE(vdistance, sizeof(*vdistance) *
+ *nr_vnodes * *nr_vnodes,
+ XC_HYPERCALL_BUFFER_BOUNCE_OUT);
+ DECLARE_HYPERCALL_BOUNCE(vcpu_to_vnode, sizeof(*vcpu_to_vnode) * *nr_vcpus,
+ XC_HYPERCALL_BUFFER_BOUNCE_OUT);
+
+ struct xen_vnuma_topology_info vnuma_topo;
+
+ if ( xc_hypercall_bounce_pre(xch, vmemrange) ||
+ xc_hypercall_bounce_pre(xch, vdistance) ||
+ xc_hypercall_bounce_pre(xch, vcpu_to_vnode) )
+ {
+ rc = -1;
+ errno = ENOMEM;
+ goto vnumaget_fail;
+ }
+
+ set_xen_guest_handle(vnuma_topo.vmemrange.h, vmemrange);
+ set_xen_guest_handle(vnuma_topo.vdistance.h, vdistance);
+ set_xen_guest_handle(vnuma_topo.vcpu_to_vnode.h, vcpu_to_vnode);
+
+ vnuma_topo.nr_vnodes = *nr_vnodes;
+ vnuma_topo.nr_vcpus = *nr_vcpus;
+ vnuma_topo.nr_vmemranges = *nr_vmemranges;
+ vnuma_topo.domid = domid;
+ vnuma_topo.pad = 0;
+
+ rc = do_memory_op(xch, XENMEM_get_vnumainfo, &vnuma_topo,
+ sizeof(vnuma_topo));
+
+ *nr_vnodes = vnuma_topo.nr_vnodes;
+ *nr_vcpus = vnuma_topo.nr_vcpus;
+ *nr_vmemranges = vnuma_topo.nr_vmemranges;
+
+ vnumaget_fail:
+ xc_hypercall_bounce_post(xch, vmemrange);
+ xc_hypercall_bounce_post(xch, vdistance);
+ xc_hypercall_bounce_post(xch, vcpu_to_vnode);
+
+ return rc;
+}
int xc_domain_soft_reset(xc_interface *xch,
uint32_t domid)
--
2.1.4
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH for 4.6 v4 2/3] xl/libxl: disallow saving a guest with vNUMA configured
2015-09-11 13:50 [PATCH for 4.6 v4 0/3] More vNUMA patches Wei Liu
2015-09-11 13:50 ` [PATCH for 4.6 v4 1/3] libxc: introduce xc_domain_getvnuma Wei Liu
@ 2015-09-11 13:50 ` Wei Liu
2015-09-11 14:00 ` Ian Campbell
2015-09-11 13:50 ` [PATCH for 4.6 v4 3/3] xl: handle empty vnuma configuration Wei Liu
2 siblings, 1 reply; 13+ messages in thread
From: Wei Liu @ 2015-09-11 13:50 UTC (permalink / raw)
To: Xen-devel; +Cc: Wei Liu, Ian Jackson, Ian Campbell, andrew.cooper3
This is because the migration stream does not preserve node information.
Note this is not a regression for migration v2 vs legacy migration
because neither of them preserve node information.
Signed-off-by: Wei Liu <wei.liu2@citrix.com>
---
Cc: andrew.cooper3@citrix.com
v4:
1. Don't differentiate "no vnuma" from "empty vnuma".
v3:
1. Update manpage, code comment and commit message.
2. *Don't* check if nomigrate is set.
---
docs/man/xl.cfg.pod.5 | 2 ++
tools/libxl/libxl_dom.c | 16 ++++++++++++++++
2 files changed, 18 insertions(+)
diff --git a/docs/man/xl.cfg.pod.5 b/docs/man/xl.cfg.pod.5
index c6345b8..157c855 100644
--- a/docs/man/xl.cfg.pod.5
+++ b/docs/man/xl.cfg.pod.5
@@ -263,6 +263,8 @@ virtual node.
Note that virtual NUMA for PV guest is not yet supported, because
there is an issue with cpuid handling that affects PV virtual NUMA.
+Further more, guest with virtual NUMA cannot be saved or migrated
+because migration stream does not preserve node information.
Each B<VNODE_SPEC> is a list, which has a form of
"[VNODE_CONFIG_OPTION,VNODE_CONFIG_OPTION, ... ]" (without quotes).
diff --git a/tools/libxl/libxl_dom.c b/tools/libxl/libxl_dom.c
index c2518a3..7227f35 100644
--- a/tools/libxl/libxl_dom.c
+++ b/tools/libxl/libxl_dom.c
@@ -24,6 +24,7 @@
#include <xen/hvm/hvm_info_table.h>
#include <xen/hvm/hvm_xs_strings.h>
#include <xen/hvm/e820.h>
+#include <xen/errno.h>
libxl_domain_type libxl__domain_type(libxl__gc *gc, uint32_t domid)
{
@@ -1612,6 +1613,7 @@ void libxl__domain_save(libxl__egc *egc, libxl__domain_suspend_state *dss)
const libxl_domain_remus_info *const r_info = dss->remus;
libxl__srm_save_autogen_callbacks *const callbacks =
&dss->sws.shs.callbacks.save.a;
+ unsigned int nr_vnodes = 0, nr_vmemranges = 0, nr_vcpus = 0;
dss->rc = 0;
logdirty_init(&dss->logdirty);
@@ -1636,6 +1638,20 @@ void libxl__domain_save(libxl__egc *egc, libxl__domain_suspend_state *dss)
| (debug ? XCFLAGS_DEBUG : 0)
| (dss->hvm ? XCFLAGS_HVM : 0);
+ /* Disallow saving a guest with vNUMA configured because migration
+ * stream does not preserve node information.
+ *
+ * Do not differentiate "no vnuma configuration" from "empty vnuma
+ * configuration".
+ */
+ rc = xc_domain_getvnuma(CTX->xch, domid, &nr_vnodes, &nr_vmemranges,
+ &nr_vcpus, NULL, NULL, NULL);
+ if (rc != -1 || errno == XEN_ENOBUFS) {
+ LOG(ERROR, "Cannot save a guest with vNUMA configured");
+ rc = ERROR_FAIL;
+ goto out;
+ }
+
dss->guest_evtchn.port = -1;
dss->guest_evtchn_lockfd = -1;
dss->guest_responded = 0;
--
2.1.4
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH for 4.6 v4 3/3] xl: handle empty vnuma configuration
2015-09-11 13:50 [PATCH for 4.6 v4 0/3] More vNUMA patches Wei Liu
2015-09-11 13:50 ` [PATCH for 4.6 v4 1/3] libxc: introduce xc_domain_getvnuma Wei Liu
2015-09-11 13:50 ` [PATCH for 4.6 v4 2/3] xl/libxl: disallow saving a guest with vNUMA configured Wei Liu
@ 2015-09-11 13:50 ` Wei Liu
2 siblings, 0 replies; 13+ messages in thread
From: Wei Liu @ 2015-09-11 13:50 UTC (permalink / raw)
To: Xen-devel; +Cc: Wei Liu, Ian Jackson, Ian Campbell
When user specifies vnuma = [], we need to skip the whole parser
function, otherwise the parser sets b_info->max_memkb to garbage value.
Signed-off-by: Wei Liu <wei.liu2@citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
---
tools/libxl/xl_cmdimpl.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
index c9bd839..bfbd421 100644
--- a/tools/libxl/xl_cmdimpl.c
+++ b/tools/libxl/xl_cmdimpl.c
@@ -1093,6 +1093,9 @@ static void parse_vnuma_config(const XLU_Config *config,
if (xlu_cfg_get_list(config, "vnuma", &vnuma, &num_vnuma, 1))
return;
+ if (!num_vnuma)
+ return;
+
b_info->num_vnuma_nodes = num_vnuma;
b_info->vnuma_nodes = xcalloc(num_vnuma, sizeof(libxl_vnode_info));
vcpu_parsed = xcalloc(num_vnuma, sizeof(libxl_bitmap));
--
2.1.4
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH for 4.6 v4 1/3] libxc: introduce xc_domain_getvnuma
2015-09-11 13:50 ` [PATCH for 4.6 v4 1/3] libxc: introduce xc_domain_getvnuma Wei Liu
@ 2015-09-11 13:53 ` Wei Liu
0 siblings, 0 replies; 13+ messages in thread
From: Wei Liu @ 2015-09-11 13:53 UTC (permalink / raw)
To: Xen-devel; +Cc: Wei Liu, Ian Jackson, Ian Campbell
On Fri, Sep 11, 2015 at 02:50:07PM +0100, Wei Liu wrote:
> A simple wrapper for XENMEM_get_vnumainfo.
>
> Signed-off-by: Wei Liu <wei.liu2@citrix.com>
> Acked-by: Ian Campbell <ian.campbell@citrix.com>
> ---
> v4: rebase on top of staging
Note that this patch needs some trivial contextual adjustment when being
applied to staging-4.6.
If you need a patch for staging-4.6 I can also provide one.
Wei.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH for 4.6 v4 2/3] xl/libxl: disallow saving a guest with vNUMA configured
2015-09-11 13:50 ` [PATCH for 4.6 v4 2/3] xl/libxl: disallow saving a guest with vNUMA configured Wei Liu
@ 2015-09-11 14:00 ` Ian Campbell
2015-09-11 14:14 ` Wei Liu
0 siblings, 1 reply; 13+ messages in thread
From: Ian Campbell @ 2015-09-11 14:00 UTC (permalink / raw)
To: Wei Liu, Xen-devel; +Cc: andrew.cooper3, Ian Jackson
On Fri, 2015-09-11 at 14:50 +0100, Wei Liu wrote:
> + /* Disallow saving a guest with vNUMA configured because migration
> + * stream does not preserve node information.
> + *
> + * Do not differentiate "no vnuma configuration" from "empty vnuma
> + * configuration".
> + */
> + rc = xc_domain_getvnuma(CTX->xch, domid, &nr_vnodes, &nr_vmemranges,
> + &nr_vcpus, NULL, NULL, NULL);
> + if (rc != -1 || errno == XEN_ENOBUFS) {
This is not as we discussed, it is neither what I proposed nor what you
(incorrectly IMHO) corrected it to be in the previous thread.
Ian
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH for 4.6 v4 2/3] xl/libxl: disallow saving a guest with vNUMA configured
2015-09-11 14:00 ` Ian Campbell
@ 2015-09-11 14:14 ` Wei Liu
2015-09-11 14:24 ` Ian Campbell
0 siblings, 1 reply; 13+ messages in thread
From: Wei Liu @ 2015-09-11 14:14 UTC (permalink / raw)
To: Ian Campbell; +Cc: Xen-devel, Wei Liu, Ian Jackson, andrew.cooper3
On Fri, Sep 11, 2015 at 03:00:35PM +0100, Ian Campbell wrote:
> On Fri, 2015-09-11 at 14:50 +0100, Wei Liu wrote:
> > + /* Disallow saving a guest with vNUMA configured because migration
> > + * stream does not preserve node information.
> > + *
> > + * Do not differentiate "no vnuma configuration" from "empty vnuma
> > + * configuration".
> > + */
> > + rc = xc_domain_getvnuma(CTX->xch, domid, &nr_vnodes, &nr_vmemranges,
> > + &nr_vcpus, NULL, NULL, NULL);
> > + if (rc != -1 || errno == XEN_ENOBUFS) {
>
> This is not as we discussed, it is neither what I proposed nor what you
> (incorrectly IMHO) corrected it to be in the previous thread.
>
To avoid spamming the list I attach the updated version here.
Tested with saving guests with / without vnuma configuration.
---8<---
>From 0c286535e998b62dbe0e35be4c9366fb8dc0934d Mon Sep 17 00:00:00 2001
From: Wei Liu <wei.liu2@citrix.com>
Date: Wed, 9 Sep 2015 17:11:24 +0100
Subject: [PATCH] xl/libxl: disallow saving a guest with vNUMA configured
This is because the migration stream does not preserve node information.
Note this is not a regression for migration v2 vs legacy migration
because neither of them preserve node information.
Signed-off-by: Wei Liu <wei.liu2@citrix.com>
---
Cc: andrew.cooper3@citrix.com
v4:
1. Don't differentiate "no vnuma" from "empty vnuma".
v3:
1. Update manpage, code comment and commit message.
2. *Don't* check if nomigrate is set.
---
docs/man/xl.cfg.pod.5 | 2 ++
tools/libxl/libxl_dom.c | 16 ++++++++++++++++
2 files changed, 18 insertions(+)
diff --git a/docs/man/xl.cfg.pod.5 b/docs/man/xl.cfg.pod.5
index c6345b8..157c855 100644
--- a/docs/man/xl.cfg.pod.5
+++ b/docs/man/xl.cfg.pod.5
@@ -263,6 +263,8 @@ virtual node.
Note that virtual NUMA for PV guest is not yet supported, because
there is an issue with cpuid handling that affects PV virtual NUMA.
+Further more, guest with virtual NUMA cannot be saved or migrated
+because migration stream does not preserve node information.
Each B<VNODE_SPEC> is a list, which has a form of
"[VNODE_CONFIG_OPTION,VNODE_CONFIG_OPTION, ... ]" (without quotes).
diff --git a/tools/libxl/libxl_dom.c b/tools/libxl/libxl_dom.c
index c2518a3..72fce21 100644
--- a/tools/libxl/libxl_dom.c
+++ b/tools/libxl/libxl_dom.c
@@ -24,6 +24,7 @@
#include <xen/hvm/hvm_info_table.h>
#include <xen/hvm/hvm_xs_strings.h>
#include <xen/hvm/e820.h>
+#include <xen/errno.h>
libxl_domain_type libxl__domain_type(libxl__gc *gc, uint32_t domid)
{
@@ -1612,6 +1613,7 @@ void libxl__domain_save(libxl__egc *egc, libxl__domain_suspend_state *dss)
const libxl_domain_remus_info *const r_info = dss->remus;
libxl__srm_save_autogen_callbacks *const callbacks =
&dss->sws.shs.callbacks.save.a;
+ unsigned int nr_vnodes = 0, nr_vmemranges = 0, nr_vcpus = 0;
dss->rc = 0;
logdirty_init(&dss->logdirty);
@@ -1636,6 +1638,20 @@ void libxl__domain_save(libxl__egc *egc, libxl__domain_suspend_state *dss)
| (debug ? XCFLAGS_DEBUG : 0)
| (dss->hvm ? XCFLAGS_HVM : 0);
+ /* Disallow saving a guest with vNUMA configured because migration
+ * stream does not preserve node information.
+ *
+ * Do not differentiate "no vnuma configuration" from "empty vnuma
+ * configuration".
+ */
+ rc = xc_domain_getvnuma(CTX->xch, domid, &nr_vnodes, &nr_vmemranges,
+ &nr_vcpus, NULL, NULL, NULL);
+ if (rc != -1 || errno != XEN_EOPNOTSUPP) {
+ LOG(ERROR, "Cannot save a guest with vNUMA configured");
+ rc = ERROR_FAIL;
+ goto out;
+ }
+
dss->guest_evtchn.port = -1;
dss->guest_evtchn_lockfd = -1;
dss->guest_responded = 0;
--
2.1.4
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH for 4.6 v4 2/3] xl/libxl: disallow saving a guest with vNUMA configured
2015-09-11 14:14 ` Wei Liu
@ 2015-09-11 14:24 ` Ian Campbell
2015-09-11 14:31 ` Wei Liu
0 siblings, 1 reply; 13+ messages in thread
From: Ian Campbell @ 2015-09-11 14:24 UTC (permalink / raw)
To: Wei Liu; +Cc: Xen-devel, Ian Jackson, andrew.cooper3
On Fri, 2015-09-11 at 15:14 +0100, Wei Liu wrote:
@@ -1636,6 +1638,20 @@ void libxl__domain_save(libxl__egc *egc,
> libxl__domain_suspend_state *dss)
> | (debug ? XCFLAGS_DEBUG : 0)
> | (dss->hvm ? XCFLAGS_HVM : 0);
>
> + /* Disallow saving a guest with vNUMA configured because migration
> + * stream does not preserve node information.
> + *
> + * Do not differentiate "no vnuma configuration" from "empty vnuma
> + * configuration".
> + */
> + rc = xc_domain_getvnuma(CTX->xch, domid, &nr_vnodes, &nr_vmemranges,
> + &nr_vcpus, NULL, NULL, NULL);
Sorry for not noticing this before but this is putting a non-libxl error
code in a variable named rc, which is verboten in coding style.
Not least because I think it is now possible to get through this function
successfully without changing it from the rc == -1 which might be assigned
here (in the case where xs_suspend_evtchn_port returns < 0).
Ian.
> + if (rc != -1 || errno != XEN_EOPNOTSUPP) {
> + LOG(ERROR, "Cannot save a guest with vNUMA configured");
> + rc = ERROR_FAIL;
> + goto out;
> + }
> +
> dss->guest_evtchn.port = -1;
> dss->guest_evtchn_lockfd = -1;
> dss->guest_responded = 0;
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH for 4.6 v4 2/3] xl/libxl: disallow saving a guest with vNUMA configured
2015-09-11 14:24 ` Ian Campbell
@ 2015-09-11 14:31 ` Wei Liu
2015-09-11 15:05 ` Ian Campbell
0 siblings, 1 reply; 13+ messages in thread
From: Wei Liu @ 2015-09-11 14:31 UTC (permalink / raw)
To: Ian Campbell; +Cc: Xen-devel, Wei Liu, Ian Jackson, andrew.cooper3
On Fri, Sep 11, 2015 at 03:24:21PM +0100, Ian Campbell wrote:
> On Fri, 2015-09-11 at 15:14 +0100, Wei Liu wrote:
> @@ -1636,6 +1638,20 @@ void libxl__domain_save(libxl__egc *egc,
> > libxl__domain_suspend_state *dss)
> > | (debug ? XCFLAGS_DEBUG : 0)
> > | (dss->hvm ? XCFLAGS_HVM : 0);
> >
> > + /* Disallow saving a guest with vNUMA configured because migration
> > + * stream does not preserve node information.
> > + *
> > + * Do not differentiate "no vnuma configuration" from "empty vnuma
> > + * configuration".
> > + */
> > + rc = xc_domain_getvnuma(CTX->xch, domid, &nr_vnodes, &nr_vmemranges,
> > + &nr_vcpus, NULL, NULL, NULL);
>
> Sorry for not noticing this before but this is putting a non-libxl error
> code in a variable named rc, which is verboten in coding style.
>
My bad. Should have noticed that earlier.
> Not least because I think it is now possible to get through this function
> successfully without changing it from the rc == -1 which might be assigned
> here (in the case where xs_suspend_evtchn_port returns < 0).
>
> Ian.
Add a new variable called ret to store return value from xc function
call. Here is the patch.
---8<---
>From c2e9567fa0c5a00405d3759321c9eefb8ec049fc Mon Sep 17 00:00:00 2001
From: Wei Liu <wei.liu2@citrix.com>
Date: Wed, 9 Sep 2015 17:11:24 +0100
Subject: [PATCH] xl/libxl: disallow saving a guest with vNUMA configured
This is because the migration stream does not preserve node information.
Note this is not a regression for migration v2 vs legacy migration
because neither of them preserves node information.
Signed-off-by: Wei Liu <wei.liu2@citrix.com>
---
Cc: andrew.cooper3@citrix.com
v4:
1. Don't differentiate "no vnuma" from "empty vnuma".
2. Use ret to store xc function call return value.
v3:
1. Update manpage, code comment and commit message.
2. *Don't* check if nomigrate is set.
---
docs/man/xl.cfg.pod.5 | 2 ++
tools/libxl/libxl_dom.c | 18 +++++++++++++++++-
2 files changed, 19 insertions(+), 1 deletion(-)
diff --git a/docs/man/xl.cfg.pod.5 b/docs/man/xl.cfg.pod.5
index c6345b8..157c855 100644
--- a/docs/man/xl.cfg.pod.5
+++ b/docs/man/xl.cfg.pod.5
@@ -263,6 +263,8 @@ virtual node.
Note that virtual NUMA for PV guest is not yet supported, because
there is an issue with cpuid handling that affects PV virtual NUMA.
+Further more, guest with virtual NUMA cannot be saved or migrated
+because migration stream does not preserve node information.
Each B<VNODE_SPEC> is a list, which has a form of
"[VNODE_CONFIG_OPTION,VNODE_CONFIG_OPTION, ... ]" (without quotes).
diff --git a/tools/libxl/libxl_dom.c b/tools/libxl/libxl_dom.c
index c2518a3..905dc5a 100644
--- a/tools/libxl/libxl_dom.c
+++ b/tools/libxl/libxl_dom.c
@@ -24,6 +24,7 @@
#include <xen/hvm/hvm_info_table.h>
#include <xen/hvm/hvm_xs_strings.h>
#include <xen/hvm/e820.h>
+#include <xen/errno.h>
libxl_domain_type libxl__domain_type(libxl__gc *gc, uint32_t domid)
{
@@ -1602,7 +1603,7 @@ void libxl__domain_save(libxl__egc *egc, libxl__domain_suspend_state *dss)
{
STATE_AO_GC(dss->ao);
int port;
- int rc;
+ int rc, ret;
/* Convenience aliases */
const uint32_t domid = dss->domid;
@@ -1612,6 +1613,7 @@ void libxl__domain_save(libxl__egc *egc, libxl__domain_suspend_state *dss)
const libxl_domain_remus_info *const r_info = dss->remus;
libxl__srm_save_autogen_callbacks *const callbacks =
&dss->sws.shs.callbacks.save.a;
+ unsigned int nr_vnodes = 0, nr_vmemranges = 0, nr_vcpus = 0;
dss->rc = 0;
logdirty_init(&dss->logdirty);
@@ -1636,6 +1638,20 @@ void libxl__domain_save(libxl__egc *egc, libxl__domain_suspend_state *dss)
| (debug ? XCFLAGS_DEBUG : 0)
| (dss->hvm ? XCFLAGS_HVM : 0);
+ /* Disallow saving a guest with vNUMA configured because migration
+ * stream does not preserve node information.
+ *
+ * Do not differentiate "no vnuma configuration" from "empty vnuma
+ * configuration".
+ */
+ ret = xc_domain_getvnuma(CTX->xch, domid, &nr_vnodes, &nr_vmemranges,
+ &nr_vcpus, NULL, NULL, NULL);
+ if (ret != -1 || errno != XEN_EOPNOTSUPP) {
+ LOG(ERROR, "Cannot save a guest with vNUMA configured");
+ rc = ERROR_FAIL;
+ goto out;
+ }
+
dss->guest_evtchn.port = -1;
dss->guest_evtchn_lockfd = -1;
dss->guest_responded = 0;
--
2.1.4
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH for 4.6 v4 2/3] xl/libxl: disallow saving a guest with vNUMA configured
2015-09-11 14:31 ` Wei Liu
@ 2015-09-11 15:05 ` Ian Campbell
2015-09-11 15:09 ` Wei Liu
0 siblings, 1 reply; 13+ messages in thread
From: Ian Campbell @ 2015-09-11 15:05 UTC (permalink / raw)
To: Wei Liu; +Cc: Xen-devel, Ian Jackson, andrew.cooper3
On Fri, 2015-09-11 at 15:31 +0100, Wei Liu wrote:
> On Fri, Sep 11, 2015 at 03:24:21PM +0100, Ian Campbell wrote:
> > On Fri, 2015-09-11 at 15:14 +0100, Wei Liu wrote:
> > @@ -1636,6 +1638,20 @@ void libxl__domain_save(libxl__egc *egc,
> > > libxl__domain_suspend_state *dss)
> > > | (debug ? XCFLAGS_DEBUG : 0)
> > > | (dss->hvm ? XCFLAGS_HVM : 0);
> > >
> > > + /* Disallow saving a guest with vNUMA configured because
> > > migration
> > > + * stream does not preserve node information.
> > > + *
> > > + * Do not differentiate "no vnuma configuration" from "empty
> > > vnuma
> > > + * configuration".
> > > + */
> > > + rc = xc_domain_getvnuma(CTX->xch, domid, &nr_vnodes,
> > > &nr_vmemranges,
> > > + &nr_vcpus, NULL, NULL, NULL);
> >
> > Sorry for not noticing this before but this is putting a non-libxl
> > error
> > code in a variable named rc, which is verboten in coding style.
> >
>
> My bad. Should have noticed that earlier.
>
> > Not least because I think it is now possible to get through this
> > function
> > successfully without changing it from the rc == -1 which might be
> > assigned
> > here (in the case where xs_suspend_evtchn_port returns < 0).
> >
> > Ian.
>
> Add a new variable called ret to store return value from xc function
> call. Here is the patch.
>
> ---8<---
> From c2e9567fa0c5a00405d3759321c9eefb8ec049fc Mon Sep 17 00:00:00 2001
> From: Wei Liu <wei.liu2@citrix.com>
> Date: Wed, 9 Sep 2015 17:11:24 +0100
> Subject: [PATCH] xl/libxl: disallow saving a guest with vNUMA configured
>
> This is because the migration stream does not preserve node information.
>
> Note this is not a regression for migration v2 vs legacy migration
> because neither of them preserves node information.
>
> Signed-off-by: Wei Liu <wei.liu2@citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
> ---
> Cc: andrew.cooper3@citrix.com
>
> v4:
> 1. Don't differentiate "no vnuma" from "empty vnuma".
> 2. Use ret to store xc function call return value.
>
> v3:
> 1. Update manpage, code comment and commit message.
> 2. *Don't* check if nomigrate is set.
> ---
> docs/man/xl.cfg.pod.5 | 2 ++
> tools/libxl/libxl_dom.c | 18 +++++++++++++++++-
> 2 files changed, 19 insertions(+), 1 deletion(-)
>
> diff --git a/docs/man/xl.cfg.pod.5 b/docs/man/xl.cfg.pod.5
> index c6345b8..157c855 100644
> --- a/docs/man/xl.cfg.pod.5
> +++ b/docs/man/xl.cfg.pod.5
> @@ -263,6 +263,8 @@ virtual node.
>
> Note that virtual NUMA for PV guest is not yet supported, because
> there is an issue with cpuid handling that affects PV virtual NUMA.
> +Further more, guest with virtual NUMA cannot be saved or migrated
I _think_ (but am not 100% sure) that in the sense you mean it is
"Furthermore". I don't think "Further more," actually means anything.
I can fix as I commit.
@@ -1636,6 +1638,20 @@ void libxl__domain_save(libxl__egc *egc,
> libxl__domain_suspend_state *dss)
> | (debug ? XCFLAGS_DEBUG : 0)
> | (dss->hvm ? XCFLAGS_HVM : 0);
>
> + /* Disallow saving a guest with vNUMA configured because migration
> + * stream does not preserve node information.
> + *
> + * Do not differentiate "no vnuma configuration" from "empty vnuma
> + * configuration".
Actually, we do differentiate, since we are checking for one explicitly.
What we are not differentiating is "vnuma enabled and configured" vs "numa
enabled but not configured", or something.
How about:
* Reject any domain which has vnuma enabled, even if the configuration is
* empty. Only domains which have no vnuma configuration at all are
* supported.
*/
as the second paragraph of the comment?
I can do that on commit too.
Ian.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH for 4.6 v4 2/3] xl/libxl: disallow saving a guest with vNUMA configured
2015-09-11 15:05 ` Ian Campbell
@ 2015-09-11 15:09 ` Wei Liu
2015-09-11 15:53 ` Ian Campbell
0 siblings, 1 reply; 13+ messages in thread
From: Wei Liu @ 2015-09-11 15:09 UTC (permalink / raw)
To: Ian Campbell; +Cc: Xen-devel, Wei Liu, Ian Jackson, andrew.cooper3
On Fri, Sep 11, 2015 at 04:05:13PM +0100, Ian Campbell wrote:
> On Fri, 2015-09-11 at 15:31 +0100, Wei Liu wrote:
> > On Fri, Sep 11, 2015 at 03:24:21PM +0100, Ian Campbell wrote:
> > > On Fri, 2015-09-11 at 15:14 +0100, Wei Liu wrote:
> > > @@ -1636,6 +1638,20 @@ void libxl__domain_save(libxl__egc *egc,
> > > > libxl__domain_suspend_state *dss)
> > > > | (debug ? XCFLAGS_DEBUG : 0)
> > > > | (dss->hvm ? XCFLAGS_HVM : 0);
> > > >
> > > > + /* Disallow saving a guest with vNUMA configured because
> > > > migration
> > > > + * stream does not preserve node information.
> > > > + *
> > > > + * Do not differentiate "no vnuma configuration" from "empty
> > > > vnuma
> > > > + * configuration".
> > > > + */
> > > > + rc = xc_domain_getvnuma(CTX->xch, domid, &nr_vnodes,
> > > > &nr_vmemranges,
> > > > + &nr_vcpus, NULL, NULL, NULL);
> > >
> > > Sorry for not noticing this before but this is putting a non-libxl
> > > error
> > > code in a variable named rc, which is verboten in coding style.
> > >
> >
> > My bad. Should have noticed that earlier.
> >
> > > Not least because I think it is now possible to get through this
> > > function
> > > successfully without changing it from the rc == -1 which might be
> > > assigned
> > > here (in the case where xs_suspend_evtchn_port returns < 0).
> > >
> > > Ian.
> >
> > Add a new variable called ret to store return value from xc function
> > call. Here is the patch.
> >
> > ---8<---
> > From c2e9567fa0c5a00405d3759321c9eefb8ec049fc Mon Sep 17 00:00:00 2001
> > From: Wei Liu <wei.liu2@citrix.com>
> > Date: Wed, 9 Sep 2015 17:11:24 +0100
> > Subject: [PATCH] xl/libxl: disallow saving a guest with vNUMA configured
> >
> > This is because the migration stream does not preserve node information.
> >
> > Note this is not a regression for migration v2 vs legacy migration
> > because neither of them preserves node information.
> >
> > Signed-off-by: Wei Liu <wei.liu2@citrix.com>
>
> Acked-by: Ian Campbell <ian.campbell@citrix.com>
>
> > ---
> > Cc: andrew.cooper3@citrix.com
> >
> > v4:
> > 1. Don't differentiate "no vnuma" from "empty vnuma".
> > 2. Use ret to store xc function call return value.
> >
> > v3:
> > 1. Update manpage, code comment and commit message.
> > 2. *Don't* check if nomigrate is set.
> > ---
> > docs/man/xl.cfg.pod.5 | 2 ++
> > tools/libxl/libxl_dom.c | 18 +++++++++++++++++-
> > 2 files changed, 19 insertions(+), 1 deletion(-)
> >
> > diff --git a/docs/man/xl.cfg.pod.5 b/docs/man/xl.cfg.pod.5
> > index c6345b8..157c855 100644
> > --- a/docs/man/xl.cfg.pod.5
> > +++ b/docs/man/xl.cfg.pod.5
> > @@ -263,6 +263,8 @@ virtual node.
> >
> > Note that virtual NUMA for PV guest is not yet supported, because
> > there is an issue with cpuid handling that affects PV virtual NUMA.
> > +Further more, guest with virtual NUMA cannot be saved or migrated
>
> I _think_ (but am not 100% sure) that in the sense you mean it is
> "Furthermore". I don't think "Further more," actually means anything.
>
> I can fix as I commit.
>
Yes please.
> @@ -1636,6 +1638,20 @@ void libxl__domain_save(libxl__egc *egc,
> > libxl__domain_suspend_state *dss)
> > | (debug ? XCFLAGS_DEBUG : 0)
> > | (dss->hvm ? XCFLAGS_HVM : 0);
> >
> > + /* Disallow saving a guest with vNUMA configured because migration
> > + * stream does not preserve node information.
> > + *
> > + * Do not differentiate "no vnuma configuration" from "empty vnuma
> > + * configuration".
>
> Actually, we do differentiate, since we are checking for one explicitly.
> What we are not differentiating is "vnuma enabled and configured" vs "numa
> enabled but not configured", or something.
>
> How about:
>
> * Reject any domain which has vnuma enabled, even if the configuration is
> * empty. Only domains which have no vnuma configuration at all are
> * supported.
> */
>
> as the second paragraph of the comment?
>
OK.
> I can do that on commit too.
>
That would be good.
Wei.
> Ian.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH for 4.6 v4 2/3] xl/libxl: disallow saving a guest with vNUMA configured
2015-09-11 15:09 ` Wei Liu
@ 2015-09-11 15:53 ` Ian Campbell
2015-09-11 15:56 ` Wei Liu
0 siblings, 1 reply; 13+ messages in thread
From: Ian Campbell @ 2015-09-11 15:53 UTC (permalink / raw)
To: Wei Liu; +Cc: Xen-devel, Ian Jackson, andrew.cooper3
On Fri, 2015-09-11 at 16:09 +0100, Wei Liu wrote:
> > > Note that virtual NUMA for PV guest is not yet supported, because
> > > there is an issue with cpuid handling that affects PV virtual NUMA.
> > > +Further more, guest with virtual NUMA cannot be saved or migrated
> >
> > I _think_ (but am not 100% sure) that in the sense you mean it is
> > "Furthermore". I don't think "Further more," actually means anything.
> >
> > I can fix as I commit.
> >
>
> Yes please.
I went with:
+Furthermore, guests with virtual NUMA cannot be saved or migrated
+because the migration stream does not preserve node information.
I've applied all three patches in this series to staging and 4.6. The
conflict you mentioned elsewhere (patch #1) was just the presence of
xc_domain_soft_reset in staging but not staging-4.6. I resolved it, I
don't think I can have gotten it wrong, but do check ;-)
Ian.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH for 4.6 v4 2/3] xl/libxl: disallow saving a guest with vNUMA configured
2015-09-11 15:53 ` Ian Campbell
@ 2015-09-11 15:56 ` Wei Liu
0 siblings, 0 replies; 13+ messages in thread
From: Wei Liu @ 2015-09-11 15:56 UTC (permalink / raw)
To: Ian Campbell; +Cc: Xen-devel, Wei Liu, Ian Jackson, andrew.cooper3
On Fri, Sep 11, 2015 at 04:53:57PM +0100, Ian Campbell wrote:
> On Fri, 2015-09-11 at 16:09 +0100, Wei Liu wrote:
>
> > > > Note that virtual NUMA for PV guest is not yet supported, because
> > > > there is an issue with cpuid handling that affects PV virtual NUMA.
> > > > +Further more, guest with virtual NUMA cannot be saved or migrated
> > >
> > > I _think_ (but am not 100% sure) that in the sense you mean it is
> > > "Furthermore". I don't think "Further more," actually means anything.
> > >
> > > I can fix as I commit.
> > >
> >
> > Yes please.
>
> I went with:
> +Furthermore, guests with virtual NUMA cannot be saved or migrated
> +because the migration stream does not preserve node information.
>
> I've applied all three patches in this series to staging and 4.6. The
> conflict you mentioned elsewhere (patch #1) was just the presence of
> xc_domain_soft_reset in staging but not staging-4.6. I resolved it, I
> don't think I can have gotten it wrong, but do check ;-)
>
The backported patch looks correct. Thanks.
> Ian.
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2015-09-11 15:57 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-09-11 13:50 [PATCH for 4.6 v4 0/3] More vNUMA patches Wei Liu
2015-09-11 13:50 ` [PATCH for 4.6 v4 1/3] libxc: introduce xc_domain_getvnuma Wei Liu
2015-09-11 13:53 ` Wei Liu
2015-09-11 13:50 ` [PATCH for 4.6 v4 2/3] xl/libxl: disallow saving a guest with vNUMA configured Wei Liu
2015-09-11 14:00 ` Ian Campbell
2015-09-11 14:14 ` Wei Liu
2015-09-11 14:24 ` Ian Campbell
2015-09-11 14:31 ` Wei Liu
2015-09-11 15:05 ` Ian Campbell
2015-09-11 15:09 ` Wei Liu
2015-09-11 15:53 ` Ian Campbell
2015-09-11 15:56 ` Wei Liu
2015-09-11 13:50 ` [PATCH for 4.6 v4 3/3] xl: handle empty vnuma configuration Wei Liu
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).