From: Eduardo Habkost <ehabkost@redhat.com>
To: Cleber Rosa <crosa@redhat.com>
Cc: "Philippe Mathieu-Daudé" <philmd@redhat.com>,
qemu-devel@nongnu.org, "Alex Bennée" <alex.bennee@linaro.org>,
"Fam Zheng" <famz@redhat.com>,
"Philippe Mathieu-Daudé" <pmathieu@redhat.com>,
"Caio Carrara" <ccarrara@redhat.com>,
"Stefan Hajnoczi" <stefanha@redhat.com>,
"Laszlo Ersek" <lersek@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v2 4/7] scripts/qemu.py: set predefined machine type based on arch
Date: Thu, 11 Oct 2018 00:42:46 -0300 [thread overview]
Message-ID: <20181011034246.GP5738@habkost.net> (raw)
In-Reply-To: <963e4f75-76a1-d3f3-3a03-b8de13429175@redhat.com>
On Wed, Oct 10, 2018 at 08:17:26PM -0400, Cleber Rosa wrote:
>
>
> On 10/10/18 11:47 AM, Cleber Rosa wrote:
> >
> >
> > On 10/10/18 10:28 AM, Eduardo Habkost wrote:
> >> On Wed, Oct 10, 2018 at 10:15:15AM -0400, Cleber Rosa wrote:
> >>>
> >>>
> >>> On 10/10/18 9:59 AM, Cleber Rosa wrote:
> >>>>
> >>>>
> >>>> On 10/10/18 9:46 AM, Eduardo Habkost wrote:
> >>>>> On Wed, Oct 10, 2018 at 08:35:38AM -0400, Cleber Rosa wrote:
> >>>>>>
> >>>>>>
> >>>>>> On 10/10/18 7:00 AM, Philippe Mathieu-Daudé wrote:
> >>>>>>> On 10/10/2018 01:26, Cleber Rosa wrote:
> >>>>>>>> Some targets require a machine type to be set, as there's no default
> >>>>>>>> (aarch64 is one example). To give a consistent interface to users of
> >>>>>>>> this API, this changes set_machine() so that a predefined default can
> >>>>>>>> be used, if one is not given. The approach used is exactly the same
> >>>>>>>> with the console device type.
> >>>>>>>>
> >>>>>>>> Also, even when there's a default machine type, for some purposes,
> >>>>>>>> testing included, it's better if outside code is explicit about the
> >>>>>>>> machine type, instead of relying on whatever is set internally.
> >>>>>>>>
> >>>>>>>> Signed-off-by: Cleber Rosa <crosa@redhat.com>
> >>>>>>>> ---
> >>>>>>>> scripts/qemu.py | 22 +++++++++++++++++++++-
> >>>>>>>> 1 file changed, 21 insertions(+), 1 deletion(-)
> >>>>>>>>
> >>>>>>>> diff --git a/scripts/qemu.py b/scripts/qemu.py
> >>>>>>>> index d9e24a0c1a..fca9b76990 100644
> >>>>>>>> --- a/scripts/qemu.py
> >>>>>>>> +++ b/scripts/qemu.py
> >>>>>>>> @@ -36,6 +36,15 @@ CONSOLE_DEV_TYPES = {
> >>>>>>>> r'^s390-ccw-virtio.*': 'sclpconsole',
> >>>>>>>> }
> >>>>>>>>
> >>>>>>>> +#: Maps archictures to the preferred machine type
> >>>>>>>> +MACHINE_TYPES = {
> >>>>>>>> + r'^aarch64$': 'virt',
> >>>>>>>> + r'^ppc$': 'g3beige',
> >>>>>>>> + r'^ppc64$': 'pseries',
> >>>>>>>> + r'^s390x$': 's390-ccw-virtio',
> >>>>>>>> + r'^x86_64$': 'q35',
> >>>>>>>
> >>>>>>> Why choose Q35 rather than PC (the default)?
> >>>>>>>
> >>>>>>> I was wondering about how to generate variants/machines.json but this is
> >>>>>>> definitively something we want to do via a QMP query.
> >>>>>>>
> >>>>>>> Eduardo what do you think?
> >>>>>>>
> >>>>>>
> >>>>>> It was motivated by Eduardo's initiative to make q35 the default "across
> >>>>>> the board". He can confirm and give more details.
> >>>>>
> >>>>> Making Q35 the default on applications using QEMU and libvirt is
> >>>>> something I'd like to happen. But I think the simplest way to do
> >>>>> that is to change the QEMU default. This way you won't need this
> >>>>> table on qemu.py: you can just use the default provided by QEMU.
> >>>>>
> >>>>
> >>>> The idea is to bring consistency on how we're calling
> >>>> "qemu-system-$(ARCH)", and at the same time apply the "explicit is
> >>>> better than implicit" rule.
> >>>>
> >>>> The most important fact is that some targets do not (currently) have
> >>>> "the default provided by QEMU", aarch64 is one of them.
> >>>>
> >>>> - Cleber.
> >>>>
> >>>
> >>> So I ended up not relaying the question properly: should we default
> >>> (even if explicitly adding "-machine") to "pc"?
> >>
> >> I think using the default machine-type (when QEMU has a default)
> >> would be less surprising for users of the qemu.py API.
> >>
> >
> > OK, agreed.
> >
> >> Implicitly adding -machine when there's no default is also
> >> surprising, but then it's a nice surprise: instead of crashing
> >> you get a running VM.
> >>
> >> Now, there are two other questions related to this:
> >>
> >> If using 'pc' as default, should we always add -machine, or just
> >> omit the machine-type name? I think we should omit it unless the
> >> caller asked for a specific machine-type name (because it would
> >> be less surprising for users of the API).
> >>
> >
>
> Getting down to business, trying to apply those changes, I was faced
> with a situation. Actually, the same situation I faced a few months
> ago. Handling it was defered until it was *really* a blocker.
> Basically the issue is: the set_console() method, which gives tests a
> ready to use console, depends on knowing the machine type (see
> CONSOLE_DEV_TYPES).
>
> As a case study, let's look at "boot_console_linux.py":
> 1) it sets the machine type explicitly
> 2) it has nothing to do with the specific machine type
> 3) the setting of a machine type is boiler plate code to set a console
> 4) the console is used on the test's real purpose: verifying the Linux
> kernel booted
>
> Now, to be able to run the same test -- booting a Linux kernel -- on
> *other target archs*, we need the same machinery. Even more important:
> to have similar tests we'll need to either abstract those features or
> duplicate them. This can be seen, at least in part, on the firmware
> tests that Philippe sent to the list: they would also benefit from
> having a console device ready to be used on the configured machine type[1]:
>
> Assuming that we want to provide this type of machinery for free (or as
> close as that) to the acceptance/functional tests, we need some source
> of "known good" configuration for the targets we aim to support.
>
> Let's restrict the discussion to the issue at hand, machine types, while
> keeping in mind that the same pattern happened with devices types to use
> as console before, and my experience running into default network device
> types in further work (tests that interact with the guest by ssh'ing
> into it).
>
> The solutions I can think of are:
>
> 1) run the target binary previous to the "real" run, and query
> information -- this is what Avocado-VT does[2], and something I tried on
> earlier versions of the acceptance tests infrastructure code
>
> 2) attempt to get this information from the build system[3]
>
> 3) hard code the "known" good configuration
>
> I've previously worked on solutions along the lines of #1 and #2, but
> the general feedback wasn't that positive, for valid reasons. Eduardo
> probably remembers this.
I don't remember seeing negative feedback for #1. It sounds like
the best solution.
>
> So, I'm tempted to try solution #3. As much as duplicating target
> defaults in qemu.py doesn't sound perfect, it seems to be the more
> predictable and attainable solution at this point.
I consider #3 to be acceptable just as a temporary solution until
we implement #1.
>
> Thoughts?
>
> Thanks!
> - Cleber.
>
> [1] - https://lists.gnu.org/archive/html/qemu-devel/2018-10/msg00591.html
> [2] -
> https://github.com/avocado-framework/avocado-vt/blob/65.0/virttest/utils_misc.py#L2105
> [3] - http://lists.gnu.org/archive/html/qemu-devel/2017-07/msg06757.html
>
> > OK.
> >
> >> About our default testing configuration for acceptance tests:
> >> should acceptance tests run against PC by default? Should it
> >> test Q35? Should we test both PC and Q35? I'm not sure what's
> >> the answer, but I think these decisions shouldn't affect the
> >> qemu.py API at all.
> >>
> >
> > OK.
> >
> > To make sure we're on the same page, we're still going to have default
> > machine types, based on the arch, for those targets that don't provide
> > one (aarch64 is one example). Right?
> >
> > - Cleber.
> >
--
Eduardo
next prev parent reply other threads:[~2018-10-11 3:43 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-10-09 23:26 [Qemu-devel] [PATCH v2 0/7] Acceptance Tests: basic architecture support Cleber Rosa
2018-10-09 23:26 ` [Qemu-devel] [PATCH v2 1/7] Acceptance Tests: improve docstring on pick_default_qemu_bin() Cleber Rosa
2018-10-09 23:26 ` [Qemu-devel] [PATCH v2 2/7] Acceptance Tests: introduce arch parameter and attribute Cleber Rosa
2018-10-10 11:03 ` Philippe Mathieu-Daudé
2018-10-09 23:26 ` [Qemu-devel] [PATCH v2 3/7] scripts/qemu.py: add method and private attribute for arch Cleber Rosa
2018-10-10 10:52 ` Philippe Mathieu-Daudé
2018-10-09 23:26 ` [Qemu-devel] [PATCH v2 4/7] scripts/qemu.py: set predefined machine type based on arch Cleber Rosa
2018-10-10 11:00 ` Philippe Mathieu-Daudé
2018-10-10 12:35 ` Cleber Rosa
2018-10-10 13:46 ` Eduardo Habkost
2018-10-10 13:59 ` Cleber Rosa
2018-10-10 14:15 ` Cleber Rosa
2018-10-10 14:28 ` Eduardo Habkost
2018-10-10 15:26 ` Philippe Mathieu-Daudé
2018-10-10 15:58 ` Cleber Rosa
2018-10-10 16:08 ` Philippe Mathieu-Daudé
2018-10-10 18:08 ` Cleber Rosa
2018-10-10 15:31 ` Daniel P. Berrangé
2018-10-10 16:02 ` Cleber Rosa
2018-10-10 15:47 ` Cleber Rosa
2018-10-10 16:23 ` Peter Maydell
2018-10-10 17:52 ` Cleber Rosa
2018-10-10 18:07 ` Peter Maydell
2018-10-10 19:54 ` Cleber Rosa
2018-10-11 17:31 ` Peter Maydell
2018-10-11 0:17 ` Cleber Rosa
2018-10-11 3:42 ` Eduardo Habkost [this message]
2018-10-11 4:43 ` Cleber Rosa
2018-10-11 17:21 ` Eduardo Habkost
2018-10-09 23:26 ` [Qemu-devel] [PATCH v2 5/7] Acceptance Tests: set machine type Cleber Rosa
2018-10-09 23:26 ` [Qemu-devel] [PATCH v2 6/7] Acceptance Tests: add variants definition for architectures Cleber Rosa
2018-10-10 10:51 ` Philippe Mathieu-Daudé
2018-10-10 12:59 ` Cleber Rosa
2018-10-10 10:59 ` Philippe Mathieu-Daudé
2018-10-10 12:48 ` Cleber Rosa
2018-10-09 23:26 ` [Qemu-devel] [PATCH v2 7/7] Acceptance Tests: change the handling of tests for specific archs Cleber Rosa
2018-10-10 10:50 ` Philippe Mathieu-Daudé
2018-10-10 13:09 ` Cleber Rosa
2018-10-13 11:08 ` Philippe Mathieu-Daudé
2018-10-15 13:52 ` Cleber Rosa
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=20181011034246.GP5738@habkost.net \
--to=ehabkost@redhat.com \
--cc=alex.bennee@linaro.org \
--cc=ccarrara@redhat.com \
--cc=crosa@redhat.com \
--cc=famz@redhat.com \
--cc=lersek@redhat.com \
--cc=philmd@redhat.com \
--cc=pmathieu@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@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.