Contents:
Explanation of the Issue and Steps to Recreate
Possible Fix
My Config File
1. Explanation of the Issue:
Games starts off with good performance and eventually starts to decrease as time goes by and eventually settles at rather low FPS, like 30 FPS.
The detailed explanation on why it occurs can be found here.
Steps to Recreate Issue:
Launch game like you normally would
Play game for 15 to 20 minutes
After this FPS drops.
Note: This solution only works with Intel CPUs.
2. Possible Fix
For details visit - https://github.com/erpalma/throttled
Disable thermald service:
sudo systemctl stop thermald.service
sudo systemctl disable thermald.service
If you want to keep it disabled (even after a package update):
sudo systemctl mask thermald.service
Install CPU throttling fix by erpalma:
sudo apt install git build-essential python3-dev libdbus-glib-1-dev libgirepository1.0-dev libcairo2-dev python3-venv python3-wheel
git clone https://github.com/erpalma/lenovo-throttling-fix.git
sudo ./lenovo-throttling-fix/install.sh
Configure:
Open the config file using:
sudo gedit /etc/lenovo_fix.conf
You will be presented with two profiles, naming - battery, AC. You will need to edit these values with according to your specific CPU. There are several settings available, but the main things that need to be changed are:
The rest of the settings can be skipped, if you just want to fix your fps drops, but if you want to tinker a bit, you can, but proceed only if you know what you are doing.
For example, I have a Core i5-7300HQ, which has a TDP of 45 Watts, so I made changes to the TDP in the config file as:
Battery:
#Update the registers every this many seconds
Update_Rate_s: 30
# Max package power for time window #1
PL1_Tdp_W: 15
# Time window #1 duration
PL1_Duration_s: 28
# Max package power for time window #2
PL2_Tdp_W: 15
# Time window #2 duration
PL2_Duration_S: 0.002
# Max allowed temperature before throttling
Trip_Temp_C: 85
# Set cTDP to normal=0, down=1 or up=2 (EXPERIMENTAL)
cTDP: 0
# Disable BDPROCHOT (EXPERIMENTAL)
Disable_BDPROCHOT: False
AC:
# Update the registers every this many seconds
Update_Rate_s: 5
# Max package power for time window #1
PL1_Tdp_W: 44
# Time window #1 duration
PL1_Duration_s: 28
# Max package power for time window #2
PL2_Tdp_W: 44
# Time window #2 duration
PL2_Duration_S: 0.002
# Max allowed temperature before throttling
Trip_Temp_C: 95
# Set HWP energy performance hints to 'performance' on high load (EXPERIMENTAL)
HWP_Mode: True
# Set cTDP to normal=0, down=1 or up=2 (EXPERIMENTAL)
cTDP: 0
# Disable BDPROCHOT (EXPERIMENTAL)
Disable_BDPROCHOT: False
You can also undervolt your CPU, but it's not compulsory, if you do want to do it follow the guide below.
As I tested my CPU's undervolting potential in Windows using Intel XTU, it led to me the values for the CPU, iGPU and Cache as following:
CPU core Offset: -105mV
Cache Offset: -105mV
iGPU Offset: -85mV
I entered these values in the config file as:
[UNDERVOLT]
# CPU core voltage offset (mV)
CORE: -105
# Integrated GPU voltage offset (mV)
GPU: -85
# CPU cache voltage offset (mV)
CACHE: -105
# System Agent voltage offset (mV)
UNCORE: -85
# Analog I/O voltage offset (mV)
ANALOGIO: 0
Note: Use the iGPU values for the system agent value offset, if you don't know the values.
3. My Config File
Rename the file to "lenovo_fix.config" if you want to use it.