qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH V5 01/12] NUMA: add NumaOptions, NumaNodeOptions


From: Paolo Bonzini
Subject: Re: [Qemu-devel] [PATCH V5 01/12] NUMA: add NumaOptions, NumaNodeOptions and NumaMemOptions
Date: Wed, 17 Jul 2013 17:26:20 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130625 Thunderbird/17.0.7

Il 17/07/2013 17:24, Laszlo Ersek ha scritto:
> On 07/17/13 16:44, Paolo Bonzini wrote:
>> Il 17/07/2013 16:33, Laszlo Ersek ha scritto:
>>>>>>> opts-visitor can handle lists of simple scalar types. Ie. it can do
>>>>>>> -numa node,nodeid=3,cpus=3-4,cpus=9-10. It can't save the parsing of
>>>>>>> intervals (eg. 3-4).
>>>>>
>>>>> Saving the parsing of intervals is not necessary for this use case.  So
>>>>> if we can make it '*cpus':['int'], we should.
>>>>>
>>>>> But is it the opts-visitor "can handle" lists of integers, or does code
>>>>> have to be written?  If the latter, can you whip up a prototype?
>>> No extra code needs to be written. The current use case is
>>> NetdevUserOptions.{dnssearch,hostfwd,guestfwd}; see commit 094f15c5, and
>>> (by Klaus Stengel) commit 63d2960b.
>>
>> This is to handle lists, but want about converting
>>
>>   cpus=3-4,cpus=9-10
>>
>> to
>>
>>   'cpus': [3,4,9,10]
> 
> Oh, that. :) That does need extra code. Something along the lines of:
> 
> (a), in the JSON, reuse the existing String wrapper type, and make
> "cpus" an optional list of String[s]:
> 
> { 'type': 'NumaNodeOptions',
>   'data': {
>    '*nodeid':         'uint16',
>    '*cpus':           ['String'] }}
> 
> (b) in the code, traverse the StringList like net_init_slirp_configs()
> or slirp_dnssearch() does. Parse each element as an interval, set bit
> ranges / report errors.
> 
>     static int numa_node_parse_cpu_range(int nodeid,
>                                          const char *cpu_range)
>     {
>         /* what numa_node_parse_cpus() does in 02/12 */
>     }
> 
>     static int numa_node_parse(const NumaNodeOptions *opts)
>     {
>         const StringList *cpu_range;
> 
>         /* not sure how to handle the (!opts->has_nodeid) case; let's
>          * assume we have a nodeid here */
> 
>         if (opts->nodeid >= MAX_NODES) {
>             fprintf(stderr,
>                     "NUMA nodeid %d reaches / exceeds maximum %d\n",
>                     opts->nodeid, MAX_NODES);
>             return -1;
>         }
> 
>         for (cpu_range = opts->cpus;
>              cpu_range != NULL;
>              cpu_range = cpu_range->next) {
>             int ret;
> 
>             ret = numa_node_parse_cpu_range(opts->nodeid,
>                                             cpu_range->value->str);
>             if (ret < 0) {
>                 return ret;
>             }
>         }
>         return 0;
>     }
> 
> Did you mean something like this by prototype?

Yes, though I guess Wanlong could do this by himself.  A more
interesting prototype is "how to add code to OptsVisitor that parses
intervals when it sees ['int']", and this where you can help the most.

Paolo




reply via email to

[Prev in Thread] Current Thread [Next in Thread]