]> git.ipfire.org Git - thirdparty/qemu.git/blob - docs/cpu-hotplug.rst
Update version for v5.0.0-rc2 release
[thirdparty/qemu.git] / docs / cpu-hotplug.rst
1 ===================
2 Virtual CPU hotplug
3 ===================
4
5 A complete example of vCPU hotplug (and hot-unplug) using QMP
6 ``device_add`` and ``device_del``.
7
8 vCPU hotplug
9 ------------
10
11 (1) Launch QEMU as follows (note that the "maxcpus" is mandatory to
12 allow vCPU hotplug)::
13
14 $ qemu-system-x86_64 -display none -no-user-config -m 2048 \
15 -nodefaults -monitor stdio -machine pc,accel=kvm,usb=off \
16 -smp 1,maxcpus=2 -cpu IvyBridge-IBRS \
17 -qmp unix:/tmp/qmp-sock,server,nowait
18
19 (2) Run 'qmp-shell' (located in the source tree, under: "scripts/qmp/)
20 to connect to the just-launched QEMU::
21
22 $> ./qmp-shell -p -v /tmp/qmp-sock
23 [...]
24 (QEMU)
25
26 (3) Find out which CPU types could be plugged, and into which sockets::
27
28 (QEMU) query-hotpluggable-cpus
29 {
30 "execute": "query-hotpluggable-cpus",
31 "arguments": {}
32 }
33 {
34 "return": [
35 {
36 "type": "IvyBridge-IBRS-x86_64-cpu",
37 "vcpus-count": 1,
38 "props": {
39 "socket-id": 1,
40 "core-id": 0,
41 "thread-id": 0
42 }
43 },
44 {
45 "qom-path": "/machine/unattached/device[0]",
46 "type": "IvyBridge-IBRS-x86_64-cpu",
47 "vcpus-count": 1,
48 "props": {
49 "socket-id": 0,
50 "core-id": 0,
51 "thread-id": 0
52 }
53 }
54 ]
55 }
56 (QEMU)
57
58 (4) The ``query-hotpluggable-cpus`` command returns an object for CPUs
59 that are present (containing a "qom-path" member) or which may be
60 hot-plugged (no "qom-path" member). From its output in step (3), we
61 can see that ``IvyBridge-IBRS-x86_64-cpu`` is present in socket 0,
62 while hot-plugging a CPU into socket 1 requires passing the listed
63 properties to QMP ``device_add``::
64
65 (QEMU) device_add id=cpu-2 driver=IvyBridge-IBRS-x86_64-cpu socket-id=1 core-id=0 thread-id=0
66 {
67 "execute": "device_add",
68 "arguments": {
69 "socket-id": 1,
70 "driver": "IvyBridge-IBRS-x86_64-cpu",
71 "id": "cpu-2",
72 "core-id": 0,
73 "thread-id": 0
74 }
75 }
76 {
77 "return": {}
78 }
79 (QEMU)
80
81 (5) Optionally, run QMP `query-cpus-fast` for some details about the
82 vCPUs::
83
84 (QEMU) query-cpus-fast
85 {
86 "execute": "query-cpus-fast",
87 "arguments": {}
88 }
89 {
90 "return": [
91 {
92 "qom-path": "/machine/unattached/device[0]",
93 "target": "x86_64",
94 "thread-id": 11534,
95 "cpu-index": 0,
96 "props": {
97 "socket-id": 0,
98 "core-id": 0,
99 "thread-id": 0
100 },
101 "arch": "x86"
102 },
103 {
104 "qom-path": "/machine/peripheral/cpu-2",
105 "target": "x86_64",
106 "thread-id": 12106,
107 "cpu-index": 1,
108 "props": {
109 "socket-id": 1,
110 "core-id": 0,
111 "thread-id": 0
112 },
113 "arch": "x86"
114 }
115 ]
116 }
117 (QEMU)
118
119 vCPU hot-unplug
120 ---------------
121
122 From the 'qmp-shell', invoke the QMP ``device_del`` command::
123
124 (QEMU) device_del id=cpu-2
125 {
126 "execute": "device_del",
127 "arguments": {
128 "id": "cpu-2"
129 }
130 }
131 {
132 "return": {}
133 }
134 (QEMU)
135
136 .. note::
137 vCPU hot-unplug requires guest cooperation; so the ``device_del``
138 command above does not guarantee vCPU removal -- it's a "request to
139 unplug". At this point, the guest will get a System Control
140 Interrupt (SCI) and calls the ACPI handler for the affected vCPU
141 device. Then the guest kernel will bring the vCPU offline and tell
142 QEMU to unplug it.