On 10.03.2017 09:30, Cédric Le Goater wrote: > On 03/09/2017 06:27 PM, Thomas Huth wrote: >> To be able to do simple migration tests with kvm-unit-tests, too, >> add a helper script that does all the necessary work: Start two >> instances of QEMU (source and destination) with QMP sockets for >> sending commands to them, then trigger the migration from one >> instance to the other and finally signal the end of the migration >> to the guest by injecting an NMI. >> This helper script is now used automatically for powerpc tests >> if the test is put into the "migration" group in the unittests.cfg >> file. >> >> Signed-off-by: Thomas Huth <thuth@xxxxxxxxxx> >> --- >> powerpc/run | 5 ++++ >> scripts/qemu-migration-helper.sh | 51 ++++++++++++++++++++++++++++++++++++++++ >> scripts/runtime.bash | 3 +++ >> 3 files changed, 59 insertions(+) >> create mode 100755 scripts/qemu-migration-helper.sh >> >> diff --git a/powerpc/run b/powerpc/run >> index 6269abb..126fed5 100755 >> --- a/powerpc/run >> +++ b/powerpc/run >> @@ -41,6 +41,11 @@ if ! $qemu -machine '?' 2>&1 | grep 'pseries' > /dev/null; then >> exit 2 >> fi >> >> +if [ "$MIGRATION" = "1" ]; then >> + export QEMU_BIN="$qemu" >> + qemu=`dirname $0`/../scripts/qemu-migration-helper.sh >> +fi >> + >> M='-machine pseries' >> M+=",accel=$ACCEL" >> command="$qemu -nodefaults $M -bios $FIRMWARE" >> diff --git a/scripts/qemu-migration-helper.sh b/scripts/qemu-migration-helper.sh >> new file mode 100755 >> index 0000000..0cb7e4a >> --- /dev/null >> +++ b/scripts/qemu-migration-helper.sh >> @@ -0,0 +1,51 @@ >> +#!/bin/sh >> + >> +# This script runs two instances of QEMU and then migrates the guest from one >> +# instance to the other. The end of the migration is signalled to the guest by >> +# injecting an NMI. >> + >> +if [ "x$QEMU_BIN" = "x" ]; then >> + echo "QEMU_BIN must be set to the QEMU binary" >> + exit 1 >> +fi >> + >> +if ! command -v nc >/dev/null 2>&1; then >> + echo "$0 needs nc (netcat)" >> + exit 1 >> +fi >> + >> +qmp_cmd() >> +{ >> + echo '{ "execute": "qmp_capabilities" }{ "execute":' "$2" '}' | nc -U $1 >> +} >> + >> +tempname=`mktemp` >> +qmp1=${tempname}.qmp1 >> +qmp2=${tempname}.qmp2 >> +qmpout1=${tempname}.qmpout1 >> +qmpout2=${tempname}.qmpout2 >> +stdout1=${tempname}.stdout1 >> +stdout2=${tempname}.stdout2 >> +migsock=${tempname}.mig >> + >> +$QEMU_BIN $* -chardev socket,id=mon1,path=${qmp1},server,nowait \ >> + -mon chardev=mon1,mode=control > ${stdout1} & >> + >> +$QEMU_BIN $* -chardev socket,id=mon2,path=${qmp2},server,nowait \ >> + -mon chardev=mon2,mode=control -incoming unix:${migsock} > ${stdout2} & >> + >> +sleep 1 >> + >> +qmp_cmd ${qmp1} '"migrate", "arguments": { "uri": "unix:'${migsock}'" }' > ${qmpout1} >> +while qmp_cmd ${qmp1} '"query-migrate"' | grep -q '"active"' ; do >> + sleep 1 >> +done > > I had to add an extra sleep here, else I was getting : > > qemu-system-ppc64: Not a migration stream > qemu-system-ppc64: load of migration failed: Invalid argument > > May be the synchronization on completion of the migration needs > to be improved. Right, there seems to be another state called "setup" which could be reported by query-migrate. So you likely got that state here and the while loop terminated too early. I'll fix that and send a new version (after waiting for some more review feedback)... Thanks for your testing! Thomas -- To unsubscribe from this list: send the line "unsubscribe kvm-ppc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html