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

Re: [Libvir] CPU pinning of domains at creation time

Daniel Veillard wrote:

On Thu, Oct 11, 2007 at 10:45:44AM -0500, Ryan Harper wrote:
* Daniel Veillard <veillard redhat com> [2007-10-11 08:01]:
  - for the mapping at the XML level I suggest to use a simple extension
    to the <vcpu>n</vcpu> and extend it to
    <vcpu cpuset='2,3'>n</vcpu>
    with a limited syntax which is just the comma separated list of
    allowed CPU numbers (if the code actually detects such a cpuset is
    in effect i.e. in general this won't be added).
I think we should support the same cpuset notation that Xen supports,
which means including ranges (1-4) and negation (^1).  These two
features make describing large ranges much more compact.

 Enclosed is a rewrite of the cpuset notations, which can plug as
a replacement for the current code in xend_internals, it should support
the existing syntax currently used to parse xend topology strings,
and also alllow ranges and negation. It's not as a patch but as a
standlone replacement program which can be used to test (in spirit
of the old topology.c one from Beth).
 I guess that's okay, check the test output (and possibly extend the
test cases in tests array), It tried to think of everything including
the weird \\n python xend bug and the 'no cpus' in cell cases.
Just dump tst.c in libvirt/src, add $(INCLUDES) to the $(CC) $(CFLAGS) -I../include -o tst tst.c .... line and run
make tst
and check the output (also enclosed),
 The parsing is done in a slightly different way, but that should
not change the output,



   cur = str;
   while (*cur != 0) {
	 * Find the next NUMA cell described in the xend output
       cur = strstr(cur, "node");
	if (cur == NULL)
	cur += 4;
       cell = parseCpuNumber(&cur, maxcpu);
This is certainly a nit, but I might change parseCpuNumber to parseNumber, since it looks a little odd that you are getting the cell id from the cpu number. A nit to be sure!

	if (cell < 0)
	    goto parse_error;
	if (*cur != ':')
	    goto parse_error;
	if (!strncmp (cur, "no cpus", 7)) {
	    nb_cpus = 0;
	    for (cpu = 0;cpu < maxcpu;cpu++)
	        cpuset[cpu] = 0;
	} else {
	    nb_cpus = parseCpuSet(conn, &cur, 'n', cpuset, maxcpu);
Other than our discussion on #virt about handling of ^N specifications in parseCpuSet, looks good!


Elizabeth Kon (Beth)
IBM Linux Technology Center
Open Hypervisor Team
email: eak us ibm com

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