Re: [PATCH] x86: Add a turbo mode sysctl
flat view
From: Andy Lutomirski <hidden>
Date: 2016-04-02 20:22:04
Also in:
lkml
On Fri, Apr 1, 2016 at 9:10 AM, Thomas Gleixner [off-list ref] wrote:
On Fri, 1 Apr 2016, Andy Lutomirski wrote:quoted
+static void update_local_turbo_mode(void *dummy) +{ + unsigned long cr0 = read_cr0(); + + /* + * KVM doesn't properly handle CD. + * + * XXX: this may interact poorly with CPU hotplug.Please cc these crazy folks who cleanup the hotplug mess so they can put it on their todo list.quoted
+ */ + + if (turbo_mode) + write_cr0(cr0 & ~X86_CR0_CD); + else + write_cr0(cr0 | X86_CR0_CD);I think proper turbo mode disable requires ~(X86_CR0_CD | X86_CR0_NW)
I thought that made no difference on family 6 and P4 and was actively dangerous (disabled coherency) before. At least, that's what the table of caching modes and the footnote seems to say.
quoted
+static void update_turbo_mode(void) +{ + on_each_cpu(update_local_turbo_mode, NULL, 1); + + if (!turbo_mode) + wbinvd();You really want to do wbinvd() on each cpu to make sure that each cpu gets out of that turbo thing.
Nah, this is an explicit optimization to de-turboize as quickly as possible: "The instruction then issues a special-function bus cycle that directs external caches to also write back modified data and another bus cycle to indicate that the external caches should be invalidated." I think we should merge this patch and add a special-case so that calling unlink on turbo_mode sets it to zero. Then people who rm -rf / will brick their systems more slowly :) --Andy