From: Igor Mammedov <imammedo@redhat.com>
To: Eduardo Habkost <ehabkost@redhat.com>
Cc: kwolf@redhat.com, peter.maydell@linaro.org, aliguori@us.ibm.com,
stefano.stabellini@eu.citrix.com, jan.kiszka@siemens.com,
mst@redhat.com, claudio.fontana@huawei.com,
qemu-devel@nongnu.org, aderumier@odiso.com, armbru@redhat.com,
blauwirbel@gmail.com, quintela@redhat.com,
alex.williamson@redhat.com, kraxel@redhat.com,
anthony.perard@citrix.com, yang.z.zhang@intel.com,
Paolo Bonzini <pbonzini@redhat.com>,
lcapitulino@redhat.com, afaerber@suse.de, rth@twiddle.net
Subject: Re: [Qemu-devel] [PATCH 12/12] target-i386: implement CPU hot-add
Date: Wed, 3 Apr 2013 22:09:25 +0200 [thread overview]
Message-ID: <20130403220925.6ebb3f83@thinkpad.mammed.net> (raw)
In-Reply-To: <20130403192711.GU2719@otherpad.lan.raisama.net>
On Wed, 3 Apr 2013 16:27:11 -0300
Eduardo Habkost <ehabkost@redhat.com> wrote:
> On Wed, Apr 03, 2013 at 08:59:07PM +0200, Igor Mammedov wrote:
> > On Wed, 3 Apr 2013 15:10:05 -0300
> > Eduardo Habkost <ehabkost@redhat.com> wrote:
> >
> > > On Wed, Apr 03, 2013 at 07:58:00PM +0200, Igor Mammedov wrote:
> > > <snip>
> > > > > > +void do_cpu_hot_add(const int64_t id, Error **errp)
> > > > > > +{
> > > > > > + pc_new_cpu(saved_cpu_model, id, errp);
> > > > > > +}
> > > > > > +
> > > > >
> > > > > Missing x86_cpu_apic_id_from_index(id)?
> > > > There was(is?) opposition to using cpu_index to identify x86 CPU.
> > >
> > > Really? Do you have a pointer to the discussion?
> > Here is what I could find in my mail box:
> > http://lists.gnu.org/archive/html/qemu-devel/2012-05/msg02770.html
> > Jan could correct me if I'm wrong.
>
>
>
> So, quoting Jan:
> > From my POV, cpu_index could become equal to the physical APIC ID.
> > As long as we can set it freely (provided it remains unique) and
> > non-continuously, we don't need separate indexes."
>
> We can't choose APIC IDs freely, because the APIC ID is calculated based
> on the CPU topology (socket + core + thread IDs).
>
> So, the cpu_index could be the same as the APIC ID if the cpu_index
> value declared opaque, being just a "CPU identifier" that is chosen by
> QEMU arbitrarily (and that happens to match the APIC ID). But we will
> probably have some problems with this:
>
> - The CPU index are currently allocated contiguously, and probably
> existing interfaces already assume that (e.g. the "-numa' option,
> "info numa", "info cpus" and maybe other monitor commands)
> - QEMU must be responsible for calculating the APIC ID of each CPU,
> because it is based on the CPU topology.
> - If QEMU is the one who calculates the APIC ID, what kind of identifier
> we can use for a CPU object in the command-line (e.g. in the "-numa"
> option)?
using any kind of thread id is problematic since 2 treads from the same core
could end-up on different nodes.
Maybe placement interface could be better described as node[n]=sockets_list?
> - We may need to redefine the meaning of the "maxcpus" -smp option, if
> all our interfaces are now based in non-contiguous and freely-set CPU
> identifiers.
it's amount of CPUs available to guest, pretty clear from user's POV.
>
> In short, getting rid of the contiguous CPU indexes sounds very
> difficult. We could introduce other kind of identifiers, but probably we
> may need to keep the CPU indexes contiguous to keep existing interfaces
> working.
Once we have CPU unplug, we will have non-contiguous cpu_index. So it will be
part of CPU unplug series to fix cpu_index allocation/usage where necessary.
>
> >
> > >
> > >
> > > > So, it is expected from management to provide APIC ID instead of cpu_index.
> > > > It could be useful to make hotplug to a specific NUMA node/cpu to work in
> > > > future.
> > > > Though interface of possible APIC IDs discovery is not part of this series.
> > >
> > > That's exactly the opposite of what I expect. The APIC ID is an internal
> > > implementation detail, and external tools must _not_ be required to deal
> > > with it and to calculate it.
> > >
> > > Communication with the BIOS, on the other hand, is entirely based on the
> > > APIC ID, and not CPU indexes. So QEMU needs to translate the CPU indexes
> > > (used to communicate with the outside world) to APIC IDs when talking to
> > > the BIOS.
> > cpu_index won't work nicely with hot-adding CPU to specific numa node though.
>
> Well, the "-numa node" options are already based on CPU indexes, so it
> would match it the existing NUMA configuration interface.
>
> > with APIC ID (mgmt might treat it as opaque) we could expose something like
> >
> > /machine/icc-bridge/link<CPU[apic_id_n]
> > ...
> >
> > for all possible CPUs, with empty links for non existing ones.
> >
> > and later add on something like this:
> >
> > /machine/numa_node[x]/link<CPU[apic_id_n]>
> > ...
> >
> > Libvirt than could just pickup ready apic id from desired place and add CPU
> > either using cpu-add id=xxx or device_add x86-cpu-...,apic_id=xxx
> >
> > +1 more cpu_index is QEMU implementation detail and we could not add to x86 CPU
> > cpu-index property since hardware doesn't have such feature, so it won't be
> > available with device_add.
>
> I don't mind hiding cpu_index too. I don't mind if we use a cpu_index,
> QOM links, arbitrary IDs set by the user. I just have a problem with
> requiring libvirt to set the APIC ID.
>
> If you give libvirt an easy way to convert a CPU "location" (index, numa
> node, whatever) to an APIC ID that is pre-calculated by QEMU, then it
> could work. But do we really need to require libvirt to deal with APIC
> ID directly? If you just set the links properly to reflect the CPU
> "location", the CPU could calculate its APIC ID based on its "location"
> using the links.
What about adding CPU to a specific node then, it would require interface for
communicating to CPU to which node it should be plugged (part of APIC ID, I
guess).
>
> --
> Eduardo
>
--
Regards,
Igor
next prev parent reply other threads:[~2013-04-03 20:09 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-21 14:28 [Qemu-devel] [RFC 00/12] target-i386: CPU hot-add with cpu_set QMP command Igor Mammedov
2013-03-21 14:28 ` [Qemu-devel] [PATCH 01/12] target-i386: consolidate error propagation in x86_cpu_realizefn() Igor Mammedov
2013-03-27 10:21 ` Paolo Bonzini
2013-04-01 20:00 ` Eduardo Habkost
2013-03-21 14:28 ` [Qemu-devel] [PATCH 02/12] target-i386: split APIC creation from initialization " Igor Mammedov
2013-04-04 8:59 ` Andreas Färber
2013-04-04 9:56 ` Igor Mammedov
2013-03-21 14:28 ` [Qemu-devel] [PATCH 03/12] target-i386: split out CPU creation and features parsing into cpu_x86_create() Igor Mammedov
2013-03-21 14:28 ` [Qemu-devel] [PATCH 04/12] target-i386: introduce apic-id property Igor Mammedov
2013-03-21 14:28 ` [Qemu-devel] [PATCH 05/12] target-i386: push hot-plugged VCPU state to KVM and unstop it Igor Mammedov
2013-03-27 11:01 ` Paolo Bonzini
2013-03-27 12:12 ` Igor Mammedov
2013-03-27 12:17 ` Andreas Färber
2013-03-27 13:27 ` Igor Mammedov
2013-03-27 14:30 ` Andreas Färber
2013-03-27 15:16 ` Igor Mammedov
2013-03-27 15:20 ` Paolo Bonzini
2013-03-27 19:46 ` Igor Mammedov
2013-03-27 19:51 ` [Qemu-devel] [PATCH 05/14] cpu: Pass CPUState to *cpu_synchronize_post*() Igor Mammedov
2013-03-27 19:51 ` [Qemu-devel] [PATCH 06/14] cpu: call cpu_synchronize_post_init() from CPUClass.realize() if hotplugged Igor Mammedov
2013-03-27 19:51 ` [Qemu-devel] [PATCH 07/14] cpu: introduce CPUClass.resume() method Igor Mammedov
2013-03-21 14:28 ` [Qemu-devel] [PATCH 06/12] target-i386: replace FROM_SYSBUS() with QOM type cast Igor Mammedov
2013-03-27 10:22 ` Paolo Bonzini
2013-04-04 9:03 ` Andreas Färber
2013-04-04 9:59 ` Igor Mammedov
2013-04-04 10:05 ` Andreas Färber
2013-04-04 10:22 ` Igor Mammedov
2013-03-21 14:28 ` [Qemu-devel] [PATCH 07/12] target-i386: Add ICC_BUS and attach apic, kvmvapic and cpu to it Igor Mammedov
2013-03-27 10:57 ` Paolo Bonzini
2013-03-28 10:55 ` Igor Mammedov
2013-03-29 7:22 ` li guang
2013-03-29 8:12 ` Igor Mammedov
2013-04-04 11:10 ` Andreas Färber
2013-04-04 12:52 ` Igor Mammedov
2013-03-21 14:28 ` [Qemu-devel] [PATCH 08/12] introduce CPU hot-plug notifier Igor Mammedov
2013-03-27 11:06 ` Paolo Bonzini
2013-03-27 15:24 ` Igor Mammedov
2013-03-27 15:36 ` Paolo Bonzini
2013-03-21 14:28 ` [Qemu-devel] [PATCH 09/12] rtc: update rtc_cmos on CPU hot-plug Igor Mammedov
2013-03-21 14:28 ` [Qemu-devel] [PATCH 10/12] acpi_piix4: add infrastructure to send CPU hot-plug GPE to guest Igor Mammedov
2013-03-27 10:47 ` Paolo Bonzini
2013-03-21 14:28 ` [Qemu-devel] [PATCH 11/12] qmp: add cpu_set qmp command Igor Mammedov
2013-03-22 2:44 ` Eric Blake
2013-03-25 15:35 ` [Qemu-devel] [PATCH 11/12 v2] qmp: add cpu-set " Igor Mammedov
2013-03-25 20:09 ` Luiz Capitulino
2013-03-25 20:22 ` Eric Blake
2013-03-26 13:43 ` Igor Mammedov
2013-03-26 14:02 ` Luiz Capitulino
2013-03-26 14:38 ` Eric Blake
2013-03-27 10:36 ` [Qemu-devel] [PATCH 11/12] qmp: add cpu_set " Paolo Bonzini
2013-03-21 14:28 ` [Qemu-devel] [PATCH 12/12] target-i386: implement CPU hot-add Igor Mammedov
2013-03-22 2:46 ` Eric Blake
2013-03-25 15:31 ` Igor Mammedov
2013-03-27 11:19 ` Paolo Bonzini
2013-04-03 17:58 ` Igor Mammedov
2013-04-03 18:10 ` Eduardo Habkost
2013-04-03 18:59 ` Igor Mammedov
2013-04-03 19:27 ` Eduardo Habkost
2013-04-03 20:09 ` Igor Mammedov [this message]
2013-04-03 20:57 ` Eduardo Habkost
2013-04-03 18:22 ` Andreas Färber
2013-04-03 19:01 ` Igor Mammedov
2013-03-21 14:44 ` [Qemu-devel] [RFC 00/12] target-i386: CPU hot-add with cpu_set QMP command Eric Blake
2013-03-21 15:38 ` Igor Mammedov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20130403220925.6ebb3f83@thinkpad.mammed.net \
--to=imammedo@redhat.com \
--cc=aderumier@odiso.com \
--cc=afaerber@suse.de \
--cc=alex.williamson@redhat.com \
--cc=aliguori@us.ibm.com \
--cc=anthony.perard@citrix.com \
--cc=armbru@redhat.com \
--cc=blauwirbel@gmail.com \
--cc=claudio.fontana@huawei.com \
--cc=ehabkost@redhat.com \
--cc=jan.kiszka@siemens.com \
--cc=kraxel@redhat.com \
--cc=kwolf@redhat.com \
--cc=lcapitulino@redhat.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
--cc=rth@twiddle.net \
--cc=stefano.stabellini@eu.citrix.com \
--cc=yang.z.zhang@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).