Igor Mammedov <imamm...@redhat.com> writes: [...] > Series allows to configure NUMA mapping at runtime using QMP > interface. For that to happen it introduces a new '-preconfig' CLI option > which allows to pause QEMU before machine_init() is run and > adds new set-numa-node QMP command which in conjunction with > query-hotpluggable-cpus allows to configure NUMA mapping for cpus. > > Later we can modify other commands to run early, for example device_add. > I recall SPAPR had problem when libvirt started QEMU with -S and, while it's > paused, added CPUs with device_add. Intent was to coldplug CPUs (but at that > stage it's considered hotplug already), so SPAPR had to work around the issue.
That instance is just stupidity / laziness, I think: we consider any plug after machine creation a hot plug. Real machines remain cold until you press the power button. Our virtual machines should remain cold until they start running, i.e. with -S until the first "cont". I vaguely remember me asking this before, but your answer didn't make it into this cover letter, which gives me a pretext to ask again instead of looking it up in the archives: what exactly prevents us from keeping the machine cold enough for numa configuration until the first "cont"? > > Example of configuration session: > $QEMU -smp 2 -preconfig ... > > QMP: > # get CPUs layout for current target/machine/CLI > -> {'execute': 'query-hotpluggable-cpus' } > <- {'return': [ > {'props': {'core-id': 0, 'thread-id': 0, 'socket-id': 1}, ... }, > {'props': {'core-id': 0, 'thread-id': 0, 'socket-id': 0}, ... } > ]} > > # configure 1st node > -> {'execute': 'set-numa-node', 'arguments': { 'type': 'node', 'nodeid': 0 } > } > <- {'return': {}} > -> {'execute': 'set-numa-node', 'arguments': { 'type': 'cpu', > 'node-id': 0, 'core-id': 0, 'thread-id': 0, 'socket-id': 1, } > } > <- {'return': {}} > > # configure 2nd node > -> {'execute': 'set-numa-node', 'arguments': { 'type': 'node', 'nodeid': 1 } } > -> {'execute': 'set-numa-node', 'arguments': { 'type': 'cpu', > 'node-id': 1, 'core-id': 0, 'thread-id': 0, 'socket-id': 0 } > } > <- {'return': {}} > > # [optional] verify configuration > -> {'execute': 'query-hotpluggable-cpus' } > <- {'return': [ > {'props': {'core-id': 0, 'thread-id': 0, 'node-id': 0, 'socket-id': > 1}, ... }, > {'props': {'core-id': 0, 'thread-id': 0, 'node-id': 1, 'socket-id': > 0}, ... } > ]} > > > Git tree: > https://github.com/imammedo/qemu.git qmp_preconfig_v3 > > Ref to v1: > https://lists.gnu.org/archive/html/qemu-devel/2017-10/msg03583.html > Message-Id: <1508170976-96869-1-git-send-email-imamm...@redhat.com>