qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Wainer dos Santos Moschetta <wainersm@redhat.com>
To: "Philippe Mathieu-Daudé" <f4bug@amsat.org>,
	"Alex Bennée" <alex.bennee@linaro.org>,
	qemu-devel@nongnu.org, "Willian Rampazzo" <wrampazz@redhat.com>
Cc: robhenry@microsoft.com, mahmoudabdalghany@outlook.com,
	aaron@os.amperecomputing.com, cota@braap.org,
	Cleber Rosa <crosa@redhat.com>,
	kuhn.chenqun@huawei.com
Subject: Re: [PATCH v2 15/21] tests/acceptance: add a new set of tests to exercise plugins
Date: Thu, 11 Feb 2021 15:59:22 -0300	[thread overview]
Message-ID: <76b10b5c-6244-bbd1-d87b-a0d71672f778@redhat.com> (raw)
In-Reply-To: <dab2bc6c-b467-ca6d-c531-f209b3277f4f@amsat.org>


On 2/11/21 7:31 AM, Philippe Mathieu-Daudé wrote:
> On 2/10/21 11:10 PM, Alex Bennée wrote:
>> This is just a simple test to count the instructions executed by a
>> kernel. However a later test will detect a failure condition when
>> icount is enabled.
>>
>> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>> Message-Id: <20210209182749.31323-7-alex.bennee@linaro.org>
>> ---
>>   tests/acceptance/tcg_plugins.py | 103 ++++++++++++++++++++++++++++++++
>>   1 file changed, 103 insertions(+)
>>   create mode 100644 tests/acceptance/tcg_plugins.py
> Can you add this file to "TCG Plugins" in MAINTAINERS please?
>
>> diff --git a/tests/acceptance/tcg_plugins.py b/tests/acceptance/tcg_plugins.py
>> new file mode 100644
>> index 0000000000..b512979769
>> --- /dev/null
>> +++ b/tests/acceptance/tcg_plugins.py
>> @@ -0,0 +1,103 @@
>> +# TCG Plugins tests
>> +#
>> +# These are a little more involved than the basic tests run by check-tcg.
>> +#
>> +# Copyright (c) 2021 Linaro
>> +#
>> +# Author:
>> +#  Alex Bennée <alex.bennee@linaro.org>
>> +#
>> +# SPDX-License-Identifier: GPL-2.0-or-later
>> +
>> +import logging
>> +import time
>> +import tempfile
>> +import mmap
>> +import re
>> +
>> +from boot_linux_console import LinuxKernelTest
>> +
>> +
>> +class PluginKernelBase(LinuxKernelTest):
>> +    """
>> +    Boots a Linux kernel with a TCG plugin enabled.
>> +    """
>> +
>> +    timeout = 120
>> +    KERNEL_COMMON_COMMAND_LINE = 'printk.time=1 panic=-1 '
>> +
>> +    def run_vm(self, kernel_path, kernel_command_line,
>> +               plugin, plugin_log, console_pattern, args):
>> +
>> +        logger = logging.getLogger('plugin')
>> +        start_time = time.time()
>> +        vm = self.get_vm()
>> +        vm.set_console()
>> +        vm.add_args('-kernel', kernel_path,
>> +                    '-append', kernel_command_line,
>> +                    '-plugin', plugin,
>> +                    '-d', 'plugin',
>> +                    '-D', plugin_log,
>> +                    '-net', 'none',
>> +                    '-no-reboot')
>> +        if args:
>> +            vm.add_args(*args)
>> +
>> +        try:
>> +            vm.launch()
>> +        except:
>> +            # fails if plugins not enabled
>> +            self.cancel("TCG Plugins not enabled")
> The test could fail for other reasons you want to catch...
>
> We don't have yet the possibility to query the binary if it
> has the plugin feature builtin. Can you add a TODO comment
> so we fix that once we got it?
>
>> +
>> +        self.wait_for_console_pattern(console_pattern, vm)
>> +        elapsed = time.time() - start_time
>> +        logger.info('elapsed time %.2f sec' % elapsed)
>> +        # ensure logs are flushed
>> +        vm.shutdown()
>> +        return elapsed
>> +
>> +
>> +class PluginKernelNormal(PluginKernelBase):
>> +
>> +    def _grab_aarch64_kernel(self):
>> +        kernel_url = ('http://security.debian.org/'
>> +                      'debian-security/pool/updates/main/l/linux-signed-arm64/'
>> +                      'linux-image-4.19.0-12-arm64_4.19.152-1_arm64.deb')
>> +        kernel_sha1 = '2036c2792f80ac9c4ccaae742b2e0a28385b6010'
>> +        kernel_deb = self.fetch_asset(kernel_url, asset_hash=kernel_sha1)
>> +        kernel_path = self.extract_from_deb(kernel_deb,
>> +                                            "/boot/vmlinuz-4.19.0-12-arm64")
>> +        return kernel_path
>> +
>> +    def test_aarch64_virt_insn(self):
>> +        """
>> +        :avocado: tags=accel:tcg
>> +        :avocado: tags=arch:aarch64
>> +        :avocado: tags=machine:virt
>> +        :avocado: tags=cpu:cortex-a57
>> +        """
>> +        kernel_path = self._grab_aarch64_kernel()
>> +        kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
>> +                               'console=ttyAMA0')
>> +        console_pattern = 'Kernel panic - not syncing: VFS:'
>> +
>> +        plugin_log = tempfile.NamedTemporaryFile(mode="r+t", prefix="plugin",
>> +                                                 suffix=".log")
>> +
>> +        self.run_vm(kernel_path, kernel_command_line,
>> +                    "tests/plugin/libinsn.so", plugin_log.name,
>> +                    console_pattern,
>> +                    args=('-cpu', 'cortex-a53'))
> I had the understanding that by using 'tags=cpu' QEMU would be called
> with "-cpu tags['cpu']". Cleber can you confirm please?

Currently only the 'machine' tag is automatically converted to QEMU 
arguments (in tests/acceptance/avocado_qemu/__init__.py::get_vm()). 
Having the same behavior for other tags like 'cpu' and 'accel' should be 
helpful IMO.


- Wainer

>
>> +
>> +        logger = logging.getLogger()
>> +
>> +        with plugin_log as lf, \
>> +             mmap.mmap(lf.fileno(), 0, access=mmap.ACCESS_READ) as s:
>> +
>> +            m = re.search(br"insns: (?P<count>\d+)", s)
>> +            if "count" in m.groupdict():
>> +                logger.debug("reported %d instructions",
>> +                             int(m.group("count")))
>> +            else:
>> +                logger.debug("Failed to find instruction count")
>> +                self.fail
>>
> With MAINTAINERS & TODO:
> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
>
> Thanks,
>
> Phil.
>



  reply	other threads:[~2021-02-11 19:17 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-10 22:10 [PATCH v2 00/21] plugins/next pre-PR (hwprofile, regression fixes, icount count fix) Alex Bennée
2021-02-10 22:10 ` [PATCH v2 01/21] hw/virtio/pci: include vdev name in registered PCI sections Alex Bennée
2021-02-10 22:10 ` [PATCH v2 02/21] plugins: add API to return a name for a IO device Alex Bennée
2021-02-10 22:10 ` [PATCH v2 03/21] plugins: new hwprofile plugin Alex Bennée
2021-02-10 22:10 ` [PATCH v2 04/21] contrib: Don't use '#' flag of printf format Alex Bennée
2021-02-10 22:10 ` [PATCH v2 05/21] contrib: Fix some code style problems, ERROR: "foo * bar" should be "foo *bar" Alex Bennée
2021-02-10 22:10 ` [PATCH v2 06/21] contrib: Add spaces around operator Alex Bennée
2021-02-10 22:10 ` [PATCH v2 07/21] contrib: space required after that ',' Alex Bennée
2021-02-10 22:10 ` [PATCH v2 08/21] contrib: Open brace '{' following struct go on the same line Alex Bennée
2021-02-10 22:10 ` [PATCH v2 09/21] accel/tcg/plugin-gen: fix the call signature for inline callbacks Alex Bennée
2021-02-10 22:10 ` [PATCH v2 10/21] exec: Move TranslationBlock typedef to qemu/typedefs.h Alex Bennée
2021-02-11 10:14   ` Philippe Mathieu-Daudé
2021-02-11 10:24     ` Alex Bennée
2021-02-10 22:10 ` [PATCH v2 11/21] accel/tcg: Create io_recompile_replay_branch hook Alex Bennée
2021-02-11 10:12   ` Philippe Mathieu-Daudé
2021-02-10 22:10 ` [PATCH v2 12/21] target/mips: Create mips_io_recompile_replay_branch Alex Bennée
2021-02-11 10:10   ` Philippe Mathieu-Daudé
2021-02-10 22:10 ` [PATCH v2 13/21] target/sh4: Create superh_io_recompile_replay_branch Alex Bennée
2021-02-11 10:13   ` Philippe Mathieu-Daudé
2021-02-10 22:10 ` [PATCH v2 14/21] tests/plugin: expand insn test to detect duplicate instructions Alex Bennée
2021-02-10 22:10 ` [PATCH v2 15/21] tests/acceptance: add a new set of tests to exercise plugins Alex Bennée
2021-02-11 10:31   ` Philippe Mathieu-Daudé
2021-02-11 18:59     ` Wainer dos Santos Moschetta [this message]
2021-02-11 19:51   ` Wainer dos Santos Moschetta
2021-02-10 22:10 ` [PATCH v2 16/21] accel/tcg: actually cache our partial icount TB Alex Bennée
2021-02-11 10:21   ` Philippe Mathieu-Daudé
2021-02-11 18:48     ` Richard Henderson
2021-02-12 15:40       ` Philippe Mathieu-Daudé
2021-02-12 17:06         ` Alex Bennée
2021-02-11 18:48   ` Richard Henderson
2021-02-10 22:10 ` [PATCH v2 17/21] accel/tcg: cache single instruction TB on pending replay exception Alex Bennée
2021-02-11 19:12   ` Richard Henderson
2021-02-11 20:00     ` Alex Bennée
2021-02-10 22:10 ` [PATCH v2 18/21] accel/tcg: re-factor non-RAM execution code Alex Bennée
2021-02-11 19:19   ` Richard Henderson
2021-02-10 22:10 ` [PATCH v2 19/21] accel/tcg: remove CF_NOCACHE and special cases Alex Bennée
2021-02-10 22:10 ` [PATCH v2 20/21] accel/tcg: allow plugin instrumentation to be disable via cflags Alex Bennée
2021-02-12  0:53   ` Aaron Lindsay via
2021-02-12 11:22     ` Alex Bennée
2021-02-12 14:31       ` Aaron Lindsay via
2021-02-12 14:59         ` Alex Bennée
2021-02-12 14:43     ` Alex Bennée
2021-02-12 15:41       ` Aaron Lindsay via
2021-02-12 16:04         ` Alex Bennée
2021-02-12 16:50           ` Aaron Lindsay via
2021-02-12 17:19             ` Alex Bennée
2021-02-16 10:34             ` Alex Bennée
2021-02-17 16:32               ` Aaron Lindsay via
2021-02-12 16:00       ` Alex Bennée
2021-02-12 17:04         ` Aaron Lindsay via
2021-02-10 22:10 ` [PATCH v2 21/21] tests/acceptance: add a new tests to detect counting errors Alex Bennée
2021-02-11 10:24   ` Philippe Mathieu-Daudé
2021-02-11 19:56   ` Wainer dos Santos Moschetta

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=76b10b5c-6244-bbd1-d87b-a0d71672f778@redhat.com \
    --to=wainersm@redhat.com \
    --cc=aaron@os.amperecomputing.com \
    --cc=alex.bennee@linaro.org \
    --cc=cota@braap.org \
    --cc=crosa@redhat.com \
    --cc=f4bug@amsat.org \
    --cc=kuhn.chenqun@huawei.com \
    --cc=mahmoudabdalghany@outlook.com \
    --cc=qemu-devel@nongnu.org \
    --cc=robhenry@microsoft.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 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).