mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: Suleiman Souhlal <ssouhlal@freebsd.org>,
	Sean Christopherson <seanjc@google.com>
Cc: Steven Rostedt <rostedt@goodmis.org>,
	LKML <linux-kernel@vger.kernel.org>,
	kvm@vger.kernel.org, Thomas Gleixner <tglx@linutronix.de>,
	"x86@kernel.org" <x86@kernel.org>,
	Joel Fernandes <joel@joelfernandes.org>,
	Vineeth Pillai <vineeth@bitbyteword.org>,
	Borislav Petkov <bp@alien8.de>,
	Anna-Maria Behnsen <anna-maria@linutronix.de>,
	Peter Zijlstra <peterz@infradead.org>,
	Viresh Kumar <viresh.kumar@linaro.org>,
	Frederic Weisbecker <fweisbec@gmail.com>,
	suleiman@google.com
Subject: Re: [RFC][PATCH] KVM: Remove HIGH_RES_TIMERS dependency
Date: Wed, 4 Sep 2024 15:25:51 +0200	[thread overview]
Message-ID: <9b6ef0fa-99f5-4eac-b51a-aa0a3126c443@redhat.com> (raw)
In-Reply-To: <ZtgNqv1r7S738osp@freefall.freebsd.org>

On 9/4/24 09:35, Suleiman Souhlal wrote:
> On Wed, Aug 28, 2024 at 12:34:26PM -0700, Sean Christopherson wrote:
>> On Wed, Aug 21, 2024, Steven Rostedt wrote:
>>> From: Steven Rostedt <rostedt@goodmis.org>
>>>
>>> Commit 92b5265d38f6a ("KVM: Depend on HIGH_RES_TIMERS") added a dependency
>>> to high resolution timers with the comment:
>>>
>>>      KVM lapic timer and tsc deadline timer based on hrtimer,
>>>      setting a leftmost node to rb tree and then do hrtimer reprogram.
>>>      If hrtimer not configured as high resolution, hrtimer_enqueue_reprogram
>>>      do nothing and then make kvm lapic timer and tsc deadline timer fail.
>>>
>>> That was back in 2012, where hrtimer_start_range_ns() would do the
>>> reprogramming with hrtimer_enqueue_reprogram(). But as that was a nop with
>>> high resolution timers disabled, this did not work. But a lot has changed
>>> in the last 12 years.
>>>
>>> For example, commit 49a2a07514a3a ("hrtimer: Kick lowres dynticks targets on
>>> timer enqueue") modifies __hrtimer_start_range_ns() to work with low res
>>> timers. There's been lots of other changes that make low res work.
>>>
>>> I added this change to my main server that runs all my VMs (my mail
>>> server, my web server, my ssh server) and disabled HIGH_RES_TIMERS and the
>>> system has been running just fine for over a month.
>>>
>>> ChromeOS has tested this before as well, and it hasn't seen any issues with
>>> running KVM with high res timers disabled.
>>
>> Can you provide some background on why this is desirable, and what the effective
>> tradeoffs are?  Mostly so that future users have some chance of making an
>> informed decision.  Realistically, anyone running with HIGH_RES_TIMERS=n is likely
>> already aware of the tradeoffs, but it'd be nice to capture the info here.
> 
> We have found that disabling HR timers saves power without degrading
> the user experience too much.

This might have some issues on guests that do not support kvmclock, 
because they rely on precise delivery of periodic timers to keep their 
clock running.  This can be the APIC timer (provided by the kernel), the 
RTC (provided by userspace), or the i8254 (choice of kernel/userspace).

These guests are few and far between these days, and in the case of the 
APIC timer + Intel hosts we can use the preemption timer (which is 
TSC-based and has better latency _and_ accuracy).  Furthermore, only x86 
is requiring CONFIG_HIGH_RES_TIMERS, so it's probably just excessive 
care and we can even apply Steven's patch as is.

Alternatively, the "depends on HIGH_RES_TIMERS || EXPERT" could be added 
to virt/kvm.  Or a pr_warn could be added to kvm_init if HIGH_RES_TIMERS 
are not enabled.

But in general, it seems that Linux has a laissez-faire approach to 
disabling CONFIG_HIGH_RES_TIMERS - there must be other code in the 
kernel (maybe sound/?) that is relying on having high-enough HZ or 
hrtimers but that's not documented anywhere.  I don't have an objection 
to doing the same in KVM, honestly, since most systems are running 
CONFIG_HIGH_RES_TIMERS anyway.

Paolo


  reply	other threads:[~2024-09-04 13:26 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-08-21 13:51 Steven Rostedt
2024-08-28 19:34 ` Sean Christopherson
2024-09-04  7:35   ` Suleiman Souhlal
2024-09-04 13:25     ` Paolo Bonzini [this message]
2024-09-05  7:23       ` Suleiman Souhlal
2024-09-05 16:19 ` Paolo Bonzini

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=9b6ef0fa-99f5-4eac-b51a-aa0a3126c443@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=anna-maria@linutronix.de \
    --cc=bp@alien8.de \
    --cc=fweisbec@gmail.com \
    --cc=joel@joelfernandes.org \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=peterz@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=seanjc@google.com \
    --cc=ssouhlal@freebsd.org \
    --cc=suleiman@google.com \
    --cc=tglx@linutronix.de \
    --cc=vineeth@bitbyteword.org \
    --cc=viresh.kumar@linaro.org \
    --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

all inboxes | Powered by JetHome®