On 03/22/2017 08:32 AM, Igor Mammedov wrote: > legacy cpu to node mapping is using cpu index values to map > VCPU to node with help of '-numa node,nodeid=node,cpus=x[-y]' > option. However cpu index is internal concept and QEMU users > have to guess /reimplement qemu's logic/ to map it to > a concrete cpu socket/core/thread to make sane CPUs > placement across numa nodes. > > This patch allows to map cpu objects to numa nodes using > the same properties as used for cpus with -device/device_add > (socket-id/core-id/thread-id/node-id). > > At present valid properties/values to address CPUs could be > fetched using hotpluggable-cpus monitor/qmp command, it will > require user to start qemu twice when creating domain to fetch > possible CPUs for a machine type/-smp layout first and > then the second time with numa explicit mapping for actual > usage. The first step results could be saved and reused to > set/change mapping later as far as machine type/-smp stays > the same. > > Proposed impl. supports exact and wildcard matching to > simplify CLI and allow to set mapping for a specific cpu > or group of cpu objects specified by matched properties. > > For example: > > # exact mapping x86 > -numa cpu,node-id=x,socket-id=y,core-id=z,thread-id=n > > # exact mapping SPAPR > -numa cpu,node-id=x,core-id=y > > # wildcard mapping, all cpu objects that match socket-id=y > # are mapped to node-id=x > -numa cpu,node-id=x,socket-id=y > > Signed-off-by: Igor Mammedov <imamm...@redhat.com> > --- > numa.c | 13 +++++++++++++ > qapi-schema.json | 7 +++++-- > qemu-options.hx | 23 ++++++++++++++++++++++- > 3 files changed, 40 insertions(+), 3 deletions(-) >
> > +@samp{cpu} option is new alternative to @samp{cpus} option s/is/is a/ > +uses @samp{socket-id|core-id|thread-id} properties to assign s/uses/which uses/ > +CPU objects to a @var{node} using topology layout properties of CPU. > +Set of properties is machine specific, and depends on used machine s/Set/The set/ > +type/@samp{smp} options. It could be queried with @samp{hotpluggable-cpus} > +monitor command. > +@samp{node-id} property specifies @var{node} to which CPU object > +will be assigned, it's required for @var{node} to be declared > +with @samp{node} option before it's used with @samp{cpu} option. > + > +For example: > +@example > +-M pc \ > +-smp 1,sockets=2,maxcpus=2 \ > +-numa node,nodeid=0 -numa node,nodeid=1 \ > +-numa cpu,node-id=0,socket-id=0 -numa cpu,node-id=1,socket-id=1 > +@end example > + > @samp{mem} assigns a given RAM amount to a node. @samp{memdev} > assigns RAM from a given memory backend device to a node. If > @samp{mem} and @samp{memdev} are omitted in all nodes, RAM is > -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature