Message ID | 20240209091134.600228-9-npiggin@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Multi-migration support | expand |
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 <imbrenda@linux.ibm.com> (s390x) > Reviewed-by: Thomas Huth <thuth@redhat.com> > Signed-off-by: Nicholas Piggin <npiggin@gmail.com> > --- > 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
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 <imbrenda@linux.ibm.com> (s390x) > Reviewed-by: Thomas Huth <thuth@redhat.com> > Signed-off-by: Nicholas Piggin <npiggin@gmail.com> > --- > 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 120000 arm/selftest-migration.c > create mode 100644 common/selftest-migration.c > create mode 120000 powerpc/selftest-migration.c > create mode 120000 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 120000 > index 00000000..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 00000000..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 <libcflat.h> > +#include <migrate.h> > + > +#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-thuth@redhat.com/T/#u Thomas
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 <imbrenda@linux.ibm.com> (s390x) > > Reviewed-by: Thomas Huth <thuth@redhat.com> > > Signed-off-by: Nicholas Piggin <npiggin@gmail.com> > > --- > > 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
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 <imbrenda@linux.ibm.com> (s390x) >>> Reviewed-by: Thomas Huth <thuth@redhat.com> >>> Signed-off-by: Nicholas Piggin <npiggin@gmail.com> >>> --- >>> 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
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 <imbrenda@linux.ibm.com> (s390x) > >>> Reviewed-by: Thomas Huth <thuth@redhat.com> > >>> Signed-off-by: Nicholas Piggin <npiggin@gmail.com> > >>> --- > >>> 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
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 120000 index 00000000..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 00000000..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 <libcflat.h> +#include <migrate.h> + +#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 120000 index 00000000..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 120000 index 00000000..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