qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Eduardo Habkost <ehabkost@redhat.com>
To: Peter Maydell <peter.maydell@linaro.org>, qemu-devel@nongnu.org
Cc: Marcel Apfelbaum <marcel.apfelbaum@gmail.com>,
	Kashyap Chamarthy <kchamart@redhat.com>
Subject: [Qemu-devel] [PULL 03/24] docs: Document vCPU hotplug procedure
Date: Tue, 11 Dec 2018 16:01:08 -0200	[thread overview]
Message-ID: <20181211180129.7661-4-ehabkost@redhat.com> (raw)
In-Reply-To: <20181211180129.7661-1-ehabkost@redhat.com>

From: Kashyap Chamarthy <kchamart@redhat.com>

Signed-off-by: Kashyap Chamarthy <kchamart@redhat.com>
Message-Id: <20181030123526.26415-4-kchamart@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
 docs/cpu-hotplug.rst | 142 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 142 insertions(+)
 create mode 100644 docs/cpu-hotplug.rst

diff --git a/docs/cpu-hotplug.rst b/docs/cpu-hotplug.rst
new file mode 100644
index 0000000000..1c268e00b4
--- /dev/null
+++ b/docs/cpu-hotplug.rst
@@ -0,0 +1,142 @@
+===================
+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
+    Interupt (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.
-- 
2.18.0.rc1.1.g3f1ff2140

  parent reply	other threads:[~2018-12-11 18:01 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-12-11 18:01 [Qemu-devel] [PULL 00/24] Machine queue post-3.1.0 (including 4.0 machine-types) Eduardo Habkost
2018-12-11 18:01 ` [Qemu-devel] [PULL 01/24] hostmem-file: remove object id from pmem error message Eduardo Habkost
2018-12-11 18:01 ` [Qemu-devel] [PULL 02/24] hw/timer/sun4v-rtc: Fix tracing at sun4v_rtc_write() Eduardo Habkost
2018-12-11 18:01 ` Eduardo Habkost [this message]
2018-12-11 18:01 ` [Qemu-devel] [PULL 04/24] Deprecate QMP `cpu-add` Eduardo Habkost
2018-12-11 18:01 ` [Qemu-devel] [PULL 05/24] Deprecate HMP `cpu-add` Eduardo Habkost
2018-12-11 18:01 ` [Qemu-devel] [PULL 06/24] range: pass const pointer where possible Eduardo Habkost
2018-12-11 18:01 ` [Qemu-devel] [PULL 07/24] memory-device: use QEMU_IS_ALIGNED Eduardo Habkost
2018-12-11 18:01 ` [Qemu-devel] [PULL 08/24] memory-device: avoid overflows on very huge devices Eduardo Habkost
2018-12-11 18:01 ` [Qemu-devel] [PULL 09/24] move ObjectClass to typedefs.h Eduardo Habkost
2018-12-11 18:01 ` [Qemu-devel] [PULL 10/24] i386: Rename bools in PCMachineState to end in _enabled Eduardo Habkost
2018-12-11 18:01 ` [Qemu-devel] [PULL 11/24] numa: Match struct to typedef name Eduardo Habkost
2018-12-11 18:01 ` [Qemu-devel] [PULL 12/24] hostmem: Validate host-nodes before setting bitmap Eduardo Habkost
2018-12-11 18:01 ` [Qemu-devel] [PULL 13/24] q35/440fx/arm/spapr: Add QEMU 4.0 machine type Eduardo Habkost
2018-12-12 12:51   ` Marc-André Lureau
2018-12-12 12:52     ` Marc-André Lureau
2018-12-11 18:01 ` [Qemu-devel] [PULL 14/24] virt: Eliminate separate instance_init functions Eduardo Habkost
2018-12-11 18:01 ` [Qemu-devel] [PULL 15/24] spapr: Use default_machine_opts to set use_hotplug_event_source Eduardo Habkost
2018-12-11 18:01 ` [Qemu-devel] [PULL 16/24] spapr: Use default_machine_opts to set suppress_vmdesc Eduardo Habkost
2018-12-11 18:01 ` [Qemu-devel] [PULL 17/24] spapr: Delete instance_options functions Eduardo Habkost
2018-12-11 18:01 ` [Qemu-devel] [PULL 18/24] pc: Use default_machine_opts to set suppress_vmdesc Eduardo Habkost
2018-12-11 18:01 ` [Qemu-devel] [PULL 19/24] tests: qdev_prop_check_globals() doesn't return "all_used" Eduardo Habkost
2018-12-11 18:01 ` [Qemu-devel] [PULL 20/24] qom: make interface types abstract Eduardo Habkost
2018-12-11 18:01 ` [Qemu-devel] [PULL 21/24] qom: make user_creatable_complete() specific to UserCreatable Eduardo Habkost
2018-12-11 18:01 ` [Qemu-devel] [PULL 22/24] accel: register global_props like machine globals Eduardo Habkost
2018-12-11 18:01 ` [Qemu-devel] [PULL 23/24] qdev: move qdev_prop_register_global_list() to tests Eduardo Habkost
2018-12-11 18:01 ` [Qemu-devel] [PULL 24/24] qom: remove unimplemented class_finalize Eduardo Habkost
2018-12-11 22:26 ` [Qemu-devel] [PULL 00/24] Machine queue post-3.1.0 (including 4.0 machine-types) Peter Maydell
2018-12-12  0:20 ` no-reply

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=20181211180129.7661-4-ehabkost@redhat.com \
    --to=ehabkost@redhat.com \
    --cc=kchamart@redhat.com \
    --cc=marcel.apfelbaum@gmail.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    /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).