Re: [Qemu-devel] [PATCH] docs: add cpu-hotplug.txt

2016-08-12 Thread Andrew Jones
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 
> ---
>  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 000..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 

Re: [Qemu-devel] [PATCH] docs: add cpu-hotplug.txt

2016-08-08 Thread David Gibson
On Mon, Aug 08, 2016 at 02:18:05PM +0200, Igor Mammedov wrote:
> On Mon, 8 Aug 2016 10:28:02 +0800
> Dou Liyang  wrote:
> 
> > This document describes how to use cpu hotplug in QEMU.
> > 
> > Signed-off-by: Dou Liyang 
> > ---
> >  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 000..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 

Re: [Qemu-devel] [PATCH] docs: add cpu-hotplug.txt

2016-08-08 Thread Eduardo Habkost
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.

-- 
Eduardo



Re: [Qemu-devel] [PATCH] docs: add cpu-hotplug.txt

2016-08-08 Thread Igor Mammedov
On Mon, 8 Aug 2016 10:28:02 +0800
Dou Liyang  wrote:

> This document describes how to use cpu hotplug in QEMU.
> 
> Signed-off-by: Dou Liyang 
> ---
>  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 000..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
> 

[Qemu-devel] [PATCH] docs: add cpu-hotplug.txt

2016-08-07 Thread Dou Liyang
This document describes how to use cpu hotplug in QEMU.

Signed-off-by: Dou Liyang 
---
 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 000..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]
-- 
2.5.5