All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Daniel P. Berrangé" <berrange@redhat.com>
To: Fabiano Rosas <farosas@suse.de>
Cc: qemu-devel@nongnu.org, armbru@redhat.com,
	Peter Xu <peterx@redhat.com>, Claudio Fontana <cfontana@suse.de>,
	Jim Fehlig <jfehlig@suse.com>, Thomas Huth <thuth@redhat.com>,
	Laurent Vivier <lvivier@redhat.com>,
	Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [PATCH 9/9] tests/qtest/migration: Add a test for mapped-ram with passing of fds
Date: Wed, 8 May 2024 09:56:03 +0100	[thread overview]
Message-ID: <Zjs-IzSjCtCPr7Uz@redhat.com> (raw)
In-Reply-To: <20240426142042.14573-10-farosas@suse.de>

On Fri, Apr 26, 2024 at 11:20:42AM -0300, Fabiano Rosas wrote:
> Add a multifd test for mapped-ram with passing of fds into QEMU. This
> is how libvirt will consume the feature.
> 
> There are a couple of details to the fdset mechanism:
> 
> - multifd needs two distinct file descriptors (not duplicated with
>   dup()) on the outgoing side so it can enable O_DIRECT only on the
>   channels that write with alignment. The dup() system call creates
>   file descriptors that share status flags, of which O_DIRECT is one.
> 
>   the incoming side doesn't set O_DIRECT, so it can dup() fds and
>   therefore can receive only one in the fdset.
> 
> - the open() access mode flags used for the fds passed into QEMU need
>   to match the flags QEMU uses to open the file. Currently O_WRONLY
>   for src and O_RDONLY for dst.
> 
> O_DIRECT is not supported on all systems/filesystems, so run the fdset
> test without O_DIRECT if that's the case. The migration code should
> still work in that scenario.

If O_DIRECT is not supported, then we're not setting 'direct-io',
and thus isn't this test just duplicating coverage of existing
tests ?

If this test is specifically to cover O_DIRECT, then I'd just
#ifdef the entire thing with O_DIRECT.

> 
> Signed-off-by: Fabiano Rosas <farosas@suse.de>
> ---
>  tests/qtest/migration-test.c | 90 ++++++++++++++++++++++++++++++++++++
>  1 file changed, 90 insertions(+)
> 
> diff --git a/tests/qtest/migration-test.c b/tests/qtest/migration-test.c
> index 512b7ede8b..d83f1bdd4f 100644
> --- a/tests/qtest/migration-test.c
> +++ b/tests/qtest/migration-test.c
> @@ -2331,8 +2331,93 @@ static void test_multifd_file_mapped_ram_dio(void)
>      test_file_common(&args, true);
>  }
>  
> +static void migrate_multifd_mapped_ram_fdset_dio_end(QTestState *from,
> +                                                    QTestState *to,
> +                                                    void *opaque)
> +{
> +    QDict *resp;
> +    QList *fdsets;
> +
> +    file_offset_finish_hook(from, to, opaque);
> +
> +    /*
> +     * Check that we removed the fdsets after migration, otherwise a
> +     * second migration would fail due to too many fdsets.
> +     */
> +
> +    resp = qtest_qmp(from, "{'execute': 'query-fdsets', "
> +                     "'arguments': {}}");
> +    g_assert(qdict_haskey(resp, "return"));
> +    fdsets = qdict_get_qlist(resp, "return");
> +    g_assert(fdsets && qlist_empty(fdsets));
> +}
>  #endif /* O_DIRECT */
>  
> +#ifndef _WIN32
> +static void *migrate_multifd_mapped_ram_fdset(QTestState *from, QTestState *to)
> +{
> +    g_autofree char *file = g_strdup_printf("%s/%s", tmpfs, FILE_TEST_FILENAME);
> +    int fds[3];
> +    int src_flags = O_WRONLY;
> +
> +    file_dirty_offset_region();
> +
> +    /* main outgoing channel: no O_DIRECT */
> +    fds[0] = open(file, src_flags, 0660);
> +    assert(fds[0] != -1);
> +
> +    qtest_qmp_fds_assert_success(from, &fds[0], 1, "{'execute': 'add-fd', "
> +                                 "'arguments': {'fdset-id': 1}}");
> +
> +#ifdef O_DIRECT
> +    src_flags |= O_DIRECT;
> +
> +    /* secondary outgoing channels */
> +    fds[1] = open(file, src_flags, 0660);
> +    assert(fds[1] != -1);
> +
> +    qtest_qmp_fds_assert_success(from, &fds[1], 1, "{'execute': 'add-fd', "
> +                                 "'arguments': {'fdset-id': 1}}");
> +
> +    /* incoming channel */
> +    fds[2] = open(file, O_CREAT | O_RDONLY, 0660);
> +    assert(fds[2] != -1);
> +
> +    qtest_qmp_fds_assert_success(to, &fds[2], 1, "{'execute': 'add-fd', "
> +                                 "'arguments': {'fdset-id': 1}}");
> +
> +    migrate_multifd_mapped_ram_dio_start(from, to);
> +#else
> +    migrate_multifd_mapped_ram_start(from, to);
> +#endif
> +
> +    return NULL;
> +}
> +
> +static void test_multifd_file_mapped_ram_fdset(void)
> +{
> +    g_autofree char *uri = g_strdup_printf("file:/dev/fdset/1,offset=%d",
> +                                           FILE_TEST_OFFSET);
> +    MigrateCommon args = {
> +        .connect_uri = uri,
> +        .listen_uri = "defer",
> +        .start_hook = migrate_multifd_mapped_ram_fdset,
> +#ifdef O_DIRECT
> +        .finish_hook = migrate_multifd_mapped_ram_fdset_dio_end,
> +#endif
> +    };
> +
> +#ifdef O_DIRECT
> +    if (!probe_o_direct_support(tmpfs)) {
> +        g_test_skip("Filesystem does not support O_DIRECT");
> +        return;
> +    }
> +#endif
> +
> +    test_file_common(&args, true);
> +}
> +#endif /* _WIN32 */
> +
>  static void test_precopy_tcp_plain(void)
>  {
>      MigrateCommon args = {
> @@ -3761,6 +3846,11 @@ int main(int argc, char **argv)
>                         test_multifd_file_mapped_ram_dio);
>  #endif
>  
> +#ifndef _WIN32
> +    qtest_add_func("/migration/multifd/file/mapped-ram/fdset",
> +                   test_multifd_file_mapped_ram_fdset);
> +#endif
> +
>  #ifdef CONFIG_GNUTLS
>      migration_test_add("/migration/precopy/unix/tls/psk",
>                         test_precopy_unix_tls_psk);
> -- 
> 2.35.3
> 

With regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|



  reply	other threads:[~2024-05-08  8:56 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-26 14:20 [PATCH 0/9] migration/mapped-ram: Add direct-io support Fabiano Rosas
2024-04-26 14:20 ` [PATCH 1/9] monitor: Honor QMP request for fd removal immediately Fabiano Rosas
2024-05-03 16:02   ` Peter Xu
2024-05-16 21:46     ` Fabiano Rosas
2024-05-08  7:17   ` Daniel P. Berrangé
2024-05-16 22:00     ` Fabiano Rosas
2024-05-17  7:33       ` Daniel P. Berrangé
2024-04-26 14:20 ` [PATCH 2/9] migration: Fix file migration with fdset Fabiano Rosas
2024-05-03 16:23   ` Peter Xu
2024-05-03 19:56     ` Fabiano Rosas
2024-05-03 21:04       ` Peter Xu
2024-05-03 21:31         ` Fabiano Rosas
2024-05-03 21:56           ` Peter Xu
2024-05-08  8:02     ` Daniel P. Berrangé
2024-05-08 12:49       ` Peter Xu
2024-05-08  8:00   ` Daniel P. Berrangé
2024-05-08 20:45     ` Fabiano Rosas
2024-04-26 14:20 ` [PATCH 3/9] tests/qtest/migration: Fix file migration offset check Fabiano Rosas
2024-05-03 16:47   ` Peter Xu
2024-05-03 20:36     ` Fabiano Rosas
2024-05-03 21:08       ` Peter Xu
2024-05-08  8:10       ` Daniel P. Berrangé
2024-04-26 14:20 ` [PATCH 4/9] migration: Add direct-io parameter Fabiano Rosas
2024-04-26 14:33   ` Markus Armbruster
2024-05-03 18:05   ` Peter Xu
2024-05-03 20:49     ` Fabiano Rosas
2024-05-03 21:16       ` Peter Xu
2024-05-14 14:10         ` Markus Armbruster
2024-05-14 17:57           ` Fabiano Rosas
2024-05-15  7:17             ` Markus Armbruster
2024-05-15 12:51               ` Fabiano Rosas
2024-05-08  8:25   ` Daniel P. Berrangé
2024-04-26 14:20 ` [PATCH 5/9] migration/multifd: Add direct-io support Fabiano Rosas
2024-05-03 18:29   ` Peter Xu
2024-05-03 20:54     ` Fabiano Rosas
2024-05-03 21:18       ` Peter Xu
2024-05-08  8:27   ` Daniel P. Berrangé
2024-04-26 14:20 ` [PATCH 6/9] tests/qtest/migration: Add tests for file migration with direct-io Fabiano Rosas
2024-05-03 18:38   ` Peter Xu
2024-05-03 21:05     ` Fabiano Rosas
2024-05-03 21:25       ` Peter Xu
2024-05-08  8:34   ` Daniel P. Berrangé
2024-04-26 14:20 ` [PATCH 7/9] monitor: fdset: Match against O_DIRECT Fabiano Rosas
2024-05-03 18:53   ` Peter Xu
2024-05-03 21:19     ` Fabiano Rosas
2024-05-03 22:16       ` Peter Xu
2024-04-26 14:20 ` [PATCH 8/9] migration: Add support for fdset with multifd + file Fabiano Rosas
2024-05-08  8:53   ` Daniel P. Berrangé
2024-05-08 18:23     ` Peter Xu
2024-05-08 20:39       ` Fabiano Rosas
2024-05-09  8:08         ` Daniel P. Berrangé
2024-05-17 22:43           ` Fabiano Rosas
2024-05-18  8:36             ` Daniel P. Berrangé
2024-04-26 14:20 ` [PATCH 9/9] tests/qtest/migration: Add a test for mapped-ram with passing of fds Fabiano Rosas
2024-05-08  8:56   ` Daniel P. Berrangé [this message]
2024-05-02 20:01 ` [PATCH 0/9] migration/mapped-ram: Add direct-io support Peter Xu
2024-05-02 20:34   ` Fabiano Rosas

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=Zjs-IzSjCtCPr7Uz@redhat.com \
    --to=berrange@redhat.com \
    --cc=armbru@redhat.com \
    --cc=cfontana@suse.de \
    --cc=farosas@suse.de \
    --cc=jfehlig@suse.com \
    --cc=lvivier@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peterx@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=thuth@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.