linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Andy Lutomirski <luto@amacapital.net>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: Vitaly Kuznetsov <vkuznets@redhat.com>,
	Andrew Lutomirski <luto@kernel.org>,
	Marcelo Tosatti <mtosatti@redhat.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Radim Krcmar <rkrcmar@redhat.com>,
	Wanpeng Li <kernellwp@gmail.com>,
	LKML <linux-kernel@vger.kernel.org>, X86 ML <x86@kernel.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Matt Rickard <matt@softrans.com.au>,
	Stephen Boyd <sboyd@kernel.org>,
	John Stultz <john.stultz@linaro.org>,
	Florian Weimer <fweimer@redhat.com>,
	KY Srinivasan <kys@microsoft.com>,
	devel@linuxdriverproject.org,
	Linux Virtualization <virtualization@lists.linux-foundation.org>,
	Arnd Bergmann <arnd@arndb.de>, Juergen Gross <jgross@suse.com>
Subject: Re: [patch 00/11] x86/vdso: Cleanups, simmplifications and CLOCK_TAI support
Date: Wed, 3 Oct 2018 09:18:23 -0700	[thread overview]
Message-ID: <CALCETrWHkrzADjRw=_SqC0Q0urJNppwT+pCSV0yMJ97ZFB20_w@mail.gmail.com> (raw)
In-Reply-To: <alpine.DEB.2.21.1810031704480.23677@nanos.tec.linutronix.de>

On Wed, Oct 3, 2018 at 8:10 AM Thomas Gleixner <tglx@linutronix.de> wrote:
>
> On Wed, 3 Oct 2018, Andy Lutomirski wrote:
> > > On Oct 3, 2018, at 5:01 AM, Vitaly Kuznetsov <vkuznets@redhat.com> wrote:
> > > Not all Hyper-V hosts support reenlightenment notifications (and, if I'm
> > > not mistaken, you need to enable nesting for the VM to get the feature -
> > > and most VMs don't have this) so I think we'll have to keep Hyper-V
> > > vclock for the time being.
> > >
> > But this does suggest that the correct way to pass a clock through to an
> > L2 guest where L0 is HV is to make L1 use the “tsc” clock and L2 use
> > kvmclock (or something newer and better).  This would require adding
> > support for atomic frequency changes all the way through the timekeeping
> > and arch code.
> >
> > John, tglx, would that be okay or crazy?
>
> Not sure what you mean. I think I lost you somewhere on the way.
>

What I mean is: currently we have a clocksource called
""hyperv_clocksource_tsc_page".  Reading it does:

static u64 read_hv_clock_tsc(struct clocksource *arg)
{
    u64 current_tick = hv_read_tsc_page(tsc_pg);

    if (current_tick == U64_MAX)
        rdmsrl(HV_X64_MSR_TIME_REF_COUNT, current_tick);

    return current_tick;
}

From Vitaly's email, it sounds like, on most (all?) hyperv systems
with nesting enabled, this clock is better behaved than it appears.
It sounds like the read behavior is that current_tick will never be
U64_MAX -- instead, the clock always works and, more importantly, the
actual scaling factor and offset only change observably on *guest*
request.

So why don't we we improve the actual "tsc" clocksource to understand
this?  ISTM the best model would be where the
__clocksource_update_freq_xyz() mechanism gets called so we can use it
like this:

clocksource_begin_update();
clocksource_update_mult_shift();
tell_hv_that_we_reenlightened();
clocksource_end_update();

Where clocksource_begin_update() bumps the seqcount for the vDSO and
takes all the locks, clocksource_update_mult_shift() updates
everything, and clocksource_end_update() makes the updated parameters
usable.

(AFAICT there are currently no clocksources at all in the entire
kernel that update their frequency on the fly using
__clocksource_update_xyz().  Unless I'm missing something, the x86 tsc
cpufreq hooks don't call into the core timekeeping at all, so I'm
assuming that the tsc clocksource is just unusable as a clocksource on
systems that change its frequency.)

Or we could keep the hyperv_clocksource_tsc_page clocksource but make
it use VCLOCK_TSC and a similar update mechanism.

I don't personally want to do this, because the timekeeping code is
subtle and I'm unfamiliar with it.  And I don't have *that* many spare
cycles :)

  reply	other threads:[~2018-10-03 16:18 UTC|newest]

Thread overview: 81+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-14 12:50 [patch 00/11] x86/vdso: Cleanups, simmplifications and CLOCK_TAI support Thomas Gleixner
2018-09-14 12:50 ` [patch 01/11] clocksource: Provide clocksource_arch_init() Thomas Gleixner
2018-09-14 12:50 ` [patch 02/11] x86/time: Implement clocksource_arch_init() Thomas Gleixner
2018-09-14 15:45   ` Vitaly Kuznetsov
2018-09-15  6:05     ` Thomas Gleixner
2018-09-14 12:50 ` [patch 03/11] x86/vdso: Enforce 64bit clocksource Thomas Gleixner
2018-09-14 12:50 ` [patch 04/11] x86/vdso: Use unsigned int consistently for vsyscall_gtod_data::seq Thomas Gleixner
2018-09-14 12:50 ` [patch 05/11] x86/vdso: Introduce and use vgtod_ts Thomas Gleixner
2018-09-14 12:50 ` [patch 06/11] x86/vdso: Collapse high resolution functions Thomas Gleixner
2018-09-14 12:50 ` [patch 07/11] x86/vdso: Collapse coarse functions Thomas Gleixner
2018-09-14 12:50 ` [patch 08/11] x86/vdso: Replace the clockid switch case Thomas Gleixner
2018-09-14 12:50 ` [patch 09/11] x86/vdso: Simplify the invalid vclock case Thomas Gleixner
2018-09-17 19:25   ` Andy Lutomirski
2018-09-17 20:12     ` John Stultz
2018-09-18  7:52       ` Thomas Gleixner
2018-09-18  8:30         ` Peter Zijlstra
2018-09-18  8:52           ` Thomas Gleixner
2018-09-18 10:06             ` Thomas Gleixner
2018-09-18 10:41               ` Thomas Gleixner
2018-09-18 12:48                 ` Peter Zijlstra
2018-09-18 13:23                   ` Thomas Gleixner
2018-09-18 13:38                     ` Peter Zijlstra
2018-09-18 15:52                     ` Thomas Gleixner
2018-09-27 14:41                       ` Thomas Gleixner
2018-09-18 14:01         ` Andy Lutomirski
2018-09-18 22:46           ` Thomas Gleixner
2018-09-18 23:03             ` Andy Lutomirski
2018-09-18 23:16               ` Thomas Gleixner
2018-09-27 14:36                 ` Thomas Gleixner
2018-09-27 14:39                   ` Andy Lutomirski
2018-09-19  9:08             ` Rasmus Villemoes
2018-09-19 13:29               ` Thomas Gleixner
2018-09-14 12:50 ` [patch 10/11] x86/vdso: Move cycle_last handling into the caller Thomas Gleixner
2018-09-14 15:26   ` Vitaly Kuznetsov
2018-09-14 12:50 ` [patch 11/11] x66/vdso: Add CLOCK_TAI support Thomas Gleixner
2018-09-14 14:04   ` Andy Lutomirski
2018-09-14 14:27     ` Thomas Gleixner
2018-09-14 14:59       ` Andy Lutomirski
2018-09-16  9:39         ` Thomas Gleixner
2018-09-14 12:56 ` [patch 00/11] x86/vdso: Cleanups, simmplifications and " Florian Weimer
2018-09-14 13:05   ` Thomas Gleixner
2018-09-14 13:06     ` Florian Weimer
2018-09-14 13:19       ` Thomas Gleixner
2018-09-14 13:09   ` Peter Zijlstra
2018-09-14 14:22 ` Arnd Bergmann
2018-09-17 13:00   ` Thomas Gleixner
2018-09-24 21:08     ` Arnd Bergmann
2018-10-03  5:15 ` Andy Lutomirski
2018-10-03  9:22   ` Vitaly Kuznetsov
2018-10-03 10:20     ` Andy Lutomirski
2018-10-03 12:01       ` Vitaly Kuznetsov
2018-10-03 14:20         ` Andy Lutomirski
2018-10-03 15:10           ` Thomas Gleixner
2018-10-03 16:18             ` Andy Lutomirski [this message]
2018-10-03 19:06     ` Marcelo Tosatti
2018-10-04  7:54       ` Vitaly Kuznetsov
2018-10-04  8:11         ` Peter Zijlstra
2018-10-04 14:00           ` Andy Lutomirski
2018-10-04 19:31             ` Peter Zijlstra
2018-10-04 20:05               ` Andy Lutomirski
2018-10-04 22:15                 ` Andy Lutomirski
2018-10-06 20:27                   ` Marcelo Tosatti
2018-10-06 22:28                     ` Andy Lutomirski
2018-10-08 15:26                       ` Marcelo Tosatti
2018-10-08 17:38                         ` Andy Lutomirski
2018-10-08 19:36                           ` Marcelo Tosatti
2018-10-09 20:09                             ` Andy Lutomirski
2018-10-11 22:27                               ` Marcelo Tosatti
2018-10-11 23:00                                 ` Andy Lutomirski
2018-10-15 13:39                                   ` Marcelo Tosatti
2018-10-06 20:49                   ` Marcelo Tosatti
2018-10-04 12:00         ` Paolo Bonzini
2018-10-04 14:04           ` Andy Lutomirski
2018-10-05 21:18         ` Marcelo Tosatti
2018-10-03 19:00   ` Marcelo Tosatti
2018-10-03 19:05     ` [patch 00/11] x86/vdso: Cleanups, simmplifications and CLOCK_TAI support\ Marcelo Tosatti
2018-10-03 22:32     ` [patch 00/11] x86/vdso: Cleanups, simmplifications and CLOCK_TAI support Andy Lutomirski
2018-10-04 16:37       ` Marcelo Tosatti
2018-10-04 17:08         ` Andy Lutomirski
2018-10-04 17:28           ` Vitaly Kuznetsov
2018-10-04 20:32 ` Andy Lutomirski

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='CALCETrWHkrzADjRw=_SqC0Q0urJNppwT+pCSV0yMJ97ZFB20_w@mail.gmail.com' \
    --to=luto@amacapital.net \
    --cc=arnd@arndb.de \
    --cc=devel@linuxdriverproject.org \
    --cc=fweimer@redhat.com \
    --cc=jgross@suse.com \
    --cc=john.stultz@linaro.org \
    --cc=kernellwp@gmail.com \
    --cc=kys@microsoft.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luto@kernel.org \
    --cc=matt@softrans.com.au \
    --cc=mtosatti@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peterz@infradead.org \
    --cc=rkrcmar@redhat.com \
    --cc=sboyd@kernel.org \
    --cc=tglx@linutronix.de \
    --cc=virtualization@lists.linux-foundation.org \
    --cc=vkuznets@redhat.com \
    --cc=x86@kernel.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).