26 May 2017 08:10 | macOS
The new macbook pros are divisive in many ways, not least of which is the
reportedly less than stellar battery life compared to the previous generation.
I bought the escape version which has innately better battery life than the
touchbar version, but opted for the i7. My strategy in the past has always been
to max the spec as much as I can afford so the machine will last a long time but
this time around there isn't a huge difference in performance between the i5 and
the i7. If you're not doing a lot of intensive processing you may be better
served with the i5.
Anyway, I've found a novel way to get a little bit more battery life out of any
recent mac computer using a kernel extension from an app called "Turbo Boost
Switcher". You can find it here:
https://github.com/rugarciap/Turbo-Boost-Switcher/tree/master/Turbo%20Boost%2...
This kext, when loaded, disables the turbo boost feature of the CPU causing it
to never exceed its rated clock frequency and thus consume less energy at the
cost of some performance. This only really makes a noticeable difference if
you're running tasks that would have actually pushed the CPU into boot mode
anyway, but if you want to squeeze every last bit of battery life out of your
new machine it may help. In my testing with the Intel Power Gadget I found that
event just browsing around websites in Safari or Chrome would frequently push
the CPU over the boost line.
I use an app called ControlPlane - https://www.controlplaneapp.com - to load and
unload the kext when the machine is disconnected from and connected to a power
source. So on AC power it runs full-tilt, on battery it loads the kext to
maximise battery life. To get this to work I recommend creating two scripts,
one that disables the turbo (loads the kext) and another that enables it again
(unloads the kext). Eg:
disable_turbo.sh
--------------------------
#!/bin/bash
/sbin/kextload /usr/local/kexts/DisableTurboBoost.64bits.kext
enable_turbo.sh
--------------------------
#!/bin/bash
/sbin/kextunload /usr/local/kexts/DisableTurboBoost.64bits.kext
Because kexts can only be loaded or unloaded as root, these will need to be
executed as root. The easiest way to facilitate this is to add the scripts to
your sudoers file so they can be executed without a password, eg:
user ALL=(ALL) NOPASSWD: /usr/local/bin/enable_turbo
user ALL=(ALL) NOPASSWD: /usr/local/bin/disable_turbo
(Replace "user" with your username)
Now in ControlPlane you can use the shell commands:
sudo /usr/local/bin/enable_turbo
and
sudo /usr/local/bin/disable_turbo
To switch the turbo on and off.