Thread (8 messages) 8 messages, 6 authors, 2016-04-04

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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help