Skip to content

Undervolt via VoltageShift

profzei edited this page Aug 27, 2021 · 14 revisions

Introduction

It is possible to use VoltageShift from the EFI folder instead of disabling SIP. You need to use specific version provided here.

At the moment (i.e. 10 October 2020) VoltageShift.kext is compatible only with Catalina since macOS 11.0 Beta 9 appears to break all its functionality: in fact this kext should require upgrade by implementing the DriverKit layer; however, Big Sur and DriverKit are seen currently developing and under beta. As stated here, the program's author sicreative should try to upgrade this program when the Big Sur launch its stable release in October.

Latest releases for VoltageShift.kext are fully compatible with Big Sur and Catalina.

Advantages for undervolting

This program is a command tool that supports Haswell and above CPUs for undervoltage.

Undervoltage can reduce heat and sustain Turbo boost longer, provide longer battery performance, although if done too much(mV) it may cause an unstable system.

This program does not provide a GUI interface because it loads the MSR driver only when apply, amend or read is done, after that the MSR driver will load and unload immediately for more security and lowest resource usage.

How to install

  1. Starting from release v. 1.6.0 VoltageShift.kext is present in the EFI/OC/Kexts folder
  2. If you want to use this feature, enable it in your config.plist in Kernel -> Add section
  3. Download voltageshift and put it in Applications/Utilities folder
  4. After reboot, you need to make executable the script voltageshift with the following commands in Terminal:
cd /Applications/Utilities
sudo chmod 755 voltageshift
  1. Now, you can view your current voltage offset, CPU frequency, power and temperature settings with the following command in Terminal:
./voltageshift info
  1. As suggested in many forums, I undervolt CPU, GPU and CPUcache only:
./voltageshift offset <CPU> <GPU> <CPUcache>
  1. My safe settings are the following, but they may not work for your machine!

DISCLAIMER: I'm not responsible for any damage may occur to your machine! Please, do your digging work before approaching undervolt!

./voltageshift offset -100 -50 -100
VoltageShift info
  1. If you set it too low the system will freeze: please turn OFF completely and turn ON computer to reset back the undervolt to 0 mV
  2. After you test throughfully the settings and are comfortable with system stability, you need to automate applying these settings both during boot and after every sleep & wake-up phase
  3. For outrun on startup (boot phase) you can apply the launchd (require sudo root):
sudo ./voltageshift offset -100 -50 -100
  1. After reboot, check if your settings are persistent! If not, then try the following:
sudo ./voltageshift buildlaunchd -100 -50 -100

You can remove the launchd with the following command:

sudo ./voltageshift removelaunchd
  1. If your undervolt settings are persistent at each boot, then you need to install SleepWatcher app for maintaining your undervolt settings also after each sleep & wake-up phase.

SleepWatcher is a command line tool (daemon) that monitors sleep, wake-up and idleness of a Mac. It can be used to execute a Unix command when the Mac or the display of the Mac goes to sleep mode or wakes up, after a given time without user interaction or when the user resumes activity after a break or when the power supply of a Mac notebook is attached or detached. It also can send the Mac to sleep mode or retrieve the time since last user activity.

A little bit knowledge of the Unix command line is required to benefit from this software.

  1. Type the following in Terminal app for install SleepWatcher app (brew is required on your system):
brew install sleepwatcher
  1. Type the following for starting its daemon: you need to grant access to Security & Privacy -> Privacy -> Input Monitoring section and enable (tick) SleepWatcher app to monitor input
brew services start sleepwatcher

Note If you get an error message from brew,then we need to unwrap brew services and run manually the stuff (commands) behind the scene: therefore first run step #15 and then type the following:

launchctl load /Library/LaunchDaemons/de.bernhard-baehr.sleepwatcher-20compatibility-localuser.plist
  1. Copy the launchd daemon configuration:
sudo cp /usr/local/opt/sleepwatcher/de.bernhard-baehr.sleepwatcher-20compatibility-localuser.plist /Library/LaunchDaemons/
  1. Now you need to create an executable file .wakeup in your home ($HOME) directory that is executed when the machine wakes up. Download wakeup script and copy it in your $HOME folder; then type the following in new Terminal app:
mv wakeup .wakeup
chmod 755 ~/.wakeup
  1. Now load the launchd daemon configuration; this starts the SleepWatcher daemon:
sudo launchctl load /Library/LaunchDaemons/de.bernhard-baehr.sleepwatcher-20compatibility-localuser.plist

When you reboot the MBXP, SleepWatcher is started automatically via launchd.