Re: [kvm-unit-tests PATCH v4 8/8] migration: add a migration selftest
On Mon Feb 19, 2024 at 4:56 PM AEST, Thomas Huth wrote: > On 17/02/2024 08.19, Nicholas Piggin wrote: > > On Fri Feb 16, 2024 at 9:15 PM AEST, Thomas Huth wrote: > >> On 09/02/2024 10.11, Nicholas Piggin wrote: > >>> Add a selftest for migration support in guest library and test harness > >>> code. It performs migrations in a tight loop to irritate races and bugs > >>> in the test harness code. > >>> > >>> Include the test in arm, s390, powerpc. > >>> > >>> Acked-by: Claudio Imbrenda (s390x) > >>> Reviewed-by: Thomas Huth > >>> Signed-off-by: Nicholas Piggin > >>> --- > >>>arm/Makefile.common | 1 + > >>>arm/selftest-migration.c | 1 + > >>>arm/unittests.cfg| 6 ++ > >> > >>Hi Nicholas, > >> > >> I just gave the patches a try, but the arm test seems to fail for me: Only > >> the first getchar() seems to wait for a character, all the subsequent ones > >> don't wait anymore and just continue immediately ... is this working for > >> you? Or do I need another patch on top? > > > > Hey sorry missed this comment > > > > It does seem to work for me, I've mostly tested pseries but I did test > > others too (that's how I saw the arm getchar limit). > > > > How are you observing it not waiting for migration? > > According to you other mail, I think you figured it out already, but just > for the records: You can see it when running the guest manually, e.g. > something like: > > qemu-system-aarch64 -nodefaults -machine virt -accel tcg -cpu cortex-a57 \ > -device virtio-serial-device -device virtconsole,chardev=ctd \ > -chardev testdev,id=ctd -device pci-testdev -display none \ > -serial mon:stdio -kernel arm/selftest-migration.flat -smp 1 > > Without my "lib/arm/io: Fix calling getchar() multiple times" patch, the > guest only waits during the first getchar(), all the others simply return > immediately. Yeah I got it -- I re-ran it on arm and it is obvious since you told me it's not waiting. At the time I tested I thought it was just arm migrating really fast :D Thanks, Nick
Re: [kvm-unit-tests PATCH v4 8/8] migration: add a migration selftest
On 17/02/2024 08.19, Nicholas Piggin wrote: On Fri Feb 16, 2024 at 9:15 PM AEST, Thomas Huth wrote: On 09/02/2024 10.11, Nicholas Piggin wrote: Add a selftest for migration support in guest library and test harness code. It performs migrations in a tight loop to irritate races and bugs in the test harness code. Include the test in arm, s390, powerpc. Acked-by: Claudio Imbrenda (s390x) Reviewed-by: Thomas Huth Signed-off-by: Nicholas Piggin --- arm/Makefile.common | 1 + arm/selftest-migration.c | 1 + arm/unittests.cfg| 6 ++ Hi Nicholas, I just gave the patches a try, but the arm test seems to fail for me: Only the first getchar() seems to wait for a character, all the subsequent ones don't wait anymore and just continue immediately ... is this working for you? Or do I need another patch on top? Hey sorry missed this comment It does seem to work for me, I've mostly tested pseries but I did test others too (that's how I saw the arm getchar limit). How are you observing it not waiting for migration? According to you other mail, I think you figured it out already, but just for the records: You can see it when running the guest manually, e.g. something like: qemu-system-aarch64 -nodefaults -machine virt -accel tcg -cpu cortex-a57 \ -device virtio-serial-device -device virtconsole,chardev=ctd \ -chardev testdev,id=ctd -device pci-testdev -display none \ -serial mon:stdio -kernel arm/selftest-migration.flat -smp 1 Without my "lib/arm/io: Fix calling getchar() multiple times" patch, the guest only waits during the first getchar(), all the others simply return immediately. Thomas
Re: [kvm-unit-tests PATCH v4 8/8] migration: add a migration selftest
On Fri Feb 16, 2024 at 9:15 PM AEST, Thomas Huth wrote: > On 09/02/2024 10.11, Nicholas Piggin wrote: > > Add a selftest for migration support in guest library and test harness > > code. It performs migrations in a tight loop to irritate races and bugs > > in the test harness code. > > > > Include the test in arm, s390, powerpc. > > > > Acked-by: Claudio Imbrenda (s390x) > > Reviewed-by: Thomas Huth > > Signed-off-by: Nicholas Piggin > > --- > > arm/Makefile.common | 1 + > > arm/selftest-migration.c | 1 + > > arm/unittests.cfg| 6 ++ > > Hi Nicholas, > > I just gave the patches a try, but the arm test seems to fail for me: Only > the first getchar() seems to wait for a character, all the subsequent ones > don't wait anymore and just continue immediately ... is this working for > you? Or do I need another patch on top? Hey sorry missed this comment It does seem to work for me, I've mostly tested pseries but I did test others too (that's how I saw the arm getchar limit). How are you observing it not waiting for migration? I put some sleeps in the migration script before echo'ing to the console input and it seems to be doing the right thing. Admittedly the test contains no way to programaticaly verify the machine was migrated the expected number of times, it would be nice to try to match that up somehow. Thanks, Nick
Re: [kvm-unit-tests PATCH v4 8/8] migration: add a migration selftest
On 09/02/2024 10.11, Nicholas Piggin wrote: Add a selftest for migration support in guest library and test harness code. It performs migrations in a tight loop to irritate races and bugs in the test harness code. Include the test in arm, s390, powerpc. Acked-by: Claudio Imbrenda (s390x) Reviewed-by: Thomas Huth Signed-off-by: Nicholas Piggin --- arm/Makefile.common | 1 + arm/selftest-migration.c | 1 + arm/unittests.cfg| 6 ++ common/selftest-migration.c | 34 ++ powerpc/Makefile.common | 1 + powerpc/selftest-migration.c | 1 + powerpc/unittests.cfg| 4 s390x/Makefile | 1 + s390x/selftest-migration.c | 1 + s390x/unittests.cfg | 4 10 files changed, 54 insertions(+) create mode 12 arm/selftest-migration.c create mode 100644 common/selftest-migration.c create mode 12 powerpc/selftest-migration.c create mode 12 s390x/selftest-migration.c diff --git a/arm/Makefile.common b/arm/Makefile.common index f828dbe0..f107c478 100644 --- a/arm/Makefile.common +++ b/arm/Makefile.common @@ -5,6 +5,7 @@ # tests-common = $(TEST_DIR)/selftest.$(exe) +tests-common += $(TEST_DIR)/selftest-migration.$(exe) tests-common += $(TEST_DIR)/spinlock-test.$(exe) tests-common += $(TEST_DIR)/pci-test.$(exe) tests-common += $(TEST_DIR)/pmu.$(exe) diff --git a/arm/selftest-migration.c b/arm/selftest-migration.c new file mode 12 index ..bd1eb266 --- /dev/null +++ b/arm/selftest-migration.c @@ -0,0 +1 @@ +../common/selftest-migration.c \ No newline at end of file diff --git a/arm/unittests.cfg b/arm/unittests.cfg index fe601cbb..db0e4c9b 100644 --- a/arm/unittests.cfg +++ b/arm/unittests.cfg @@ -55,6 +55,12 @@ smp = $MAX_SMP extra_params = -append 'smp' groups = selftest +# Test migration +[selftest-migration] +file = selftest-migration.flat +groups = selftest migration +arch = arm64 + # Test PCI emulation [pci-test] file = pci-test.flat diff --git a/common/selftest-migration.c b/common/selftest-migration.c new file mode 100644 index ..f70c505f --- /dev/null +++ b/common/selftest-migration.c @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Machine independent migration tests + * + * This is just a very simple test that is intended to stress the migration + * support in the test harness. This could be expanded to test more guest + * library code, but architecture-specific tests should be used to test + * migration of tricky machine state. + */ +#include +#include + +#if defined(__arm__) || defined(__aarch64__) +/* arm can only call getchar 15 times */ +#define NR_MIGRATIONS 15 +#else +#define NR_MIGRATIONS 100 +#endif FYI, I just wrote a patch that will hopefully fix the limitation to 15 times on arm: https://lore.kernel.org/kvm/20240216140210.70280-1-th...@redhat.com/T/#u Thomas
Re: [kvm-unit-tests PATCH v4 8/8] migration: add a migration selftest
On 09/02/2024 10.11, Nicholas Piggin wrote: Add a selftest for migration support in guest library and test harness code. It performs migrations in a tight loop to irritate races and bugs in the test harness code. Include the test in arm, s390, powerpc. Acked-by: Claudio Imbrenda (s390x) Reviewed-by: Thomas Huth Signed-off-by: Nicholas Piggin --- arm/Makefile.common | 1 + arm/selftest-migration.c | 1 + arm/unittests.cfg| 6 ++ Hi Nicholas, I just gave the patches a try, but the arm test seems to fail for me: Only the first getchar() seems to wait for a character, all the subsequent ones don't wait anymore and just continue immediately ... is this working for you? Or do I need another patch on top? Thanks, Thomas
[kvm-unit-tests PATCH v4 8/8] migration: add a migration selftest
Add a selftest for migration support in guest library and test harness code. It performs migrations in a tight loop to irritate races and bugs in the test harness code. Include the test in arm, s390, powerpc. Acked-by: Claudio Imbrenda (s390x) Reviewed-by: Thomas Huth Signed-off-by: Nicholas Piggin --- arm/Makefile.common | 1 + arm/selftest-migration.c | 1 + arm/unittests.cfg| 6 ++ common/selftest-migration.c | 34 ++ powerpc/Makefile.common | 1 + powerpc/selftest-migration.c | 1 + powerpc/unittests.cfg| 4 s390x/Makefile | 1 + s390x/selftest-migration.c | 1 + s390x/unittests.cfg | 4 10 files changed, 54 insertions(+) create mode 12 arm/selftest-migration.c create mode 100644 common/selftest-migration.c create mode 12 powerpc/selftest-migration.c create mode 12 s390x/selftest-migration.c diff --git a/arm/Makefile.common b/arm/Makefile.common index f828dbe0..f107c478 100644 --- a/arm/Makefile.common +++ b/arm/Makefile.common @@ -5,6 +5,7 @@ # tests-common = $(TEST_DIR)/selftest.$(exe) +tests-common += $(TEST_DIR)/selftest-migration.$(exe) tests-common += $(TEST_DIR)/spinlock-test.$(exe) tests-common += $(TEST_DIR)/pci-test.$(exe) tests-common += $(TEST_DIR)/pmu.$(exe) diff --git a/arm/selftest-migration.c b/arm/selftest-migration.c new file mode 12 index ..bd1eb266 --- /dev/null +++ b/arm/selftest-migration.c @@ -0,0 +1 @@ +../common/selftest-migration.c \ No newline at end of file diff --git a/arm/unittests.cfg b/arm/unittests.cfg index fe601cbb..db0e4c9b 100644 --- a/arm/unittests.cfg +++ b/arm/unittests.cfg @@ -55,6 +55,12 @@ smp = $MAX_SMP extra_params = -append 'smp' groups = selftest +# Test migration +[selftest-migration] +file = selftest-migration.flat +groups = selftest migration +arch = arm64 + # Test PCI emulation [pci-test] file = pci-test.flat diff --git a/common/selftest-migration.c b/common/selftest-migration.c new file mode 100644 index ..f70c505f --- /dev/null +++ b/common/selftest-migration.c @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Machine independent migration tests + * + * This is just a very simple test that is intended to stress the migration + * support in the test harness. This could be expanded to test more guest + * library code, but architecture-specific tests should be used to test + * migration of tricky machine state. + */ +#include +#include + +#if defined(__arm__) || defined(__aarch64__) +/* arm can only call getchar 15 times */ +#define NR_MIGRATIONS 15 +#else +#define NR_MIGRATIONS 100 +#endif + +int main(int argc, char **argv) +{ + int i = 0; + + report_prefix_push("migration"); + + for (i = 0; i < NR_MIGRATIONS; i++) + migrate_quiet(); + + report(true, "simple harness stress test"); + + report_prefix_pop(); + + return report_summary(); +} diff --git a/powerpc/Makefile.common b/powerpc/Makefile.common index eb88398d..da4a7bbb 100644 --- a/powerpc/Makefile.common +++ b/powerpc/Makefile.common @@ -6,6 +6,7 @@ tests-common = \ $(TEST_DIR)/selftest.elf \ + $(TEST_DIR)/selftest-migration.elf \ $(TEST_DIR)/spapr_hcall.elf \ $(TEST_DIR)/rtas.elf \ $(TEST_DIR)/emulator.elf \ diff --git a/powerpc/selftest-migration.c b/powerpc/selftest-migration.c new file mode 12 index ..bd1eb266 --- /dev/null +++ b/powerpc/selftest-migration.c @@ -0,0 +1 @@ +../common/selftest-migration.c \ No newline at end of file diff --git a/powerpc/unittests.cfg b/powerpc/unittests.cfg index e71140aa..7ce57de0 100644 --- a/powerpc/unittests.cfg +++ b/powerpc/unittests.cfg @@ -36,6 +36,10 @@ smp = 2 extra_params = -m 256 -append 'setup smp=2 mem=256' groups = selftest +[selftest-migration] +file = selftest-migration.elf +groups = selftest migration + [spapr_hcall] file = spapr_hcall.elf diff --git a/s390x/Makefile b/s390x/Makefile index b72f7578..344d46d6 100644 --- a/s390x/Makefile +++ b/s390x/Makefile @@ -1,4 +1,5 @@ tests = $(TEST_DIR)/selftest.elf +tests += $(TEST_DIR)/selftest-migration.elf tests += $(TEST_DIR)/intercept.elf tests += $(TEST_DIR)/emulator.elf tests += $(TEST_DIR)/sieve.elf diff --git a/s390x/selftest-migration.c b/s390x/selftest-migration.c new file mode 12 index ..bd1eb266 --- /dev/null +++ b/s390x/selftest-migration.c @@ -0,0 +1 @@ +../common/selftest-migration.c \ No newline at end of file diff --git a/s390x/unittests.cfg b/s390x/unittests.cfg index f5024b6e..a7ad522c 100644 --- a/s390x/unittests.cfg +++ b/s390x/unittests.cfg @@ -24,6 +24,10 @@ groups = selftest # please keep the kernel cmdline in sync with $(TEST_DIR)/selftest.parmfile extra_params = -append 'test 123' +[selftest-migration] +file = selftest-migration.elf +groups = selftest migration + [intercept] file = intercept.elf -- 2.42.0