Kashyap Chamarthy <kcham...@redhat.com> writes: > The intended functionality of QMP command `cpu-add` is replaced by > `device_add` (and `query-hotpluggable-cpus`). So let's deprecate > `cpu-add`. > > A complete example of vCPU hotplug with the recommended way, using > `device_add`: > > (1) Launch QEMU as follows (note that the "maxcpus" is mandatory to > allow vCPU hotplug): > > $ qemu-system-x86_64 -display none -no-user-config -m 2048 \ > -nodefaults -monitor stdio -machine pc,accel=kvm,usb=off \ > -smp 1,maxcpus=2 -cpu IvyBridge-IBRS \ > -blockdev > node-name=node-Base,driver=qcow2,file.driver=file,file.filename=./base.qcow2 \ > -device virtio-blk,drive=node-Base,id=virtio0 -qmp > unix:/tmp/qmp-sock,server,nowait > > (2) Run 'qmp-shell' (located in the source tree) to connect to the > just-launched QEMU: > > $> ./qmp/qmp-shell -p -v /tmp/qmp-sock > [...] > (QEMU) > > (3) Check which socket is free to allow hotplugging a CPU: > > (QEMU) query-hotpluggable-cpus > { > "execute":"query-hotpluggable-cpus", > "arguments":{ > > } > } > { > "return":[ > { > "type":"IvyBridge-IBRS-x86_64-cpu", > "vcpus-count":1, > "props":{ > "socket-id":1, > "core-id":0, > "thread-id":0 > } > }, > { > "qom-path":"/machine/unattached/device[0]", > "type":"IvyBridge-IBRS-x86_64-cpu", > "vcpus-count":1, > "props":{ > "socket-id":0, > "core-id":0, > "thread-id":0 > } > } > ] > } > (QEMU)
When I try this, JSON gets formatted slightly differently: { "execute": "query-hotpluggable-cpus", "arguments": {} } { "return": [ { "type": "IvyBridge-IBRS-x86_64-cpu", "vcpus-count": 1, "props": { "socket-id": 1, "core-id": 0, "thread-id": 0 } }, { "qom-path": "/machine/unattached/device[0]", "type": "IvyBridge-IBRS-x86_64-cpu", "vcpus-count": 1, "props": { "socket-id": 0, "core-id": 0, "thread-id": 0 } } ] } How come? > > (4) We can see that socket 1 is free, so use `device_add` to hotplug > "IvyBridge-IBRS-x86_64-cpu": > > (QEMU) device_add id=cpu-2 driver=IvyBridge-IBRS-x86_64-cpu socket-id=1 > core-id=0 thread-id=0 > { > "execute": "device_add", > "arguments": { > "socket-id": 1, > "driver": "IvyBridge-IBRS-x86_64-cpu", > "id": "cpu-2", > "core-id": 0, > "thread-id": 0 > } > } > { > "return": {} > } > (QEMU) > > (5) Optionally, run QMP `query-cpus-fast` for some details about the > vCPUs. Publishing this in a commit message is much better than not publishing it. Still, can we find a better home somewhere under docs/? > Suggested-by: Eduardo Habkost <ehabk...@redhat.com > Signed-off-by: Kashyap Chamarthy <kcham...@redhat.com> > --- > Also shouldn't we update tests/cpu-plug-test.c to make it use > `device_add`. Can take a stab at it, if you'd like me to. Yes, please. > --- > qapi/misc.json | 6 +++++- > qemu-deprecated.texi | 5 +++++ > 2 files changed, 10 insertions(+), 1 deletion(-) > > diff --git a/qapi/misc.json b/qapi/misc.json > index d450cfef21..83bc9ad0ee 100644 > --- a/qapi/misc.json > +++ b/qapi/misc.json > @@ -1104,7 +1104,11 @@ > ## > # @cpu-add: > # > -# Adds CPU with specified ID > +# Adds CPU with specified ID. > +# > +# Notes: This command is deprecated. The `device_add` command should be > +# used instead. See the `query-hotpluggable-cpus` command for > +# details. > # > # @id: ID of CPU to be created, valid values [0..max_cpus) > # Eduardo pointed out that query-hotpluggable-cpus's documentation is lacking. Add a suitable TODO there? > diff --git a/qemu-deprecated.texi b/qemu-deprecated.texi > index 1b9c007f12..9c6d70d43a 100644 > --- a/qemu-deprecated.texi > +++ b/qemu-deprecated.texi > @@ -155,6 +155,11 @@ The ``query-cpus'' command is replaced by the > ``query-cpus-fast'' command. > The ``arch'' output member of the ``query-cpus-fast'' command is > replaced by the ``target'' output member. > > +@subsection cpu-add (since 3.1) > + > +The intended functionality of ``cpu-add'' command, which is the ability > +to hot-plug vCPUs, can now be achieved by the ``device_add'' command. > + For me, "now" suggests device_add can achieve this since 3.1. Scratch "now"? > @section System emulator devices > > @subsection ivshmem (since 2.6.0)