From: Daniel Lezcano <daniel.lezcano@xxxxxxxxxx> Sent: Monday, June 19, 2023 9:16 AM > > On 09/06/2023 17:47, Michael Kelley wrote: > > Current code assigns either the Hyper-V TSC page or MSR-based ref counter > > as the sched clock. This may be sub-optimal in two cases. First, if there > > is hardware support to ensure consistent TSC frequency across live > > migrations and Hyper-V is using that support, the raw TSC is a faster > > source of time than the Hyper-V TSC page. Second, the MSR-based ref > > counter is relatively slow because reads require a trap to the hypervisor. > > As such, it should never be used as the sched clock. The native sched > > clock based on the raw TSC or jiffies is much better. > > > > Rework the sched clock setup so it is set to the TSC page only if > > Hyper-V indicates that the TSC may have inconsistent frequency across > > live migrations. Also, remove the code that sets the sched clock to > > the MSR-based ref counter. In the cases where it is not set, the sched > > clock will then be the native sched clock. > > > > As part of the rework, always enable both the TSC page clocksource and > > the MSR-based ref counter clocksource. Set the ratings so the TSC page > > clocksource is preferred. While the MSR-based ref counter clocksource > > is unlikely to ever be the default, having it available for manual > > selection is convenient for development purposes. > > > > Signed-off-by: Michael Kelley <mikelley@xxxxxxxxxxxxx> > > The patch does not apply, does it depend on another patch? It should apply to linux-next. It depends on two previous patches from Peter Zijlstra in the sched/core branch of tip. See: https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git/commit/?h=sched/core&id=9397fa2ea3e7634f61da1ab76b9eb88ba04dfdfc and https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git/commit/?h=sched/core&id=e39acc37db34f6688e2c16e958fb1d662c422c81 Michael > > Rejected chunk: > > --- drivers/clocksource/hyperv_timer.c > +++ drivers/clocksource/hyperv_timer.c > @@ -485,15 +485,9 @@ static u64 notrace read_hv_clock_msr_cs(struct > clocksource *arg) > return read_hv_clock_msr(); > } > > -static u64 noinstr read_hv_sched_clock_msr(void) > -{ > - return (read_hv_clock_msr() - hv_sched_clock_offset) * > - (NSEC_PER_SEC / HV_CLOCK_HZ); > -} > - > static struct clocksource hyperv_cs_msr = { > .name = "hyperv_clocksource_msr", > - .rating = 500, > + .rating = 495, > .read = read_hv_clock_msr_cs, > .mask = CLOCKSOURCE_MASK(64), > .flags = CLOCK_SOURCE_IS_CONTINUOUS, > > > --