[Libvir] CPU pinning of domains at creation time

beth kon eak at us.ibm.com
Thu Oct 18 02:14:56 UTC 2007


Daniel Veillard wrote:

>On Thu, Oct 11, 2007 at 10:45:44AM -0500, Ryan Harper wrote:
>  
>
>>* Daniel Veillard <veillard at 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 at us.ibm.com




More information about the libvir-list mailing list