All of lore.kernel.org
 help / color / mirror / Atom feed
From: Fabiano Rosas <farosas@suse.de>
To: Nicholas Piggin <npiggin@gmail.com>, qemu-devel@nongnu.org
Cc: Nicholas Piggin <npiggin@gmail.com>, Peter Xu <peterx@redhat.com>,
	Thomas Huth <thuth@redhat.com>,
	Laurent Vivier <lvivier@redhat.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	qemu-ppc@nongnu.org
Subject: Re: [PATCH] tests/qtest/migrate-test: Use regular file file for shared-memory tests
Date: Tue, 28 May 2024 10:51:41 -0300	[thread overview]
Message-ID: <87r0dmf3iq.fsf@suse.de> (raw)
In-Reply-To: <20240528042758.621589-1-npiggin@gmail.com>

Nicholas Piggin <npiggin@gmail.com> writes:

> There is no need to use /dev/shm for file-backed memory devices, and
> it is too small to be usable in gitlab CI. Switch to using a regular
> file in /tmp/ which will usually have more space available.
>
> Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
> ---
> Am I missing something? AFAIKS there is not even any point using
> /dev/shm aka tmpfs anyway, there is not much special about it as a
> filesystem. This applies on top of the series just sent, and passes
> gitlab CI qtests including aarch64.

/dev/shm however will be mounted on tmpfs while /tmp may not. I don't
know if this has any implication to this test. Probably not.

>
> Thanks,
> Nick
>
>  tests/qtest/migration-test.c | 41 ++++++++++++------------------------
>  1 file changed, 13 insertions(+), 28 deletions(-)
>
> diff --git a/tests/qtest/migration-test.c b/tests/qtest/migration-test.c
> index 45830eb213..86eace354e 100644
> --- a/tests/qtest/migration-test.c
> +++ b/tests/qtest/migration-test.c
> @@ -552,7 +552,7 @@ typedef struct {
>       * unconditionally, because it means the user would like to be verbose.
>       */
>      bool hide_stderr;
> -    bool use_shmem;
> +    bool use_memfile;
>      /* only launch the target process */
>      bool only_target;
>      /* Use dirty ring if true; dirty logging otherwise */
> @@ -672,29 +672,14 @@ static int test_migrate_start(QTestState **from, QTestState **to,
>      g_autofree gchar *cmd_source = NULL;
>      g_autofree gchar *cmd_target = NULL;
>      const gchar *ignore_stderr;
> -    g_autofree char *shmem_opts = NULL;
> -    g_autofree char *shmem_path = NULL;
> +    g_autofree char *memfile_opts = NULL;
> +    g_autofree char *memfile_path = NULL;
>      const char *kvm_opts = NULL;
>      const char *arch = qtest_get_arch();
>      const char *memory_size;
>      const char *machine_alias, *machine_opts = "";
>      g_autofree char *machine = NULL;
>  
> -    if (args->use_shmem) {
> -        if (!g_file_test("/dev/shm", G_FILE_TEST_IS_DIR)) {
> -            g_test_skip("/dev/shm is not supported");
> -            return -1;
> -        }
> -        if (getenv("GITLAB_CI")) {
> -            /*
> -             * Gitlab runners are limited to 64MB shm size. See:
> -             * https://lore.kernel.org/all/87ttq5fvh7.fsf@suse.de/
> -             */
> -            g_test_skip("/dev/shm is not supported in Gitlab CI environment");
> -            return -1;
> -        }
> -    }
> -
>      dst_state = (QTestMigrationState) { };
>      src_state = (QTestMigrationState) { };
>      bootfile_create(tmpfs, args->suspend_me);
> @@ -754,12 +739,12 @@ static int test_migrate_start(QTestState **from, QTestState **to,
>          ignore_stderr = "";
>      }
>  
> -    if (args->use_shmem) {
> -        shmem_path = g_strdup_printf("/dev/shm/qemu-%d", getpid());
> -        shmem_opts = g_strdup_printf(
> +    if (args->use_memfile) {
> +        memfile_path = g_strdup_printf("/%s/qemu-%d", tmpfs, getpid());

The variable tmpfs already contains the leading slash. Strictly speaking
we don't need the pid because 'tmpfs' is unique for each migration-test
run. If you use a fixed string such as qemu-mem, you can then clean it
up at test_migrate_end() along with the others.

> +        memfile_opts = g_strdup_printf(
>              "-object memory-backend-file,id=mem0,size=%s"
>              ",mem-path=%s,share=on -numa node,memdev=mem0",
> -            memory_size, shmem_path);
> +            memory_size, memfile_path);
>      }
>  
>      if (args->use_dirty_ring) {
> @@ -788,7 +773,7 @@ static int test_migrate_start(QTestState **from, QTestState **to,
>                                   memory_size, tmpfs,
>                                   arch_opts ? arch_opts : "",
>                                   arch_source ? arch_source : "",
> -                                 shmem_opts ? shmem_opts : "",
> +                                 memfile_opts ? memfile_opts : "",
>                                   args->opts_source ? args->opts_source : "",
>                                   ignore_stderr);
>      if (!args->only_target) {
> @@ -810,7 +795,7 @@ static int test_migrate_start(QTestState **from, QTestState **to,
>                                   memory_size, tmpfs, uri,
>                                   arch_opts ? arch_opts : "",
>                                   arch_target ? arch_target : "",
> -                                 shmem_opts ? shmem_opts : "",
> +                                 memfile_opts ? memfile_opts : "",
>                                   args->opts_target ? args->opts_target : "",
>                                   ignore_stderr);
>      *to = qtest_init_with_env(QEMU_ENV_DST, cmd_target);
> @@ -822,8 +807,8 @@ static int test_migrate_start(QTestState **from, QTestState **to,
>       * Remove shmem file immediately to avoid memory leak in test failed case.
>       * It's valid because QEMU has already opened this file
>       */

I'm not sure what memory leak this referred to. When a test fails
anywhere outside test_migrate_end(), the /tmp/migration-test-XXXX
directory will stay behind with all the files used during the test. We
probably don't need the special case for this one file.

$ ls /tmp/migration-test-*/
/tmp/migration-test-GFO6N2/:
tlscredsx5090

/tmp/migration-test-QH2MO2/:
bootsect  dest_serial  src_serial

> -    if (args->use_shmem) {
> -        unlink(shmem_path);
> +    if (args->use_memfile) {
> +        unlink(memfile_path);
>      }
>  
>      return 0;
> @@ -1875,7 +1860,7 @@ static void test_ignore_shared(void)
>      g_autofree char *uri = g_strdup_printf("unix:%s/migsocket", tmpfs);
>      QTestState *from, *to;
>      MigrateStart args = {
> -        .use_shmem = true,
> +        .use_memfile = true,
>      };
>  
>      if (test_migrate_start(&from, &to, uri, &args)) {
> @@ -2033,7 +2018,7 @@ static void test_mode_reboot(void)
>      g_autofree char *uri = g_strdup_printf("file:%s/%s", tmpfs,
>                                             FILE_TEST_FILENAME);
>      MigrateCommon args = {
> -        .start.use_shmem = true,
> +        .start.use_memfile = true,
>          .connect_uri = uri,
>          .listen_uri = "defer",
>          .start_hook = test_mode_reboot_start


      parent reply	other threads:[~2024-05-28 13:52 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-05-28  4:27 [PATCH] tests/qtest/migrate-test: Use regular file file for shared-memory tests Nicholas Piggin
2024-05-28 13:35 ` Peter Xu
2024-05-28 16:05   ` Peter Xu
2024-05-28 18:16     ` Fabiano Rosas
2024-05-29  0:05     ` Nicholas Piggin
2024-05-29  0:46       ` Peter Xu
2024-05-28 13:51 ` Fabiano Rosas [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=87r0dmf3iq.fsf@suse.de \
    --to=farosas@suse.de \
    --cc=lvivier@redhat.com \
    --cc=npiggin@gmail.com \
    --cc=pbonzini@redhat.com \
    --cc=peterx@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@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.