qemu/docs/cpu-hotplug.rst
Peter Maydell 0defa86ca3 docs/cpu-hotplug.rst: Fix rST markup issues
sphinx-build complains:

docs/cpu-hotplug.rst:67: ERROR: Unexpected indentation.
docs/cpu-hotplug.rst:69: ERROR: Unexpected indentation.
docs/cpu-hotplug.rst:74: WARNING: Block quote ends without a blank line; unexpected unindent.
docs/cpu-hotplug.rst:75: WARNING: Block quote ends without a blank line; unexpected unindent.
docs/cpu-hotplug.rst:76: SEVERE: Unexpected section title.

}
{
docs/cpu-hotplug.rst:78: WARNING: Block quote ends without a blank line; unexpected unindent.

These are the result of not indicating one of the literal
blocks by finishing the preceding paragraph with the "::" marker.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Acked-by: Aleksandar Markovic <amarkovic@wavecomp.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Cleber Rosa <crosa@redhat.com>
Message-id: 20190305172139.32662-2-peter.maydell@linaro.org
Message-id: 20190228145624.24885-2-peter.maydell@linaro.org
2019-03-07 14:26:44 +00:00

142 lines
4 KiB
ReStructuredText

===================
Virtual CPU hotplug
===================
A complete example of vCPU hotplug (and hot-unplug) using QMP
``device_add`` and ``device_del``.
vCPU hotplug
------------
(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 \
-qmp unix:/tmp/qmp-sock,server,nowait
(2) Run 'qmp-shell' (located in the source tree, under: "scripts/qmp/)
to connect to the just-launched QEMU::
$> ./qmp-shell -p -v /tmp/qmp-sock
[...]
(QEMU)
(3) Find out which CPU types could be plugged, and into which sockets::
(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)
(4) The ``query-hotpluggable-cpus`` command returns an object for CPUs
that are present (containing a "qom-path" member) or which may be
hot-plugged (no "qom-path" member). From its output in step (3), we
can see that ``IvyBridge-IBRS-x86_64-cpu`` is present in socket 0,
while hot-plugging a CPU into socket 1 requires passing the listed
properties to QMP ``device_add``::
(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::
(QEMU) query-cpus-fast
{
"execute": "query-cpus-fast",
"arguments": {}
}
{
"return": [
{
"qom-path": "/machine/unattached/device[0]",
"target": "x86_64",
"thread-id": 11534,
"cpu-index": 0,
"props": {
"socket-id": 0,
"core-id": 0,
"thread-id": 0
},
"arch": "x86"
},
{
"qom-path": "/machine/peripheral/cpu-2",
"target": "x86_64",
"thread-id": 12106,
"cpu-index": 1,
"props": {
"socket-id": 1,
"core-id": 0,
"thread-id": 0
},
"arch": "x86"
}
]
}
(QEMU)
vCPU hot-unplug
---------------
From the 'qmp-shell', invoke the QMP ``device_del`` command::
(QEMU) device_del id=cpu-2
{
"execute": "device_del",
"arguments": {
"id": "cpu-2"
}
}
{
"return": {}
}
(QEMU)
.. note::
vCPU hot-unplug requires guest cooperation; so the ``device_del``
command above does not guarantee vCPU removal -- it's a "request to
unplug". At this point, the guest will get a System Control
Interrupt (SCI) and calls the ACPI handler for the affected vCPU
device. Then the guest kernel will bring the vCPU offline and tell
QEMU to unplug it.