heilong wrote:Thanks a lot!
So to fool undervolt to set voltage at 2GHz to 1.0625V, I get it's VID with the 2nd formula: 28, then put it in the 1st formula to get what
linux-phc thinks is the voltage: 1148. Wow, it's cool. Literally, CPU is very cool now ).
You are very welcome. It's good to know that this trick is working
heilong wrote:Btw, having different /sys/.../cpu0/op_points_table and /sys/.../cpu1/op_points_table didn't look too good to me, so I added
a couple of lines in /etc/conf.d/undervolt & /etc/init.d/undervolt to write the same VTABLE to cpu1/op_points_table. I guess this
will be fixed in some Core Duo (speedstep?) code along with the "CPUs which need to switch frequency at the same time" feature.
I don't know if this feature will solve this problem by itself or if it will require some modifications in the undervolting patch to change the voltages of both CPU at the same time.
And there is another upcoming feature of the Linux kernel that will change a lot of things regarding undervolting: "merge acpi functionality of cpufreq drivers". This feature will remove the ACPI support from the speedstep-centrino driver and merge it into the acpi-cpufreq driver.
As there is no builtin table support for Intel Core processors in speedstep-centrino this means that undervolting these processors with Linux PHC will not be possible anymore.
And people with a Pentium M processor that are using ACPI table will have to switch to built-in table to continue using the undervolting code of speedstep-centrino. (There are good reasons for not wanting to switch to built-in table for Pentium M Dothan processors)
There are solutions for this. One solution would be to add builtin table support for Intel Core processors in speedstep-centrino driver.
Another solution would be to add the undervolting code in the acpi-cpufreq driver.
But I will not be able to implement myself any of these solutions in the near future.
heilong wrote:Btw, bdz, can you tell me one thing? RMClock under windows can't set voltage on my core duo lower than 0.95V. I'm sure it'll work fine at lower voltages at 1000MHz, for example (coz 0.95V is the default for 1000MHz). linux-phc, on the other hand, allows to echo lower values to the op_points_table. Does it really set the voltage to lower levels or does it just silently ignores the request? Is this a core duo hardware cap, or is it done in software? Can it be overriden in windoze and linux?
Linux PHC will use the voltages you give to it if they are between 700 mV and the default voltages of the processor.
A while back, while googling around for information about Intel Core processors, I have read some things about about a cap at 0.95 V for the lowest frequency on Intel Core Duo processors. This is one thing about these processors that I've not been able to verify yet. (I dont have any computer with an Intel Core processor)
However if you are able to undervolt your Core Duo with Linux PHC I can tell you how you can verify this yourself:
I have written a small command line utility that reads some information in various place of the computers. I have written it so that people can run it on their computer to help me trying to understand how Core Duo processors are different from Pentium M processors.
Among the gathered information there are the PERF_CONTROL and PERF_STATUS MSR registers. From these registers you can get several frequency and voltage values:
- Min specification frequency and voltage
Max specification frequency and voltage
Target frequency and voltage (This is where you will see if Linux PHC takes into account your settings)
Current frequency and voltage (This is where you should see if the processor takes into account the settings or if there is a cap)
Actually the program outputs the FIDs and the VIDs not the values in Hz and Volts. The interesting part of its output looks like this:
Code: Select all
Detected 2 CPUs
Vendor: 0
Family: 6
Model: 14
Mask: 8
Type: Intel CORE
CpuFreq info:
CPU 0: driver = centrino, governor = performance
CPU 1: driver = centrino, governor = performance
MSR registers:
CPU 0: PERF_CTL=0x0000000000000a2c, PERF_STATUS=0x06130a2c06000a2c, FSB_FREQ=0x0000000000000133
CPU 1: PERF_CTL=0x0000000000000a2c, PERF_STATUS=0x06130a2c06000a2c, FSB_FREQ=0x0000000000000133
| CPU 0 | CPU 1 |
+-------+-------+-------+-------+
| FID | VID | FID | VID |
--------+-------+-------+-------+-------+
Min | 6 | 19 | 6 | 19 |
Max | 10 | 44 | 10 | 44 |
--------+-------+-------+-------+-------+
Target | 10 | 44 | 10 | 44 |
Current | 10 | 44 | 10 | 44 |
--------+-------+-------+-------+-------+
In these results:
If you don't have the expected VID in the "Target" line you can tell that the undervolting code has not taken into account your settings.
If you have the same FID and VID for both CPU in the "Target" line and if the VID value is what you have requested but you don't have the same values in the "Current" line you can tell that something is limiting your settings at the processor level.
You can get the source code of this application here:
https://www.dedigentoo.org/bdz/linux-phc/
Take the latest msrinfo-X.Y.Z.tar.gz file you find there.
Then you can compile it with something similar to that:
Code: Select all
$ su -
# cd /tmp
# wget https://www.dedigentoo.org/bdz/linux-phc/msrinfo-0.3.5.tar.gz
# tar xzf msrinfo-0.3.5.tar.gz
# cd msrinfo-0.3.5
# ./configure --prefix=/usr
# make && make install
Then you should be able to run the msrinfo program.
Note that you need to be root to be able to run it. You will also need to have the MSR device compiled in your kernel (either builtin or as a module)
Best regards,
BDz