From: Nicholas Piggin <npiggin@gmail.com> To: Thomas Huth <thuth@redhat.com> Cc: Nicholas Piggin <npiggin@gmail.com>, kvm@vger.kernel.org, Laurent Vivier <lvivier@redhat.com>, "Shaoqin Huang" <shahuang@redhat.com>, Andrew Jones <andrew.jones@linux.dev>, Nico Boehr <nrb@linux.ibm.com>, Paolo Bonzini <pbonzini@redhat.com>, Alexandru Elisei <alexandru.elisei@arm.com>, Eric Auger <eric.auger@redhat.com>, Janosch Frank <frankja@linux.ibm.com>, Claudio Imbrenda <imbrenda@linux.ibm.com>, David Hildenbrand <david@redhat.com>, Marc Hartmayer <mhartmay@linux.ibm.com>, linuxppc-dev@lists.ozlabs.org, linux-s390@vger.kernel.org Subject: [kvm-unit-tests PATCH 2/7] migration: Add a migrate_skip command Date: Mon, 26 Feb 2024 19:38:27 +1000 [thread overview] Message-ID: <20240226093832.1468383-3-npiggin@gmail.com> (raw) In-Reply-To: <20240226093832.1468383-1-npiggin@gmail.com> Tests that are run with MIGRATION=yes but skip due to some requirement not being met will show as a failure due to the harness requirement to see one successful migration. The workaround for this is to migrate in test's skip path. Add a new command that just tells the harness to not expect a migration. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> --- common/selftest-migration.c | 14 ++++++++----- lib/migrate.c | 19 ++++++++++++++++- lib/migrate.h | 2 ++ powerpc/unittests.cfg | 6 ++++++ s390x/unittests.cfg | 5 +++++ scripts/arch-run.bash | 41 +++++++++++++++++++++++++++++-------- 6 files changed, 73 insertions(+), 14 deletions(-) diff --git a/common/selftest-migration.c b/common/selftest-migration.c index 54b5d6b2d..0afd8581c 100644 --- a/common/selftest-migration.c +++ b/common/selftest-migration.c @@ -14,14 +14,18 @@ int main(int argc, char **argv) { - int i = 0; - report_prefix_push("migration"); - for (i = 0; i < NR_MIGRATIONS; i++) - migrate_quiet(); + if (argc > 1 && !strcmp(argv[1], "skip")) { + migrate_skip(); + report(true, "migration skipping"); + } else { + int i; - report(true, "simple harness stress test"); + for (i = 0; i < NR_MIGRATIONS; i++) + migrate_quiet(); + report(true, "simple harness stress"); + } report_prefix_pop(); diff --git a/lib/migrate.c b/lib/migrate.c index 92d1d957d..1d22196b7 100644 --- a/lib/migrate.c +++ b/lib/migrate.c @@ -39,7 +39,24 @@ void migrate_once(void) if (migrated) return; - migrated = true; + migrate(); } + +/* + * When the test has been started in migration mode, but the test case is + * skipped and no migration point is reached, this can be used to tell the + * harness not to mark it as a failure to migrate. + */ +void migrate_skip(void) +{ + static bool did_migrate_skip; + + if (did_migrate_skip) + return; + did_migrate_skip = true; + + puts("Skipped VM migration (quiet)\n"); + (void)getchar(); +} diff --git a/lib/migrate.h b/lib/migrate.h index 95b9102b0..db6e0c501 100644 --- a/lib/migrate.h +++ b/lib/migrate.h @@ -9,3 +9,5 @@ void migrate(void); void migrate_quiet(void); void migrate_once(void); + +void migrate_skip(void); diff --git a/powerpc/unittests.cfg b/powerpc/unittests.cfg index 7ce57de02..89abf2095 100644 --- a/powerpc/unittests.cfg +++ b/powerpc/unittests.cfg @@ -40,6 +40,12 @@ groups = selftest file = selftest-migration.elf groups = selftest migration +[selftest-migration-skip] +file = selftest-migration.elf +machine = pseries +groups = selftest migration +extra_params = -append "skip" + [spapr_hcall] file = spapr_hcall.elf diff --git a/s390x/unittests.cfg b/s390x/unittests.cfg index a7ad522ca..f613602d3 100644 --- a/s390x/unittests.cfg +++ b/s390x/unittests.cfg @@ -28,6 +28,11 @@ extra_params = -append 'test 123' file = selftest-migration.elf groups = selftest migration +[selftest-migration-skip] +file = selftest-migration.elf +groups = selftest migration +extra_params = -append "skip" + [intercept] file = intercept.elf diff --git a/scripts/arch-run.bash b/scripts/arch-run.bash index e5b36a07b..d0f6f098f 100644 --- a/scripts/arch-run.bash +++ b/scripts/arch-run.bash @@ -124,12 +124,17 @@ qmp_events () filter_quiet_msgs () { - grep -v "Now migrate the VM (quiet)" + grep -v "Now migrate the VM (quiet)" | + grep -v "Skipped VM migration (quiet)" } seen_migrate_msg () { - grep -q -e "Now migrate the VM" < $1 + if [ $skip_migration -eq 1 ]; then + grep -q -e "Now migrate the VM" < $1 + else + grep -q -e "Now migrate the VM" -e "Skipped VM migration" < $1 + fi } run_migration () @@ -142,7 +147,7 @@ run_migration () migcmdline=$@ trap 'trap - TERM ; kill 0 ; exit 2' INT TERM - trap 'rm -f ${src_out} ${dst_out} ${src_outfifo} ${dst_outfifo} ${dst_incoming} ${src_qmp} ${dst_qmp} ${dst_infifo}' RETURN EXIT + trap 'rm -f ${src_out} ${dst_out} ${src_outfifo} ${dst_outfifo} ${dst_incoming} ${src_qmp} ${dst_qmp} ${src_infifo} ${dst_infifo}' RETURN EXIT dst_incoming=$(mktemp -u -t mig-helper-socket-incoming.XXXXXXXXXX) src_out=$(mktemp -t mig-helper-stdout1.XXXXXXXXXX) @@ -151,21 +156,26 @@ run_migration () dst_outfifo=$(mktemp -u -t mig-helper-fifo-stdout2.XXXXXXXXXX) src_qmp=$(mktemp -u -t mig-helper-qmp1.XXXXXXXXXX) dst_qmp=$(mktemp -u -t mig-helper-qmp2.XXXXXXXXXX) - dst_infifo=$(mktemp -u -t mig-helper-fifo-stdin.XXXXXXXXXX) + src_infifo=$(mktemp -u -t mig-helper-fifo-stdin1.XXXXXXXXXX) + dst_infifo=$(mktemp -u -t mig-helper-fifo-stdin2.XXXXXXXXXX) src_qmpout=/dev/null dst_qmpout=/dev/null + skip_migration=0 mkfifo ${src_outfifo} mkfifo ${dst_outfifo} # Holding both ends of the input fifo open prevents opens from # blocking and readers getting EOF when a writer closes it. + mkfifo ${src_infifo} mkfifo ${dst_infifo} + exec {src_infifo_fd}<>${src_infifo} exec {dst_infifo_fd}<>${dst_infifo} eval "$migcmdline" \ -chardev socket,id=mon,path=${src_qmp},server=on,wait=off \ - -mon chardev=mon,mode=control > ${src_outfifo} & + -mon chardev=mon,mode=control \ + < ${src_infifo} > ${src_outfifo} & live_pid=$! cat ${src_outfifo} | tee ${src_out} | filter_quiet_msgs & @@ -179,8 +189,11 @@ run_migration () # Wait for test exit or further migration messages. if ! seen_migrate_msg ${src_out} ; then sleep 0.1 - else + elif grep -q "Now migrate the VM" < ${src_out} ; then do_migration || return $? + elif [ $skip_migration -eq 0 ] && grep -q "Skipped VM migration" < ${src_out} ; then + echo > ${src_infifo} # Resume src and carry on. + break; fi done @@ -207,10 +220,10 @@ do_migration () # "Now migrate VM" or similar console message. while ! seen_migrate_msg ${src_out} ; do if ! ps -p ${live_pid} > /dev/null ; then - echo "ERROR: Test exit before migration point." >&2 echo > ${dst_infifo} - qmp ${src_qmp} '"quit"'> ${src_qmpout} 2>/dev/null qmp ${dst_qmp} '"quit"'> ${dst_qmpout} 2>/dev/null + echo "ERROR: Test exit before migration point." >&2 + qmp ${src_qmp} '"quit"'> ${src_qmpout} 2>/dev/null return 3 fi sleep 0.1 @@ -220,6 +233,15 @@ do_migration () while ! [ -S ${dst_incoming} ] ; do sleep 0.1 ; done while ! [ -S ${dst_qmp} ] ; do sleep 0.1 ; done + if [ $skip_migration -eq 0 ] && grep -q "Skipped VM migration" < ${src_out} ; then + # May not get any migrations, exit to main loop for now... + echo > ${dst_infifo} + qmp ${dst_qmp} '"quit"'> ${dst_qmpout} 2>/dev/null + echo > ${src_infifo} # Resume src and carry on. + skip_migration=1 + return 0 + fi + qmp ${src_qmp} '"migrate", "arguments": { "uri": "unix:'${dst_incoming}'" }' > ${src_qmpout} # Wait for the migration to complete @@ -263,6 +285,9 @@ do_migration () tmp=${src_out} src_out=${dst_out} dst_out=${tmp} + tmp=${src_infifo} + src_infifo=${dst_infifo} + dst_infifo=${tmp} tmp=${src_outfifo} src_outfifo=${dst_outfifo} dst_outfifo=${tmp} -- 2.42.0
WARNING: multiple messages have this Message-ID (diff)
From: Nicholas Piggin <npiggin@gmail.com> To: Thomas Huth <thuth@redhat.com> Cc: Laurent Vivier <lvivier@redhat.com>, linux-s390@vger.kernel.org, Nico Boehr <nrb@linux.ibm.com>, Janosch Frank <frankja@linux.ibm.com>, kvm@vger.kernel.org, David Hildenbrand <david@redhat.com>, linuxppc-dev@lists.ozlabs.org, Shaoqin Huang <shahuang@redhat.com>, Nicholas Piggin <npiggin@gmail.com>, Andrew Jones <andrew.jones@linux.dev>, Eric Auger <eric.auger@redhat.com>, Marc Hartmayer <mhartmay@linux.ibm.com>, Paolo Bonzini <pbonzini@redhat.com>, Claudio Imbrenda <imbrenda@linux.ibm.com>, Alexandru Elisei <alexandru.elisei@arm.com> Subject: [kvm-unit-tests PATCH 2/7] migration: Add a migrate_skip command Date: Mon, 26 Feb 2024 19:38:27 +1000 [thread overview] Message-ID: <20240226093832.1468383-3-npiggin@gmail.com> (raw) In-Reply-To: <20240226093832.1468383-1-npiggin@gmail.com> Tests that are run with MIGRATION=yes but skip due to some requirement not being met will show as a failure due to the harness requirement to see one successful migration. The workaround for this is to migrate in test's skip path. Add a new command that just tells the harness to not expect a migration. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> --- common/selftest-migration.c | 14 ++++++++----- lib/migrate.c | 19 ++++++++++++++++- lib/migrate.h | 2 ++ powerpc/unittests.cfg | 6 ++++++ s390x/unittests.cfg | 5 +++++ scripts/arch-run.bash | 41 +++++++++++++++++++++++++++++-------- 6 files changed, 73 insertions(+), 14 deletions(-) diff --git a/common/selftest-migration.c b/common/selftest-migration.c index 54b5d6b2d..0afd8581c 100644 --- a/common/selftest-migration.c +++ b/common/selftest-migration.c @@ -14,14 +14,18 @@ int main(int argc, char **argv) { - int i = 0; - report_prefix_push("migration"); - for (i = 0; i < NR_MIGRATIONS; i++) - migrate_quiet(); + if (argc > 1 && !strcmp(argv[1], "skip")) { + migrate_skip(); + report(true, "migration skipping"); + } else { + int i; - report(true, "simple harness stress test"); + for (i = 0; i < NR_MIGRATIONS; i++) + migrate_quiet(); + report(true, "simple harness stress"); + } report_prefix_pop(); diff --git a/lib/migrate.c b/lib/migrate.c index 92d1d957d..1d22196b7 100644 --- a/lib/migrate.c +++ b/lib/migrate.c @@ -39,7 +39,24 @@ void migrate_once(void) if (migrated) return; - migrated = true; + migrate(); } + +/* + * When the test has been started in migration mode, but the test case is + * skipped and no migration point is reached, this can be used to tell the + * harness not to mark it as a failure to migrate. + */ +void migrate_skip(void) +{ + static bool did_migrate_skip; + + if (did_migrate_skip) + return; + did_migrate_skip = true; + + puts("Skipped VM migration (quiet)\n"); + (void)getchar(); +} diff --git a/lib/migrate.h b/lib/migrate.h index 95b9102b0..db6e0c501 100644 --- a/lib/migrate.h +++ b/lib/migrate.h @@ -9,3 +9,5 @@ void migrate(void); void migrate_quiet(void); void migrate_once(void); + +void migrate_skip(void); diff --git a/powerpc/unittests.cfg b/powerpc/unittests.cfg index 7ce57de02..89abf2095 100644 --- a/powerpc/unittests.cfg +++ b/powerpc/unittests.cfg @@ -40,6 +40,12 @@ groups = selftest file = selftest-migration.elf groups = selftest migration +[selftest-migration-skip] +file = selftest-migration.elf +machine = pseries +groups = selftest migration +extra_params = -append "skip" + [spapr_hcall] file = spapr_hcall.elf diff --git a/s390x/unittests.cfg b/s390x/unittests.cfg index a7ad522ca..f613602d3 100644 --- a/s390x/unittests.cfg +++ b/s390x/unittests.cfg @@ -28,6 +28,11 @@ extra_params = -append 'test 123' file = selftest-migration.elf groups = selftest migration +[selftest-migration-skip] +file = selftest-migration.elf +groups = selftest migration +extra_params = -append "skip" + [intercept] file = intercept.elf diff --git a/scripts/arch-run.bash b/scripts/arch-run.bash index e5b36a07b..d0f6f098f 100644 --- a/scripts/arch-run.bash +++ b/scripts/arch-run.bash @@ -124,12 +124,17 @@ qmp_events () filter_quiet_msgs () { - grep -v "Now migrate the VM (quiet)" + grep -v "Now migrate the VM (quiet)" | + grep -v "Skipped VM migration (quiet)" } seen_migrate_msg () { - grep -q -e "Now migrate the VM" < $1 + if [ $skip_migration -eq 1 ]; then + grep -q -e "Now migrate the VM" < $1 + else + grep -q -e "Now migrate the VM" -e "Skipped VM migration" < $1 + fi } run_migration () @@ -142,7 +147,7 @@ run_migration () migcmdline=$@ trap 'trap - TERM ; kill 0 ; exit 2' INT TERM - trap 'rm -f ${src_out} ${dst_out} ${src_outfifo} ${dst_outfifo} ${dst_incoming} ${src_qmp} ${dst_qmp} ${dst_infifo}' RETURN EXIT + trap 'rm -f ${src_out} ${dst_out} ${src_outfifo} ${dst_outfifo} ${dst_incoming} ${src_qmp} ${dst_qmp} ${src_infifo} ${dst_infifo}' RETURN EXIT dst_incoming=$(mktemp -u -t mig-helper-socket-incoming.XXXXXXXXXX) src_out=$(mktemp -t mig-helper-stdout1.XXXXXXXXXX) @@ -151,21 +156,26 @@ run_migration () dst_outfifo=$(mktemp -u -t mig-helper-fifo-stdout2.XXXXXXXXXX) src_qmp=$(mktemp -u -t mig-helper-qmp1.XXXXXXXXXX) dst_qmp=$(mktemp -u -t mig-helper-qmp2.XXXXXXXXXX) - dst_infifo=$(mktemp -u -t mig-helper-fifo-stdin.XXXXXXXXXX) + src_infifo=$(mktemp -u -t mig-helper-fifo-stdin1.XXXXXXXXXX) + dst_infifo=$(mktemp -u -t mig-helper-fifo-stdin2.XXXXXXXXXX) src_qmpout=/dev/null dst_qmpout=/dev/null + skip_migration=0 mkfifo ${src_outfifo} mkfifo ${dst_outfifo} # Holding both ends of the input fifo open prevents opens from # blocking and readers getting EOF when a writer closes it. + mkfifo ${src_infifo} mkfifo ${dst_infifo} + exec {src_infifo_fd}<>${src_infifo} exec {dst_infifo_fd}<>${dst_infifo} eval "$migcmdline" \ -chardev socket,id=mon,path=${src_qmp},server=on,wait=off \ - -mon chardev=mon,mode=control > ${src_outfifo} & + -mon chardev=mon,mode=control \ + < ${src_infifo} > ${src_outfifo} & live_pid=$! cat ${src_outfifo} | tee ${src_out} | filter_quiet_msgs & @@ -179,8 +189,11 @@ run_migration () # Wait for test exit or further migration messages. if ! seen_migrate_msg ${src_out} ; then sleep 0.1 - else + elif grep -q "Now migrate the VM" < ${src_out} ; then do_migration || return $? + elif [ $skip_migration -eq 0 ] && grep -q "Skipped VM migration" < ${src_out} ; then + echo > ${src_infifo} # Resume src and carry on. + break; fi done @@ -207,10 +220,10 @@ do_migration () # "Now migrate VM" or similar console message. while ! seen_migrate_msg ${src_out} ; do if ! ps -p ${live_pid} > /dev/null ; then - echo "ERROR: Test exit before migration point." >&2 echo > ${dst_infifo} - qmp ${src_qmp} '"quit"'> ${src_qmpout} 2>/dev/null qmp ${dst_qmp} '"quit"'> ${dst_qmpout} 2>/dev/null + echo "ERROR: Test exit before migration point." >&2 + qmp ${src_qmp} '"quit"'> ${src_qmpout} 2>/dev/null return 3 fi sleep 0.1 @@ -220,6 +233,15 @@ do_migration () while ! [ -S ${dst_incoming} ] ; do sleep 0.1 ; done while ! [ -S ${dst_qmp} ] ; do sleep 0.1 ; done + if [ $skip_migration -eq 0 ] && grep -q "Skipped VM migration" < ${src_out} ; then + # May not get any migrations, exit to main loop for now... + echo > ${dst_infifo} + qmp ${dst_qmp} '"quit"'> ${dst_qmpout} 2>/dev/null + echo > ${src_infifo} # Resume src and carry on. + skip_migration=1 + return 0 + fi + qmp ${src_qmp} '"migrate", "arguments": { "uri": "unix:'${dst_incoming}'" }' > ${src_qmpout} # Wait for the migration to complete @@ -263,6 +285,9 @@ do_migration () tmp=${src_out} src_out=${dst_out} dst_out=${tmp} + tmp=${src_infifo} + src_infifo=${dst_infifo} + dst_infifo=${tmp} tmp=${src_outfifo} src_outfifo=${dst_outfifo} dst_outfifo=${tmp} -- 2.42.0
next prev parent reply other threads:[~2024-02-26 9:39 UTC|newest] Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top 2024-02-26 9:38 [kvm-unit-tests PATCH 0/7] more migration enhancements and tests Nicholas Piggin 2024-02-26 9:38 ` Nicholas Piggin 2024-02-26 9:38 ` [kvm-unit-tests PATCH 1/7] arch-run: Keep infifo open Nicholas Piggin 2024-02-26 9:38 ` Nicholas Piggin 2024-03-01 13:32 ` Thomas Huth 2024-03-01 13:32 ` Thomas Huth 2024-03-05 2:21 ` Nicholas Piggin 2024-03-05 2:21 ` Nicholas Piggin 2024-02-26 9:38 ` Nicholas Piggin [this message] 2024-02-26 9:38 ` [kvm-unit-tests PATCH 2/7] migration: Add a migrate_skip command Nicholas Piggin 2024-03-04 6:05 ` Thomas Huth 2024-03-04 6:05 ` Thomas Huth 2024-02-26 9:38 ` [kvm-unit-tests PATCH 3/7] (arm|s390): Use migrate_skip in test cases Nicholas Piggin 2024-02-26 9:38 ` Nicholas Piggin 2024-03-01 13:49 ` Thomas Huth 2024-03-01 13:49 ` Thomas Huth 2024-02-26 9:38 ` [kvm-unit-tests PATCH 4/7] powerpc: add asm/time.h header with delay and get_clock_us/ms Nicholas Piggin 2024-02-26 9:38 ` Nicholas Piggin 2024-03-01 14:05 ` Thomas Huth 2024-03-01 14:05 ` Thomas Huth 2024-02-26 9:38 ` [kvm-unit-tests PATCH 5/7] arch-run: Add a "continuous" migration option for tests Nicholas Piggin 2024-02-26 9:38 ` Nicholas Piggin 2024-03-04 6:17 ` Thomas Huth 2024-03-04 6:17 ` Thomas Huth 2024-03-04 9:19 ` Andrew Jones 2024-03-04 9:19 ` Andrew Jones 2024-03-05 2:58 ` Nicholas Piggin 2024-03-05 2:58 ` Nicholas Piggin 2024-03-05 2:47 ` Nicholas Piggin 2024-03-05 2:47 ` Nicholas Piggin 2024-02-26 9:38 ` [kvm-unit-tests PATCH 6/7] gitlab-ci: Run migration selftest on s390x and powerpc Nicholas Piggin 2024-02-26 9:38 ` Nicholas Piggin 2024-03-01 14:16 ` Thomas Huth 2024-03-01 14:16 ` Thomas Huth 2024-03-05 2:38 ` Nicholas Piggin 2024-03-05 2:38 ` Nicholas Piggin 2024-03-05 6:50 ` Thomas Huth 2024-03-05 6:50 ` Thomas Huth 2024-02-26 9:38 ` [kvm-unit-tests PATCH 7/7] common: add memory dirtying vs migration test Nicholas Piggin 2024-02-26 9:38 ` Nicholas Piggin 2024-03-04 6:22 ` Thomas Huth 2024-03-04 6:22 ` Thomas Huth 2024-03-05 2:50 ` Nicholas Piggin 2024-03-05 2:50 ` Nicholas Piggin 2024-03-05 6:52 ` Thomas Huth 2024-03-05 6:52 ` Thomas Huth
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=20240226093832.1468383-3-npiggin@gmail.com \ --to=npiggin@gmail.com \ --cc=alexandru.elisei@arm.com \ --cc=andrew.jones@linux.dev \ --cc=david@redhat.com \ --cc=eric.auger@redhat.com \ --cc=frankja@linux.ibm.com \ --cc=imbrenda@linux.ibm.com \ --cc=kvm@vger.kernel.org \ --cc=linux-s390@vger.kernel.org \ --cc=linuxppc-dev@lists.ozlabs.org \ --cc=lvivier@redhat.com \ --cc=mhartmay@linux.ibm.com \ --cc=nrb@linux.ibm.com \ --cc=pbonzini@redhat.com \ --cc=shahuang@redhat.com \ --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: linkBe 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.