All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Alex Bennée" <alex.bennee@linaro.org>
To: Akihiko Odaki <akihiko.odaki@daynix.com>
Cc: qemu-devel@nongnu.org,
	"Philippe Mathieu-Daudé" <philmd@linaro.org>,
	"Cleber Rosa" <crosa@redhat.com>,
	"Wainer dos Santos Moschetta" <wainersm@redhat.com>,
	"Beraldo Leal" <bleal@redhat.com>
Subject: Re: [PATCH v2] tests/avocado: re-factor igb test to avoid timeouts
Date: Thu, 23 Mar 2023 09:11:33 +0000	[thread overview]
Message-ID: <87ttyb4yq1.fsf@linaro.org> (raw)
In-Reply-To: <a289194c-9187-a152-c3cc-12244e05603f@daynix.com>


Akihiko Odaki <akihiko.odaki@daynix.com> writes:

> On 2023/03/22 23:55, Alex Bennée wrote:
>> The core of the test was utilising "ethtool -t eth1 offline" to run
>> through a test sequence. For reasons unknown the test hangs under some
>> configurations of the build on centos8-stream. Fundamentally running
>> the old fedora-31 cloud-init is just too much for something that is
>> directed at testing one device. So we:
>>    - replace fedora with a custom kernel + buildroot rootfs
>>    - rename the test from IGB to NetDevEthtool
>>    - re-factor the common code, add (currently skipped) tests for other
>>       devices which support ethtool
>>    - remove the KVM limitation as its fast enough to run in KVM or TCG
>> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
>> Cc: Akihiko Odaki <akihiko.odaki@daynix.com>
>> ---
>> v2
>>    - use squashfs instead of largely empty ext4 device
>>    - use read-only cdrom
>>    - don't bother with login favour of direct call from init
>>    - kill VM once test is passed
>>    - add explicit kvm option
>
> Why did you add explicit kvm option? Is there something not likely
> covered with TCG?

I realised it was the case that the previous igb tested so I added for
completeness. What I really wanted to do was to make the test agnostic
so it would use KVM when available and fall back to TCG when it
couldn't. However my attempt to specify --accel kvm,tcg didn't work.

But yes I doubt there is much coverage difference between the two -
certainly in the emulation side.

>
> Regards,
> Akihiko Odaki
>
>>    - add tags for device type
>> ---
>>   tests/avocado/igb.py            |  38 -----------
>>   tests/avocado/netdev-ethtool.py | 116 ++++++++++++++++++++++++++++++++
>>   2 files changed, 116 insertions(+), 38 deletions(-)
>>   delete mode 100644 tests/avocado/igb.py
>>   create mode 100644 tests/avocado/netdev-ethtool.py
>> diff --git a/tests/avocado/igb.py b/tests/avocado/igb.py
>> deleted file mode 100644
>> index abf5dfa07f..0000000000
>> --- a/tests/avocado/igb.py
>> +++ /dev/null
>> @@ -1,38 +0,0 @@
>> -# SPDX-License-Identifier: GPL-2.0-or-later
>> -# ethtool tests for igb registers, interrupts, etc
>> -
>> -from avocado_qemu import LinuxTest
>> -
>> -class IGB(LinuxTest):
>> -    """
>> -    :avocado: tags=accel:kvm
>> -    :avocado: tags=arch:x86_64
>> -    :avocado: tags=distro:fedora
>> -    :avocado: tags=distro_version:31
>> -    :avocado: tags=machine:q35
>> -    """
>> -
>> -    timeout = 180
>> -
>> -    def test(self):
>> -        self.require_accelerator('kvm')
>> -        kernel_url = self.distro.pxeboot_url + 'vmlinuz'
>> -        kernel_hash = '5b6f6876e1b5bda314f93893271da0d5777b1f3c'
>> -        kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
>> -        initrd_url = self.distro.pxeboot_url + 'initrd.img'
>> -        initrd_hash = 'dd0340a1b39bd28f88532babd4581c67649ec5b1'
>> -        initrd_path = self.fetch_asset(initrd_url, asset_hash=initrd_hash)
>> -
>> -        # Ideally we want to test MSI as well, but it is blocked by a bug
>> -        # fixed with:
>> -        # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=28e96556baca7056d11d9fb3cdd0aba4483e00d8
>> -        kernel_params = self.distro.default_kernel_params + ' pci=nomsi'
>> -
>> -        self.vm.add_args('-kernel', kernel_path,
>> -                         '-initrd', initrd_path,
>> -                         '-append', kernel_params,
>> -                         '-accel', 'kvm',
>> -                         '-device', 'igb')
>> -        self.launch_and_wait()
>> -        self.ssh_command('dnf -y install ethtool')
>> -        self.ssh_command('ethtool -t eth1 offline')
>> diff --git a/tests/avocado/netdev-ethtool.py b/tests/avocado/netdev-ethtool.py
>> new file mode 100644
>> index 0000000000..f7e9464184
>> --- /dev/null
>> +++ b/tests/avocado/netdev-ethtool.py
>> @@ -0,0 +1,116 @@
>> +# ethtool tests for emulated network devices
>> +#
>> +# This test leverages ethtool's --test sequence to validate network
>> +# device behaviour.
>> +#
>> +# SPDX-License-Identifier: GPL-2.0-or-late
>> +
>> +from avocado import skip
>> +from avocado_qemu import QemuSystemTest
>> +from avocado_qemu import exec_command, exec_command_and_wait_for_pattern
>> +from avocado_qemu import wait_for_console_pattern
>> +
>> +class NetDevEthtool(QemuSystemTest):
>> +    """
>> +    :avocado: tags=arch:x86_64
>> +    :avocado: tags=machine:q35
>> +    """
>> +
>> +    # Runs in about 17s under KVM, 19s under TCG, 25s under GCOV
>> +    timeout = 45
>> +
>> +    # Fetch assets from the netdev-ethtool subdir of my shared test
>> +    # images directory on fileserver.linaro.org.
>> +    def get_asset(self, name, sha1):
>> +        base_url = ('https://fileserver.linaro.org/s/'
>> +                    'kE4nCFLdQcoBF9t/download?'
>> +                    'path=%2Fnetdev-ethtool&files=' )
>> +        url = base_url + name
>> +        # use explicit name rather than failing to neatly parse the
>> +        # URL into a unique one
>> +        return self.fetch_asset(name=name, locations=(url), asset_hash=sha1)
>> +
>> +    def common_test_code(self, netdev, extra_args=None, kvm=False):
>> +
>> +        # This custom kernel has drivers for all the supported network
>> +        # devices we can emulate in QEMU
>> +        kernel = self.get_asset("bzImage",
>> +                                "33469d7802732d5815226166581442395cb289e2")
>> +
>> +        rootfs = self.get_asset("rootfs.squashfs",
>> +                                "9793cea7021414ae844bda51f558bd6565b50cdc")
>> +
>> +        append = 'printk.time=0 console=ttyS0 '
>> +        append += 'root=/dev/sr0 rootfstype=squashfs '
>> +
>> +        # any additional kernel tweaks for the test
>> +        if extra_args:
>> +            append += extra_args
>> +
>> +        # finally invoke ethtool directly
>> +        append += ' init=/usr/sbin/ethtool -- -t eth1 offline'
>> +
>> +        # add the rootfs via a readonly cdrom image
>> +        drive = f"file={rootfs},if=ide,index=0,media=cdrom"
>> +
>> +        self.vm.add_args('-kernel', kernel,
>> +                         '-append', append,
>> +                         '-drive', drive,
>> +                         '-device', netdev)
>> +
>> +        if kvm:
>> +            self.vm.add_args('-accel', 'kvm')
>> +
>> +        self.vm.set_console(console_index=0)
>> +        self.vm.launch()
>> +
>> +        wait_for_console_pattern(self,
>> +                                 "The test result is PASS",
>> +                                 "The test result is FAIL",
>> +                                 vm=None)
>> +        # no need to gracefully shutdown, just finish
>> +        self.vm.kill()
>> +
>> +    # Skip testing for MSI for now. Allegedly it was fixed by:
>> +    #   28e96556ba (igb: Allocate MSI-X vector when testing)
>> +    # but I'm seeing oops in the kernel
>> +    @skip("Kernel bug with MSI enabled")
>> +    def test_igb(self):
>> +        """
>> +        :avocado: tags=device:igb
>> +        """
>> +        self.common_test_code("igb")
>> +
>> +    def test_igb_nomsi(self):
>> +        """
>> +        :avocado: tags=device:igb
>> +        """
>> +        self.common_test_code("igb", "pci=nomsi")
>> +
>> +    def test_igb_nomsi_kvm(self):
>> +        """
>> +        :avocado: tags=device:igb
>> +        """
>> +        self.require_accelerator('kvm')
>> +        self.common_test_code("igb", "pci=nomsi", True)
>> +
>> +    # It seems the other popular cards we model in QEMU currently fail
>> +    # the pattern test with:
>> +    #
>> +    #   pattern test failed (reg 0x00178): got 0x00000000 expected 0x00005A5A
>> +    #
>> +    # So for now we skip them.
>> +
>> +    @skip("Incomplete reg 0x00178 support")
>> +    def test_e1000(self):
>> +        """
>> +        :avocado: tags=device:e1000
>> +        """
>> +        self.common_test_code("e1000")
>> +
>> +    @skip("Incomplete reg 0x00178 support")
>> +    def test_i82550(self):
>> +        """
>> +        :avocado: tags=device:i82550
>> +        """
>> +        self.common_test_code("i82550")


-- 
Alex Bennée
Virtualisation Tech Lead @ Linaro


      reply	other threads:[~2023-03-23  9:14 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-22 14:55 [PATCH v2] tests/avocado: re-factor igb test to avoid timeouts Alex Bennée
2023-03-23  2:46 ` Akihiko Odaki
2023-03-23  9:11   ` Alex Bennée [this message]

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=87ttyb4yq1.fsf@linaro.org \
    --to=alex.bennee@linaro.org \
    --cc=akihiko.odaki@daynix.com \
    --cc=bleal@redhat.com \
    --cc=crosa@redhat.com \
    --cc=philmd@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=wainersm@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.