Re: [Qemu-devel] [PATCH v3 0/9] enable numa configuration before machine_init() from QMP

2018-02-27 Thread Eric Blake

On 02/27/2018 10:36 AM, Igor Mammedov wrote:

On Fri, 16 Feb 2018 13:37:12 +0100
Igor Mammedov  wrote:

Eric,

Adding you to CC list (git send-mail somehow haven't noticed you in cover 
letter).


Actually, I did get CC'd on the original cover letter, but you are 
reading the copy that hit the list, which means we are suffering from 
mailman's bug that it rewrites emails sent through the list to drop cc 
of readers that requested no duplicates (I really detest that mailman 2 
corrupts cc's as a side effect of what is otherwise a potentially useful 
knob, and can only hope that mailman 3 has split its behavior into two 
separate knobs).




Could you please look at QAPI/QMP parts of this series.


Yes, starting a read-through now.

--
Eric Blake, Principal Software Engineer
Red Hat, Inc.   +1-919-301-3266
Virtualization:  qemu.org | libvirt.org



Re: [Qemu-devel] [PATCH v3 0/9] enable numa configuration before machine_init() from QMP

2018-02-27 Thread Igor Mammedov
On Fri, 16 Feb 2018 13:37:12 +0100
Igor Mammedov  wrote:

Eric,

Adding you to CC list (git send-mail somehow haven't noticed you in cover 
letter).

Could you please look at QAPI/QMP parts of this series.

> v1->v3:
>   * introduce PRECONFIG runstate with -preconfig option.
> it's cleaner to manage transitions and do checks
> than reusing existing PRELAUNCH state.
>   * extend QAPI schema commands with 'runstates' keyword,
> so that it would be possible to specify in command definition
> when it is valid to execute.
> (python changes a bit hackery, since I have little to
>  no idea how it should work)
>   * add preconfig QMP and set-numa-node tests
>   * make mutually exclusive -preconfig and -incoming options,
> for simplicity sake. Shouldn't be problem as target can
> be starter with pure CLI, since mapping on source is
> already known.
>   * Drop HMP part and leave only QMP in preconfig state.
> 
> 
> Series allows to configure NUMA mapping at runtime using QMP
> interface. For that to happen it introduces a new '-preconfig' CLI option
> which allows to pause QEMU before machine_init() is run and
> adds new set-numa-node QMP command which in conjunction with
> query-hotpluggable-cpus allows to configure NUMA mapping for cpus.
> 
> Later we can modify other commands to run early, for example device_add.
> I recall SPAPR had problem when libvirt started QEMU with -S and, while it's
> paused, added CPUs with device_add. Intent was to coldplug CPUs (but at that
> stage it's considered hotplug already), so SPAPR had to work around the issue.
> 
> Example of configuration session:
> $QEMU -smp 2 -preconfig ...
> 
> QMP:
> # get CPUs layout for current target/machine/CLI
> -> {'execute': 'query-hotpluggable-cpus' }  
> <- {'return': [
>{'props': {'core-id': 0, 'thread-id': 0, 'socket-id': 1}, ... },
>{'props': {'core-id': 0, 'thread-id': 0, 'socket-id': 0}, ... }
>]}
> 
> # configure 1st node
> -> {'execute': 'set-numa-node', 'arguments': { 'type': 'node', 'nodeid': 0 } 
> }  
> <- {'return': {}}
> -> {'execute': 'set-numa-node', 'arguments': { 'type': 'cpu',   
>'node-id': 0, 'core-id': 0, 'thread-id': 0, 'socket-id': 1, }
>}
> <- {'return': {}}
> 
> # configure 2nd node
> -> {'execute': 'set-numa-node', 'arguments': { 'type': 'node', 'nodeid': 1 } }
> -> {'execute': 'set-numa-node', 'arguments': { 'type': 'cpu',  
>'node-id': 1, 'core-id': 0, 'thread-id': 0, 'socket-id': 0 }
>}
> <- {'return': {}}
> 
> # [optional] verify configuration
> -> {'execute': 'query-hotpluggable-cpus' }  
> <- {'return': [
>{'props': {'core-id': 0, 'thread-id': 0, 'node-id': 0, 'socket-id': 
> 1}, ... },
>{'props': {'core-id': 0, 'thread-id': 0, 'node-id': 1, 'socket-id': 
> 0}, ... }
>]}
> 
> 
> Git tree:
> https://github.com/imammedo/qemu.git qmp_preconfig_v3
> 
> Ref to v1:
> https://lists.gnu.org/archive/html/qemu-devel/2017-10/msg03583.html
> Message-Id: <1508170976-96869-1-git-send-email-imamm...@redhat.com>
>   
> CC: ebl...@redhat.com
> CC: arm...@redhat.com
> CC: ehabk...@redhat.com
> CC: pkre...@redhat.com
> CC: da...@gibson.dropbear.id.au
> CC: peter.mayd...@linaro.org
> CC: pbonz...@redhat.com
> CC: coh...@redhat.com
> 
> 
> Igor Mammedov (9):
>   numa: postpone options post-processing till machine_run_board_init()
>   numa: split out NumaOptions parsing into parse_NumaOptions()
>   CLI: add -preconfig option
>   HMP: disable monitor in preconfig state
>   QAPI: allow to specify valid runstates per command
>   tests: extend qmp test with pereconfig checks
>   QMP: permit query-hotpluggable-cpus in preconfig state
>   QMP: add set-numa-node command
>   tests: functional tests for QMP command set-numa-node
> 
>  include/qapi/qmp/dispatch.h |  5 ++-
>  include/sysemu/numa.h   |  2 +
>  include/sysemu/sysemu.h |  1 +
>  hw/core/machine.c   |  5 ++-
>  monitor.c   | 32 +--
>  numa.c  | 66 +++---
>  qapi-schema.json| 32 +--
>  qapi/qmp-dispatch.c | 39 ++
>  qapi/qmp-registry.c |  4 +-
>  qapi/run-state.json |  9 -
>  qemu-options.hx | 11 +
>  qmp.c   |  5 +++
>  scripts/qapi-commands.py| 46 -
>  scripts/qapi-introspect.py  |  2 +-
>  scripts/qapi.py | 15 ---
>  scripts/qapi2texi.py|  2 +-
>  tests/numa-test.c   | 71 
> +
>  tests/qapi-schema/doc-good.out  |  4 +-
>  tests/qapi-schema/ident-with-escape.out |  2 +-
>  tests/qapi-schema/indented-expr.out |  4 +-
>  tests/qapi-schema/qapi-schema-test.out  | 18 -
>  tests/qap

[Qemu-devel] [PATCH v3 0/9] enable numa configuration before machine_init() from QMP

2018-02-16 Thread Igor Mammedov

v1->v3:
  * introduce PRECONFIG runstate with -preconfig option.
it's cleaner to manage transitions and do checks
than reusing existing PRELAUNCH state.
  * extend QAPI schema commands with 'runstates' keyword,
so that it would be possible to specify in command definition
when it is valid to execute.
(python changes a bit hackery, since I have little to
 no idea how it should work)
  * add preconfig QMP and set-numa-node tests
  * make mutually exclusive -preconfig and -incoming options,
for simplicity sake. Shouldn't be problem as target can
be starter with pure CLI, since mapping on source is
already known.
  * Drop HMP part and leave only QMP in preconfig state.


Series allows to configure NUMA mapping at runtime using QMP
interface. For that to happen it introduces a new '-preconfig' CLI option
which allows to pause QEMU before machine_init() is run and
adds new set-numa-node QMP command which in conjunction with
query-hotpluggable-cpus allows to configure NUMA mapping for cpus.

Later we can modify other commands to run early, for example device_add.
I recall SPAPR had problem when libvirt started QEMU with -S and, while it's
paused, added CPUs with device_add. Intent was to coldplug CPUs (but at that
stage it's considered hotplug already), so SPAPR had to work around the issue.

Example of configuration session:
$QEMU -smp 2 -preconfig ...

QMP:
# get CPUs layout for current target/machine/CLI
-> {'execute': 'query-hotpluggable-cpus' }
<- {'return': [
   {'props': {'core-id': 0, 'thread-id': 0, 'socket-id': 1}, ... },
   {'props': {'core-id': 0, 'thread-id': 0, 'socket-id': 0}, ... }
   ]}

# configure 1st node
-> {'execute': 'set-numa-node', 'arguments': { 'type': 'node', 'nodeid': 0 } }
<- {'return': {}}
-> {'execute': 'set-numa-node', 'arguments': { 'type': 'cpu', 
   'node-id': 0, 'core-id': 0, 'thread-id': 0, 'socket-id': 1, }
   }
<- {'return': {}}

# configure 2nd node
-> {'execute': 'set-numa-node', 'arguments': { 'type': 'node', 'nodeid': 1 } }
-> {'execute': 'set-numa-node', 'arguments': { 'type': 'cpu',
   'node-id': 1, 'core-id': 0, 'thread-id': 0, 'socket-id': 0 }
   }
<- {'return': {}}

# [optional] verify configuration
-> {'execute': 'query-hotpluggable-cpus' }
<- {'return': [
   {'props': {'core-id': 0, 'thread-id': 0, 'node-id': 0, 'socket-id': 1}, 
... },
   {'props': {'core-id': 0, 'thread-id': 0, 'node-id': 1, 'socket-id': 0}, 
... }
   ]}


Git tree:
https://github.com/imammedo/qemu.git qmp_preconfig_v3

Ref to v1:
https://lists.gnu.org/archive/html/qemu-devel/2017-10/msg03583.html
Message-Id: <1508170976-96869-1-git-send-email-imamm...@redhat.com>
  
CC: ebl...@redhat.com
CC: arm...@redhat.com
CC: ehabk...@redhat.com
CC: pkre...@redhat.com
CC: da...@gibson.dropbear.id.au
CC: peter.mayd...@linaro.org
CC: pbonz...@redhat.com
CC: coh...@redhat.com


Igor Mammedov (9):
  numa: postpone options post-processing till machine_run_board_init()
  numa: split out NumaOptions parsing into parse_NumaOptions()
  CLI: add -preconfig option
  HMP: disable monitor in preconfig state
  QAPI: allow to specify valid runstates per command
  tests: extend qmp test with pereconfig checks
  QMP: permit query-hotpluggable-cpus in preconfig state
  QMP: add set-numa-node command
  tests: functional tests for QMP command set-numa-node

 include/qapi/qmp/dispatch.h |  5 ++-
 include/sysemu/numa.h   |  2 +
 include/sysemu/sysemu.h |  1 +
 hw/core/machine.c   |  5 ++-
 monitor.c   | 32 +--
 numa.c  | 66 +++---
 qapi-schema.json| 32 +--
 qapi/qmp-dispatch.c | 39 ++
 qapi/qmp-registry.c |  4 +-
 qapi/run-state.json |  9 -
 qemu-options.hx | 11 +
 qmp.c   |  5 +++
 scripts/qapi-commands.py| 46 -
 scripts/qapi-introspect.py  |  2 +-
 scripts/qapi.py | 15 ---
 scripts/qapi2texi.py|  2 +-
 tests/numa-test.c   | 71 +
 tests/qapi-schema/doc-good.out  |  4 +-
 tests/qapi-schema/ident-with-escape.out |  2 +-
 tests/qapi-schema/indented-expr.out |  4 +-
 tests/qapi-schema/qapi-schema-test.out  | 18 -
 tests/qapi-schema/test-qapi.py  |  6 +--
 tests/qmp-test.c| 56 ++
 vl.c| 35 +++-
 24 files changed, 401 insertions(+), 71 deletions(-)

-- 
2.7.4