===================
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=on,wait=off

(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.
