Daniel Veillard wrote:
On Thu, Oct 11, 2007 at 10:45:44AM -0500, Ryan Harper wrote:
>* Daniel Veillard <veillard(a)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
./tst
and check the output (also enclosed),
The parsing is done in a slightly different way, but that should
not change the output,
Daniel
...
------------------------------------------------------------------------
cur = str;
while (*cur != 0) {
/*
* Find the next NUMA cell described in the xend output
*/
cur = strstr(cur, "node");
if (cur == NULL)
break;
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;
skipSpaces(&cur);
if (*cur != ':')
goto parse_error;
cur++;
skipSpaces(&cur);
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(a)us.ibm.com