From: Laszlo Ersek <lersek@redhat.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: aliguori@us.ibm.com, ehabkost@redhat.com,
peter.huangpeng@huawei.com, qemu-devel@nongnu.org,
bsd@redhat.com, y-goto@jp.fujitsu.com, lcapitulino@redhat.com,
afaerber@suse.de, Wanlong Gao <gaowanlong@cn.fujitsu.com>
Subject: Re: [Qemu-devel] [PATCH V5 01/12] NUMA: add NumaOptions, NumaNodeOptions and NumaMemOptions
Date: Wed, 17 Jul 2013 17:45:37 +0200 [thread overview]
Message-ID: <51E6BC21.9020701@redhat.com> (raw)
In-Reply-To: <51E6B79C.4040909@redhat.com>
On 07/17/13 17:26, Paolo Bonzini wrote:
> 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.
Do you want each element of the range present in the flat list, or just
the boundaries? (The above example, ie [3..4]U[9..10] doesn't
distinguish between these two.)
If the list contains the boundaries only, that's more frugal but
requires smarter code. If the list contains all elements, then big
ranges will result in huge lists (which are then easy to handle piecewise).
Do you also want a<=b checking for [a,b]? (That would imply "inclusive"
on both sides and not allow empty sets easily.)
This is going to be a huge hack, but I can already express the condition
"I'm in a list and looking for the next element as int" in the code. So
maybe I could force some more state into OptsVisitor (specifically
opts_type_int()/opts_type_uint64() and lookup_scalar()) and fake extra
elements.
Better: I could pop "a-b" off "ov->repeated_opts", return "a" (after
parsing), and push back "b". Then "b" would not differ from the current
"individual int" case, and I wouldn't have to add extra state to
maintain between calls.
You just torpedoed planned review efforts for today / tomorrow :)
Laszlo
next prev parent reply other threads:[~2013-07-17 15:43 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-17 9:29 [Qemu-devel] [PATCH V5 00/12] Add support for binding guest numa nodes to host numa nodes Wanlong Gao
2013-07-17 9:29 ` [Qemu-devel] [PATCH V5 01/12] NUMA: add NumaOptions, NumaNodeOptions and NumaMemOptions Wanlong Gao
2013-07-17 10:35 ` Laszlo Ersek
2013-07-17 11:11 ` Paolo Bonzini
2013-07-17 13:16 ` Wanlong Gao
2013-07-17 12:24 ` Eric Blake
2013-07-17 13:57 ` Laszlo Ersek
2013-07-17 14:20 ` Paolo Bonzini
2013-07-17 14:33 ` Laszlo Ersek
2013-07-17 14:44 ` Paolo Bonzini
2013-07-17 15:24 ` Laszlo Ersek
2013-07-17 15:26 ` Paolo Bonzini
2013-07-17 15:45 ` Laszlo Ersek [this message]
2013-07-17 15:54 ` Paolo Bonzini
2013-07-17 9:29 ` [Qemu-devel] [PATCH V5 02/12] NUMA: split -numa option Wanlong Gao
2013-07-17 11:00 ` Laszlo Ersek
2013-07-17 11:14 ` Paolo Bonzini
2013-07-17 11:13 ` Paolo Bonzini
2013-07-17 9:29 ` [Qemu-devel] [PATCH V5 03/12] NUMA: move numa related code to numa.c Wanlong Gao
2013-07-17 9:29 ` [Qemu-devel] [PATCH V5 04/12] NUMA: Add numa_info structure to contain numa nodes info Wanlong Gao
2013-07-17 9:29 ` [Qemu-devel] [PATCH V5 05/12] NUMA: Add Linux libnuma detection Wanlong Gao
2013-07-17 9:29 ` [Qemu-devel] [PATCH V5 06/12] NUMA: parse guest numa nodes memory policy Wanlong Gao
2013-07-17 12:31 ` Eric Blake
2013-07-17 13:12 ` Wanlong Gao
2013-07-17 9:29 ` [Qemu-devel] [PATCH V5 07/12] NUMA: split out the common range parser Wanlong Gao
2013-07-17 9:29 ` [Qemu-devel] [PATCH V5 08/12] NUMA: set guest numa nodes memory policy Wanlong Gao
2013-07-17 9:29 ` [Qemu-devel] [PATCH V5 09/12] NUMA: add qmp command set-mem-policy to set memory policy for NUMA node Wanlong Gao
2013-07-17 12:36 ` Eric Blake
2013-07-17 13:22 ` Wanlong Gao
2013-07-17 9:29 ` [Qemu-devel] [PATCH V5 10/12] NUMA: add hmp command set-mem-policy Wanlong Gao
2013-07-17 9:29 ` [Qemu-devel] [PATCH V5 11/12] NUMA: add qmp command query-numa Wanlong Gao
2013-07-17 12:41 ` Eric Blake
2013-07-17 13:24 ` Wanlong Gao
2013-07-17 9:29 ` [Qemu-devel] [PATCH V5 12/12] NUMA: convert hmp command info_numa to use qmp command query_numa Wanlong Gao
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=51E6BC21.9020701@redhat.com \
--to=lersek@redhat.com \
--cc=afaerber@suse.de \
--cc=aliguori@us.ibm.com \
--cc=bsd@redhat.com \
--cc=ehabkost@redhat.com \
--cc=gaowanlong@cn.fujitsu.com \
--cc=lcapitulino@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.huangpeng@huawei.com \
--cc=qemu-devel@nongnu.org \
--cc=y-goto@jp.fujitsu.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).