[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 2/2] CI: Check save/restore of PV domain as part of qemu-alpine-x86_64


  • To: Marek Marczykowski-Górecki <marmarek@xxxxxxxxxxxxxxxxxxxxxx>
  • From: Frediano Ziglio <freddy77@xxxxxxxxx>
  • Date: Tue, 4 Aug 2026 22:58:47 +0100
  • Arc-authentication-results: i=1; mx.google.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=rVNb0qH2KaqSSA1wdzQ35ti5zCobKv53Fc4eqYo5Z2E=; fh=S7vaYQF6ldLkXu1uh42X3MXXcRRChuuDlJZSyF3Eswo=; b=npzm6QPk7iYEhS0tnki6E4Y6MwXEiwYqwRdGk+cLPOETYv8A8SiqhxfPcM7woiBfE5 Kbh7ovsCXSd96EgC6Gxy9eWTaEmEhXBpv35PQxXdCkjFoDI6VEcZcoYZd5PmSH2+pGDu 29phw1nsS4oRPsuKpr27YZ7s0xnujt9vKfXrhCkS534e+nlMlPW12NP8yKQB9sMKba+Q oS5oGT6Lc/heUAm19s3zI5qr5mxUKOcEVVwS331OUSF4TYRFq9/nF+vWvXC0Z+Pkvjks o5NTaYxss+v3APe5k+gjT8R+RU0jqs3LoCOJdCGl3z4rUcQjUnAyo2f5puJtdWYme+yZ p7IQ==; darn=lists.xenproject.org
  • Arc-seal: i=1; a=rsa-sha256; t=1785880738; cv=none; d=google.com; s=arc-20260327; b=ocwEMswJr5/W5jBxixVcX9Vd3b+FhPofoJmEYAiNFQyfGRTh71cegqBR45pfB2aCbs Yd3DF+y0uLpYGPXvTnKifMd9Fe2kc1JtpS7lLwflnPcIX9RA8MI+lzmOA6Tb90xqCAyV WgwG1dfgZJR6FjsU3ze5MxjQlJccsPpLzD+7aUIpzemPbJQGA69CR4mWAaIIK56JwFoh 4ym3GMqE14g5gnjiCz9F3Xrrj7kl9XQjDa5TxX7fVx6SOFNVdV2nn3kfQB5Ir4Hx7Q6Q pObIl98p/v/FWdGauZbou7ik/vl/wH2k5d3orixcKi3tghSLzp3s1W2dbyCocSEmUmVy oFQg==
  • Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=20251104 header.d=gmail.com header.i="@gmail.com" header.h="Content-Transfer-Encoding:Content-Type:Cc:To:Subject:Message-ID:Date:From:In-Reply-To:References:MIME-Version"
  • Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, xen-devel@xxxxxxxxxxxxxxxxxxxx, Frediano Ziglio <frediano.ziglio@xxxxxxxxxx>, Doug Goldstein <cardoe@xxxxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Jan Beulich <jbeulich@xxxxxxxx>
  • Delivery-date: Tue, 04 Aug 2026 21:59:08 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On Tue, 4 Aug 2026 at 20:17, Marek Marczykowski-Górecki
<marmarek@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>
> On Tue, Aug 04, 2026 at 07:55:24PM +0100, Andrew Cooper wrote:
> > On 04/08/2026 7:48 pm, Frediano Ziglio wrote:
> > > On Tue, 4 Aug 2026 at 18:57, Marek Marczykowski-Górecki
> > > <marmarek@xxxxxxxxxxxxxxxxxxxxxx> wrote:
> > >> On Tue, Aug 04, 2026 at 06:42:18PM +0100, Frediano Ziglio wrote:
> > >>> Make sure that save/restore continue to work.
> > >>> The check save and restore twice to check for corrupted status.
> > >>> Also a command is launched in the guest to make sure that the
> > >>> machine is not crashed but working.
> > >>>
> > >>> Signed-off-by: Frediano Ziglio <frediano.ziglio@xxxxxxxxxx>
> > >>> ---
> > >>>  automation/scripts/console.exp           |  8 +++++
> > >>>  automation/scripts/qemu-alpine-x86_64.sh | 40 ++++++++++++++++++++++--
> > >>>  2 files changed, 46 insertions(+), 2 deletions(-)
> > >>>
> > >>> diff --git a/automation/scripts/console.exp 
> > >>> b/automation/scripts/console.exp
> > >>> index e27886bbef..ff58ed29b8 100755
> > >>> --- a/automation/scripts/console.exp
> > >>> +++ b/automation/scripts/console.exp
> > >>> @@ -58,6 +58,14 @@ if {[info exists env(WAKEUP_CMD)]} {
> > >>>      system "$env(WAKEUP_CMD)"
> > >>>  }
> > >>>
> > >>> +if {[info exists env(EXPECT_TEXTS)]} {
> > >>> +    set lines [split "$env(EXPECT_TEXTS)" "\n"]
> > >>> +    foreach {exp snd} $lines {
> > >>> +        expect -re "$exp"
> > >>> +        send "$snd\n"
> > >>> +    }
> > >>> +}
> > >>> +
> > >>>  if {[info exists env(LOG_MSG)]} {
> > >>>      expect {
> > >>>          -notransfer -re "$env(PASSED)" {
> > >>> diff --git a/automation/scripts/qemu-alpine-x86_64.sh 
> > >>> b/automation/scripts/qemu-alpine-x86_64.sh
> > >>> index 60f5cc49fc..409a601c34 100755
> > >>> --- a/automation/scripts/qemu-alpine-x86_64.sh
> > >>> +++ b/automation/scripts/qemu-alpine-x86_64.sh
> > >>> @@ -48,6 +48,28 @@ xl -vvv create -c /root/domU.cfg
> > >>>
> > >>>  " > etc/local.d/xen.start
> > >>>  chmod +x etc/local.d/xen.start
> > >>> +
> > >>> +# Script to test save and restore.
> > >>> +# It saves and restores domU domain twice to check if the domain was 
> > >>> corrupted
> > >>> +# during the first sequence.
> > >>> +# At the end open the console to check if the domain is working.
> > >>> +cat > root/save_restore_test << "EOF"
> > >>> +#!/bin/sh
> > >>> +set -ex
> > >>> +xl list | grep -q domU
> > >>> +rm -f save.dat
> > >>> +xl save "$(xl list | awk '$1=="domU" { print $2 }')" save.dat 
> > >>> /root/domU.cfg
> > >>> +xl restore /root/domU.cfg save.dat
> > >>> +xl list | grep -q domU
> > >>> +rm -f save.dat
> > >>> +xl save "$(xl list | awk '$1=="domU" { print $2 }')" save.dat 
> > >>> /root/domU.cfg
> > >>> +xl restore /root/domU.cfg save.dat
> > >>> +xl list | grep -q domU
> > >>> +rm -f save.dat
> > >>> +xl console "$(xl list | awk '$1=="domU" { print $2 }')"
> > >>> +EOF
> > >>> +chmod +x root/save_restore_test
> > >>> +
> > >>>  find . | cpio -R 0:0 -H newc -o | gzip >> ../dom0-rootfs.cpio.gz
> > >>>  cd ../..
> > >>>
> > >>> @@ -70,9 +92,23 @@ export TEST_CMD="qemu-system-x86_64 \
> > >>>      -device virtio-net-pci,netdev=n0 \
> > >>>      -netdev user,id=n0,tftp=binaries,bootfile=/pxelinux.0"
> > >>>
> > >>> +# Sequence of expect/send strings:
> > >>> +# 1. wait domain start and close console;
> > >>> +# 2. wait login prompt and login as root
> > >>> +# 3. wait login and launch save/restore test;
> > >>> +# 4. wait restore from domain console and send a command.
> > >> Why doing this interactively over serial, instead of adding to
> > >> etc/local.d/xen.start and then printing test result at the end?
> > >>
> > > I'm using expect to interact with the console. expect is not available
> > > inside the alpine root filesystem.
> > > Some failure I had during migration is that the VM crashed. In the
> > > script I interact with the console to check that the VM is still able
> > > to run commands.
> >
> > We can add `expect` to the dom0 root filesystem if we find a need for
> > it, and it looks like this might be a good enough reason.  You want a
> > patch to https://gitlab.com/xen-project/hardware/test-artifacts
> > images/alpine/*-x86_64-base.dockerfile to get it included.
>
> FWIW, my suspend test (which tests a similar thing) uses ping to check
> if domU is still alive:
> https://gitlab.com/xen-project/people/marmarek/xen/-/blob/2184be51d426b60f5e1a7e6e891d0f40e9488fc7/automation/scripts/qemu-alpine-domU-suspend-x86_64.sh
>

Are you going to upstream the test?
Why sleep between commands? Worrying about possible races? Probably
there should be no race after the command exited so I personally would
remove.

Using the network seems like a good idea. I also discovered that there
is nc and bash installed so something like

    # nc -lk -p 8888 -e sh -c "echo Still alive"

and

    # bash -c 'read -t 1 line < /dev/tcp/localhost/8888; echo $line'
    Still alive

would even test if userspace is still working correctly

>
> > But, for migration testing, this really wants to run on the real
> > hardware.  Besides the main memory image, there's variations in register
> > state and validity which will vary between hardware.
>

Which scripts/jobs are run on real hardware (well, I suppose all that
starts with zen, kbl, xilink or adl). Are they all run for every
build?
--
Frediano



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.