qemu/include/hw/s390x
David Hildenbrand 9bc9d3d1ae s390x/tod: Properly stop the KVM TOD while the guest is not running
Just like on other architectures, we should stop the clock while the guest
is not running. This is already properly done for TCG. Right now, doing an
offline migration (stop, migrate, cont) can easily trigger stalls in the
guest.

Even doing a
    (hmp) stop
    ... wait 2 minutes ...
    (hmp) cont
will already trigger stalls.

So whenever the guest stops, backup the KVM TOD. When continuing to run
the guest, restore the KVM TOD.

One special case is starting a simple VM: Reading the TOD from KVM to
stop it right away until the guest is actually started means that the
time of any simple VM will already differ to the host time. We can
simply leave the TOD running and the guest won't be able to recognize
it.

For migration, we actually want to keep the TOD stopped until really
starting the guest. To be able to catch most errors, we should however
try to set the TOD in addition to simply storing it. So we can still
catch basic migration problems.

If anything goes wrong while backing up/restoring the TOD, we have to
ignore it (but print a warning). This is then basically a fallback to
old behavior (TOD remains running).

I tested this very basically with an initrd:
    1. Start a simple VM. Observed that the TOD is kept running. Old
       behavior.
    2. Ordinary live migration. Observed that the TOD is temporarily
       stopped on the destination when setting the new value and
       correctly started when finally starting the guest.
    3. Offline live migration. (stop, migrate, cont). Observed that the
       TOD will be stopped on the source with the "stop" command. On the
       destination, the TOD is temporarily stopped when setting the new
       value and correctly started when finally starting the guest via
       "cont".
    4. Simple stop/cont correctly stops/starts the TOD. (multiple stops
       or conts in a row have no effect, so works as expected)

In the future, we might want to send the guest a special kind of time sync
interrupt under some conditions, so it can synchronize its tod to the
host tod. This is interesting for migration scenarios but also when we
get time sync interrupts ourselves. This however will most probably have
to be handled in KVM (e.g. when the tods differ too much) and is not
desired e.g. when debugging the guest (single stepping should not
result in permanent time syncs). I consider something like that an add-on
on top of this basic "don't break the guest" handling.

Signed-off-by: David Hildenbrand <david@redhat.com>
Message-Id: <20181130094957.4121-1-david@redhat.com>
Acked-by: Christian Borntraeger <borntraeger@de.ibm.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
2018-12-12 10:39:28 +01:00
..
3270-ccw.h s390x/3270: IDA support for 3270 via CcwDataStream 2017-10-06 10:53:02 +02:00
adapter.h s390x/virtio-ccw: wire up irq routing and irqfds 2014-05-20 13:05:58 +02:00
ap-bridge.h s390x/ap: base Adjunct Processor (AP) object model 2018-10-12 11:32:18 +02:00
ap-device.h s390x/ap: base Adjunct Processor (AP) object model 2018-10-12 11:32:18 +02:00
css-bridge.h s390x: remove 's390-squash-mcss' option 2018-08-20 14:18:49 +02:00
css.h hw/s390x/ioinst: Fix alignment problem in struct SubchDev 2018-10-04 10:32:38 +02:00
ebcdic.h Clean up ill-advised or unusual header guards 2016-07-12 16:20:46 +02:00
event-facility.h hw/s390x: Allow to configure the consoles with the "-serial" parameter 2018-04-30 10:48:29 +02:00
ioinst.h hw/s390x/ioinst: Fix alignment problem in struct SubchDev 2018-10-04 10:32:38 +02:00
s390-ccw.h s390x: improve error handling for SSCH and RSCH 2017-10-20 13:32:10 +02:00
s390-virtio-ccw.h s390x: Fence huge pages prior to 3.1 2018-10-04 10:32:39 +02:00
s390_flic.h s390x/flic: cache the common flic class in a central function 2018-02-09 09:37:13 +01:00
sclp.h s390x: remove s390_get_memslot_count 2018-02-26 12:55:26 +01:00
storage-attributes.h Use #include "..." for our own headers, <...> for others 2018-02-09 05:05:11 +01:00
storage-keys.h Clean up ill-advised or unusual header guards 2016-07-12 16:20:46 +02:00
tod.h s390x/tod: Properly stop the KVM TOD while the guest is not running 2018-12-12 10:39:28 +01:00