mbox series

[v2,00/14] tests/vm: Add support for aarch64 VMs

Message ID 20200219163537.22098-1-robert.foley@linaro.org (mailing list archive)
Headers show
Series tests/vm: Add support for aarch64 VMs | expand

Message

Robert Foley Feb. 19, 2020, 4:35 p.m. UTC
This is version 2 of the patch series to 
add support for aarch64 VMs.  
 - Ubuntu 18.04 aarch64 VM
 - CentOS 8 aarch64 VM

V1: https://lists.gnu.org/archive/html/qemu-devel/2020-02/msg01180.html

Changes in version 2
- Most changes relate to the patch: "Add workaround to consume console".
   - We changed this patch to make it cleaner.
   - We added a ConsoleSocket, which slots in for the current console socket
     with the difference being that we drain this socket in the background on a
     callback basis.  
   - We also made the logging of the console to file optional
 - Relocated the log file path and name. For example:
   ~/.cache/qemu-vm/ubuntu.aarch64.install.log 
- Made one fix for a hang issue we were seeing.
  - The issue was a timing problem around a reboot where the
     ubuntu.aarch64 script assumed the reboot guaranteed that 
     the next successful command would occur after the reboot.
   - The fix is to simply make it more deterministic by shutting down the
     VM and restarting it instead of issuing the reboot.
- Made a few changes to CentOS VM to update its dependencies properly.
- We made a few changes related to latin1 vs utf-8.
  We found in some cases the latin1 is needed for chars coming out of the i
  socket which do not have a utf-8 equivalent.

Robert Foley (14):
  tests/vm: use $(PYTHON) consistently
  tests/vm: Debug mode shows ssh output.
  tests/vm: increased max timeout for vm boot.
  tests/vm: give wait_ssh() option to wait for root
  tests/vm: Added gen_cloud_init_iso() to basevm.py
  tests/vm: Add workaround to consume console
  tests/vm: Add configuration to basevm.py
  tests/vm: Added configuration file support
  tests/vm: add --boot-console switch
  tests/vm: Add ability to select QEMU from current build.
  tests/vm: allow wait_ssh() to specify command
  tests/vm: Added a new script for ubuntu.aarch64.
  tests/vm: Added a new script for centos.aarch64.
  tests/vm: change scripts to use self._config

 python/qemu/console_socket.py     | 162 ++++++++++++++++
 python/qemu/machine.py            |  12 +-
 tests/vm/Makefile.include         |  20 +-
 tests/vm/aarch64vm.py             | 100 ++++++++++
 tests/vm/basevm.py                | 294 +++++++++++++++++++++++++-----
 tests/vm/centos                   |  33 +---
 tests/vm/centos-8-aarch64.ks      |  51 ++++++
 tests/vm/centos.aarch64           | 224 +++++++++++++++++++++++
 tests/vm/conf_example_aarch64.yml |  51 ++++++
 tests/vm/conf_example_x86.yml     |  50 +++++
 tests/vm/fedora                   |  17 +-
 tests/vm/freebsd                  |  16 +-
 tests/vm/netbsd                   |  19 +-
 tests/vm/openbsd                  |  17 +-
 tests/vm/ubuntu.aarch64           | 117 ++++++++++++
 tests/vm/ubuntu.i386              |  37 +---
 16 files changed, 1069 insertions(+), 151 deletions(-)
 create mode 100644 python/qemu/console_socket.py
 create mode 100644 tests/vm/aarch64vm.py
 create mode 100644 tests/vm/centos-8-aarch64.ks
 create mode 100755 tests/vm/centos.aarch64
 create mode 100644 tests/vm/conf_example_aarch64.yml
 create mode 100644 tests/vm/conf_example_x86.yml
 create mode 100755 tests/vm/ubuntu.aarch64

Comments

Alex Bennée March 2, 2020, 4:38 p.m. UTC | #1
Robert Foley <robert.foley@linaro.org> writes:

> This is version 2 of the patch series to 
> add support for aarch64 VMs.  
>  - Ubuntu 18.04 aarch64 VM
>  - CentOS 8 aarch64 VM
>
> V1: https://lists.gnu.org/archive/html/qemu-devel/2020-02/msg01180.html
>
> Changes in version 2
> - Most changes relate to the patch: "Add workaround to consume console".
>    - We changed this patch to make it cleaner.
>    - We added a ConsoleSocket, which slots in for the current console socket
>      with the difference being that we drain this socket in the background on a
>      callback basis.  
>    - We also made the logging of the console to file optional
>  - Relocated the log file path and name. For example:
>    ~/.cache/qemu-vm/ubuntu.aarch64.install.log 
> - Made one fix for a hang issue we were seeing.
>   - The issue was a timing problem around a reboot where the
>      ubuntu.aarch64 script assumed the reboot guaranteed that 
>      the next successful command would occur after the reboot.
>    - The fix is to simply make it more deterministic by shutting down the
>      VM and restarting it instead of issuing the reboot.
> - Made a few changes to CentOS VM to update its dependencies properly.
> - We made a few changes related to latin1 vs utf-8.
>   We found in some cases the latin1 is needed for chars coming out of the i
>   socket which do not have a utf-8 equivalent.
>
> Robert Foley (14):
>   tests/vm: use $(PYTHON) consistently
>   tests/vm: Debug mode shows ssh output.
>   tests/vm: increased max timeout for vm boot.
>   tests/vm: give wait_ssh() option to wait for root
>   tests/vm: Added gen_cloud_init_iso() to basevm.py

For now I've pulled the first 5 patches into testing/next as they are
obvious clean-ups.

>   tests/vm: Add workaround to consume console

I still have concerns about this approach but I'm going to give it some
more testing. However I ran into problems testing on my aarch64 box
because of a missing gen-iso-image which makes me think we need to add
some gating via configure for tools and libraries we need.

>   tests/vm: Add configuration to basevm.py
>   tests/vm: Added configuration file support
>   tests/vm: add --boot-console switch
>   tests/vm: Add ability to select QEMU from current build.
>   tests/vm: allow wait_ssh() to specify command
>   tests/vm: Added a new script for ubuntu.aarch64.
>   tests/vm: Added a new script for centos.aarch64.
>   tests/vm: change scripts to use self._config
>
>  python/qemu/console_socket.py     | 162 ++++++++++++++++
>  python/qemu/machine.py            |  12 +-
>  tests/vm/Makefile.include         |  20 +-
>  tests/vm/aarch64vm.py             | 100 ++++++++++
>  tests/vm/basevm.py                | 294 +++++++++++++++++++++++++-----
>  tests/vm/centos                   |  33 +---
>  tests/vm/centos-8-aarch64.ks      |  51 ++++++
>  tests/vm/centos.aarch64           | 224 +++++++++++++++++++++++
>  tests/vm/conf_example_aarch64.yml |  51 ++++++
>  tests/vm/conf_example_x86.yml     |  50 +++++
>  tests/vm/fedora                   |  17 +-
>  tests/vm/freebsd                  |  16 +-
>  tests/vm/netbsd                   |  19 +-
>  tests/vm/openbsd                  |  17 +-
>  tests/vm/ubuntu.aarch64           | 117 ++++++++++++
>  tests/vm/ubuntu.i386              |  37 +---
>  16 files changed, 1069 insertions(+), 151 deletions(-)
>  create mode 100644 python/qemu/console_socket.py
>  create mode 100644 tests/vm/aarch64vm.py
>  create mode 100644 tests/vm/centos-8-aarch64.ks
>  create mode 100755 tests/vm/centos.aarch64
>  create mode 100644 tests/vm/conf_example_aarch64.yml
>  create mode 100644 tests/vm/conf_example_x86.yml
>  create mode 100755 tests/vm/ubuntu.aarch64
Robert Foley March 2, 2020, 9:23 p.m. UTC | #2
On Mon, 2 Mar 2020 at 11:38, Alex Bennée <alex.bennee@linaro.org> wrote:
>
>
> Robert Foley <robert.foley@linaro.org> writes:
>
> > This is version 2 of the patch series to
> > add support for aarch64 VMs.
> >  - Ubuntu 18.04 aarch64 VM
> >  - CentOS 8 aarch64 VM
>
> For now I've pulled the first 5 patches into testing/next as they are
> obvious clean-ups.
>
> >   tests/vm: Add workaround to consume console
>
> I still have concerns about this approach but I'm going to give it some
> more testing.

We are happy to make any adjustments here.  Our first set of
refactoring here was
aimed at making it more pythonic.  Is this where the concerns are?

> However I ran into problems testing on my aarch64 box
> because of a missing gen-iso-image which makes me think we need to add
> some gating via configure for tools and libraries we need.

Should we error out in configure if the tools and libraries needed to build the
VMs are not there?
Or maybe tolerate these dependencies not being there at configure time and
provide an error later when someone tries to vm-build these VMs?
Just curious which approach we should pursue here.


Thanks & Regards,
-Rob
Alex Bennée March 3, 2020, 10:24 a.m. UTC | #3
Robert Foley <robert.foley@linaro.org> writes:

> On Mon, 2 Mar 2020 at 11:38, Alex Bennée <alex.bennee@linaro.org> wrote:
>>
>>
>> Robert Foley <robert.foley@linaro.org> writes:
>>
>> > This is version 2 of the patch series to
>> > add support for aarch64 VMs.
>> >  - Ubuntu 18.04 aarch64 VM
>> >  - CentOS 8 aarch64 VM
>>
>> For now I've pulled the first 5 patches into testing/next as they are
>> obvious clean-ups.
>>
>> >   tests/vm: Add workaround to consume console
>>
>> I still have concerns about this approach but I'm going to give it some
>> more testing.
>
> We are happy to make any adjustments here.  Our first set of
> refactoring here was
> aimed at making it more pythonic.  Is this where the concerns are?

I'm just worried about the fragility of multiple steps in the chain of
io we are snooping on. That said Phillipe made a reasonable point that
other tools could be used - QMP for example would be the way to check
the status of the network connection before we trigger ssh rather than
the current busy-timeout approach. However that would result in more
complexity so if what works is stable...*shrug*

>> However I ran into problems testing on my aarch64 box
>> because of a missing gen-iso-image which makes me think we need to add
>> some gating via configure for tools and libraries we need.
>
> Should we error out in configure if the tools and libraries needed to build the
> VMs are not there?
> Or maybe tolerate these dependencies not being there at configure time and
> provide an error later when someone tries to vm-build these VMs?

We currently do both ;-)

When we can detect at configure time and skip in make we do - see
tests/docker/Makefile.include and the compiler tests for tests/tcg.
However the acceptance tests current use runtime decorators in python to
detect as we go - but that test framework prints a summary and doesn't
exit -1 to the rest of make if it skips something. 

> Just curious which approach we should pursue here.

Have a look at:

  Subject: [PATCH  v1 00/10] testing/next updates (tweaks and re-greening)
  Date: Mon,  2 Mar 2020 18:18:57 +0000
  Message-Id: <20200302181907.32110-1-alex.bennee@linaro.org>

and see what you think.

>
>
> Thanks & Regards,
> -Rob
Robert Foley March 3, 2020, 3:02 p.m. UTC | #4
On Tue, 3 Mar 2020 at 05:24, Alex Bennée <alex.bennee@linaro.org> wrote:

> > We are happy to make any adjustments here.  Our first set of
> > refactoring here was
> > aimed at making it more pythonic.  Is this where the concerns are?
>
> I'm just worried about the fragility of multiple steps in the chain of
> io we are snooping on. That said Phillipe made a reasonable point that
> other tools could be used - QMP for example would be the way to check
> the status of the network connection before we trigger ssh rather than
> the current busy-timeout approach. However that would result in more
> complexity so if what works is stable...*shrug*

OK.  Makes sense.  Thanks for explaining.

>
> >> However I ran into problems testing on my aarch64 box
> >> because of a missing gen-iso-image which makes me think we need to add
> >> some gating via configure for tools and libraries we need.
> >
> > Should we error out in configure if the tools and libraries needed to build the
> > VMs are not there?
> > Or maybe tolerate these dependencies not being there at configure time and
> > provide an error later when someone tries to vm-build these VMs?
>
> We currently do both ;-)
>
> When we can detect at configure time and skip in make we do - see
> tests/docker/Makefile.include and the compiler tests for tests/tcg.
> However the acceptance tests current use runtime decorators in python to
> detect as we go - but that test framework prints a summary and doesn't
> exit -1 to the rest of make if it skips something.
>
> > Just curious which approach we should pursue here.
>
> Have a look at:
>
>   Subject: [PATCH  v1 00/10] testing/next updates (tweaks and re-greening)
>   Date: Mon,  2 Mar 2020 18:18:57 +0000
>   Message-Id: <20200302181907.32110-1-alex.bennee@linaro.org>
>
> and see what you think.

Thanks for the details.
It seems we should be able to use a similar approach of detecting in
configure and then skip and inform in make, for the aarch64 VM dependencies,
as well as the yaml python dependency.  Will look into adding these.

Thanks & Regards,
-Rob