tiziw / iuvolt Goto Github PK
View Code? Open in Web Editor NEWScript to undervolt Intel CPUs
Script to undervolt Intel CPUs
First things first: Thanks for the tool! It has worked for me in the past, but now fails to. I'm running Ubuntu 16.04 LTS with kernel 4.13.0-43-generic. Secure boot is on if that matters in this case (I usually sign my modules if needed, but msr should be built-in into the kernel).
I "sudo modprobe msr" which works fine and the iuvolt:
sudo iuvolt -50 -50 -50
wrmsr: pwrite: Operation not permitted
wrmsr: pwrite: Operation not permitted
wrote failed, got: 0
wrmsr: pwrite: Operation not permitted
wrmsr: pwrite: Operation not permitted
wrote failed, got: 0
wrmsr: pwrite: Operation not permitted
wrmsr: pwrite: Operation not permitted
wrote failed, got: 0
Anything I could try?
I've tried to experiment with this a bit and -150 -150 -150 seems to be stable on this CPU. (-175 is not so much)
On 100% load:
Temps drop from ~82C to ~66C (And the cooler also spins slower)
Package power usage drops from 38W to 27W
sysbench --test=cpu --cpu-max-prime=20000 --num-threads=8 run
Gives the same results
All in all, this is a really good way to lower your temperatures and power usage.
s-tui was used to monitor the wattage and temperatures.
System: 4.16.3-1-ARCH
I installed this script looking to experiment with undervolting, but I also I want to make a system image before I mess around with anything. Trouble is, I'm a bit of a noob. dpkg, apt-get, and snap aren't detecting the script after installation. How do I properly uninstall iuvolt?
Is it possible to change the turboboost window and watt with the same method used for undervolting?
this would be awesome.
Using -60 -80 -100. I did some testing, I can get -85 -95 -120 (tested individually) running for a while, but not stable in the long run). Overall, the gains are small, but measurable (went from 8ish hours to 9ish hours on regular use). The iGPU is the big power sink, so I think it's best to use it when measuring a laptop with iGPU. Also, mprime
seem to be put out more heat than sysbench, so I decided to use it instead.
Using mprime -t
:
Temp drop minimally from ~64C to ~63C
Package power usage drops from 8.7W to 7.9W
Using furmark
:
Temps drop from ~80C to ~74C, but it still throttles
Package power usage drops from 17.6W to 15.5W
Using mprime -t
and furmark
:
Temps drop from ~80C to ~74C, but it still throttles
Package power usage drops from 18.7W to 17.7W
s-tui was used to monitor the wattage and temperatures.
System: Archlinux on 4.16.11-1-zen
It is not clear to me if the changes to the cpu register are permanent or a reboot is enough to reset the default values.
I think this can be a valuable information to all newbie like me.
I just thought I'd chime in on the best practices location for this type of utility.
My understanding is that a script that requires running as root should live in /sbin/
or /usr/sbin
.
Scripts or binaries to run in user space without super privilges belong in /bin
or /usr/bin
ref: https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard
ref: https://askubuntu.com/questions/308045/differences-between-bin-sbin-usr-bin-usr-sbin-usr-local-bin-usr-local
I'm not really fussed eitherway, I just thought I'd point it out. If I get around to experimenting with this solution on my XPS 9570 I may make a pull request, jost poking around for now.
/etc/iuvolt.cfg should (probably) not contain more than one line after reinstalling/updating
root@arch ~ # cat /etc/iuvolt.cfg
voltages=(-100)
voltages=(0 0 0)
voltages=(0 0 0)
root@arch ~ # systemctl status systemd-iuvolt.service
โ systemd-iuvolt.service - Undervolt cpu
Loaded: loaded (/etc/systemd/system/systemd-iuvolt.service; enabled; vendor preset: disabled)
Active: inactive (dead) since Tue 2018-01-23 10:52:52 EET; 26min ago
Main PID: 25309 (code=exited, status=0/SUCCESS)
Jan 23 10:52:52 arch iuvolt[25309]: wrmsr: open: No such file or directory
Jan 23 10:52:52 arch iuvolt[25309]: rdmsr: open: No such file or directory
Jan 23 10:52:52 arch iuvolt[25309]: /usr/bin/iuvolt: line 49: [: ==: unary operator expected
Jan 23 10:52:52 arch iuvolt[25309]: wrote failed, got:
Jan 23 10:52:52 arch iuvolt[25328]: Loaded config! CPU Core : -100mV,
Jan 23 10:52:52 arch iuvolt[25328]: wrmsr: open: No such file or directory
Jan 23 10:52:52 arch iuvolt[25328]: wrmsr: open: No such file or directory
Jan 23 10:52:52 arch iuvolt[25328]: rdmsr: open: No such file or directory
Jan 23 10:52:52 arch iuvolt[25328]: /usr/bin/iuvolt: line 49: [: ==: unary operator expected
Jan 23 10:52:52 arch iuvolt[25328]: wrote failed, got:
root@arch ~ # iuvolt -90
wrmsr: open: No such file or directory
wrmsr: open: No such file or directory
rdmsr: open: No such file or directory
/usr/bin/iuvolt: line 49: [: ==: unary operator expected
wrote failed, got:
This worked better a few days ago. I'll do a system upgrade and reboot to see if it has any effect.
First of all, thank you for sharing this tool.
I am running Ubuntu 16.04 on an old 5715Z Acer laptop. I just tried your tool but it fails with the following error:
iuvolt -90 -80 -90
/usr/bin/iuvolt: line 6: printf: -92.160: invalid number
wrmsr: CPU 0 cannot set MSR 0x00000150 to 0x0000000800000110
wrmsr: CPU 0 cannot set MSR 0x00000150 to 0x8000001000000000
rdmsr: CPU 0 cannot read MSR 0x00000150
/usr/bin/iuvolt: line 49: [: ==: unary operator expected
wrote failed, got:
/usr/bin/iuvolt: line 6: printf: -81.920: invalid number
wrmsr: CPU 0 cannot set MSR 0x00000150 to 0x0000000800001110
wrmsr: CPU 0 cannot set MSR 0x00000150 to 0x8000011000000000
rdmsr: CPU 0 cannot read MSR 0x00000150
/usr/bin/iuvolt: line 49: [: ==: unary operator expected
wrote failed, got:
/usr/bin/iuvolt: line 6: printf: -92.160: invalid number
wrmsr: CPU 0 cannot set MSR 0x00000150 to 0x0000000800002110
wrmsr: CPU 0 cannot set MSR 0x00000150 to 0x8000021000000000
rdmsr: CPU 0 cannot read MSR 0x00000150
/usr/bin/iuvolt: line 49: [: ==: unary operator expected
wrote failed, got:
iuvolt -90.8 -80.1 -90.8
/usr/bin/iuvolt: line 6: printf: -92.979: invalid number
wrmsr: CPU 0 cannot set MSR 0x00000150 to 0x0000000800000110
wrmsr: CPU 0 cannot set MSR 0x00000150 to 0x8000001000000000
rdmsr: CPU 0 cannot read MSR 0x00000150
/usr/bin/iuvolt: line 49: [: ==: unary operator expected
wrote failed, got:
/usr/bin/iuvolt: line 6: printf: -82.022: invalid number
wrmsr: CPU 0 cannot set MSR 0x00000150 to 0x0000000800001110
wrmsr: CPU 0 cannot set MSR 0x00000150 to 0x8000011000000000
rdmsr: CPU 0 cannot read MSR 0x00000150
/usr/bin/iuvolt: line 49: [: ==: unary operator expected
wrote failed, got:
/usr/bin/iuvolt: line 6: printf: -92.979: invalid number
wrmsr: CPU 0 cannot set MSR 0x00000150 to 0x0000000800002110
wrmsr: CPU 0 cannot set MSR 0x00000150 to 0x8000021000000000
rdmsr: CPU 0 cannot read MSR 0x00000150
/usr/bin/iuvolt: line 49: [: ==: unary operator expected
wrote failed, got:
I turned off secure boot now, but only the third parameter is doing something for me. I tried:
sudo ./iuvolt -800 -800 -90
wrote 0x8000001199A00000 successful to plane index 0
wrote 0x8000011199A00000 successful to plane index 1
wrote 0x80000211F4800000 successful to plane index 2
but the system does not crash as expected (-800 should be chosen) ;) So the first two parameters do nothing on my system. The cache parameter does work though and crashes my system at -110.
Another issue is that:
sudo ./iuvolt 0 0 0
wrote failed, got: 99a00000
wrote failed, got: 99a00000
wrote failed, got: f4800000
seems not to be working.
EDIT:
And I've found a strange effect:
sudo ./iuvolt -1 -1 -90
or
sudo ./iuvolt -90 -1 -1
Have no effect on temperature and performance, but
sudo ./iuvolt -90 -1 -90
does. Making the CPU undervolt smaller than the cache undervolt, again, does not change anything though... :/
I've been getting the same errors as one of the other issues which it ended up being solved as too old a CPU. However, my ThinkPad X230t has a third generation Ivy Bridge processor, so it should be compatible, no?
$ sudo iuvolt -90 -80 -90
wrmsr: CPU 0 cannot set MSR 0x00000150 to 0x80000011f4800000
wrmsr: CPU 0 cannot set MSR 0x00000150 to 0x8000001000000000
rdmsr: CPU 0 cannot read MSR 0x00000150
/usr/bin/iuvolt: line 49: [: ==: unary operator expected
wrote failed, got:
wrmsr: CPU 0 cannot set MSR 0x00000150 to 0x80000111f5c00000
wrmsr: CPU 0 cannot set MSR 0x00000150 to 0x8000011000000000
rdmsr: CPU 0 cannot read MSR 0x00000150
/usr/bin/iuvolt: line 49: [: ==: unary operator expected
wrote failed, got:
wrmsr: CPU 0 cannot set MSR 0x00000150 to 0x80000211f4800000
wrmsr: CPU 0 cannot set MSR 0x00000150 to 0x8000021000000000
rdmsr: CPU 0 cannot read MSR 0x00000150
/usr/bin/iuvolt: line 49: [: ==: unary operator expected
wrote failed, got:
CPU: i5 3320M
Modprobed msr.
Hi, I am unable to access msr 0x150 on my 3rd gen mobile CPU 3610QM. Any idea how to solve this?
sudo iuvolt 2019-04-29T22:32:02 CEST
[sudo] password for diggit:
Loaded config! CPU Core : 0mV, GPU : 0mV, Cache : 0mV,
wrmsr: CPU 0 cannot set MSR 0x00000150 to 0x0000000800000110
wrmsr: CPU 0 cannot set MSR 0x00000150 to 0x8000001000000000
rdmsr: CPU 0 cannot read MSR 0x00000150
/usr/bin/iuvolt: line 49: [: ==: unary operator expected
wrote failed, got:
wrmsr: CPU 0 cannot set MSR 0x00000150 to 0x0000000800001110
wrmsr: CPU 0 cannot set MSR 0x00000150 to 0x8000011000000000
rdmsr: CPU 0 cannot read MSR 0x00000150
/usr/bin/iuvolt: line 49: [: ==: unary operator expected
wrote failed, got:
wrmsr: CPU 0 cannot set MSR 0x00000150 to 0x0000000800002110
wrmsr: CPU 0 cannot set MSR 0x00000150 to 0x8000021000000000
rdmsr: CPU 0 cannot read MSR 0x00000150
/usr/bin/iuvolt: line 49: [: ==: unary operator expected
wrote failed, got:
I have no idea how to make iuvolt run on boot and when waking from sleep. Treid all the guides online, none of them worked. Maybe it's a default features I haven't discovered yet ?
Could you tell me which Intel generations is this applicable to?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.