On Thu, 19 Jan 2017 09:45:11 +0000
"Daniel P. Berrange" <[email protected]> wrote:
> On Wed, Jan 18, 2017 at 06:13:16PM +0100, Igor Mammedov wrote:
> >
> > Series introduces a new CLI option to allow mapping cpus to numa
> > nodes using public properties [socket|core|thread]-ids instead of
> > internal cpu-index and moving cpu<->node mapping from global bitmaps
> > to PCMachineState struct.
>
> What is the benefit of this change to apps ? Obviously libvirt uses
> the current syntax, but I'm not aware of what problems that has - why
> would libvirt want to use this new syntax instead ?
current syntax -numa cpus=1,2,3... depends on cpu-index which is
internal to QEMU. External users wouldn't actually know which cpu
is associated with which cpu-index without re-implementing cpu-index
assignment which is qemu-version/target/machine/topology dependent.
New '-numa cpu' provides mapping of cpus to numa nodes in
CPU terms that are used with device_add/-device commands.
For management there is query-hotpluggble-cpus command that allows
to get a list of possible cpus with their socket-id/core-id/thread-id
property values.
for example without numa mapping CLI could look like:
$QEMU -M pc -smp 1,sockets=3,maxcpus=3 \
-device qemu64-x86_64-cpu,socket-id=1,core-id=0,thread-id=0
(qemu) info hotpluggable-cpus
Hotpluggable CPUs:
type: "qemu64-x86_64-cpu"
vcpus_count: "1"
CPUInstance Properties:
socket-id: "2"
core-id: "0"
thread-id: "0"
type: "qemu64-x86_64-cpu"
vcpus_count: "1"
qom_path: "/machine/peripheral-anon/device[0]"
CPUInstance Properties:
socket-id: "1"
core-id: "0"
thread-id: "0"
type: "qemu64-x86_64-cpu"
vcpus_count: "1"
qom_path: "/machine/unattached/device[0]"
CPUInstance Properties:
socket-id: "0"
core-id: "0"
thread-id: "0"
based on that list the one could extend CLI with numa mapping:
$QEMU -M pc -smp 1,sockets=3,maxcpus=3 \
-device qemu64-x86_64-cpu,socket-id=1,core-id=0,thread-id=0 \
-numa cpu,socket-id=0,core-id=0,thread-id=0,node-id=0 \
-numa cpu,socket-id=1,core-id=0,thread-id=0,node-id=1 \
-numa cpu,socket-id=2,core-id=0,thread-id=0,node-id=2
(qemu) info hotpluggable-cpus
Hotpluggable CPUs:
type: "qemu64-x86_64-cpu"
vcpus_count: "1"
CPUInstance Properties:
node-id: "2"
socket-id: "2"
core-id: "0"
thread-id: "0"
type: "qemu64-x86_64-cpu"
vcpus_count: "1"
qom_path: "/machine/peripheral-anon/device[0]"
CPUInstance Properties:
node-id: "1"
socket-id: "1"
core-id: "0"
thread-id: "0"
type: "qemu64-x86_64-cpu"
vcpus_count: "1"
qom_path: "/machine/unattached/device[0]"
CPUInstance Properties:
node-id: "0"
socket-id: "0"
core-id: "0"
thread-id: "0"
As it's been discussed previous times, there is chicken/egg
issue where management has to get query-hotpluggble-cpus result
for a specific combination of machine type and -smp option.
It would need to be done at most one time when creating
a configuration and then CLI numa mapping could be used
for starting VM without doing query-hotpluggable-cpus.
'-numa cpu' CLI option is also needed for setting known
mapping on target side of migration.
Previous consensus has been that the only way to avoid 2 stage
discovery/configuration is starting QEMU in paused mode and
than do query + mapping at runtime via QMP before allowing
guest run with 'continue' command.
But this part hasn't been implemented in this series yet.
>
>
> Regards,
> Daniel