All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eric Auger <eric.auger@redhat.com>
To: wainersm@redhat.com, eric.auger.pro@gmail.com,
	qemu-devel@nongnu.org, philmd@redhat.com, crosa@redhat.com
Cc: wrampazz@redhat.com, peterx@redhat.com
Subject: Re: [PATCH v4 2/4] avocado_qemu: Add SMMUv3 tests
Date: Mon, 5 Jul 2021 10:00:29 +0200	[thread overview]
Message-ID: <d46e9c37-7989-451f-cb3d-edf0958911fd@redhat.com> (raw)
In-Reply-To: <a7b8faad-4535-f5f3-4f99-b13cf3dcfd7f@redhat.com>

Hi Wainer,

On 7/1/21 8:13 PM, Wainer dos Santos Moschetta wrote:
> Hi,
>
> On 6/29/21 11:36 AM, Eric Auger wrote:
>> Add new tests checking the good behavior of the SMMUv3 protecting
>> 2 virtio pci devices (block and net). We check the guest boots and
>> we are able to install a package. Different guest configs are tested:
>> standard, passthrough an strict=0. This is tested with both fedora 31
>> and
>> 33. The former uses a 5.3 kernel without range invalidation whereas the
>> latter uses a 5.8 kernel that features range invalidation.
>>
>> Signed-off-by: Eric Auger <eric.auger@redhat.com>
>>
>> ---
>>
>> v3 -> v4:
>> - add tags for machine, distro in the class
>> - removed smp and memory overrides
>> - set default param value of common_vm_setup to False
>>
>> v1 -> v2:
>> - removed ssh import
>> - combined add_command_args() and common_vm_setup()
>> - moved tags in class' docstring and added tags=arch:aarch64
>> - use self.get_default_kernel_params()
>> - added RIL tests with fed33 + introduce new tags
>> ---
>>   tests/acceptance/smmu.py | 132 +++++++++++++++++++++++++++++++++++++++
>>   1 file changed, 132 insertions(+)
>>   create mode 100644 tests/acceptance/smmu.py
>
> Reviewed-by: Wainer dos Santos Moschetta <wainersm@redhat.com>
>
> Tested-by: Wainer dos Santos Moschetta <wainersm@redhat.com>
>
> I tested it in a Fedora 32 aarch64 host. The execution output:
>
> # ./tests/venv/bin/avocado run tests/acceptance/smmu.py
> JOB ID     : 1625038f5a2ae17c8ba6c503d3df8661ff528942
> JOB LOG    :
> /root/avocado/job-results/job-2021-07-01T13.38-1625038/job.log
>  (1/6) tests/acceptance/smmu.py:SMMU.test_smmu_noril: PASS (175.54 s)
>  (2/6) tests/acceptance/smmu.py:SMMU.test_smmu_noril_passthrough:
> WARN: Test passed but there were warnings during execution. Check the
> log for details. (168.39 s)
>  (3/6) tests/acceptance/smmu.py:SMMU.test_smmu_noril_nostrict: WARN:
> Test passed but there were warnings during execution. Check the log
> for details. (161.58 s)
>  (4/6) tests/acceptance/smmu.py:SMMU.test_smmu_ril: PASS (150.85 s)
>  (5/6) tests/acceptance/smmu.py:SMMU.test_smmu_ril_passthrough: WARN:
> Test passed but there were warnings during execution. Check the log
> for details. (177.56 s)
>  (6/6) tests/acceptance/smmu.py:SMMU.test_smmu_ril_nostrict: WARN:
> Test passed but there were warnings during execution. Check the log
> for details. (190.86 s)
> RESULTS    : PASS 2 | ERROR 0 | FAIL 0 | SKIP 0 | WARN 4 | INTERRUPT 0
> | CANCEL 0
> JOB TIME   : 1026.50 s
>
> One thing that caught my attention was the amount of time spent on
> each test. It spend more than 2 minutes on the package installation
> (`self.ssh_command('dnf -y install numactl-devel')`) in the guest.
>
> Without that operation, it runs way faster:
>
> # ./tests/venv/bin/avocado run tests/acceptance/smmu.py
> JOB ID     : 24f22f99169ece37df64d72d2eb373921f378aac
> JOB LOG    :
> /root/avocado/job-results/job-2021-07-01T13.28-24f22f9/job.log
>  (1/6) tests/acceptance/smmu.py:SMMU.test_smmu_noril: PASS (39.61 s)
>  (2/6) tests/acceptance/smmu.py:SMMU.test_smmu_noril_passthrough:
> WARN: Test passed but there were warnings during execution. Check the
> log for details. (48.32 s)
>  (3/6) tests/acceptance/smmu.py:SMMU.test_smmu_noril_nostrict: WARN:
> Test passed but there were warnings during execution. Check the log
> for details. (48.10 s)
>  (4/6) tests/acceptance/smmu.py:SMMU.test_smmu_ril: PASS (39.22 s)
>  (5/6) tests/acceptance/smmu.py:SMMU.test_smmu_ril_passthrough: WARN:
> Test passed but there were warnings during execution. Check the log
> for details. (52.92 s)
>  (6/6) tests/acceptance/smmu.py:SMMU.test_smmu_ril_nostrict: WARN:
> Test passed but there were warnings during execution. Check the log
> for details. (50.96 s)
> RESULTS    : PASS 2 | ERROR 0 | FAIL 0 | SKIP 0 | WARN 4 | INTERRUPT 0
> | CANCEL 0
> JOB TIME   : 280.62 s
>
> Install a package seems a good exerciser for disk I/O and networking,
> but maybe you can use another method for the sake of speed up the tests?

As discussed earlier with Cleber, I am aware the test duration is long
but it was useful finding bugs for SMMU with range invalidation. such a
bug could not be hit with a single boot + ping for instance.

Maybe we should have a mechanism that allows to put some tests out of
the automatic CI?

Thanks

Eric
>
> - Wainer
>
>>
>> diff --git a/tests/acceptance/smmu.py b/tests/acceptance/smmu.py
>> new file mode 100644
>> index 0000000000..c1d4b88e5f
>> --- /dev/null
>> +++ b/tests/acceptance/smmu.py
>> @@ -0,0 +1,132 @@
>> +# SMMUv3 Functional tests
>> +#
>> +# Copyright (c) 2021 Red Hat, Inc.
>> +#
>> +# Author:
>> +#  Eric Auger <eric.auger@redhat.com>
>> +#
>> +# This work is licensed under the terms of the GNU GPL, version 2 or
>> +# later.  See the COPYING file in the top-level directory.
>> +
>> +import os
>> +
>> +from avocado_qemu import LinuxTest, BUILD_DIR
>> +
>> +class SMMU(LinuxTest):
>> +    """
>> +    :avocado: tags=accel:kvm
>> +    :avocado: tags=cpu:host
>> +    :avocado: tags=arch:aarch64
>> +    :avocado: tags=machine:virt
>> +    :avocado: tags=distro:fedora
>> +    :avocado: tags=smmu
>> +    """
>> +
>> +    IOMMU_ADDON =
>> ',iommu_platform=on,disable-modern=off,disable-legacy=on'
>> +    kernel_path = None
>> +    initrd_path = None
>> +    kernel_params = None
>> +
>> +    def set_up_boot(self):
>> +        path = self.download_boot()
>> +        self.vm.add_args('-device',
>> 'virtio-blk-pci,bus=pcie.0,scsi=off,' +
>> +                         'drive=drv0,id=virtio-disk0,bootindex=1,'
>> +                         'werror=stop,rerror=stop' + self.IOMMU_ADDON)
>> +        self.vm.add_args('-drive',
>> +                        
>> 'file=%s,if=none,cache=writethrough,id=drv0' % path)
>> +
>> +    def setUp(self):
>> +        super(SMMU, self).setUp(None, 'virtio-net-pci' +
>> self.IOMMU_ADDON)
>> +
>> +    def common_vm_setup(self, custom_kernel=False):
>> +        self.require_accelerator("kvm")
>> +        self.vm.add_args("-accel", "kvm")
>> +        self.vm.add_args("-cpu", "host")
>> +        self.vm.add_args("-machine", "iommu=smmuv3")
>> +        self.vm.add_args("-d", "guest_errors")
>> +        self.vm.add_args('-bios', os.path.join(BUILD_DIR, 'pc-bios',
>> +                         'edk2-aarch64-code.fd'))
>> +        self.vm.add_args('-device', 'virtio-rng-pci,rng=rng0')
>> +        self.vm.add_args('-object',
>> +                         'rng-random,id=rng0,filename=/dev/urandom')
>> +
>> +        if custom_kernel is False:
>> +            return
>> +
>> +        kernel_url = self.get_pxeboot_url() + 'vmlinuz'
>> +        initrd_url = self.get_pxeboot_url() + 'initrd.img'
>> +        self.kernel_path = self.fetch_asset(kernel_url)
>> +        self.initrd_path = self.fetch_asset(initrd_url)
>> +
>> +    def run_and_check(self):
>> +        if self.kernel_path:
>> +            self.vm.add_args('-kernel', self.kernel_path,
>> +                             '-append', self.kernel_params,
>> +                             '-initrd', self.initrd_path)
>> +        self.launch_and_wait()
>> +        self.ssh_command('cat /proc/cmdline')
>> +        self.ssh_command('dnf -y install numactl-devel')
>> +
>> +
>> +    # 5.3 kernel without RIL #
>> +
>> +    def test_smmu_noril(self):
>> +        """
>> +        :avocado: tags=smmu_noril
>> +        :avocado: tags=smmu_noril_tests
>> +        :avocado: tags=distro_version:31
>> +        """
>> +        self.common_vm_setup()
>> +        self.run_and_check()
>> +
>> +    def test_smmu_noril_passthrough(self):
>> +        """
>> +        :avocado: tags=smmu_noril_passthrough
>> +        :avocado: tags=smmu_noril_tests
>> +        :avocado: tags=distro_version:31
>> +        """
>> +        self.common_vm_setup(True)
>> +        self.kernel_params = self.get_default_kernel_params() + '
>> iommu.passthrough=on'
>> +        self.run_and_check()
>> +
>> +    def test_smmu_noril_nostrict(self):
>> +        """
>> +        :avocado: tags=smmu_noril_nostrict
>> +        :avocado: tags=smmu_noril_tests
>> +        :avocado: tags=distro_version:31
>> +        """
>> +        self.common_vm_setup(True)
>> +        self.kernel_params = self.get_default_kernel_params() + '
>> iommu.strict=0'
>> +        self.run_and_check()
>> +
>> +    # 5.8 kernel featuring range invalidation
>> +    # >= v5.7 kernel
>> +
>> +    def test_smmu_ril(self):
>> +        """
>> +        :avocado: tags=smmu_ril
>> +        :avocado: tags=smmu_ril_tests
>> +        :avocado: tags=distro_version:33
>> +        """
>> +        self.common_vm_setup()
>> +        self.run_and_check()
>> +
>> +    def test_smmu_ril_passthrough(self):
>> +        """
>> +        :avocado: tags=smmu_ril_passthrough
>> +        :avocado: tags=smmu_ril_tests
>> +        :avocado: tags=distro_version:33
>> +        """
>> +        self.common_vm_setup(True)
>> +        self.kernel_params = self.get_default_kernel_params() + '
>> iommu.passthrough=on'
>> +        self.run_and_check()
>> +
>> +    def test_smmu_ril_nostrict(self):
>> +        """
>> +        :avocado: tags=smmu_ril_nostrict
>> +        :avocado: tags=smmu_ril_tests
>> +        :avocado: tags=distro_version:33
>> +        """
>> +        self.common_vm_setup(True)
>> +        self.kernel_params = self.get_default_kernel_params() + '
>> iommu.strict=0'
>> +        self.run_and_check()
>



  reply	other threads:[~2021-07-05  8:02 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-29 14:36 [PATCH v4 0/4] avocado-qemu: New SMMUv3 and intel IOMMU tests Eric Auger
2021-06-29 14:36 ` [PATCH v4 1/4] Acceptance Tests: Add default kernel params and pxeboot url to the KNOWN_DISTROS collection Eric Auger
2021-06-29 19:50   ` Willian Rampazzo
2021-06-29 14:36 ` [PATCH v4 2/4] avocado_qemu: Add SMMUv3 tests Eric Auger
2021-07-01 18:13   ` Wainer dos Santos Moschetta
2021-07-05  8:00     ` Eric Auger [this message]
2021-07-05 21:04       ` Willian Rampazzo
2021-07-06 14:26       ` Wainer dos Santos Moschetta
2021-07-06 14:33         ` Eric Auger
2021-07-05 21:06   ` Willian Rampazzo
2021-06-29 14:36 ` [PATCH v4 3/4] avocado_qemu: Add Intel iommu tests Eric Auger
2021-07-05 21:15   ` Willian Rampazzo
2021-06-29 14:36 ` [PATCH v4 4/4] avocado_qemu: Fix KNOWN_DISTROS map into the LinuxDistro class Eric Auger
2021-07-05 21:17   ` Willian Rampazzo
2021-06-29 20:17 ` [PATCH v4 0/4] avocado-qemu: New SMMUv3 and intel IOMMU tests Eric Auger
2021-06-29 20:38   ` Willian Rampazzo
2021-06-30  6:53     ` Eric Auger
2021-06-30 23:22   ` Wainer dos Santos Moschetta
2021-07-05  7:55     ` Eric Auger
2021-07-05 21:10       ` Willian Rampazzo
2021-07-05 21:20         ` Philippe Mathieu-Daudé
2021-07-05 21:24           ` Willian Rampazzo
2021-07-06  7:06             ` Eric Auger

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=d46e9c37-7989-451f-cb3d-edf0958911fd@redhat.com \
    --to=eric.auger@redhat.com \
    --cc=crosa@redhat.com \
    --cc=eric.auger.pro@gmail.com \
    --cc=peterx@redhat.com \
    --cc=philmd@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=wainersm@redhat.com \
    --cc=wrampazz@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.