xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
* [PATCHv2 0 of 2] libxl: Extend CPU affinity specification and enable it in config file.
@ 2012-01-23 18:10 Dario Faggioli
  2012-01-23 18:21 ` [PATCHv2 1 of 2] libxl: extend pCPUs specification for vcpu-pin Dario Faggioli
  2012-01-23 18:22 ` [PATCHv2 2 of 2] libxl: allow for specifying the CPU affinity in the config file Dario Faggioli
  0 siblings, 2 replies; 8+ messages in thread
From: Dario Faggioli @ 2012-01-23 18:10 UTC (permalink / raw)
  To: xen-devel; +Cc: Ian.Campbell, George Dunlap, Juergen Gross, Ian Jackson


[-- Attachment #1.1: Type: text/plain, Size: 1446 bytes --]

Hello Everyone,

This series slightly extends the current support for specifying CPU
affinity, basically adding the support for "^<cpuid>" kind of entries
(i.e., "^6", meaning "not on CPU#6), and enables doing so in a VM's
config file, like it (probably?) was possible with `xm'.

With respect to v1:
* Reworked (hopefully improved) the parsing of the cpu-pin string
* Removed forward declarations (as asked during review)
* Added some helper functions (as asked during review)
* Put a saner default for cpu-pinning for libxl (as asked during review)

Thanks and Regards,
Dario

--
generalize-vcpupin-parsig.patch
support-cpus-par-in-config-file.patch
-- 
tools/libxl/libxl.c         |   14 +++++++++
 tools/libxl/libxl.h         |    2 +
 tools/libxl/libxl_create.c  |    3 +
 tools/libxl/libxl_dom.c     |    1 +
 tools/libxl/libxl_types.idl |    1 +
 tools/libxl/libxl_utils.h   |   14 +++++++++
 tools/libxl/xl_cmdimpl.c    |  235 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------
 7 files changed, 190 insertions(+), 80 deletions(-)

-- 
<<This happens because I choose it to happen!>> (Raistlin Majere)
-------------------------------------------------------------------
Dario Faggioli, Ph.D, http://retis.sssup.it/people/faggioli
Senior Software Engineer, Citrix Systems R&D Ltd., Cambridge (UK)



[-- Attachment #1.2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

[-- Attachment #2: Type: text/plain, Size: 138 bytes --]

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

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCHv2 1 of 2] libxl: extend pCPUs specification for vcpu-pin.
  2012-01-23 18:10 [PATCHv2 0 of 2] libxl: Extend CPU affinity specification and enable it in config file Dario Faggioli
@ 2012-01-23 18:21 ` Dario Faggioli
  2012-01-25 10:19   ` Ian Campbell
  2012-01-23 18:22 ` [PATCHv2 2 of 2] libxl: allow for specifying the CPU affinity in the config file Dario Faggioli
  1 sibling, 1 reply; 8+ messages in thread
From: Dario Faggioli @ 2012-01-23 18:21 UTC (permalink / raw)
  To: xen-devel; +Cc: Ian.Campbell, George Dunlap, Juergen Gross, Ian Jackson


[-- Attachment #1.1.1: Type: text/plain, Size: 5271 bytes --]

Allow for "^<cpuid>" syntax while specifying the pCPUs list
during a vcpu-pin. This enables doing the following:

 xl vcpu-pin 1 1 0-4,^2

and achieving:

 xl vcpu-list
 Name                                ID  VCPU   CPU State   Time(s) CPU Affinity
 ...
 Squeeze_pv                           1     1    3   -b-       2.4  0-1,3-4
 ...

Signed-off-by: Dario Faggioli <dario.faggioli@citrix.com>

diff -r 370924e204dc tools/libxl/libxl_utils.h
--- a/tools/libxl/libxl_utils.h	Mon Jan 23 15:10:43 2012 +0000
+++ b/tools/libxl/libxl_utils.h	Mon Jan 23 18:02:41 2012 +0000
@@ -71,6 +71,8 @@ int libxl_cpumap_test(libxl_cpumap *cpum
 void libxl_cpumap_set(libxl_cpumap *cpumap, int cpu);
 void libxl_cpumap_reset(libxl_cpumap *cpumap, int cpu);
 #define libxl_for_each_cpu(var, map) for (var = 0; var < (map).size * 8; var++)
+#define libxl_for_each_set_cpu(v, m) for (v = 0; v < (m).size * 8; v++) \
+                                             if (libxl_cpumap_test(&(m), v))
 
 int libxl_cpuarray_alloc(libxl_ctx *ctx, libxl_cpuarray *cpuarray);
 
diff -r 370924e204dc tools/libxl/xl_cmdimpl.c
--- a/tools/libxl/xl_cmdimpl.c	Mon Jan 23 15:10:43 2012 +0000
+++ b/tools/libxl/xl_cmdimpl.c	Mon Jan 23 18:02:41 2012 +0000
@@ -3503,13 +3503,77 @@ int main_vcpulist(int argc, char **argv)
     return 0;
 }
 
+static int vcpupin_parse(char *cpu, libxl_cpumap *cpumap)
+{
+    libxl_cpumap exclude_cpumap;
+    uint32_t cpuida, cpuidb;
+    char *endptr, *toka, *tokb, *saveptr = NULL;
+    int i, ret = 0;
+
+    if (!strcmp(cpu, "all")) {
+        memset(cpumap->map, -1, cpumap->size);
+        return 0;
+    }
+
+    if (libxl_cpumap_alloc(ctx, &exclude_cpumap)) {
+        fprintf(stderr, "Error: Failed to allocate cpumap.\n");
+        return ENOMEM;
+    }
+
+    for (toka = strtok_r(cpu, ",", &saveptr); toka;
+         toka = strtok_r(NULL, ",", &saveptr)) {
+        if (*toka == '^') {
+            /* Add the cpu to the removal list */
+            toka++;
+            cpuida = strtoul(toka, &endptr, 10);
+            if (toka == endptr) {
+                fprintf(stderr, "Error: Invalid argument.\n");
+                ret = EINVAL;
+                goto vcpp_out;
+            }
+            libxl_cpumap_set(&exclude_cpumap, cpuida);
+        } else {
+            /* Valid (range of) cpu(s) */
+            cpuida = cpuidb = strtoul(toka, &endptr, 10);
+            if (endptr == toka) {
+                fprintf(stderr, "Error: Invalid argument.\n");
+                ret = EINVAL;
+                goto vcpp_out;
+            }
+            if (*endptr == '-') {
+                tokb = endptr + 1;
+                cpuidb = strtoul(tokb, &endptr, 10);
+                if (endptr == tokb || cpuida > cpuidb) {
+                    fprintf(stderr, "Error: Invalid argument.\n");
+                    ret = EINVAL;
+                    goto vcpp_out;
+                }
+            }
+            while (cpuida <= cpuidb) {
+                libxl_cpumap_set(cpumap, cpuida);
+                cpuida++;
+            }
+        }
+    }
+
+    /* Clear all the cpus from the removal list */
+    libxl_for_each_set_cpu(i, exclude_cpumap) {
+        libxl_cpumap_reset(cpumap, i);
+    }
+
+vcpp_out:
+    libxl_cpumap_dispose(&exclude_cpumap);
+
+    return ret;
+}
+
 static void vcpupin(const char *d, const char *vcpu, char *cpu)
 {
     libxl_vcpuinfo *vcpuinfo;
     libxl_cpumap cpumap;
 
-    uint32_t vcpuid, cpuida, cpuidb;
-    char *endptr, *toka, *tokb;
+    uint32_t vcpuid;
+    char *endptr;
     int i, nb_vcpu;
 
     vcpuid = strtoul(vcpu, &endptr, 10);
@@ -3526,32 +3590,9 @@ static void vcpupin(const char *d, const
     if (libxl_cpumap_alloc(ctx, &cpumap)) {
         goto vcpupin_out;
     }
-    if (strcmp(cpu, "all")) {
-        for (toka = strtok(cpu, ","), i = 0; toka; toka = strtok(NULL, ","), ++i) {
-            cpuida = strtoul(toka, &endptr, 10);
-            if (toka == endptr) {
-                fprintf(stderr, "Error: Invalid argument.\n");
-                goto vcpupin_out1;
-            }
-            if (*endptr == '-') {
-                tokb = endptr + 1;
-                cpuidb = strtoul(tokb, &endptr, 10);
-                if ((tokb == endptr) || (cpuida > cpuidb)) {
-                    fprintf(stderr, "Error: Invalid argument.\n");
-                    goto vcpupin_out1;
-                }
-                while (cpuida <= cpuidb) {
-                    libxl_cpumap_set(&cpumap, cpuida);
-                    ++cpuida;
-                }
-            } else {
-                libxl_cpumap_set(&cpumap, cpuida);
-            }
-        }
-    }
-    else {
-        memset(cpumap.map, -1, cpumap.size);
-    }
+
+    if (vcpupin_parse(cpu, &cpumap))
+        goto vcpupin_out1;
 
     if (vcpuid != -1) {
         if (libxl_set_vcpuaffinity(ctx, domid, vcpuid, &cpumap) == -1) {

-- 
<<This happens because I choose it to happen!>> (Raistlin Majere)
-------------------------------------------------------------------
Dario Faggioli, Ph.D, http://retis.sssup.it/people/faggioli
Senior Software Engineer, Citrix Systems R&D Ltd., Cambridge (UK)



[-- Attachment #1.1.2: generalize-vcpupin-parsig.patch --]
[-- Type: text/x-patch, Size: 5120 bytes --]

# HG changeset patch
# Parent 370924e204dc29e12cd807dd730974d6b2bc53d3
libxl: extend pCPUs specification for vcpu-pin.

Allow for "^<cpuid>" syntax while specifying the pCPUs list
during a vcpu-pin. This enables doing the following:

 xl vcpu-pin 1 1 0-4,^2

and achieving:

 xl vcpu-list
 Name                                ID  VCPU   CPU State   Time(s) CPU Affinity
 ...
 Squeeze_pv                           1     1    3   -b-       2.4  0-1,3-4
 ...

Signed-off-by: Dario Faggioli <dario.faggioli@citrix.com>

diff -r 370924e204dc tools/libxl/libxl_utils.h
--- a/tools/libxl/libxl_utils.h	Mon Jan 23 15:10:43 2012 +0000
+++ b/tools/libxl/libxl_utils.h	Mon Jan 23 18:02:41 2012 +0000
@@ -71,6 +71,8 @@ int libxl_cpumap_test(libxl_cpumap *cpum
 void libxl_cpumap_set(libxl_cpumap *cpumap, int cpu);
 void libxl_cpumap_reset(libxl_cpumap *cpumap, int cpu);
 #define libxl_for_each_cpu(var, map) for (var = 0; var < (map).size * 8; var++)
+#define libxl_for_each_set_cpu(v, m) for (v = 0; v < (m).size * 8; v++) \
+                                             if (libxl_cpumap_test(&(m), v))
 
 int libxl_cpuarray_alloc(libxl_ctx *ctx, libxl_cpuarray *cpuarray);
 
diff -r 370924e204dc tools/libxl/xl_cmdimpl.c
--- a/tools/libxl/xl_cmdimpl.c	Mon Jan 23 15:10:43 2012 +0000
+++ b/tools/libxl/xl_cmdimpl.c	Mon Jan 23 18:02:41 2012 +0000
@@ -3503,13 +3503,77 @@ int main_vcpulist(int argc, char **argv)
     return 0;
 }
 
+static int vcpupin_parse(char *cpu, libxl_cpumap *cpumap)
+{
+    libxl_cpumap exclude_cpumap;
+    uint32_t cpuida, cpuidb;
+    char *endptr, *toka, *tokb, *saveptr = NULL;
+    int i, ret = 0;
+
+    if (!strcmp(cpu, "all")) {
+        memset(cpumap->map, -1, cpumap->size);
+        return 0;
+    }
+
+    if (libxl_cpumap_alloc(ctx, &exclude_cpumap)) {
+        fprintf(stderr, "Error: Failed to allocate cpumap.\n");
+        return ENOMEM;
+    }
+
+    for (toka = strtok_r(cpu, ",", &saveptr); toka;
+         toka = strtok_r(NULL, ",", &saveptr)) {
+        if (*toka == '^') {
+            /* Add the cpu to the removal list */
+            toka++;
+            cpuida = strtoul(toka, &endptr, 10);
+            if (toka == endptr) {
+                fprintf(stderr, "Error: Invalid argument.\n");
+                ret = EINVAL;
+                goto vcpp_out;
+            }
+            libxl_cpumap_set(&exclude_cpumap, cpuida);
+        } else {
+            /* Valid (range of) cpu(s) */
+            cpuida = cpuidb = strtoul(toka, &endptr, 10);
+            if (endptr == toka) {
+                fprintf(stderr, "Error: Invalid argument.\n");
+                ret = EINVAL;
+                goto vcpp_out;
+            }
+            if (*endptr == '-') {
+                tokb = endptr + 1;
+                cpuidb = strtoul(tokb, &endptr, 10);
+                if (endptr == tokb || cpuida > cpuidb) {
+                    fprintf(stderr, "Error: Invalid argument.\n");
+                    ret = EINVAL;
+                    goto vcpp_out;
+                }
+            }
+            while (cpuida <= cpuidb) {
+                libxl_cpumap_set(cpumap, cpuida);
+                cpuida++;
+            }
+        }
+    }
+
+    /* Clear all the cpus from the removal list */
+    libxl_for_each_set_cpu(i, exclude_cpumap) {
+        libxl_cpumap_reset(cpumap, i);
+    }
+
+vcpp_out:
+    libxl_cpumap_dispose(&exclude_cpumap);
+
+    return ret;
+}
+
 static void vcpupin(const char *d, const char *vcpu, char *cpu)
 {
     libxl_vcpuinfo *vcpuinfo;
     libxl_cpumap cpumap;
 
-    uint32_t vcpuid, cpuida, cpuidb;
-    char *endptr, *toka, *tokb;
+    uint32_t vcpuid;
+    char *endptr;
     int i, nb_vcpu;
 
     vcpuid = strtoul(vcpu, &endptr, 10);
@@ -3526,32 +3590,9 @@ static void vcpupin(const char *d, const
     if (libxl_cpumap_alloc(ctx, &cpumap)) {
         goto vcpupin_out;
     }
-    if (strcmp(cpu, "all")) {
-        for (toka = strtok(cpu, ","), i = 0; toka; toka = strtok(NULL, ","), ++i) {
-            cpuida = strtoul(toka, &endptr, 10);
-            if (toka == endptr) {
-                fprintf(stderr, "Error: Invalid argument.\n");
-                goto vcpupin_out1;
-            }
-            if (*endptr == '-') {
-                tokb = endptr + 1;
-                cpuidb = strtoul(tokb, &endptr, 10);
-                if ((tokb == endptr) || (cpuida > cpuidb)) {
-                    fprintf(stderr, "Error: Invalid argument.\n");
-                    goto vcpupin_out1;
-                }
-                while (cpuida <= cpuidb) {
-                    libxl_cpumap_set(&cpumap, cpuida);
-                    ++cpuida;
-                }
-            } else {
-                libxl_cpumap_set(&cpumap, cpuida);
-            }
-        }
-    }
-    else {
-        memset(cpumap.map, -1, cpumap.size);
-    }
+
+    if (vcpupin_parse(cpu, &cpumap))
+        goto vcpupin_out1;
 
     if (vcpuid != -1) {
         if (libxl_set_vcpuaffinity(ctx, domid, vcpuid, &cpumap) == -1) {

[-- Attachment #1.2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

[-- Attachment #2: Type: text/plain, Size: 138 bytes --]

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

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCHv2 2 of 2] libxl: allow for specifying the CPU affinity in the config file.
  2012-01-23 18:10 [PATCHv2 0 of 2] libxl: Extend CPU affinity specification and enable it in config file Dario Faggioli
  2012-01-23 18:21 ` [PATCHv2 1 of 2] libxl: extend pCPUs specification for vcpu-pin Dario Faggioli
@ 2012-01-23 18:22 ` Dario Faggioli
  2012-01-25 10:28   ` Ian Campbell
  1 sibling, 1 reply; 8+ messages in thread
From: Dario Faggioli @ 2012-01-23 18:22 UTC (permalink / raw)
  To: xen-devel; +Cc: Ian.Campbell, George Dunlap, Juergen Gross, Ian Jackson


[-- Attachment #1.1.1: Type: text/plain, Size: 11021 bytes --]

Enable CPU affinity specification in a VM's config file with the
exact syntax `xl vcpu-pin' provides.

Signed-off-by: Dario Faggioli <dario.faggioli@citrix.com>

diff -r d76603510485 tools/libxl/libxl.c
--- a/tools/libxl/libxl.c	Mon Jan 23 18:02:42 2012 +0000
+++ b/tools/libxl/libxl.c	Mon Jan 23 18:02:47 2012 +0000
@@ -2663,6 +2663,20 @@ int libxl_set_vcpuaffinity(libxl_ctx *ct
     return 0;
 }
 
+int libxl_set_vcpuaffinity_all(libxl_ctx *ctx, uint32_t domid,
+                               unsigned int max_vcpus, libxl_cpumap *cpumap)
+{
+    int i, rc = 0;
+
+    for (i = 0; i < max_vcpus; i++) {
+        if (libxl_set_vcpuaffinity(ctx, domid, i, cpumap)) {
+            LIBXL__LOG(ctx, LIBXL__LOG_WARNING, "no affinity for cpu %d", i);
+            rc = ERROR_FAIL;
+        }
+    }
+    return rc;
+}
+
 int libxl_set_vcpuonline(libxl_ctx *ctx, uint32_t domid, libxl_cpumap *cpumap)
 {
     GC_INIT(ctx);
diff -r d76603510485 tools/libxl/libxl.h
--- a/tools/libxl/libxl.h	Mon Jan 23 18:02:42 2012 +0000
+++ b/tools/libxl/libxl.h	Mon Jan 23 18:02:47 2012 +0000
@@ -560,6 +560,8 @@ libxl_vcpuinfo *libxl_list_vcpu(libxl_ct
                                        int *nb_vcpu, int *nrcpus);
 int libxl_set_vcpuaffinity(libxl_ctx *ctx, uint32_t domid, uint32_t vcpuid,
                            libxl_cpumap *cpumap);
+int libxl_set_vcpuaffinity_all(libxl_ctx *ctx, uint32_t domid,
+                               unsigned int max_vcpus, libxl_cpumap *cpumap);
 int libxl_set_vcpuonline(libxl_ctx *ctx, uint32_t domid, libxl_cpumap *cpumap);
 
 int libxl_get_sched_id(libxl_ctx *ctx);
diff -r d76603510485 tools/libxl/libxl_create.c
--- a/tools/libxl/libxl_create.c	Mon Jan 23 18:02:42 2012 +0000
+++ b/tools/libxl/libxl_create.c	Mon Jan 23 18:02:47 2012 +0000
@@ -71,6 +71,9 @@ int libxl_init_build_info(libxl_ctx *ctx
     memset(b_info, '\0', sizeof(*b_info));
     b_info->max_vcpus = 1;
     b_info->cur_vcpus = 1;
+    if (libxl_cpumap_alloc(ctx, &b_info->cpumap))
+        return ERROR_NOMEM;
+    libxl_cpumap_set_any(&b_info->cpumap);
     b_info->max_memkb = 32 * 1024;
     b_info->target_memkb = b_info->max_memkb;
     b_info->disable_migrate = 0;
diff -r d76603510485 tools/libxl/libxl_dom.c
--- a/tools/libxl/libxl_dom.c	Mon Jan 23 18:02:42 2012 +0000
+++ b/tools/libxl/libxl_dom.c	Mon Jan 23 18:02:47 2012 +0000
@@ -65,6 +65,7 @@ int libxl__build_pre(libxl__gc *gc, uint
     libxl_ctx *ctx = libxl__gc_owner(gc);
     int tsc_mode;
     xc_domain_max_vcpus(ctx->xch, domid, info->max_vcpus);
+    libxl_set_vcpuaffinity_all(ctx, domid, info->max_vcpus, &info->cpumap);
     xc_domain_setmaxmem(ctx->xch, domid, info->target_memkb + LIBXL_MAXMEM_CONSTANT);
     if (info->type == LIBXL_DOMAIN_TYPE_PV)
         xc_domain_set_memmap_limit(ctx->xch, domid,
diff -r d76603510485 tools/libxl/libxl_types.idl
--- a/tools/libxl/libxl_types.idl	Mon Jan 23 18:02:42 2012 +0000
+++ b/tools/libxl/libxl_types.idl	Mon Jan 23 18:02:47 2012 +0000
@@ -162,6 +162,7 @@ libxl_domain_create_info = Struct("domai
 libxl_domain_build_info = Struct("domain_build_info",[
     ("max_vcpus",       integer),
     ("cur_vcpus",       integer),
+    ("cpumap",          libxl_cpumap),
     ("tsc_mode",        libxl_tsc_mode),
     ("max_memkb",       uint32),
     ("target_memkb",    uint32),
diff -r d76603510485 tools/libxl/libxl_utils.h
--- a/tools/libxl/libxl_utils.h	Mon Jan 23 18:02:42 2012 +0000
+++ b/tools/libxl/libxl_utils.h	Mon Jan 23 18:02:47 2012 +0000
@@ -70,6 +70,18 @@ int libxl_cpumap_alloc(libxl_ctx *ctx, l
 int libxl_cpumap_test(libxl_cpumap *cpumap, int cpu);
 void libxl_cpumap_set(libxl_cpumap *cpumap, int cpu);
 void libxl_cpumap_reset(libxl_cpumap *cpumap, int cpu);
+static inline void libxl_cpumap_set_any(libxl_cpumap *cpumap)
+{
+    memset(cpumap->map, -1, cpumap->size);
+}
+static inline void libxl_cpumap_set_none(libxl_cpumap *cpumap)
+{
+    memset(cpumap->map, 0, cpumap->size);
+}
+static inline int libxl_cpumap_cpu_valid(libxl_cpumap *cpumap, int cpu)
+{
+    return cpu >= 0 && cpu < (cpumap->size * 8);
+}
 #define libxl_for_each_cpu(var, map) for (var = 0; var < (map).size * 8; var++)
 #define libxl_for_each_set_cpu(v, m) for (v = 0; v < (m).size * 8; v++) \
                                              if (libxl_cpumap_test(&(m), v))
diff -r d76603510485 tools/libxl/xl_cmdimpl.c
--- a/tools/libxl/xl_cmdimpl.c	Mon Jan 23 18:02:42 2012 +0000
+++ b/tools/libxl/xl_cmdimpl.c	Mon Jan 23 18:02:47 2012 +0000
@@ -288,16 +288,72 @@ static void dolog(const char *file, int 
         libxl_write_exactly(NULL, logfile, s, rc, NULL, NULL);
 }
 
+static void print_bitmap(uint8_t *map, int maplen, FILE *stream)
+{
+    int i;
+    uint8_t pmap = 0, bitmask = 0;
+    int firstset = 0, state = 0;
+
+    for (i = 0; i < maplen; i++) {
+        if (i % 8 == 0) {
+            pmap = *map++;
+            bitmask = 1;
+        } else bitmask <<= 1;
+
+        switch (state) {
+        case 0:
+        case 2:
+            if ((pmap & bitmask) != 0) {
+                firstset = i;
+                state++;
+            }
+            continue;
+        case 1:
+        case 3:
+            if ((pmap & bitmask) == 0) {
+                fprintf(stream, "%s%d", state > 1 ? "," : "", firstset);
+                if (i - 1 > firstset)
+                    fprintf(stream, "-%d", i - 1);
+                state = 2;
+            }
+            continue;
+        }
+    }
+    switch (state) {
+        case 0:
+            fprintf(stream, "none");
+            break;
+        case 2:
+            break;
+        case 1:
+            if (firstset == 0) {
+                fprintf(stream, "any cpu");
+                break;
+            }
+        case 3:
+            fprintf(stream, "%s%d", state > 1 ? "," : "", firstset);
+            if (i - 1 > firstset)
+                fprintf(stream, "-%d", i - 1);
+            break;
+    }
+}
+
 static void printf_info(int domid,
                         libxl_domain_config *d_config,
                         libxl_device_model_info *dm_info)
 {
-    int i;
+    int i, nr_cpus = -1;
     libxl_dominfo info;
+    libxl_physinfo physinfo;
 
     libxl_domain_create_info *c_info = &d_config->c_info;
     libxl_domain_build_info *b_info = &d_config->b_info;
 
+    if (libxl_get_physinfo(ctx, &physinfo) == 0)
+        nr_cpus = physinfo.nr_cpus;
+    else
+        fprintf(stderr, "libxl_physinfo failed.\n");
+
     printf("(domain\n\t(domid %d)\n", domid);
     printf("\t(create_info)\n");
     printf("\t(hvm %d)\n", c_info->type == LIBXL_DOMAIN_TYPE_HVM);
@@ -328,6 +384,9 @@ static void printf_info(int domid,
 
     printf("\t(build_info)\n");
     printf("\t(max_vcpus %d)\n", b_info->max_vcpus);
+    printf("\t(CPU affinity ");
+    print_bitmap(b_info->cpumap.map, nr_cpus, stdout);
+    printf(")\n");
     printf("\t(tsc_mode %s)\n", libxl_tsc_mode_to_string(b_info->tsc_mode));
     printf("\t(max_memkb %d)\n", b_info->max_memkb);
     printf("\t(target_memkb %d)\n", b_info->target_memkb);
@@ -569,6 +628,8 @@ static void split_string_into_string_lis
     free(s);
 }
 
+static int vcpupin_parse(char *cpu, libxl_cpumap *cpumap);
+
 static void parse_config_data(const char *configfile_filename_report,
                               const char *configfile_data,
                               int configfile_len,
@@ -578,7 +639,7 @@ static void parse_config_data(const char
     const char *buf;
     long l;
     XLU_Config *config;
-    XLU_ConfigList *vbds, *nics, *pcis, *cvfbs, *cpuids;
+    XLU_ConfigList *cpus, *vbds, *nics, *pcis, *cvfbs, *cpuids;
     int pci_power_mgmt = 0;
     int pci_msitranslate = 1;
     int e;
@@ -661,6 +722,29 @@ static void parse_config_data(const char
     if (!xlu_cfg_get_long (config, "maxvcpus", &l, 0))
         b_info->max_vcpus = l;
 
+    if (!xlu_cfg_get_list (config, "cpus", &cpus, 0, 1)) {
+        int i, n_cpus = 0;
+
+        libxl_cpumap_set_none(&b_info->cpumap);
+        while ((buf = xlu_cfg_get_listitem(cpus, n_cpus)) != NULL) {
+            i = atoi(buf);
+            if (!libxl_cpumap_cpu_valid(&b_info->cpumap, i)) {
+                fprintf(stderr, "cpu %d illegal\n", i);
+                exit(1);
+            }
+            libxl_cpumap_set(&b_info->cpumap, i);
+            n_cpus++;
+        }
+    }
+    else if (!xlu_cfg_get_string (config, "cpus", &buf, 0)) {
+        char *buf2 = strdup(buf);
+
+        libxl_cpumap_set_none(&b_info->cpumap);
+        if (vcpupin_parse(buf2, &b_info->cpumap))
+            exit(1);
+        free(buf2);
+    }
+
     if (!xlu_cfg_get_long (config, "memory", &l, 0)) {
         b_info->max_memkb = l * 1024;
         b_info->target_memkb = b_info->max_memkb;
@@ -3357,56 +3441,6 @@ int main_button_press(int argc, char **a
     return 0;
 }
 
-static void print_bitmap(uint8_t *map, int maplen, FILE *stream)
-{
-    int i;
-    uint8_t pmap = 0, bitmask = 0;
-    int firstset = 0, state = 0;
-
-    for (i = 0; i < maplen; i++) {
-        if (i % 8 == 0) {
-            pmap = *map++;
-            bitmask = 1;
-        } else bitmask <<= 1;
-
-        switch (state) {
-        case 0:
-        case 2:
-            if ((pmap & bitmask) != 0) {
-                firstset = i;
-                state++;
-            }
-            continue;
-        case 1:
-        case 3:
-            if ((pmap & bitmask) == 0) {
-                fprintf(stream, "%s%d", state > 1 ? "," : "", firstset);
-                if (i - 1 > firstset)
-                    fprintf(stream, "-%d", i - 1);
-                state = 2;
-            }
-            continue;
-        }
-    }
-    switch (state) {
-        case 0:
-            fprintf(stream, "none");
-            break;
-        case 2:
-            break;
-        case 1:
-            if (firstset == 0) {
-                fprintf(stream, "any cpu");
-                break;
-            }
-        case 3:
-            fprintf(stream, "%s%d", state > 1 ? "," : "", firstset);
-            if (i - 1 > firstset)
-                fprintf(stream, "-%d", i - 1);
-            break;
-    }
-}
-
 static void print_vcpuinfo(uint32_t tdomid,
                            const libxl_vcpuinfo *vcpuinfo,
                            uint32_t nr_cpus)
@@ -3511,7 +3545,7 @@ static int vcpupin_parse(char *cpu, libx
     int i, ret = 0;
 
     if (!strcmp(cpu, "all")) {
-        memset(cpumap->map, -1, cpumap->size);
+        libxl_cpumap_set_any(cpumap);
         return 0;
     }
 

-- 
<<This happens because I choose it to happen!>> (Raistlin Majere)
-------------------------------------------------------------------
Dario Faggioli, Ph.D, http://retis.sssup.it/people/faggioli
Senior Software Engineer, Citrix Systems R&D Ltd., Cambridge (UK)



[-- Attachment #1.1.2: support-cpus-par-in-config-file.patch --]
[-- Type: text/x-patch, Size: 10887 bytes --]

# HG changeset patch
# Parent d76603510485bbd69b30905599f2883bc0fb9b67
libxl: allow for specifying the CPU affinity in the config file.

Enable CPU affinity specification in a VM's config file with the
exact syntax `xl vcpu-pin' provides.

Signed-off-by: Dario Faggioli <dario.faggioli@citrix.com>

diff -r d76603510485 tools/libxl/libxl.c
--- a/tools/libxl/libxl.c	Mon Jan 23 18:02:42 2012 +0000
+++ b/tools/libxl/libxl.c	Mon Jan 23 18:02:47 2012 +0000
@@ -2663,6 +2663,20 @@ int libxl_set_vcpuaffinity(libxl_ctx *ct
     return 0;
 }
 
+int libxl_set_vcpuaffinity_all(libxl_ctx *ctx, uint32_t domid,
+                               unsigned int max_vcpus, libxl_cpumap *cpumap)
+{
+    int i, rc = 0;
+
+    for (i = 0; i < max_vcpus; i++) {
+        if (libxl_set_vcpuaffinity(ctx, domid, i, cpumap)) {
+            LIBXL__LOG(ctx, LIBXL__LOG_WARNING, "no affinity for cpu %d", i);
+            rc = ERROR_FAIL;
+        }
+    }
+    return rc;
+}
+
 int libxl_set_vcpuonline(libxl_ctx *ctx, uint32_t domid, libxl_cpumap *cpumap)
 {
     GC_INIT(ctx);
diff -r d76603510485 tools/libxl/libxl.h
--- a/tools/libxl/libxl.h	Mon Jan 23 18:02:42 2012 +0000
+++ b/tools/libxl/libxl.h	Mon Jan 23 18:02:47 2012 +0000
@@ -560,6 +560,8 @@ libxl_vcpuinfo *libxl_list_vcpu(libxl_ct
                                        int *nb_vcpu, int *nrcpus);
 int libxl_set_vcpuaffinity(libxl_ctx *ctx, uint32_t domid, uint32_t vcpuid,
                            libxl_cpumap *cpumap);
+int libxl_set_vcpuaffinity_all(libxl_ctx *ctx, uint32_t domid,
+                               unsigned int max_vcpus, libxl_cpumap *cpumap);
 int libxl_set_vcpuonline(libxl_ctx *ctx, uint32_t domid, libxl_cpumap *cpumap);
 
 int libxl_get_sched_id(libxl_ctx *ctx);
diff -r d76603510485 tools/libxl/libxl_create.c
--- a/tools/libxl/libxl_create.c	Mon Jan 23 18:02:42 2012 +0000
+++ b/tools/libxl/libxl_create.c	Mon Jan 23 18:02:47 2012 +0000
@@ -71,6 +71,9 @@ int libxl_init_build_info(libxl_ctx *ctx
     memset(b_info, '\0', sizeof(*b_info));
     b_info->max_vcpus = 1;
     b_info->cur_vcpus = 1;
+    if (libxl_cpumap_alloc(ctx, &b_info->cpumap))
+        return ERROR_NOMEM;
+    libxl_cpumap_set_any(&b_info->cpumap);
     b_info->max_memkb = 32 * 1024;
     b_info->target_memkb = b_info->max_memkb;
     b_info->disable_migrate = 0;
diff -r d76603510485 tools/libxl/libxl_dom.c
--- a/tools/libxl/libxl_dom.c	Mon Jan 23 18:02:42 2012 +0000
+++ b/tools/libxl/libxl_dom.c	Mon Jan 23 18:02:47 2012 +0000
@@ -65,6 +65,7 @@ int libxl__build_pre(libxl__gc *gc, uint
     libxl_ctx *ctx = libxl__gc_owner(gc);
     int tsc_mode;
     xc_domain_max_vcpus(ctx->xch, domid, info->max_vcpus);
+    libxl_set_vcpuaffinity_all(ctx, domid, info->max_vcpus, &info->cpumap);
     xc_domain_setmaxmem(ctx->xch, domid, info->target_memkb + LIBXL_MAXMEM_CONSTANT);
     if (info->type == LIBXL_DOMAIN_TYPE_PV)
         xc_domain_set_memmap_limit(ctx->xch, domid,
diff -r d76603510485 tools/libxl/libxl_types.idl
--- a/tools/libxl/libxl_types.idl	Mon Jan 23 18:02:42 2012 +0000
+++ b/tools/libxl/libxl_types.idl	Mon Jan 23 18:02:47 2012 +0000
@@ -162,6 +162,7 @@ libxl_domain_create_info = Struct("domai
 libxl_domain_build_info = Struct("domain_build_info",[
     ("max_vcpus",       integer),
     ("cur_vcpus",       integer),
+    ("cpumap",          libxl_cpumap),
     ("tsc_mode",        libxl_tsc_mode),
     ("max_memkb",       uint32),
     ("target_memkb",    uint32),
diff -r d76603510485 tools/libxl/libxl_utils.h
--- a/tools/libxl/libxl_utils.h	Mon Jan 23 18:02:42 2012 +0000
+++ b/tools/libxl/libxl_utils.h	Mon Jan 23 18:02:47 2012 +0000
@@ -70,6 +70,18 @@ int libxl_cpumap_alloc(libxl_ctx *ctx, l
 int libxl_cpumap_test(libxl_cpumap *cpumap, int cpu);
 void libxl_cpumap_set(libxl_cpumap *cpumap, int cpu);
 void libxl_cpumap_reset(libxl_cpumap *cpumap, int cpu);
+static inline void libxl_cpumap_set_any(libxl_cpumap *cpumap)
+{
+    memset(cpumap->map, -1, cpumap->size);
+}
+static inline void libxl_cpumap_set_none(libxl_cpumap *cpumap)
+{
+    memset(cpumap->map, 0, cpumap->size);
+}
+static inline int libxl_cpumap_cpu_valid(libxl_cpumap *cpumap, int cpu)
+{
+    return cpu >= 0 && cpu < (cpumap->size * 8);
+}
 #define libxl_for_each_cpu(var, map) for (var = 0; var < (map).size * 8; var++)
 #define libxl_for_each_set_cpu(v, m) for (v = 0; v < (m).size * 8; v++) \
                                              if (libxl_cpumap_test(&(m), v))
diff -r d76603510485 tools/libxl/xl_cmdimpl.c
--- a/tools/libxl/xl_cmdimpl.c	Mon Jan 23 18:02:42 2012 +0000
+++ b/tools/libxl/xl_cmdimpl.c	Mon Jan 23 18:02:47 2012 +0000
@@ -288,16 +288,72 @@ static void dolog(const char *file, int 
         libxl_write_exactly(NULL, logfile, s, rc, NULL, NULL);
 }
 
+static void print_bitmap(uint8_t *map, int maplen, FILE *stream)
+{
+    int i;
+    uint8_t pmap = 0, bitmask = 0;
+    int firstset = 0, state = 0;
+
+    for (i = 0; i < maplen; i++) {
+        if (i % 8 == 0) {
+            pmap = *map++;
+            bitmask = 1;
+        } else bitmask <<= 1;
+
+        switch (state) {
+        case 0:
+        case 2:
+            if ((pmap & bitmask) != 0) {
+                firstset = i;
+                state++;
+            }
+            continue;
+        case 1:
+        case 3:
+            if ((pmap & bitmask) == 0) {
+                fprintf(stream, "%s%d", state > 1 ? "," : "", firstset);
+                if (i - 1 > firstset)
+                    fprintf(stream, "-%d", i - 1);
+                state = 2;
+            }
+            continue;
+        }
+    }
+    switch (state) {
+        case 0:
+            fprintf(stream, "none");
+            break;
+        case 2:
+            break;
+        case 1:
+            if (firstset == 0) {
+                fprintf(stream, "any cpu");
+                break;
+            }
+        case 3:
+            fprintf(stream, "%s%d", state > 1 ? "," : "", firstset);
+            if (i - 1 > firstset)
+                fprintf(stream, "-%d", i - 1);
+            break;
+    }
+}
+
 static void printf_info(int domid,
                         libxl_domain_config *d_config,
                         libxl_device_model_info *dm_info)
 {
-    int i;
+    int i, nr_cpus = -1;
     libxl_dominfo info;
+    libxl_physinfo physinfo;
 
     libxl_domain_create_info *c_info = &d_config->c_info;
     libxl_domain_build_info *b_info = &d_config->b_info;
 
+    if (libxl_get_physinfo(ctx, &physinfo) == 0)
+        nr_cpus = physinfo.nr_cpus;
+    else
+        fprintf(stderr, "libxl_physinfo failed.\n");
+
     printf("(domain\n\t(domid %d)\n", domid);
     printf("\t(create_info)\n");
     printf("\t(hvm %d)\n", c_info->type == LIBXL_DOMAIN_TYPE_HVM);
@@ -328,6 +384,9 @@ static void printf_info(int domid,
 
     printf("\t(build_info)\n");
     printf("\t(max_vcpus %d)\n", b_info->max_vcpus);
+    printf("\t(CPU affinity ");
+    print_bitmap(b_info->cpumap.map, nr_cpus, stdout);
+    printf(")\n");
     printf("\t(tsc_mode %s)\n", libxl_tsc_mode_to_string(b_info->tsc_mode));
     printf("\t(max_memkb %d)\n", b_info->max_memkb);
     printf("\t(target_memkb %d)\n", b_info->target_memkb);
@@ -569,6 +628,8 @@ static void split_string_into_string_lis
     free(s);
 }
 
+static int vcpupin_parse(char *cpu, libxl_cpumap *cpumap);
+
 static void parse_config_data(const char *configfile_filename_report,
                               const char *configfile_data,
                               int configfile_len,
@@ -578,7 +639,7 @@ static void parse_config_data(const char
     const char *buf;
     long l;
     XLU_Config *config;
-    XLU_ConfigList *vbds, *nics, *pcis, *cvfbs, *cpuids;
+    XLU_ConfigList *cpus, *vbds, *nics, *pcis, *cvfbs, *cpuids;
     int pci_power_mgmt = 0;
     int pci_msitranslate = 1;
     int e;
@@ -661,6 +722,29 @@ static void parse_config_data(const char
     if (!xlu_cfg_get_long (config, "maxvcpus", &l, 0))
         b_info->max_vcpus = l;
 
+    if (!xlu_cfg_get_list (config, "cpus", &cpus, 0, 1)) {
+        int i, n_cpus = 0;
+
+        libxl_cpumap_set_none(&b_info->cpumap);
+        while ((buf = xlu_cfg_get_listitem(cpus, n_cpus)) != NULL) {
+            i = atoi(buf);
+            if (!libxl_cpumap_cpu_valid(&b_info->cpumap, i)) {
+                fprintf(stderr, "cpu %d illegal\n", i);
+                exit(1);
+            }
+            libxl_cpumap_set(&b_info->cpumap, i);
+            n_cpus++;
+        }
+    }
+    else if (!xlu_cfg_get_string (config, "cpus", &buf, 0)) {
+        char *buf2 = strdup(buf);
+
+        libxl_cpumap_set_none(&b_info->cpumap);
+        if (vcpupin_parse(buf2, &b_info->cpumap))
+            exit(1);
+        free(buf2);
+    }
+
     if (!xlu_cfg_get_long (config, "memory", &l, 0)) {
         b_info->max_memkb = l * 1024;
         b_info->target_memkb = b_info->max_memkb;
@@ -3357,56 +3441,6 @@ int main_button_press(int argc, char **a
     return 0;
 }
 
-static void print_bitmap(uint8_t *map, int maplen, FILE *stream)
-{
-    int i;
-    uint8_t pmap = 0, bitmask = 0;
-    int firstset = 0, state = 0;
-
-    for (i = 0; i < maplen; i++) {
-        if (i % 8 == 0) {
-            pmap = *map++;
-            bitmask = 1;
-        } else bitmask <<= 1;
-
-        switch (state) {
-        case 0:
-        case 2:
-            if ((pmap & bitmask) != 0) {
-                firstset = i;
-                state++;
-            }
-            continue;
-        case 1:
-        case 3:
-            if ((pmap & bitmask) == 0) {
-                fprintf(stream, "%s%d", state > 1 ? "," : "", firstset);
-                if (i - 1 > firstset)
-                    fprintf(stream, "-%d", i - 1);
-                state = 2;
-            }
-            continue;
-        }
-    }
-    switch (state) {
-        case 0:
-            fprintf(stream, "none");
-            break;
-        case 2:
-            break;
-        case 1:
-            if (firstset == 0) {
-                fprintf(stream, "any cpu");
-                break;
-            }
-        case 3:
-            fprintf(stream, "%s%d", state > 1 ? "," : "", firstset);
-            if (i - 1 > firstset)
-                fprintf(stream, "-%d", i - 1);
-            break;
-    }
-}
-
 static void print_vcpuinfo(uint32_t tdomid,
                            const libxl_vcpuinfo *vcpuinfo,
                            uint32_t nr_cpus)
@@ -3511,7 +3545,7 @@ static int vcpupin_parse(char *cpu, libx
     int i, ret = 0;
 
     if (!strcmp(cpu, "all")) {
-        memset(cpumap->map, -1, cpumap->size);
+        libxl_cpumap_set_any(cpumap);
         return 0;
     }
 

[-- Attachment #1.2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

[-- Attachment #2: Type: text/plain, Size: 138 bytes --]

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

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCHv2 1 of 2] libxl: extend pCPUs specification for vcpu-pin.
  2012-01-23 18:21 ` [PATCHv2 1 of 2] libxl: extend pCPUs specification for vcpu-pin Dario Faggioli
@ 2012-01-25 10:19   ` Ian Campbell
  2012-01-25 10:47     ` Dario Faggioli
  0 siblings, 1 reply; 8+ messages in thread
From: Ian Campbell @ 2012-01-25 10:19 UTC (permalink / raw)
  To: Dario Faggioli; +Cc: George Dunlap, Juergen Gross, xen-devel, Ian Jackson

On Mon, 2012-01-23 at 18:21 +0000, Dario Faggioli wrote:
> Allow for "^<cpuid>" syntax while specifying the pCPUs list
> during a vcpu-pin. This enables doing the following:
> 
>  xl vcpu-pin 1 1 0-4,^2
> 
> and achieving:
> 
>  xl vcpu-list
>  Name                                ID  VCPU   CPU State   Time(s) CPU Affinity
>  ...
>  Squeeze_pv                           1     1    3   -b-       2.4  0-1,3-4
>  ...
> 
> Signed-off-by: Dario Faggioli <dario.faggioli@citrix.com>

Acked-by: Ian Campbell <ian.campbell@citrix.com>

Is 0-4,^2-3 (== 0-1,4) a useful thing to want to write? I don't think it
should block this patch going in though.

Ian.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCHv2 2 of 2] libxl: allow for specifying the CPU affinity in the config file.
  2012-01-23 18:22 ` [PATCHv2 2 of 2] libxl: allow for specifying the CPU affinity in the config file Dario Faggioli
@ 2012-01-25 10:28   ` Ian Campbell
  2012-01-25 10:44     ` Dario Faggioli
  0 siblings, 1 reply; 8+ messages in thread
From: Ian Campbell @ 2012-01-25 10:28 UTC (permalink / raw)
  To: Dario Faggioli; +Cc: George Dunlap, Juergen Gross, xen-devel, Ian Jackson

On Mon, 2012-01-23 at 18:22 +0000, Dario Faggioli wrote:
> Enable CPU affinity specification in a VM's config file with the
> exact syntax `xl vcpu-pin' provides.
> 
> Signed-off-by: Dario Faggioli <dario.faggioli@citrix.com>
> 
> diff -r d76603510485 tools/libxl/libxl.c
> --- a/tools/libxl/libxl.c	Mon Jan 23 18:02:42 2012 +0000
> +++ b/tools/libxl/libxl.c	Mon Jan 23 18:02:47 2012 +0000
> @@ -2663,6 +2663,20 @@ int libxl_set_vcpuaffinity(libxl_ctx *ct
>      return 0;
>  }
>  
> +int libxl_set_vcpuaffinity_all(libxl_ctx *ctx, uint32_t domid,
> +                               unsigned int max_vcpus, libxl_cpumap *cpumap)
> +{
> +    int i, rc = 0;
> +
> +    for (i = 0; i < max_vcpus; i++) 
> +        if (libxl_set_vcpuaffinity(ctx, domid, i, cpumap)) {
> +            LIBXL__LOG(ctx, LIBXL__LOG_WARNING, "no affinity for cpu %d", i);

"failed to set affinity for ..." would better describe what had happened.

> +            rc = ERROR_FAIL;
> +        }
> +    }
> +    return rc;
> +}
> +
>  int libxl_set_vcpuonline(libxl_ctx *ctx, uint32_t domid, libxl_cpumap *cpumap)
>  {
>      GC_INIT(ctx);
[...]
>                                           if (libxl_cpumap_test(&(m), v))
> diff -r d76603510485 tools/libxl/xl_cmdimpl.c
> --- a/tools/libxl/xl_cmdimpl.c	Mon Jan 23 18:02:42 2012 +0000
> +++ b/tools/libxl/xl_cmdimpl.c	Mon Jan 23 18:02:47 2012 +0000
> @@ -288,16 +288,72 @@ static void dolog(const char *file, int 
>          libxl_write_exactly(NULL, logfile, s, rc, NULL, NULL);
>  }
>  
> +static void print_bitmap(uint8_t *map, int maplen, FILE *stream)
> +{
[...]

I assumed this was pure code motion so I didn't read it.

> +}
> +
>  static void printf_info(int domid,
>                          libxl_domain_config *d_config,
>                          libxl_device_model_info *dm_info)
>  {
> -    int i;
> +    int i, nr_cpus = -1;
>      libxl_dominfo info;
> +    libxl_physinfo physinfo;
>  
>      libxl_domain_create_info *c_info = &d_config->c_info;
>      libxl_domain_build_info *b_info = &d_config->b_info;
>  
> +    if (libxl_get_physinfo(ctx, &physinfo) == 0)
> +        nr_cpus = physinfo.nr_cpus;
> +    else
> +        fprintf(stderr, "libxl_physinfo failed.\n");
> +
>      printf("(domain\n\t(domid %d)\n", domid);
>      printf("\t(create_info)\n");
>      printf("\t(hvm %d)\n", c_info->type == LIBXL_DOMAIN_TYPE_HVM);
> @@ -328,6 +384,9 @@ static void printf_info(int domid,
>  
>      printf("\t(build_info)\n");
>      printf("\t(max_vcpus %d)\n", b_info->max_vcpus);
> +    printf("\t(CPU affinity ");
> +    print_bitmap(b_info->cpumap.map, nr_cpus, stdout);

If libxl_get_physinfo failed then nr_cpus would == -1 here.

However I don't think it is even necessary to extend this (legacy) sexp
any further. I'm about to send a patch which will use the print the json
representation (which is autogenerated).

If we were to extend it then it should match the xend/xm output since
it's only purpose is for xm compatibility.

> +    printf(")\n");
>      printf("\t(tsc_mode %s)\n", libxl_tsc_mode_to_string(b_info->tsc_mode));
>      printf("\t(max_memkb %d)\n", b_info->max_memkb);
>      printf("\t(target_memkb %d)\n", b_info->target_memkb);
> @@ -569,6 +628,8 @@ static void split_string_into_string_lis
>      free(s);
>  }
>  
> +static int vcpupin_parse(char *cpu, libxl_cpumap *cpumap);

There are no calls to vcpupin_parse added after this point by this patch
so is this necessary? I'd prefer moving the function up in any case or
at least declaring all the forward references near the top of the file.

Ian.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCHv2 2 of 2] libxl: allow for specifying the CPU affinity in the config file.
  2012-01-25 10:28   ` Ian Campbell
@ 2012-01-25 10:44     ` Dario Faggioli
  0 siblings, 0 replies; 8+ messages in thread
From: Dario Faggioli @ 2012-01-25 10:44 UTC (permalink / raw)
  To: Ian Campbell; +Cc: George Dunlap, Juergen Gross, xen-devel, Ian Jackson


[-- Attachment #1.1: Type: text/plain, Size: 1953 bytes --]

On Wed, 2012-01-25 at 10:28 +0000, Ian Campbell wrote: 
> > +int libxl_set_vcpuaffinity_all(libxl_ctx *ctx, uint32_t domid,
> > +                               unsigned int max_vcpus, libxl_cpumap *cpumap)
> > +{
> > +    int i, rc = 0;
> > +
> > +    for (i = 0; i < max_vcpus; i++) 
> > +        if (libxl_set_vcpuaffinity(ctx, domid, i, cpumap)) {
> > +            LIBXL__LOG(ctx, LIBXL__LOG_WARNING, "no affinity for cpu %d", i);
> 
> "failed to set affinity for ..." would better describe what had happened.
> 
Ok.

> > +static void print_bitmap(uint8_t *map, int maplen, FILE *stream)
> > +{
> [...]
> 
> I assumed this was pure code motion so I didn't read it.
> 
It is.

> > @@ -328,6 +384,9 @@ static void printf_info(int domid,
> >  
> >      printf("\t(build_info)\n");
> >      printf("\t(max_vcpus %d)\n", b_info->max_vcpus);
> > +    printf("\t(CPU affinity ");
> > +    print_bitmap(b_info->cpumap.map, nr_cpus, stdout);
> 
> If libxl_get_physinfo failed then nr_cpus would == -1 here.
> 
> However I don't think it is even necessary to extend this (legacy) sexp
> any further. I'm about to send a patch which will use the print the json
> representation (which is autogenerated).
> 
Ok, then I'll drop this.

> > +static int vcpupin_parse(char *cpu, libxl_cpumap *cpumap);
> 
> There are no calls to vcpupin_parse added after this point by this patch
> so is this necessary? I'd prefer moving the function up in any case or
> at least declaring all the forward references near the top of the file.
> 
Oops. I thought I removed all these fwd-decls. Sorry, seems this one
escaped... Will nuke it. :-)

Thanks,
Dario

-- 
<<This happens because I choose it to happen!>> (Raistlin Majere)
-------------------------------------------------------------------
Dario Faggioli, Ph.D, http://retis.sssup.it/people/faggioli
Senior Software Engineer, Citrix Systems R&D Ltd., Cambridge (UK)



[-- Attachment #1.2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

[-- Attachment #2: Type: text/plain, Size: 138 bytes --]

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

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCHv2 1 of 2] libxl: extend pCPUs specification for vcpu-pin.
  2012-01-25 10:19   ` Ian Campbell
@ 2012-01-25 10:47     ` Dario Faggioli
  2012-01-25 11:06       ` Dario Faggioli
  0 siblings, 1 reply; 8+ messages in thread
From: Dario Faggioli @ 2012-01-25 10:47 UTC (permalink / raw)
  To: Ian Campbell; +Cc: George Dunlap, Juergen Gross, xen-devel, Ian Jackson


[-- Attachment #1.1: Type: text/plain, Size: 761 bytes --]

On Wed, 2012-01-25 at 10:19 +0000, Ian Campbell wrote: 
> > Signed-off-by: Dario Faggioli <dario.faggioli@citrix.com>
> 
> Acked-by: Ian Campbell <ian.campbell@citrix.com>
> 
> Is 0-4,^2-3 (== 0-1,4) a useful thing to want to write? I don't think it
> should block this patch going in though.
> 
As I have to respin, I don't think that wouldn't be so hard to add. I'll
give it a try and see if I cat put it there like super-quick and repost
both patches...

Thanks,
Dario

-- 
<<This happens because I choose it to happen!>> (Raistlin Majere)
-------------------------------------------------------------------
Dario Faggioli, Ph.D, http://retis.sssup.it/people/faggioli
Senior Software Engineer, Citrix Systems R&D Ltd., Cambridge (UK)



[-- Attachment #1.2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

[-- Attachment #2: Type: text/plain, Size: 138 bytes --]

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

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCHv2 1 of 2] libxl: extend pCPUs specification for vcpu-pin.
  2012-01-25 10:47     ` Dario Faggioli
@ 2012-01-25 11:06       ` Dario Faggioli
  0 siblings, 0 replies; 8+ messages in thread
From: Dario Faggioli @ 2012-01-25 11:06 UTC (permalink / raw)
  To: Ian Campbell; +Cc: George Dunlap, Juergen Gross, xen-devel, Ian Jackson


[-- Attachment #1.1: Type: text/plain, Size: 483 bytes --]

On Wed, 2012-01-25 at 11:47 +0100, Dario Faggioli wrote: 
> As I have to respin, I don't think that wouldn't be so hard to add. 
                      ^I don't think that _would_ be so hard to add.

:-)

-- 
<<This happens because I choose it to happen!>> (Raistlin Majere)
-------------------------------------------------------------------
Dario Faggioli, Ph.D, http://retis.sssup.it/people/faggioli
Senior Software Engineer, Citrix Systems R&D Ltd., Cambridge (UK)



[-- Attachment #1.2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

[-- Attachment #2: Type: text/plain, Size: 138 bytes --]

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

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2012-01-25 11:06 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-01-23 18:10 [PATCHv2 0 of 2] libxl: Extend CPU affinity specification and enable it in config file Dario Faggioli
2012-01-23 18:21 ` [PATCHv2 1 of 2] libxl: extend pCPUs specification for vcpu-pin Dario Faggioli
2012-01-25 10:19   ` Ian Campbell
2012-01-25 10:47     ` Dario Faggioli
2012-01-25 11:06       ` Dario Faggioli
2012-01-23 18:22 ` [PATCHv2 2 of 2] libxl: allow for specifying the CPU affinity in the config file Dario Faggioli
2012-01-25 10:28   ` Ian Campbell
2012-01-25 10:44     ` Dario Faggioli

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).