From: Alexander Graf <agraf@csgraf.de>
To: Frank Yang <lfy@google.com>
Cc: Peter Maydell <peter.maydell@linaro.org>,
Eduardo Habkost <ehabkost@redhat.com>,
Richard Henderson <richard.henderson@linaro.org>,
qemu-devel <qemu-devel@nongnu.org>,
Cameron Esfahani <dirty@apple.com>,
Roman Bolshakov <r.bolshakov@yadro.com>,
qemu-arm <qemu-arm@nongnu.org>,
Claudio Fontana <cfontana@suse.de>,
Paolo Bonzini <pbonzini@redhat.com>,
Peter Collingbourne <pcc@google.com>
Subject: Re: [PATCH v1 1/1] hvf: arm: Properly sync guest time on migration
Date: Wed, 2 Dec 2020 23:56:59 +0100 [thread overview]
Message-ID: <658b1719-4635-edab-f3e2-6a9ac0bc01a1@csgraf.de> (raw)
In-Reply-To: <CAEkmjvV-XPmBCGsOnBhZ20t6D+vbp+7pOUpDeMJL3dKAjZvErQ@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 2831 bytes --]
On 02.12.20 23:46, Frank Yang wrote:
>
>
> On Wed, Dec 2, 2020 at 2:28 PM Alexander Graf <agraf@csgraf.de
> <mailto:agraf@csgraf.de>> wrote:
>
>
> On 02.12.20 23:19, Frank Yang wrote:
>>
>> From downstream:
>> https://android-review.googlesource.com/c/platform/external/qemu/+/1515002
>> <https://android-review.googlesource.com/c/platform/external/qemu/+/1515002>
>>
>> Based on v3 of Alexander Graf's patches
>>
>> https://patchew.org/QEMU/20201202190408.2041-1-agraf@csgraf.de
>> <https://patchew.org/QEMU/20201202190408.2041-1-agraf@csgraf.de>
>>
>> We need to adjust CNTVOFF_EL2 so that time doesnt warp. Even
>> though we
>> can set separate CNTVOFF_EL2 values per vCPU, it just is not
>> worth the
>> require effort to do that accurately---with individual values,
>> even if
>> they are a tiny bit off it can result in a lockup due to inconsistent
>> time differences between vCPUs. So just use a global approximate
>> value
>> for now.
>>
>> Not tested in upstream yet, but Android emulator snapshots work
>> without
>> time warp now.
>>
>> Signed-off-by: Lingfeng Yang <lfy@google.com <mailto:lfy@google.com>>
>
>
> If we just always make CNTV start at the same 0 as
> QEMU_CLOCK_VIRTUAL, we should be able to just recover the offset
> after migration by looking at QEMU_CLOCK_VIRTUAL to set CNTVOFF,
> right?
>
> That would end up much easier than this patch I hope.
>
>
>
> The virtual clock interfaces/implementations in QEMU seem complex to
> me relative to the fix needed here and they don't seem to compute
> ticks with mach_absolute_time() (which in this case we want since we
> want to compute in timer ticks instead of having to mess with ns /
> cycle conversions). I do agree this patch does seem more complicated
> on the surface though versus "just" setting cntvoff directly to some
> value. Maybe we should simplify the QEMU_CLOCK_VIRTUAL implementation
> first to maintain CNTVOFF_EL2/CNTV using mach_absolute_time() first?
So QEMU_CLOCK_VIRTUAL calls cpu_get_clock() which just adds an offset to
gettimeofday(). This offset is already part of the live migration
stream[1]. So if you just configure CNTVOFF_EL2 based on
QEMU_CLOCK_VIRTUAL adjusted by the clock frequency on vcpu init, you
should have everything you need. You can do that on every CPU init even,
as the virtual clock will just be 0 on start.
The only thing we need to change then is to move the WFI from a direct
call to mach_absolute_time() to also check the virtual clock instead. I
would hope that gettimeofday() calls mach_absolute_time() in the
background too to speed it up.
Alex
[1]
https://git.qemu.org/?p=qemu.git;a=blob;f=softmmu/cpu-timers.c;h=1eb7c675c18bda7773d4a9c549f0157c6e978a83;hb=HEAD#l229
[-- Attachment #2: Type: text/html, Size: 5199 bytes --]
next prev parent reply other threads:[~2020-12-02 22:58 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-12-02 22:19 [PATCH v1 1/1] hvf: arm: Properly sync guest time on migration Frank Yang
2020-12-02 22:22 ` Frank Yang
2020-12-02 22:28 ` Alexander Graf
2020-12-02 22:46 ` Frank Yang
2020-12-02 22:56 ` Alexander Graf [this message]
2020-12-02 23:25 ` Frank Yang
2020-12-02 23:39 ` Peter Collingbourne
2020-12-03 10:26 ` Alexander Graf
2020-12-02 23:28 ` Peter Collingbourne
2020-12-03 10:29 ` Alexander Graf
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=658b1719-4635-edab-f3e2-6a9ac0bc01a1@csgraf.de \
--to=agraf@csgraf.de \
--cc=cfontana@suse.de \
--cc=dirty@apple.com \
--cc=ehabkost@redhat.com \
--cc=lfy@google.com \
--cc=pbonzini@redhat.com \
--cc=pcc@google.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=r.bolshakov@yadro.com \
--cc=richard.henderson@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).