[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 4 of 4] Support new xl command cpupool-numa-split
On 12/08/10 12:16, Ian Campbell wrote: On Fri, 2010-11-26 at 07:10 +0000, Juergen Gross wrote:+ + if (libxl_cpumap_alloc(&ctx,&cpumap)) { + fprintf(stderr, "Failed to allocate cpumap\n"); + return -ERROR_FAIL; + } + + poolinfo = libxl_list_cpupool(&ctx,&n_pools); + if (!poolinfo) { + fprintf(stderr, "error getting cpupool info\n"); + return -ERROR_NOMEM; + } + poolid = poolinfo[0].poolid; + schedid = poolinfo[0].sched_id; + libxl_for_each_cpu(c, poolinfo[0].cpumap) + if (libxl_cpumap_test(&poolinfo[0].cpumap, c)) + libxl_cpumap_set(&cpumap, c);Can the libxl_cpumap_alloc and this loop be deferred until after the check and bail for n_pools> 1? Sure. There seems to be no way to find out the number of pools without also getting all the info about them, which is a shame. Taking a quick look I couldn't spot any way how to find out the number of domains without also getting all the info about them, too... + /* Reset Pool-0 to 1st node */ + node = topology->nodemap.array[0]; + libxl_for_each_cpu(c, cpumap) { + if (!libxl_cpumap_test(&cpumap, c)&& (c< topology->nodemap.entries)&& + (topology->nodemap.array[c] == node)) { + ret = -libxl_cpupool_cpuadd(&ctx, poolid, c); + if (ret) { + fprintf(stderr, "error on adding cpu to Pool-0\n"); + goto out; + } + libxl_cpumap_reset(&freemap, c);(nt really related to this series but I wish this was called libxl_cpumap_clear, I had to go check it wasn't resetting the whole map or something...) Hmm, do you really think so? It would make me to check whether it is clearing the whole map :-) I think the second parameter is a strong hint :-) + } + } + libxl_for_each_cpu(c, cpumap) { + if (libxl_cpumap_test(&cpumap, c)&& (c< topology->nodemap.entries)&& + (topology->nodemap.array[c] != node)) { + ret = -libxl_cpupool_cpuremove(&ctx, poolid, c); + if (ret) { + fprintf(stderr, "error on removing cpu from Pool-0\n"); + goto out; + } + libxl_cpumap_set(&freemap, c); + } + }Can this loop be merged with the preceding loop, with the body being the else case of the if? No. I have to add new cpus first to avoid a cpupool without cpus in between. + for (;;) { + node = -1; + libxl_for_each_cpu(c, freemap) { + if (libxl_cpumap_test(&freemap, c)&& (node == -1)) { + node = topology->nodemap.array[c]; + } + libxl_cpumap_reset(&cpumap, c); + if ((node>= 0)&& libxl_cpumap_test(&freemap, c)&& + (c< topology->nodemap.entries)&& (topology->nodemap.array[c] == node)) { + libxl_cpumap_reset(&freemap, c); + libxl_cpumap_set(&cpumap, c); + } + } + if (node == -1) + break; + + snprintf(name, 15, "Pool-node%d", node);Do we want to rename Pool-0 at some point too or do we rely on that name elsewhere? Good question. There is a hard coded "Pool-0" reference in libxl, but this could easily be changed. I'm not sure about implications in xm/xend. I'll check this. Juergen -- Juergen Gross Principal Developer Operating Systems TSP ES&S SWE OS6 Telephone: +49 (0) 89 3222 2967 Fujitsu Technology Solutions e-mail: juergen.gross@xxxxxxxxxxxxxx Domagkstr. 28 Internet: ts.fujitsu.com D-80807 Muenchen Company details: ts.fujitsu.com/imprint.html _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |