All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Gibson <david@gibson.dropbear.id.au>
To: Bharata B Rao <bharata@linux.vnet.ibm.com>
Cc: lvivier@redhat.com, thuth@redhat.com, qemu-devel@nongnu.org,
	ehabkost@redhat.com, aik@ozlabs.ru, agraf@suse.de,
	abologna@redhat.com, qemu-ppc@nongnu.org, pbonzini@redhat.com,
	imammedo@redhat.com, afaerber@suse.de
Subject: Re: [Qemu-devel] CPU hotplug
Date: Wed, 3 Feb 2016 16:42:23 +1100	[thread overview]
Message-ID: <20160203054223.GL15080@voom.fritz.box> (raw)
In-Reply-To: <20160203050348.GB8516@in.ibm.com>

[-- Attachment #1: Type: text/plain, Size: 5408 bytes --]

On Wed, Feb 03, 2016 at 10:33:48AM +0530, Bharata B Rao wrote:
> On Mon, Feb 01, 2016 at 04:35:17PM +1100, David Gibson wrote:
> > Hi,
> > 
> > It seems to me we're getting rather bogged down in how to proceed with
> > an improved CPU hotplug (and hot unplug) interface, both generically
> > and for ppc in particular.
> > 
> > So here's a somewhat more concrete suggestion of a way forward, to see
> > if we can get some consensus.
> > 
> > The biggest difficulty I think we're grappling with is that device-add
> > is actually *not* a great interface to cpu hotplug.  Or rather, it's
> > not great as the _only_ interface: in order to represent the many
> > different constraints on how cpus can be plugged on various platforms,
> > it's natural to use a heirarchy of cpu core / socket / package types
> > specific to the specific platform or real-world cpu package being
> > modeled.  However, for the normal case of a regular homogenous (and at
> > least slightly para-virtualized) server, that interface is nasty for
> > management layers because they have to know the right type to
> > instantiate.
> > 
> > To address this, I'm proposing this two layer interface:
> > 
> > Layer 1: Low-level, device-add based
> > 
> >     * a new, generic cpu-package QOM type represents a group of 1 or
> >       more cpu threads which can be hotplugged as a unit
> >     * cpu-package is abstract and can't be instantiated directly
> >     * archs and/or individual platforms have specific subtypes of
> >       cpu-package which can be instantiated
> >     * for platforms attempting to be faithful representations of real
> >       hardware these subtypes would match the specific characteristics
> >       of the real hardware devices.  In addition to the cpu threads,
> >       they may have other on chip devices as sub-objects.
> >     * for platforms which are paravirtual - or which have existing
> >       firmware abstractions for cpu cores/sockets/packages/whatever -
> >       these could be more abstract, but would still be tied to that
> >       platform's constraints
> >     * Depending on the platform the cpu-package object could have
> >       further internal structure (e.g. a package object representing a
> >       socket contains package objects representing each core, which in
> >       turn contain cpu objects for each thread)
> >         * Some crazy platform that has multiple daughterboards each with
> >           several multi-chip-modules each with several chips, each
> > 	  with several cores each with several threads could represent
> > 	  that too.
> > 
> > What would be common to all the cpu-package subtypes is:
> >     * A boolean "present" attribute ("realized" might already be
> >       suitable, but I'm not certain)
> >     * A generic means of determining the number of cpu threads in the
> >       package, and enumerating those
> >     * A generic means of determining if the package is hotpluggable or
> >       not
> >     * They'd get listed in a standard place in the QOM tree
> > 
> > This interface is suitable if you want complete control over
> > constructing the system, including weird cases like heterogeneous
> > machines (either totally different cpu types, or just different
> > numbers of threads in different packages).
> > 
> > The intention is that these objects would never look at the global cpu
> > type or sockets/cores/threads numbers.  The next level up would
> > instead configure the packages to match those for the common case.
> > 
> > Layer 2: Higher-level
> > 
> >     * not all machine types need support this model, but I'd expect
> >       all future versions of machine types designed for production use
> >       to do so
> >     * machine types don't construct cpu objects directly
> >     * instead they create enough cpu-package objects - of a subtype
> >       suitable for this machine - to provide maxcpus threads
> >     * the machine type would set the "present" bit on enough of the
> >       cpu packages to provide the base number of cpu threads
> 
> In the generic cpu-core RFC that I posted last year
> (https://lists.gnu.org/archive/html/qemu-devel/2015-12/msg01526.html),
> I did have backend objects (which I called them sockets) into which
> the generic cpu-core device would fit it and I used the QOM links to
> bring out the notion of cpu-core device populating the socket.
> 
> I had the sockets as backend objects and created as many of them as needed
> upfront to fit the max_cpus. These objects weren't exposed them to the user,
> but instead the cpu-core device was exposed to the user.

Right, as I mentioned on IRC this is based partly on your earlier
proposal.

The big difference, as I see it, is that in this proposal the cpu
package objects aren't linked directly to the socket/core/thread
heirarchy - different platforms can place them differently based on
what works for them.

> However, I like the current proposal where Layer 2 interface is exposed to the
> user and letting archs build up the CPU topology underneath in the manner
> that they deem fit for the arch.
> 
> Regards,
> Bharata.
> 

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

  reply	other threads:[~2016-02-03  6:00 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-01  5:35 [Qemu-devel] CPU hotplug David Gibson
2016-02-01 10:13 ` Christian Borntraeger
2016-02-02 18:33 ` Eduardo Habkost
2016-02-03  1:50   ` David Gibson
2016-02-03 18:12     ` Eduardo Habkost
2016-02-03  5:03 ` Bharata B Rao
2016-02-03  5:42   ` David Gibson [this message]
  -- strict thread matches above, loose matches on Subject: below --
2012-08-30  9:06 Stefan Priebe
2012-08-30  9:17 ` Igor Mammedov
2012-08-30 15:41 ` Andreas Färber
2012-08-30 16:08   ` Michael Tokarev
2012-08-30 16:35   ` Stefan Priebe
2012-08-30 16:43     ` Andreas Färber
2012-08-30 17:23       ` Stefan Priebe
2012-08-30 18:40         ` Igor Mammedov
2012-08-30 18:45           ` Stefan Priebe
2012-08-30 18:56             ` Igor Mammedov
2012-08-30 18:59               ` Stefan Priebe

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=20160203054223.GL15080@voom.fritz.box \
    --to=david@gibson.dropbear.id.au \
    --cc=abologna@redhat.com \
    --cc=afaerber@suse.de \
    --cc=agraf@suse.de \
    --cc=aik@ozlabs.ru \
    --cc=bharata@linux.vnet.ibm.com \
    --cc=ehabkost@redhat.com \
    --cc=imammedo@redhat.com \
    --cc=lvivier@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    --cc=thuth@redhat.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.