qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Claudio Fontana <cfontana@suse.de>
To: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: "Laurent Vivier" <lvivier@redhat.com>,
	"Thomas Huth" <thuth@redhat.com>,
	"Stefano Stabellini" <sstabellini@kernel.org>,
	"Eduardo Habkost" <ehabkost@redhat.com>,
	"Paul Durrant" <paul@xen.org>, "Jason Wang" <jasowang@redhat.com>,
	"Marcelo Tosatti" <mtosatti@redhat.com>,
	qemu-devel@nongnu.org, "Peter Xu" <peterx@redhat.com>,
	"Dario Faggioli" <dfaggioli@suse.com>,
	"Roman Bolshakov" <r.bolshakov@yadro.com>,
	"Wenchao Wang" <wenchao.wang@intel.com>,
	haxm-team@intel.com, "Cameron Esfahani" <dirty@apple.com>,
	"Anthony Perard" <anthony.perard@citrix.com>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Sunil Muthuswamy" <sunilmut@microsoft.com>,
	"Bruce Rogers" <brogers@suse.com>,
	"Philippe Mathieu-Daudé" <philmd@redhat.com>,
	"Richard Henderson" <rth@twiddle.net>,
	"Colin Xu" <colin.xu@intel.com>
Subject: Re: [RFC v1 09/10] i386: split cpu.c and defer x86 models registration
Date: Tue, 10 Nov 2020 11:13:27 +0100	[thread overview]
Message-ID: <b2c67c49-db3d-b752-c4f8-9dc4e81601cf@suse.de> (raw)
In-Reply-To: <20201110100438.GF866671@redhat.com>

On 11/10/20 11:04 AM, Daniel P. Berrangé wrote:
> On Tue, Nov 10, 2020 at 10:40:04AM +0100, Claudio Fontana wrote:
>> On 11/9/20 7:03 PM, Daniel P. Berrangé wrote:
>>> On Mon, Nov 09, 2020 at 06:27:54PM +0100, Claudio Fontana wrote:
>>>> split cpu.c into:
>>>>
>>>> cpu.c            cpuid and common x86 cpu functionality
>>>> host-cpu.c       host x86 cpu functions and "host" cpu type
>>>> kvm-cpu-type.c   KVM x86 cpu type
>>>> hvf-cpu-type.c   HVF x86 cpu type
>>>> tcg-cpu-type.c   TCG x86 cpu type
>>>>
>>>> Defer the x86 models registration to MODULE_INIT_ACCEL_CPU,
>>>> so that accel-specific types can be used as parent types for all
>>>> cpu models. Use the generic TYPE_X86_CPU only if no
>>>> accel-specific specialization is enabled.
>>>
>>> Can you give more info on why this is needed and/or desirable ?
>>
>> Hello Daniel, there is a pointer to the overall higher level motivation in the cover letter.
>>
>> But I am not pushing for this specific mechanism to be used, as mentioned in the cover letter.
>>
>> If we need another mechanism to achieve that (not delaying the x86 model registration and make them inherit from the specialized class), but something else,
>> I would be happy to get additional ideas.
>>
>>>
>>> Dynamically changing the class hierarchy of CPUs at runtime feels
>>> like a rather suspicious approach to me
>>
>> TYPE_X86_CPU is base type is registered as usual.
>> New accel-specialized types are defined (TYPE_TCG_CPU, TYPE_KVM_CPU, TYPE_HVF_CPU), also using normal type registration.
>>
>> The missing step is how to adapt all the cpu models to use the functionality.
> 
> If I understand the problem correctly, we have two distinct axis of
> configurability
> 
>  - the CPU model definitions (Nehalem, Broadwell, Skylake, host, max)
>  - the accelerator CPU implementations (tcg, kvm, hvf).
> 
> At runtime any pair of objects from these two axis can be combined.
> 
> We're trying to avoid defining classes for the combinatorial expansion
> of these axis.
> 
> This patch series encodes these two axis in a single class hierarchy,
> with the CPU implementations being a parent of the CPU model definitions.
> It avoids the combinatorial expansion, by taking the approach of dynamically
> defining the parent/child relation between CPU impl and CPU defintion at
> runtime  baed on the choosen accelerator impl.
> 
> The fully static way to deal with this problem is to accept that distinct
> axis should be represented as distinct class hierarchies.
> 
> ie, we should have one class hierarchy for CPU model definitions, and
> one class hierarchy  for accelerator CPU implementations.
> 
> So at runtime we then get two object instances - a CPU implementation
> and a CPU definition. The CPU implementation object should have a
> property which is a link to the desired CPU definition.
> 
> 
>> The accelerator that is finally chosen to be used is only known at a specific point in the qemu initialization.
>> This point of time I defined as MODULE_INIT_ACCEL_CPU.
>>
>> That is the time when we know how the CPU should actually really behave (how it should be realized, etc).
>>
>> In this series I realized this by registering the cpu models only at MODULE_INIT_ACCEL_CPU time, and not earlier.
>> But maybe there is a better idea on how to do it, and I am all ears.
>>
>> .
>>>
>>> It is contrary to work we've been doing recently to try to make all
>>> classes be fully statically defined by getting rid of dynamic properties,
>>> such that introspection of classes does not depend on other CLI flags
>>> you might have passed.
>>
>> Understood, this goes against other requirements.
>>
>> The dynamism introduced here is to register the cpu models at MODULE_INIT_ACCEL_CPU time instead of MODULE_INIT_QOM time.
>> As a result, for any chosen accelerator, the type tree and class tree is identical.
> 
> For introspection the goal is that the type tree and class tree is
> identical for a *binary*, not an accelerator within a binary.
> 
> 
> Regards,
> Daniel
> 

Thanks Daniel for your comments, I am going to think these through and see if I can build a model like you suggest
(with the cpu implementation axis separate from the cpu model definitions axis),

as a possible other way forward.

Ciao,

Claudio




  reply	other threads:[~2020-11-10 10:14 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-11-09 17:27 [RFC v1 00/10] i386 cleanup Claudio Fontana
2020-11-09 17:27 ` [RFC v1 01/10] i386: move kvm accel files into accel/kvm/ Claudio Fontana
2020-11-09 17:27 ` [RFC v1 02/10] i386: move whpx accel files to accel/whpx/ Claudio Fontana
2020-11-09 17:27 ` [RFC v1 03/10] i386: move hax accel files to accel/hax/ Claudio Fontana
2020-11-09 17:27 ` [RFC v1 04/10] i386: move hvf accel files into accel/hvf/ Claudio Fontana
2020-11-09 17:27 ` [RFC v1 05/10] i386: move TCG accel files into accel/tcg/ Claudio Fontana
2020-11-09 17:27 ` [RFC v1 06/10] i386: move cpu dump out of helper.c into cpu-dump.c Claudio Fontana
2020-11-09 17:27 ` [RFC v1 07/10] i386: move TCG cpu class initialization out of helper.c Claudio Fontana
2020-11-09 17:39   ` Paolo Bonzini
2020-11-10 10:05     ` Claudio Fontana
2020-11-10 10:42       ` Paolo Bonzini
2020-11-09 17:27 ` [RFC v1 08/10] module: introduce MODULE_INIT_ACCEL_CPU Claudio Fontana
2020-11-09 17:27 ` [RFC v1 09/10] i386: split cpu.c and defer x86 models registration Claudio Fontana
2020-11-09 17:34   ` Paolo Bonzini
2020-11-09 17:37   ` Paolo Bonzini
2020-11-09 18:03   ` Daniel P. Berrangé
2020-11-10  9:40     ` Claudio Fontana
2020-11-10 10:04       ` Daniel P. Berrangé
2020-11-10 10:13         ` Claudio Fontana [this message]
2020-11-10 10:41         ` Paolo Bonzini
2020-11-10 15:23           ` Eduardo Habkost
2020-11-10 16:05             ` Paolo Bonzini
2020-11-10 17:55               ` Eduardo Habkost
2020-11-10 20:39                 ` Paolo Bonzini
2020-11-10 20:45                   ` Eduardo Habkost
2020-11-10 17:38             ` Claudio Fontana
2020-11-10 18:14               ` Eduardo Habkost
2020-11-11 12:59                 ` Claudio Fontana
2020-11-16 17:53             ` Claudio Fontana
2020-11-09 19:04   ` Eduardo Habkost
2020-11-10  9:49     ` Claudio Fontana
2020-11-09 17:27 ` [RFC v1 10/10] module: add priority to module_init Claudio Fontana
2020-11-09 17:45 ` [RFC v1 00/10] i386 cleanup no-reply

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=b2c67c49-db3d-b752-c4f8-9dc4e81601cf@suse.de \
    --to=cfontana@suse.de \
    --cc=anthony.perard@citrix.com \
    --cc=berrange@redhat.com \
    --cc=brogers@suse.com \
    --cc=colin.xu@intel.com \
    --cc=dfaggioli@suse.com \
    --cc=dirty@apple.com \
    --cc=ehabkost@redhat.com \
    --cc=haxm-team@intel.com \
    --cc=jasowang@redhat.com \
    --cc=lvivier@redhat.com \
    --cc=mtosatti@redhat.com \
    --cc=paul@xen.org \
    --cc=pbonzini@redhat.com \
    --cc=peterx@redhat.com \
    --cc=philmd@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=r.bolshakov@yadro.com \
    --cc=rth@twiddle.net \
    --cc=sstabellini@kernel.org \
    --cc=sunilmut@microsoft.com \
    --cc=thuth@redhat.com \
    --cc=wenchao.wang@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).