erpalma / throttled

Workaround for Intel throttling issues in Linux.
MIT License
2.68k stars 166 forks source link

Lenovo S145-15IWL / Intel Core i7-8565U #343

Open henriqueffc opened 10 months ago

henriqueffc commented 10 months ago

Specifications

Throttled worked on Lenovo IdeaPad S145-15IWL. The notebook has an Intel Core i7-8565U processor. I use Arch Linux with GNOME and the system is currently running kernel 6.6.8-arch1-1. I installed throttled from the distro repository.

inxi:

CPU:
  Info: model: Intel Core i7-8565U bits: 64 type: MT MCP
    arch: Comet/Whiskey Lake note: check gen: core 8 level: v3 note: check
    built: 2018 process: Intel 14nm family: 6 model-id: 0x8E (142)
    stepping: 0xC (12) microcode: 0xF8

Settings

For throttled to recognize as expected whether the notebook was operating on battery or directly on power, it was necessary to change a specification in the throttled.conf file. The path on Arch Linux is different.

sudo sed -i 's|Sysfs_Power_Path.*|Sysfs_Power_Path: /sys/class/power_supply/AD*/online|g' /etc/throttled.conf

Monitoring

./throttled.py --monitor

[I] Detected CPU architecture: Intel Comet Lake-U
[I] Trying to unlock MSR allow_writes.
[I] Testing if undervolt is supported...
[I] Testing if HWP is supported...
[I] Loading config file.
[I] Starting main loop.
[D] Undervolt offsets: CORE: 0.00 mV | GPU: 0.00 mV | CACHE: 0.00 mV | UNCORE: 0.00 mV | ANALOGIO: 0.00 mV
[D] IccMax: CORE: 70.00 A | GPU: 31.00 A | CACHE: 6.00 A
[D] Realtime monitoring of throttling causes:

[AC] Thermal: OK - Power: OK - Current: OK - Cross-domain (e.g. GPU): OK  ||  VCore: 1216 mV - Package: 26.9 W - Graphics: 0.0 W - DRAM: 0.3 W - Total: 27.2 W 
[AC] Thermal: OK - Power: OK - Current: OK - Cross-domain (e.g. GPU): OK  ||  VCore: 751 mV - Package: 2.8 W - Graphics: 0.0 W - DRAM: 0.4 W - Total: 3.2 W 

Using s-tui

[AC] Thermal: OK - Power: OK - Current: OK - Cross-domain (e.g. GPU): OK  ||  VCore: 1018 mV - Package: 34.6 W - Graphics: 0.1 W - DRAM: 0.4 W - Total: 35.1 W 
[AC] Thermal: OK - Power: OK - Current: OK - Cross-domain (e.g. GPU): OK  ||  VCore: 1041 mV - Package: 34.3 W - Graphics: 0.0 W - DRAM: 0.5 W - Total: 34.8 W 
[AC] Thermal: OK - Power: OK - Current: OK - Cross-domain (e.g. GPU): OK  ||  VCore: 1066 mV - Package: 33.5 W - Graphics: 0.1 W - DRAM: 0.5 W - Total: 34.1 W

Debug - s-tui

./throttled.py --debug

[D] core 0 thermal status: thermal limit status = 0
[D] core 0 thermal status: thermal limit log = 0
[D] core 0 thermal status: prochot or forcepr status = 0
[D] core 0 thermal status: prochot or forcepr log = 0
[D] core 0 thermal status: crit temp status = 0
[D] core 0 thermal status: crit temp log = 0
[D] core 0 thermal status: thermal threshold1 status = 0
[D] core 0 thermal status: thermal threshold1 log = 0
[D] core 0 thermal status: thermal threshold2 status = 0
[D] core 0 thermal status: thermal threshold2 log = 0
[D] core 0 thermal status: power limit status = 0
[D] core 0 thermal status: power limit log = 0
[D] core 0 thermal status: current limit status = 0
[D] core 0 thermal status: current limit log = 0
[D] core 0 thermal status: cross domain limit status = 0
[D] core 0 thermal status: cross domain limit log = 0
[D] core 0 thermal status: cpu temp = 9
[D] core 0 thermal status: temp resolution = 1
[D] core 0 thermal status: reading valid = 1
[D] core 1 thermal status: thermal limit status = 0
[D] core 1 thermal status: thermal limit log = 0
[D] core 1 thermal status: prochot or forcepr status = 0
[D] core 1 thermal status: prochot or forcepr log = 0
[D] core 1 thermal status: crit temp status = 0
[D] core 1 thermal status: crit temp log = 0
[D] core 1 thermal status: thermal threshold1 status = 0
[D] core 1 thermal status: thermal threshold1 log = 0
[D] core 1 thermal status: thermal threshold2 status = 0
[D] core 1 thermal status: thermal threshold2 log = 0
[D] core 1 thermal status: power limit status = 0
[D] core 1 thermal status: power limit log = 0
[D] core 1 thermal status: current limit status = 0
[D] core 1 thermal status: current limit log = 0
[D] core 1 thermal status: cross domain limit status = 0
[D] core 1 thermal status: cross domain limit log = 0
[D] core 1 thermal status: cpu temp = 11
[D] core 1 thermal status: temp resolution = 1
[D] core 1 thermal status: reading valid = 1
[D] core 2 thermal status: thermal limit status = 0
[D] core 2 thermal status: thermal limit log = 0
[D] core 2 thermal status: prochot or forcepr status = 0
[D] core 2 thermal status: prochot or forcepr log = 0
[D] core 2 thermal status: crit temp status = 0
[D] core 2 thermal status: crit temp log = 0
[D] core 2 thermal status: thermal threshold1 status = 0
[D] core 2 thermal status: thermal threshold1 log = 0
[D] core 2 thermal status: thermal threshold2 status = 0
[D] core 2 thermal status: thermal threshold2 log = 0
[D] core 2 thermal status: power limit status = 0
[D] core 2 thermal status: power limit log = 0
[D] core 2 thermal status: current limit status = 0
[D] core 2 thermal status: current limit log = 0
[D] core 2 thermal status: cross domain limit status = 0
[D] core 2 thermal status: cross domain limit log = 0
[D] core 2 thermal status: cpu temp = 11
[D] core 2 thermal status: temp resolution = 1
[D] core 2 thermal status: reading valid = 1
[D] core 3 thermal status: thermal limit status = 1
[D] core 3 thermal status: thermal limit log = 1
[D] core 3 thermal status: prochot or forcepr status = 0
[D] core 3 thermal status: prochot or forcepr log = 0
[D] core 3 thermal status: crit temp status = 0
[D] core 3 thermal status: crit temp log = 0
[D] core 3 thermal status: thermal threshold1 status = 0
[D] core 3 thermal status: thermal threshold1 log = 0
[D] core 3 thermal status: thermal threshold2 status = 0
[D] core 3 thermal status: thermal threshold2 log = 0
[D] core 3 thermal status: power limit status = 0
[D] core 3 thermal status: power limit log = 0
[D] core 3 thermal status: current limit status = 0
[D] core 3 thermal status: current limit log = 0
[D] core 3 thermal status: cross domain limit status = 0
[D] core 3 thermal status: cross domain limit log = 0
[D] core 3 thermal status: cpu temp = 5
[D] core 3 thermal status: temp resolution = 1
[D] core 3 thermal status: reading valid = 1
[D] core 4 thermal status: thermal limit status = 0
[D] core 4 thermal status: thermal limit log = 0
[D] core 4 thermal status: prochot or forcepr status = 0
[D] core 4 thermal status: prochot or forcepr log = 0
[D] core 4 thermal status: crit temp status = 0
[D] core 4 thermal status: crit temp log = 0
[D] core 4 thermal status: thermal threshold1 status = 0
[D] core 4 thermal status: thermal threshold1 log = 0
[D] core 4 thermal status: thermal threshold2 status = 0
[D] core 4 thermal status: thermal threshold2 log = 0
[D] core 4 thermal status: power limit status = 0
[D] core 4 thermal status: power limit log = 0
[D] core 4 thermal status: current limit status = 0
[D] core 4 thermal status: current limit log = 0
[D] core 4 thermal status: cross domain limit status = 0
[D] core 4 thermal status: cross domain limit log = 0
[D] core 4 thermal status: cpu temp = 9
[D] core 4 thermal status: temp resolution = 1
[D] core 4 thermal status: reading valid = 1
[D] core 5 thermal status: thermal limit status = 0
[D] core 5 thermal status: thermal limit log = 0
[D] core 5 thermal status: prochot or forcepr status = 0
[D] core 5 thermal status: prochot or forcepr log = 0
[D] core 5 thermal status: crit temp status = 0
[D] core 5 thermal status: crit temp log = 0
[D] core 5 thermal status: thermal threshold1 status = 0
[D] core 5 thermal status: thermal threshold1 log = 0
[D] core 5 thermal status: thermal threshold2 status = 0
[D] core 5 thermal status: thermal threshold2 log = 0
[D] core 5 thermal status: power limit status = 0
[D] core 5 thermal status: power limit log = 0
[D] core 5 thermal status: current limit status = 0
[D] core 5 thermal status: current limit log = 0
[D] core 5 thermal status: cross domain limit status = 0
[D] core 5 thermal status: cross domain limit log = 0
[D] core 5 thermal status: cpu temp = 11
[D] core 5 thermal status: temp resolution = 1
[D] core 5 thermal status: reading valid = 1
[D] core 6 thermal status: thermal limit status = 0
[D] core 6 thermal status: thermal limit log = 0
[D] core 6 thermal status: prochot or forcepr status = 0
[D] core 6 thermal status: prochot or forcepr log = 0
[D] core 6 thermal status: crit temp status = 0
[D] core 6 thermal status: crit temp log = 0
[D] core 6 thermal status: thermal threshold1 status = 0
[D] core 6 thermal status: thermal threshold1 log = 0
[D] core 6 thermal status: thermal threshold2 status = 0
[D] core 6 thermal status: thermal threshold2 log = 0
[D] core 6 thermal status: power limit status = 0
[D] core 6 thermal status: power limit log = 0
[D] core 6 thermal status: current limit status = 0
[D] core 6 thermal status: current limit log = 0
[D] core 6 thermal status: cross domain limit status = 0
[D] core 6 thermal status: cross domain limit log = 0
[D] core 6 thermal status: cpu temp = 11
[D] core 6 thermal status: temp resolution = 1
[D] core 6 thermal status: reading valid = 1
[D] core 7 thermal status: thermal limit status = 1
[D] core 7 thermal status: thermal limit log = 1
[D] core 7 thermal status: prochot or forcepr status = 0
[D] core 7 thermal status: prochot or forcepr log = 0
[D] core 7 thermal status: crit temp status = 0
[D] core 7 thermal status: crit temp log = 0
[D] core 7 thermal status: thermal threshold1 status = 0
[D] core 7 thermal status: thermal threshold1 log = 0
[D] core 7 thermal status: thermal threshold2 status = 0
[D] core 7 thermal status: thermal threshold2 log = 0
[D] core 7 thermal status: power limit status = 0
[D] core 7 thermal status: power limit log = 0
[D] core 7 thermal status: current limit status = 0
[D] core 7 thermal status: current limit log = 0
[D] core 7 thermal status: cross domain limit status = 0
[D] core 7 thermal status: cross domain limit log = 0
[D] core 7 thermal status: cpu temp = 5
[D] core 7 thermal status: temp resolution = 1
[D] core 7 thermal status: reading valid = 1
[D] TEMPERATURE_TARGET - write 0x5 - read 0x5 - match OK
[D] CONFIG_TDP_CONTROL - write 0x0 - read 0x0 - match OK
[D] MSR PACKAGE_POWER_LIMIT - write 0x42816000dd8160 - read 0x42816000dd8160 - match OK
[D] MCHBAR PACKAGE_POWER_LIMIT - write 0x42816000dd8160 - read 0x42816000dd8160 - match OK

Conclusion

The system reached higher temperatures and for a longer time (23 seconds, previously 11 seconds) before throttling. The temperature did not exceed 95ºC. When throttling occurred, the CPU returned to higher frequencies more quickly. In normal operation (without stress, using Firefox, Thunderbird, Obsidian, Rio Terminal, etc.) the temperature was between 45ºC - 57ºC. Temperatures greater than 57ºC appear very quickly in normal use.