diff mbox

docs: add cpu-hotplug.txt

Message ID 1470623282-3837-1-git-send-email-douly.fnst@cn.fujitsu.com
State New
Headers show

Commit Message

Dou Liyang Aug. 8, 2016, 2:28 a.m. UTC
This document describes how to use cpu hotplug in QEMU.

Signed-off-by: Dou Liyang <douly.fnst@cn.fujitsu.com>
---
 docs/cpu-hotplug.txt | 110 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 110 insertions(+)
 create mode 100644 docs/cpu-hotplug.txt

Comments

Igor Mammedov Aug. 8, 2016, 12:18 p.m. UTC | #1
On Mon, 8 Aug 2016 10:28:02 +0800
Dou Liyang <douly.fnst@cn.fujitsu.com> wrote:

> This document describes how to use cpu hotplug in QEMU.
> 
> Signed-off-by: Dou Liyang <douly.fnst@cn.fujitsu.com>
> ---
>  docs/cpu-hotplug.txt | 110 +++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 110 insertions(+)
>  create mode 100644 docs/cpu-hotplug.txt
> 
> diff --git a/docs/cpu-hotplug.txt b/docs/cpu-hotplug.txt
> new file mode 100644
> index 0000000..d62638e
> --- /dev/null
> +++ b/docs/cpu-hotplug.txt
> @@ -0,0 +1,110 @@
> +QEMU CPU hotplug
> +===================
> +
> +This document explains how to use the cpu hotplug feature in QEMU,
> +which is present since v2.6.0.

 -device/device_add based CPUs are merged since 2.7

> +
> +Guest support is required for cpu hotplug to work.
> +
> +CPU hotplug
> +-------------------
> +
> +In order to be able to hotplug cpu, QEMU has to be told what is the
> +maximum amount of cpus the guest can grow. This is done at startup
> +time by means of the -smp command-line option, which has the following
> +format:
> +
> + -smp [cpus=]n[,maxcpus=cpus][,cores=cores][,threads=threads]
> +	[,sockets=sockets]
> +
> +Where,
> +
> + - "cpus" set the number of CPUs to 'n' [default=1]
> + - "maxcpus" maximum number of total cpus, including offlineCPUs for
> +	hotplug, etc
s/total//
s/offlineCPUs/offline VCPUs/ or threads

> + - "cores" number of CPU cores on one socket
> + - "threads= number of threads on one CPU core
> + - "sockets= number of discrete sockets in the system
Above needs additional meaning clarification for SPAPR,
CCing David

> +
> +
> +For example, the following command-line:
> +
> + qemu [...] -smp 3,maxcpus=10,sockets=2,cores=2,threads=2
> +
> +Creates a guest with 3 cpus and it support up to 10 cpus. The cpu
> +topology is sockets (2) * cores (2) * threads (2) and can't greater
> +than maxcpus. When the guest is just booted, the guest will see 3
> +cpus. so there are seven cpus can be hotplugged by using any
> +combination of the available sockets,cores and threads topology or
> +using apic-id.
s/cpus/vcpus/

drop any mentioning of apic-id, it's not supposed to be used
by user and socket/core/thread-ids should be used i.e.
properties advertised by QEMU via QMP command query-hotpluggable-cpus
or corresponding HMP command 'info hotpluggable-cpus'

PS:
Eduardo should we drop apic-id property before 2.7 is released?
So people won't even try to use it, it wan never a public
property before as cpus weren't available with -device/device_add.


> +cpu hot-plug
> +-----------------------
> +
> +A monitor commands are used to hotplug cpu:
> +
> + - "device_add": creates a cpu device and inserts it into the
> + specific topology as a device
> +
> +For example, the following commands add a cpu which id is cpu1 to
> +the guest discussed earlier:
> +
> +  (qemu) device_add qemu64-x86_64-cpu,id=cpu1,apic-id=3
likewise remove any mentioning of apic-id from document

I'd add as the first section here commands that query possible
available cpus including topology properties. 

> +
> + - "qemu64-x86_64-cpu" is the cpu modle.
> + - "id" is the unique identifier in the device sets.
> + - "apic-id" is the hotpluged cpu's physical identification.
> +
> +Another command uses the cpu topology to add the additional cpu in
> +the designated position.
> +
> +For example, the following commands add a cpu in the last position
> +of the guest cpu topology discussed earlier.
> +
> +  (qemu) device_add qemu64-x86_64-cpu,id=cpu1,socket-id=2,core-id=1,
> +	thread-id=1
> +
> +It's also possible to start a guest with cpu cold-plugged into the
> +hotpluggable cpu topology.
s/hotpluggable cpu topology/specific place (socket,core,thread)/

> +
> +In the following command-line example, a guest which has 3 cpus is
> +created where one of the cpus comes from the "apic-id", and another
> +one comes from "socket-id...". After that, the guest has additional
> +seven cpus to be hot-plug when needed:
> +
> + qemu  [...] -smp 1,maxcpus=10,sockets=2,cores=2,threads=2
> +	-device qemu64-x86_64-cpu,id=cpu1,apic-id=1
> +	-device qemu64-x86_64-cpu,socket-id=2,core-id=1,thread-id=0
> +
> +cpu hot-unplug
> +------------------------
> +
> +In order to be able to hot unplug cpu device, QEMU has two ways
> +to remove cpu device.
> +  1. Using the ids which were assigned when you hot plugged cpus.
> +  2. Using qom_path where the cpu is located in the guest.
I wouldn't advertise #2 as it's possible to unplug CPUs created with
-smp X with its help and then have broken migration

device_del qom_path should even be able to remove a device without ID,
it should allow removal of devices below /machine/peripheral only
instead of current anywhere.

Daniel,
is it a bug in current device_del impl.?
 i.e. device_del /machine/unattached/device[2]
 is currently allowed while I think it shouldn't.

> +
> +A monitor commands are used to hot unplug cpus:
> +
> + - "device_del": deletes a cpu device
> +
> +For example, assuming that the cpu device with id "cpu1" exists,
> +the following commands tries to remove it.
> +
> +  (qemu) device_del cpu1
> +
> +If you don't set the ids when you hot plugged cpus.
> +


> +First, you may need to obtain the cpu's qom_path. The following
> +commands list all hotplugable-cpus, you can get the qom_path
> +through the cpu topology.
> +
> +  (qemu) info hotpluggable-cpus
> +
> +Then you can remove it by the qom_path.
> +
> +For example, assuming that the cpu device with qom_path "/machine
> +/unattached/device[0]" exists, the following commands tries to
> +remove it.
> +
> +  (qemu) device_del /machine/unattached/device[0]
I'd remove qom-path related parts and leave only ID based one.
Eduardo Habkost Aug. 8, 2016, 1:43 p.m. UTC | #2
On Mon, Aug 08, 2016 at 02:18:05PM +0200, Igor Mammedov wrote:
[...]
> PS:
> Eduardo should we drop apic-id property before 2.7 is released?
> So people won't even try to use it, it wan never a public
> property before as cpus weren't available with -device/device_add.

If it is never supposed to be set by the user, we could keep it
and make it read-only. It is helpful for debugging, and it is
probably the most reliable way to map the host-side CPU objects
to the IDs seen by the guest.
David Gibson Aug. 9, 2016, 12:15 a.m. UTC | #3
On Mon, Aug 08, 2016 at 02:18:05PM +0200, Igor Mammedov wrote:
> On Mon, 8 Aug 2016 10:28:02 +0800
> Dou Liyang <douly.fnst@cn.fujitsu.com> wrote:
> 
> > This document describes how to use cpu hotplug in QEMU.
> > 
> > Signed-off-by: Dou Liyang <douly.fnst@cn.fujitsu.com>
> > ---
> >  docs/cpu-hotplug.txt | 110 +++++++++++++++++++++++++++++++++++++++++++++++++++
> >  1 file changed, 110 insertions(+)
> >  create mode 100644 docs/cpu-hotplug.txt
> > 
> > diff --git a/docs/cpu-hotplug.txt b/docs/cpu-hotplug.txt
> > new file mode 100644
> > index 0000000..d62638e
> > --- /dev/null
> > +++ b/docs/cpu-hotplug.txt
> > @@ -0,0 +1,110 @@
> > +QEMU CPU hotplug
> > +===================
> > +
> > +This document explains how to use the cpu hotplug feature in QEMU,
> > +which is present since v2.6.0.
> 
>  -device/device_add based CPUs are merged since 2.7
> 
> > +
> > +Guest support is required for cpu hotplug to work.
> > +
> > +CPU hotplug
> > +-------------------
> > +
> > +In order to be able to hotplug cpu, QEMU has to be told what is the
> > +maximum amount of cpus the guest can grow. This is done at startup
> > +time by means of the -smp command-line option, which has the following
> > +format:
> > +
> > + -smp [cpus=]n[,maxcpus=cpus][,cores=cores][,threads=threads]
> > +	[,sockets=sockets]
> > +
> > +Where,
> > +
> > + - "cpus" set the number of CPUs to 'n' [default=1]
> > + - "maxcpus" maximum number of total cpus, including offlineCPUs for
> > +	hotplug, etc
> s/total//
> s/offlineCPUs/offline VCPUs/ or threads
> 
> > + - "cores" number of CPU cores on one socket
> > + - "threads= number of threads on one CPU core
> > + - "sockets= number of discrete sockets in the system
> Above needs additional meaning clarification for SPAPR,
> CCing David

Sockets have no real meaning on sPAPR.  You can decide how many cores
go into each "socket", but it has no real effect on the guest.

> 
> > +
> > +
> > +For example, the following command-line:
> > +
> > + qemu [...] -smp 3,maxcpus=10,sockets=2,cores=2,threads=2
> > +
> > +Creates a guest with 3 cpus and it support up to 10 cpus. The cpu
> > +topology is sockets (2) * cores (2) * threads (2) and can't greater
> > +than maxcpus. When the guest is just booted, the guest will see 3
> > +cpus. so there are seven cpus can be hotplugged by using any
> > +combination of the available sockets,cores and threads topology or
> > +using apic-id.
> s/cpus/vcpus/
> 
> drop any mentioning of apic-id, it's not supposed to be used
> by user and socket/core/thread-ids should be used i.e.
> properties advertised by QEMU via QMP command query-hotpluggable-cpus
> or corresponding HMP command 'info hotpluggable-cpus'
> 
> PS:
> Eduardo should we drop apic-id property before 2.7 is released?
> So people won't even try to use it, it wan never a public
> property before as cpus weren't available with -device/device_add.
> 
> 
> > +cpu hot-plug
> > +-----------------------
> > +
> > +A monitor commands are used to hotplug cpu:
> > +
> > + - "device_add": creates a cpu device and inserts it into the
> > + specific topology as a device
> > +
> > +For example, the following commands add a cpu which id is cpu1 to
> > +the guest discussed earlier:
> > +
> > +  (qemu) device_add qemu64-x86_64-cpu,id=cpu1,apic-id=3
> likewise remove any mentioning of apic-id from document
> 
> I'd add as the first section here commands that query possible
> available cpus including topology properties. 
> 
> > +
> > + - "qemu64-x86_64-cpu" is the cpu modle.
> > + - "id" is the unique identifier in the device sets.
> > + - "apic-id" is the hotpluged cpu's physical identification.
> > +
> > +Another command uses the cpu topology to add the additional cpu in
> > +the designated position.
> > +
> > +For example, the following commands add a cpu in the last position
> > +of the guest cpu topology discussed earlier.
> > +
> > +  (qemu) device_add qemu64-x86_64-cpu,id=cpu1,socket-id=2,core-id=1,
> > +	thread-id=1
> > +
> > +It's also possible to start a guest with cpu cold-plugged into the
> > +hotpluggable cpu topology.
> s/hotpluggable cpu topology/specific place (socket,core,thread)/
> 
> > +
> > +In the following command-line example, a guest which has 3 cpus is
> > +created where one of the cpus comes from the "apic-id", and another
> > +one comes from "socket-id...". After that, the guest has additional
> > +seven cpus to be hot-plug when needed:
> > +
> > + qemu  [...] -smp 1,maxcpus=10,sockets=2,cores=2,threads=2
> > +	-device qemu64-x86_64-cpu,id=cpu1,apic-id=1
> > +	-device qemu64-x86_64-cpu,socket-id=2,core-id=1,thread-id=0
> > +
> > +cpu hot-unplug
> > +------------------------
> > +
> > +In order to be able to hot unplug cpu device, QEMU has two ways
> > +to remove cpu device.
> > +  1. Using the ids which were assigned when you hot plugged cpus.
> > +  2. Using qom_path where the cpu is located in the guest.
> I wouldn't advertise #2 as it's possible to unplug CPUs created with
> -smp X with its help and then have broken migration
> 
> device_del qom_path should even be able to remove a device without ID,
> it should allow removal of devices below /machine/peripheral only
> instead of current anywhere.
> 
> Daniel,
> is it a bug in current device_del impl.?
>  i.e. device_del /machine/unattached/device[2]
>  is currently allowed while I think it shouldn't.
> 
> > +
> > +A monitor commands are used to hot unplug cpus:
> > +
> > + - "device_del": deletes a cpu device
> > +
> > +For example, assuming that the cpu device with id "cpu1" exists,
> > +the following commands tries to remove it.
> > +
> > +  (qemu) device_del cpu1
> > +
> > +If you don't set the ids when you hot plugged cpus.
> > +
> 
> 
> > +First, you may need to obtain the cpu's qom_path. The following
> > +commands list all hotplugable-cpus, you can get the qom_path
> > +through the cpu topology.
> > +
> > +  (qemu) info hotpluggable-cpus
> > +
> > +Then you can remove it by the qom_path.
> > +
> > +For example, assuming that the cpu device with qom_path "/machine
> > +/unattached/device[0]" exists, the following commands tries to
> > +remove it.
> > +
> > +  (qemu) device_del /machine/unattached/device[0]
> I'd remove qom-path related parts and leave only ID based one.
>
Andrew Jones Aug. 12, 2016, 3:13 p.m. UTC | #4
On Mon, Aug 08, 2016 at 10:28:02AM +0800, Dou Liyang wrote:
> This document describes how to use cpu hotplug in QEMU.
> 
> Signed-off-by: Dou Liyang <douly.fnst@cn.fujitsu.com>
> ---
>  docs/cpu-hotplug.txt | 110 +++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 110 insertions(+)
>  create mode 100644 docs/cpu-hotplug.txt
> 
> diff --git a/docs/cpu-hotplug.txt b/docs/cpu-hotplug.txt
> new file mode 100644
> index 0000000..d62638e
> --- /dev/null
> +++ b/docs/cpu-hotplug.txt
> @@ -0,0 +1,110 @@
> +QEMU CPU hotplug
> +===================
> +
> +This document explains how to use the cpu hotplug feature in QEMU,
> +which is present since v2.6.0.
> +
> +Guest support is required for cpu hotplug to work.
> +
> +CPU hotplug
> +-------------------
> +
> +In order to be able to hotplug cpu, QEMU has to be told what is the

a cpu

> +maximum amount of cpus the guest can grow. This is done at startup

/grow/have/

> +time by means of the -smp command-line option, which has the following
> +format:
> +
> + -smp [cpus=]n[,maxcpus=cpus][,cores=cores][,threads=threads]
> +	[,sockets=sockets]
> +
> +Where,
> +
> + - "cpus" set the number of CPUs to 'n' [default=1]

/set/sets/

> + - "maxcpus" maximum number of total cpus, including offlineCPUs for

is the maximum...

remove the word 'total'

> +	hotplug, etc
> + - "cores" number of CPU cores on one socket
is the number
> + - "threads= number of threads on one CPU core
is the number
> + - "sockets= number of discrete sockets in the system
is the number
> +
> +
> +For example, the following command-line:
> +
> + qemu [...] -smp 3,maxcpus=10,sockets=2,cores=2,threads=2
> +
> +Creates a guest with 3 cpus and it support up to 10 cpus. The cpu

/it support/supports/

> +topology is sockets (2) * cores (2) * threads (2) and can't greater
> +than maxcpus.

The topology should exactly provide maxcpus, i.e. this example is
wrong because the topology only provides a maximum of 8 cpus, but
maxcpus=10. Indeed specifying maxcpus is redundant when a complete
topology is given.


> When the guest is just booted, the guest will see 3
                                 ^^ it
> +cpus. so there are seven cpus can be hotplugged by using any

Five cpus may be hotplugged using any ...

> +combination of the available sockets,cores and threads topology or

sockets, cores, and threads

I'm not sure what the "using any combination..." means though.

> +using apic-id.

by using

> +
> +cpu hot-plug
> +-----------------------
> +
> +A monitor commands are used to hotplug cpu:

/A monitor/Monitor/
/cpu/cpus/

> +
> + - "device_add": creates a cpu device and inserts it into the
> + specific topology as a device
> +
> +For example, the following commands add a cpu which id is cpu1 to

/commands add/command adds/


> +the guest discussed earlier:

a guest:

> +
> +  (qemu) device_add qemu64-x86_64-cpu,id=cpu1,apic-id=3
> +
> + - "qemu64-x86_64-cpu" is the cpu modle.

/modle/model/

> + - "id" is the unique identifier in the device sets.

/sets/set/

> + - "apic-id" is the hotpluged cpu's physical identification.
> +
> +Another command uses the cpu topology to add the additional cpu in

/the cpu topology/cpu topology/

> +the designated position.
> +
> +For example, the following commands add a cpu in the last position
> +of the guest cpu topology discussed earlier.

command adds a cpu to position socket=2, core=1, thread=1:

> +
> +  (qemu) device_add qemu64-x86_64-cpu,id=cpu1,socket-id=2,core-id=1,
> +	thread-id=1
> +
> +It's also possible to start a guest with cpu cold-plugged into the

with a cpu

> +hotpluggable cpu topology.
> +
> +In the following command-line example, a guest which has 3 cpus is
> +created where one of the cpus comes from the "apic-id", and another
> +one comes from "socket-id...". After that, the guest has additional
> +seven cpus to be hot-plug when needed:
> +
> + qemu  [...] -smp 1,maxcpus=10,sockets=2,cores=2,threads=2

Broken example again; 2*2*2 != 10

> +	-device qemu64-x86_64-cpu,id=cpu1,apic-id=1
> +	-device qemu64-x86_64-cpu,socket-id=2,core-id=1,thread-id=0
> +
> +cpu hot-unplug
> +------------------------
> +
> +In order to be able to hot unplug cpu device, QEMU has two ways
> +to remove cpu device.

a cpu device
/ways to remove cpu device/methods of removal;/

> +  1. Using the ids which were assigned when you hot plugged cpus.

s/you hot plugged/hotplugging/

> +  2. Using qom_path where the cpu is located in the guest.

Using the qom_path of the cpu.

> +
> +A monitor commands are used to hot unplug cpus:

/Monitor commands/

> +
> + - "device_del": deletes a cpu device
> +
> +For example, assuming that the cpu device with id "cpu1" exists,
> +the following commands tries to remove it.

/commands/command/
/./:/

> +
> +  (qemu) device_del cpu1
> +
> +If you don't set the ids when you hot plugged cpus.
> +
> +First, you may need to obtain the cpu's qom_path. The following

If the IDs are not set when hotplugging, then the cpu's qom_path
needs to be obtained.

> +commands list all hotplugable-cpus, you can get the qom_path
> +through the cpu topology.

/commands list/command lists/

> +
> +  (qemu) info hotpluggable-cpus
> +
> +Then you can remove it by the qom_path.

Drop this sentence.

> +
> +For example, assuming that the cpu device with qom_path "/machine
> +/unattached/device[0]" exists, the following commands tries to

/commands/command/

> +remove it.
> +
> +  (qemu) device_del /machine/unattached/device[0]
> -- 
> 2.5.5
> 
> 
> 
>

Thanks,
drew
diff mbox

Patch

diff --git a/docs/cpu-hotplug.txt b/docs/cpu-hotplug.txt
new file mode 100644
index 0000000..d62638e
--- /dev/null
+++ b/docs/cpu-hotplug.txt
@@ -0,0 +1,110 @@ 
+QEMU CPU hotplug
+===================
+
+This document explains how to use the cpu hotplug feature in QEMU,
+which is present since v2.6.0.
+
+Guest support is required for cpu hotplug to work.
+
+CPU hotplug
+-------------------
+
+In order to be able to hotplug cpu, QEMU has to be told what is the
+maximum amount of cpus the guest can grow. This is done at startup
+time by means of the -smp command-line option, which has the following
+format:
+
+ -smp [cpus=]n[,maxcpus=cpus][,cores=cores][,threads=threads]
+	[,sockets=sockets]
+
+Where,
+
+ - "cpus" set the number of CPUs to 'n' [default=1]
+ - "maxcpus" maximum number of total cpus, including offlineCPUs for
+	hotplug, etc
+ - "cores" number of CPU cores on one socket
+ - "threads= number of threads on one CPU core
+ - "sockets= number of discrete sockets in the system
+
+
+For example, the following command-line:
+
+ qemu [...] -smp 3,maxcpus=10,sockets=2,cores=2,threads=2
+
+Creates a guest with 3 cpus and it support up to 10 cpus. The cpu
+topology is sockets (2) * cores (2) * threads (2) and can't greater
+than maxcpus. When the guest is just booted, the guest will see 3
+cpus. so there are seven cpus can be hotplugged by using any
+combination of the available sockets,cores and threads topology or
+using apic-id.
+
+cpu hot-plug
+-----------------------
+
+A monitor commands are used to hotplug cpu:
+
+ - "device_add": creates a cpu device and inserts it into the
+ specific topology as a device
+
+For example, the following commands add a cpu which id is cpu1 to
+the guest discussed earlier:
+
+  (qemu) device_add qemu64-x86_64-cpu,id=cpu1,apic-id=3
+
+ - "qemu64-x86_64-cpu" is the cpu modle.
+ - "id" is the unique identifier in the device sets.
+ - "apic-id" is the hotpluged cpu's physical identification.
+
+Another command uses the cpu topology to add the additional cpu in
+the designated position.
+
+For example, the following commands add a cpu in the last position
+of the guest cpu topology discussed earlier.
+
+  (qemu) device_add qemu64-x86_64-cpu,id=cpu1,socket-id=2,core-id=1,
+	thread-id=1
+
+It's also possible to start a guest with cpu cold-plugged into the
+hotpluggable cpu topology.
+
+In the following command-line example, a guest which has 3 cpus is
+created where one of the cpus comes from the "apic-id", and another
+one comes from "socket-id...". After that, the guest has additional
+seven cpus to be hot-plug when needed:
+
+ qemu  [...] -smp 1,maxcpus=10,sockets=2,cores=2,threads=2
+	-device qemu64-x86_64-cpu,id=cpu1,apic-id=1
+	-device qemu64-x86_64-cpu,socket-id=2,core-id=1,thread-id=0
+
+cpu hot-unplug
+------------------------
+
+In order to be able to hot unplug cpu device, QEMU has two ways
+to remove cpu device.
+  1. Using the ids which were assigned when you hot plugged cpus.
+  2. Using qom_path where the cpu is located in the guest.
+
+A monitor commands are used to hot unplug cpus:
+
+ - "device_del": deletes a cpu device
+
+For example, assuming that the cpu device with id "cpu1" exists,
+the following commands tries to remove it.
+
+  (qemu) device_del cpu1
+
+If you don't set the ids when you hot plugged cpus.
+
+First, you may need to obtain the cpu's qom_path. The following
+commands list all hotplugable-cpus, you can get the qom_path
+through the cpu topology.
+
+  (qemu) info hotpluggable-cpus
+
+Then you can remove it by the qom_path.
+
+For example, assuming that the cpu device with qom_path "/machine
+/unattached/device[0]" exists, the following commands tries to
+remove it.
+
+  (qemu) device_del /machine/unattached/device[0]