Configuring hybrid GPU laptop to only use dGPU when requested

Yes and no :wink: . It’s more complicated than that. Nouvuea driver is in the kernel, so you always have it. It has two abilities: 1) is an open source driver for Nvidia cards, 2) can manage Nvidia card state.
That is why, when you have optimus-manager, you can choose Novueau as a way to wake up and power down (if possible) the dGPU. In fact, in intergrated (Intel) mode, when you use modesetting Intel drivers (community, open source drivers for Intel) and use Novueau as a switching method, you can wake up Nvidia to use Novuea drivers. So basically in Integrated mode, the whole system runs on Intel, but you can trigger some app to use Nvidia with Noveau drivers, so all open source solutions.

Nvidia driver contain of two parts: the driver and kernel module. The second one is needed, because hardware is run by kernel, so it must be part of the kernel. So the solution is to have compatible, additional parts (modules) that you can install to the current kernel to expand its possibilities. The rest, which is not part of kernel, is shifted to general package (files outside kernel).

So when you install nvidia kernel module and nvidia drivers, you have everything you need, but you still have to configure it how it will be used. See Manjaro Wiki:

So you can use mhwd, a script to manage the files and configuration for you graphical cards. In fact, that is the preferred way on Manjaro, because most can’t configure it properly. Too many dependencies and config places, so mhwd does all the work for us and ensures it works.

You can use mhwd either in terminal via command or through graphical interface.

If you do:

sudo mhwd -a pci nonfree 0300

then you install Nvidia drivers, module, and it will set up by default hybrid mode. If this is what you used in Architect, then you are already in hybrid mode. If not, you can use the command above or GUI to install it. You must remember, that if you have some conflicting packages, it will error out, showing you that you need to uninstall them manually.

So do a backup (with timeshif), then do all the changes till everything is installed and then reboot. If you fail to install and configure needed parts, the system won’t boot into the graphical interface.

Bumblebee is not compatible with optimus-manager, so it won’t work. I have no idea if Bumblebee will work with standard hybrid mode.

Anyway, power management improves with newer kernels and Nvidia drivers, providing that you dGPU is also compatible with those. So your experience may vary strongly from having great experience and no additional energy loos on hybrid mode to huge loos. You need to test your setup yourself.

The only configuration I did and is not related to optimus-manager at all was to set SOUND_POWER_SAVE_OC_AC to 1 in TLP,otherwise if I invoked the nvidia card in Integrated mode,the nvidia card will not powered off until I disconnect the charger or reboot the machine for some reason,it was requested to change to 1 by TLP 1.4 release (it talks about nouveau but it applies for propietary drivers as well like my case)

In optimus-manager I have this settings

Yeah that is with turing cards,but I have a pascal card,maybe before pascal those cards don’t work?

1 Like

Hey XRaTiX,

It seems when I use optimus-manager rather than the default manjaro prime solution nvidia-smi reports my NVIDIA GPU running at 24W in Integrated mode, where prime would be 3W/6W when not in use. However no processes are running on the dGPU. Additionally, my hardware LED shows Integrated is being used not dGPU… so I’m a bit confused.

When I run nvidia-smi the dGPU hardware LED does light up. So I’m not sure how to verify the real power pulled other than just experimenting with battery life while in Integrated mode.

| NVIDIA-SMI 470.57.02    Driver Version: 470.57.02    CUDA Version: 11.4     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA GeForce ...  Off  | 00000000:01:00.0 Off |                  N/A |
| N/A   37C    P3    24W /  N/A |      0MiB /  8119MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

Additionally, seems plugged in while in Integrated mode always turns on my hardware LED to dGPU mode and pumps it up to 29W-30W, but again no running processes when I check with nvidia-smi

I’m not sure whats happening with the watts usage,my card doesn’t have that,it only says N/A,also my laptop doesn’t have a LED indicator for the dGPU but there is a way to know if the card is really powered on or off,

if you execute this command (assuming you card is on 01:00:00,if not check lspci)

watch cat /sys/bus/pci/devices/0000:01:00.0/power/runtime_status

It can be active or suspended,activate means is powered on,otherwise it says suspended.

If it says activated in integrated mode,the only think I can think of is TLP preventing the dGPU from power off as I mention above,go to /etc/tlp.conf and change

SOUND_POWER_SAVE_ON_AC from 0 to 1,save and reboot,now the dGPU should say suspended.

You can also veritfy the power usage on the laptop with TLP,so you just have to do a

watch sudo tlp-stat -b

and check where it says /sys/class/power_supply/BAT0/current_now,this show the power usage when its in battery or charging.

In my case,Integrated mode in battery consumes 380-450 mA,when the dGPU is activated it consumes between 750-900 mA.

1 Like

I think that will be due to your configuration. For me, nvidia-smi shows the same in the integrated graphics mode as @XraTix has shown without that I had tinkered anywhere. Incidentally, also works for me with the nvidia 390.xx driver. I also read here that the nVidia is completely switched off in integrated mode and wonder why its temperature is then reported or how mhwd should recognize the card.

Thank you for the info! It is very helpful for linux newcomer.

I confirmed runtime status is suspended when reboot into Integrated without AC power.
dGPU light is off.

tlp-stat shows
At 5% brightness I am getting 540mA - 720mA, usually averaging in 650mA.

When plugged in AC, still on Integrated with no reboot etc, dGPU LED is on now.
At 5% brightness I am getting consistent 1233mA.

runtime status also confirms active instead of suspended now.

Unplugging AC makes dGPU LED turn off, runtime back to suspended, and power back to 540mA - 720mA.

I will try tlp config change and edit/update this post in few min.

Update: I looked into tlp config and seems all of it is commented out. Including TLP_ENABLE.

#TLP_ENABLE=1
...
#SOUND_POWER_SAVE_ON_AC=0
#SOUND_POWER_SAVE_ON_BAT=1

Even with TLP_ENABLE=1 uncommented and SOUND_POWER_SAVE_ON_AC=1 (set to 1 and uncommented)

No change. It always becomes active with AC power. Not a huge deal though. Most case for me I just want to use Integrated for power saving while not plugged in. When I plug in I will just change to nvidia only mode, which I use when I do graphics intensive development or gaming anyway.

I checked the average power usage in hybrid mode, and it was between 19-30W, 26W on average, while in Integrated mode it was 17W on average (just browsing, watching YT). So I get 30% power saving while in Integrated mode. Since I need Nvidia only for gaming (and not for all games, older ones work fine on Intel) and I rarely game, Integrated mode without Nvidia is fine for me. If needed, I switch to hybrid mode. Full Nvdia mode is useless for me.

P.S. If you have Plasma, there is a nice battery utility in system settings, so you can monitor the battery state, recharge, discharge over time, etc.

2 Likes

Good to know about the battery utility.
I’m curious what were your stats before you used optimus-manager? Either way glad you found a solution for you. I regularly will plug my laptop into a TV or HDMI, but this will cause stutter (known NVIDIA bug) if not using optimus-manager, which led me to this thread.

I forgot that I tweak alot TLP and maybe you need to do this too,in the tlp.conf,set
RUNTIME_PM_ON_AC from on to auto,then in the terminal restart tlp with sudo tlp start,check the runtime_status,now it should say suspended when plugged in AC.

You can use the nvidia card in integrated mode,at least in my case is like that,the only thing that doesn’t work yet is the HDMI port in integrated mode.

1 Like

I tried it today, installing optimus-manager and rebooting the machine automatically switched to integrated mode. After the reboot the following showed as output of nvidia-smi:

$ nvidia-smi
Fri Aug  6 13:43:47 2021       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.57.02    Driver Version: 470.57.02    CUDA Version: 11.4     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA GeForce ...  Off  | 00000000:01:00.0 Off |                  N/A |
| N/A   33C    P0    N/A /  N/A |      0MiB /  4042MiB |      1%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

And running several other commands indicated that the iGPU was in fact being the one in use:

$ optimus-manager --status
Optimus Manager (Client) version 1.4

Current GPU mode : integrated
GPU mode requested for next login : no change
GPU at startup : integrated
Temporary config path: no

$ optimus-manager --print-mode
Current GPU mode : integrated

$ optimus-manager --print-next-mode
GPU mode requested for next login : no change

$ optimus-manager --print-startup  
GPU at startup : integrated

Compiling and running a program that is meant to use CUDA works in integrated mode:

$ nvcc fw.cu 

$ ./a.out &> /dev/null &
[1] 2717

$ nvidia-smi
Fri Aug  6 13:48:11 2021       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.57.02    Driver Version: 470.57.02    CUDA Version: 11.4     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA GeForce ...  Off  | 00000000:01:00.0 Off |                  N/A |
| N/A   42C    P0    N/A /  N/A |     49MiB /  4042MiB |     99%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A      2140      C   ./a.out                            47MiB |
+-----------------------------------------------------------------------------+

I haven’t tested HDMI on integrated mode yet, but I will very likely not be needing it anyways.

Is there any way that, without additional hardware, I can test the power consumption of my dGPU accurately, to ensure that it is in fact powered off?

Yes read this posts

I did, running watch cat /sys/bus/pci/devices/0000:01:00.0/power/runtime_status says it’s suspended and running watch sudo tlp-stat -b when it’s discharging (or fully charged, haven’t tested while it’s charging) doesn’t show any field named /sys/class/power_supply/BAT0/current_now, the output is as follows:

$ sudo tlp-stat -b  
--- TLP 1.3.1 --------------------------------------------

+++ Battery Features: Charge Thresholds and Recalibrate
natacpi    = inactive (laptop not supported)
tpacpi-bat = inactive (laptop not supported)
tp-smapi   = inactive (laptop not supported)

+++ Battery Status: BAT0
/sys/class/power_supply/BAT0/manufacturer                   = SMP
/sys/class/power_supply/BAT0/model_name                     = L16M3P24
/sys/class/power_supply/BAT0/cycle_count                    = (not supported)
/sys/class/power_supply/BAT0/energy_full_design             =  45000 [mWh]
/sys/class/power_supply/BAT0/energy_full                    =  32960 [mWh]
/sys/class/power_supply/BAT0/energy_now                     =  32310 [mWh]
/sys/class/power_supply/BAT0/power_now                      =  13967 [mW]
/sys/class/power_supply/BAT0/status                         = Discharging

Charge                                                      =   98.0 [%]
Capacity                                                    =   73.2 [%]

Am I doing something wrong? You mentioned that you made changes to your TLP, but the one you mentioned was to suspend the dGPU, now provide extra fields on this output, right?

The battery does seem to drain very fast, but again that might not be due to the dGPU only me sucking at configuring TLP.

In that case should be /sys/class/power_supply/BAT0/power_now,looks like the name can be different,and yours measure in mW while mine measure in mA

--- TLP 1.3.1 --------------------------------------------

+++ Battery Features: Charge Thresholds and Recalibrate
natacpi    = inactive (laptop not supported)
tpacpi-bat = inactive (laptop not supported)
tp-smapi   = inactive (laptop not supported)

+++ Battery Status: BAT0
/sys/class/power_supply/BAT0/manufacturer                   = SMP
/sys/class/power_supply/BAT0/model_name                     = DELL 71JF452
/sys/class/power_supply/BAT0/cycle_count                    = (not supported)
/sys/class/power_supply/BAT0/charge_full_design             =   6491 [mAh]
/sys/class/power_supply/BAT0/charge_full                    =   5730 [mAh]
/sys/class/power_supply/BAT0/charge_now                     =   4539 [mAh]
/sys/class/power_supply/BAT0/current_now                    =      1 [mA]
/sys/class/power_supply/BAT0/status                         = Idle

Charge                                                      =   79.2 [%]
Capacity                                                    =   88.3 [%]

If it says suspended then the dGPU is powered off,you can try running that command,keep it opened and run a cuda application ,you should see active and when you quit the applicacion it should say suspended right away,in that case you are good. :slight_smile:

Yeah thats right,it was in case TLP prevents the dGPU from powered off,so you don’t need to do that,

TLP should bring power saving out of the box but you can tweak to have more power saving if you want at cost of performance,you can install tlpui from the official repositories to have a graphical interface to configure TLP, and read what option do in their website Settings — TLP 1.6 documentation

Every setting you change in TLP you need to restart it with sudo tlp start, then you just measure with watch sudo tlp-stat -b and check the /sys/class/power_supply/BAT0/power_now, like in my case

Worth noting, that these configurations are not supported by NVIDIA on Linux.

As per the official documentation: Appendix A. Supported NVIDIA GPU Products

Note that the list of supported GPU products provided below and on the driver download page is provided to indicate which GPUs are supported by a particular driver version. Some designs incorporating supported GPUs may not be compatible with the NVIDIA Linux driver: in particular, notebook and all-in-one desktop designs with switchable (hybrid) or Optimus graphics will not work if means to disable the integrated graphics in hardware are not available.

I don’t think /sys/class/power_supply/BAT0/power_now is the current power consumption.

Here’s a small video that I made running a benchmark for my GPU, on the right terminal, and on the top left terminal you can see running TLP and on the bottom left nvidia-smi (thanks for the watch command, didn’t even knew this was a thing and it kicks ass):
https://youtu.be/CQ5CwnVsXak

As you can see it fluctuate, there’s no clear increase when the program starts kicking, although the dGPU is now running.

The same thing happened for a stress test to the CPU.

In your video I see you are charging while doing these test,/sys/class/power_supply/BAT0/power_now is measuring the mW the charger is giving to the battery,try doing in battery instead,it should output the battery discharging mW.

That makes sense, thanks.

After doing the test on battery mode, on idle (Firefox, i3, polybar and 3 terminals opens) it’s always around 17W.
Small workloads, such as writing this forum post and a few other tabs open, can easily go over 20W.
When I run the benchmark for the dGPU it kicks all the way to a maximum of 47W, however the benchmark is quite fast and it seems that this power measurement takes some time to reach a stable point.

Is this too much power consumption?

Hardware (spoiler) Lenovo Y520

Intel i5-7300HQ CPU @ 2.50GHz (min: 0.8 GHz, max: 3.5 GHz)

iGPU (Intel HD Graphics 630) + dGPU (NVIDIA GeForce GTX 1050Ti Mobile)

2 SSDs (1 NVMe M.2 + 1 SATA 2.5’’)

50% brightness

I have tweaked my TLP config a bit, but never too much, as I have never had a proper guide on what to expect after make certain changes, and considering that sometimes I would need the laptop to go full throttle, I’m afraid I mess something up and end up wasting twice as long running my programs because I miss configured TLP.

Are there any in-depth go to guides for power consumption under Linux based OSs?

P.S.: After writing this post and reaching 58% battery something triggered and now it’s on 12W when idle, but I’m sure I didn’t had anything running in the background, but I could have missed it!

There is no exact guide to what to do tweak because every laptop is different with different cpu,gpu etc,check out the TLP documentation and tweak the setting and see what fits for you.

You have the exact cpu and exact gpu as mine so I can give you my TLP configuration as a guide. Remember that you can use the TLPUI for GUI Interface.

TLP Configuration
# ------------------------------------------------------------------------------
# /etc/tlp.conf - TLP user configuration
# See full explanation: https://linrunner.de/en/tlp/docs/tlp-configuration.html
#
# New configuration scheme (TLP 1.3). Settings are read in the following order:

# 1. Intrinsic defaults
# 2. /etc/tlp.d/*.conf - Drop-in customization snippets
# 3. /etc/tlp.conf     - User configuration (this file)
#
# Notes:
# - In case of identical parameters, the last occurence has precedence
# - This also means, parameters enabled here will override anything else
# - IMPORTANT: all parameters here are disabled, remove the leading '#'
#   to enable them; shown values may be suggestions rather than defaults
# - Default *: intrinsic default that is effective when the parameter is missing
#     or disabled by a leading '#'; use PARAM="" to disable an intrinsic default
# - Default <none>: do nothing or use kernel/hardware defaults

# ------------------------------------------------------------------------------
# tlp - Parameters for power saving

# Set to 0 to disable, 1 to enable TLP.
# Default: 1

#TLP_ENABLE=1

# Operation mode when no power supply can be detected: AC, BAT.
# Concerns some desktop and embedded hardware only.
# Default: <none>

#TLP_DEFAULT_MODE=AC

# Operation mode select: 0=depend on power source, 1=always use TLP_DEFAULT_MODE
# Note: use in conjunction with TLP_DEFAULT_MODE=BAT for BAT settings on AC.
# Default: 0

#TLP_PERSISTENT_DEFAULT=0

# Power supply class to ignore when determining operation mode: AC, BAT.
# Note: try on laptops where operation mode AC/BAT is incorrectly detected.
# Default: <none>

#TLP_PS_IGNORE=BAT

# Seconds laptop mode has to wait after the disk goes idle before doing a sync.
# Non-zero value enables, zero disables laptop mode.
# Default: 0 (AC), 2 (BAT)

#DISK_IDLE_SECS_ON_AC=0
#DISK_IDLE_SECS_ON_BAT=2

# Dirty page values (timeouts in secs).
# Default: 15 (AC), 60 (BAT)

#MAX_LOST_WORK_SECS_ON_AC=15
#MAX_LOST_WORK_SECS_ON_BAT=60

# Note: CPU parameters below are disabled by default, remove the leading #
# to enable them, otherwise kernel defaults will be used.
#
# Select a CPU frequency scaling governor.
# Intel Core i processor with intel_pstate driver:
#   powersave(*), performance.
# Other hardware with acpi-cpufreq driver:
#   ondemand(*), powersave, performance, conservative, schedutil.
# (*) is recommended.
# Use tlp-stat -p to show the active driver and available governors.
# Important:
#   powersave for intel_pstate and ondemand for acpi-cpufreq are power
#   efficient for *almost all* workloads and therefore kernel and most
#   distributions have chosen them as defaults. If you still want to change,
#   you should know what you're doing!
# Default: <none>

CPU_SCALING_GOVERNOR_ON_AC="powersave"
CPU_SCALING_GOVERNOR_ON_BAT="powersave"

# Set the min/max frequency available for the scaling governor.
# Possible values depend on your CPU. For available frequencies see
# the output of tlp-stat -p.
# Default: <none>

#CPU_SCALING_MIN_FREQ_ON_AC=0
#CPU_SCALING_MAX_FREQ_ON_AC=0
#CPU_SCALING_MIN_FREQ_ON_BAT=0
#CPU_SCALING_MAX_FREQ_ON_BAT=0

# Set Intel CPU energy/performance policies HWP.EPP and EPB:
#   performance, balance_performance, default, balance_power, power
# Values are given in order of increasing power saving.
# Notes:
# - Requires an Intel Core i processor
# - HWP.EPP requires kernel 4.10 and intel_pstate driver
# - EPB requires kernel 5.2 or module msr and x86_energy_perf_policy
#   from linux-tools
# - When HWP.EPP is available, EPB is not set
# Default: balance_performance (AC), balance_power (BAT)

CPU_ENERGY_PERF_POLICY_ON_AC="balance_performance"
CPU_ENERGY_PERF_POLICY_ON_BAT="power"

# Set Intel CPU P-state performance: 0..100 (%).
# Limit the max/min P-state to control the power dissipation of the CPU.
# Values are stated as a percentage of the available performance.
# Requires an Intel Core i processor with intel_pstate driver.
# Default: <none>

CPU_MIN_PERF_ON_AC="0"
CPU_MAX_PERF_ON_AC="100"
CPU_MIN_PERF_ON_BAT="0"
CPU_MAX_PERF_ON_BAT="45"

# Set the CPU "turbo boost" feature: 0=disable, 1=allow
# Requires an Intel Core i processor.
# Important:
# - This may conflict with your distribution's governor settings
# - A value of 1 does *not* activate boosting, it just allows it
# Default: <none>

CPU_BOOST_ON_AC="1"
CPU_BOOST_ON_BAT="0"

# Minimize number of used CPU cores/hyper-threads under light load conditions:
#   0=disable, 1=enable.
# Default: 0 (AC), 1 (BAT)

#SCHED_POWERSAVE_ON_AC="0"
#SCHED_POWERSAVE_ON_BAT="1"

# Kernel NMI Watchdog:
#   0=disable (default, saves power), 1=enable (for kernel debugging only).
# Default: 0

#NMI_WATCHDOG="0"

# Change CPU voltages aka "undervolting" - Kernel with PHC patch required.
# Frequency voltage pairs are written to:
#   /sys/devices/system/cpu/cpu0/cpufreq/phc_controls
# CAUTION: only use this, if you thoroughly understand what you are doing!
# Default: <none>.

#PHC_CONTROLS="F:V F:V F:V F:V"

# Disk devices; separate multiple devices with spaces.
# Devices can be specified by disk ID also (lookup with: tlp diskid).
# Note: DISK parameters below are effective only when this option is configured.
# Default: "nvme0n1 sda"

DISK_DEVICES="sda sdb"

# Disk advanced power management level: 1..254, 255 (max saving, min, off).
# Levels 1..127 may spin down the disk; 255 allowable on most drives.
# Separate values for multiple disks with spaces. Use the special value 'keep'
# to keep the hardware default for the particular disk.
# Default: 254 (AC), 128 (BAT)

#DISK_APM_LEVEL_ON_AC="254 254"
#DISK_APM_LEVEL_ON_BAT="128 128"

# Hard disk spin down timeout:
#   0:        spin down disabled
#   1..240:   timeouts from 5s to 20min (in units of 5s)
#   241..251: timeouts from 30min to 5.5 hours (in units of 30min)
# See 'man hdparm' for details.
# Separate values for multiple disks with spaces. Use the special value 'keep'
# to keep the hardware default for the particular disk.
# Default: <none>

#DISK_SPINDOWN_TIMEOUT_ON_AC="0 0"
#DISK_SPINDOWN_TIMEOUT_ON_BAT="0 0"

# Select I/O scheduler for the disk devices.
# Multi queue (blk-mq) schedulers:
#   mq-deadline(*), none, kyber, bfq
# Single queue schedulers:
#   deadline(*), cfq, bfq, noop
# (*) recommended.
# Separate values for multiple disks with spaces. Use the special value 'keep'
# to keep the kernel default scheduler for the particular disk.
# Notes:
# - Multi queue (blk-mq) may need kernel boot option 'scsi_mod.use_blk_mq=1'
#   and 'modprobe mq-deadline-iosched|kyber|bfq' on kernels < 5.0
# - Single queue schedulers are legacy now and were removed together with
#   the old block layer in kernel 5.0
# Default: keep

#DISK_IOSCHED=""

# AHCI link power management (ALPM) for disk devices:
#   min_power, med_power_with_dipm(*), medium_power, max_performance.
# (*) Kernel >= 4.15 required, then recommended.
# Multiple values separated with spaces are tried sequentially until success.
# Default:
#  - "med_power_with_dipm max_performance" (AC)
#  - "med_power_with_dipm min_power" (BAT)

SATA_LINKPWR_ON_AC="med_power_with_dipm max_performance"
SATA_LINKPWR_ON_BAT="med_power_with_dipm min_power"

# Exclude host devices from AHCI link power management.
# Separate multiple hosts with spaces.
# Default: <none>

#SATA_LINKPWR_BLACKLIST="host1"

# Runtime Power Management for AHCI host and disks devices:
#   on=disable, auto=enable.
# EXPERIMENTAL ** WARNING: auto may cause system lockups/data loss.
# Default: <none>

#AHCI_RUNTIME_PM_ON_AC=on
#AHCI_RUNTIME_PM_ON_BAT=on

# Seconds of inactivity before disk is suspended.
# Note: effective only when AHCI_RUNTIME_PM_ON_AC/BAT is activated.
# Default: 15

AHCI_RUNTIME_PM_TIMEOUT=15

# PCI Express Active State Power Management (PCIe ASPM):
#   default(*), performance, powersave, powersupersave.
# (*) keeps BIOS ASPM defaults (recommended)
# Default: <none>

PCIE_ASPM_ON_AC="powersave"
PCIE_ASPM_ON_BAT="powersave"

# Set the min/max/turbo frequency for the Intel GPU.
# Possible values depend on your hardware. For available frequencies see
# the output of tlp-stat -g.
# Default: <none>

#INTEL_GPU_MIN_FREQ_ON_AC=0
#INTEL_GPU_MIN_FREQ_ON_BAT=0
#INTEL_GPU_MAX_FREQ_ON_AC=0
#INTEL_GPU_MAX_FREQ_ON_BAT=0
#INTEL_GPU_BOOST_FREQ_ON_AC=0
#INTEL_GPU_BOOST_FREQ_ON_BAT=0

# Radeon graphics clock speed (profile method): low, mid, high, auto, default;
# auto = mid on BAT, high on AC.
# Default: default

#RADEON_POWER_PROFILE_ON_AC=default
#RADEON_POWER_PROFILE_ON_BAT=default

# Radeon dynamic power management method (DPM): battery, performance.
# Default: <none>

#RADEON_DPM_STATE_ON_AC=performance
#RADEON_DPM_STATE_ON_BAT=battery

# Radeon DPM performance level: auto, low, high; auto is recommended.
# Note: effective only when RADEON_DPM_STATE_ON_AC/BAT is activated.
# Default: auto

#RADEON_DPM_PERF_LEVEL_ON_AC=auto
#RADEON_DPM_PERF_LEVEL_ON_BAT=auto

# WiFi power saving mode: on=enable, off=disable; not supported by all adapters.
# Default: off (AC), on (BAT)

WIFI_PWR_ON_AC=off
WIFI_PWR_ON_BAT=on

# Disable wake on LAN: Y/N.
# Default: Y

WOL_DISABLE=Y

# Enable audio power saving for Intel HDA, AC97 devices (timeout in secs).
# A value of 0 disables, >=1 enables power saving (recommended: 1).
# Default: 0 (AC), 1 (BAT)

SOUND_POWER_SAVE_ON_AC="1"
SOUND_POWER_SAVE_ON_BAT=1

# Disable controller too (HDA only): Y/N.
# Note: effective only when SOUND_POWER_SAVE_ON_AC/BAT is activated.
# Default: Y

#SOUND_POWER_SAVE_CONTROLLER=Y

# Power off optical drive in UltraBay/MediaBay: 0=disable, 1=enable.
# Drive can be powered on again by releasing (and reinserting) the eject lever
# or by pressing the disc eject button on newer models.
# Note: an UltraBay/MediaBay hard disk is never powered off.
# Default: 0

#BAY_POWEROFF_ON_AC=0
#BAY_POWEROFF_ON_BAT=0

# Optical drive device to power off
# Default: sr0

#BAY_DEVICE="sr0"

# Runtime Power Management for PCI(e) bus devices: on=disable, auto=enable.
# Default: on (AC), auto (BAT)

RUNTIME_PM_ON_AC="auto"
RUNTIME_PM_ON_BAT="auto"

# Exclude PCI(e) device adresses the following list from Runtime PM
# (separate with spaces). Use lspci to get the adresses (1st column).
# Default: <none>

#RUNTIME_PM_BLACKLIST="01:00.0 01:00.1"

# Exclude PCI(e) devices assigned to the listed drivers from Runtime PM.
# Default when unconfigured is "amdgpu nouveau nvidia radeon" which
# prevents accidential power-on of dGPU in hybrid graphics setups.
# Separate multiple drivers with spaces.
# Default: "amdgpu mei_me nouveau nvidia pcieport radeon", use "" to disable
# completely.

RUNTIME_PM_DRIVER_BLACKLIST="* empty"

# Set to 0 to disable, 1 to enable USB autosuspend feature.
# Default: 1

USB_AUTOSUSPEND="1"

# Exclude listed devices from USB autosuspend (separate with spaces).
# Use lsusb to get the ids.
# Note: input devices (usbhid) are excluded automatically
# Default: <none>

#USB_BLACKLIST="1111:2222 3333:4444"

# Bluetooth devices are excluded from USB autosuspend:
#   0=do not exclude, 1=exclude.
# Default: 0

#USB_BLACKLIST_BTUSB=0

# Phone devices are excluded from USB autosuspend:
#   0=do not exclude, 1=exclude (enable charging).
# Default: 0

USB_BLACKLIST_PHONE="1"

# Printers are excluded from USB autosuspend:
#   0=do not exclude, 1=exclude.
# Default: 1

#USB_BLACKLIST_PRINTER=1

# WWAN devices are excluded from USB autosuspend:
#   0=do not exclude, 1=exclude.
# Default: 0

USB_BLACKLIST_WWAN="* empty"

# Include listed devices into USB autosuspend even if already excluded
# by the blacklists above (separate with spaces). Use lsusb to get the ids.
# Default: <none>

#USB_WHITELIST="1111:2222 3333:4444"

# Set to 1 to disable autosuspend before shutdown, 0 to do nothing
# Note: use as a workaround for USB devices that cause shutdown problems.
# Default: 0

USB_AUTOSUSPEND_DISABLE_ON_SHUTDOWN="* empty"

# Restore radio device state (Bluetooth, WiFi, WWAN) from previous shutdown
# on system startup: 0=disable, 1=enable.
# Note: the parameters DEVICES_TO_DISABLE/ENABLE_ON_STARTUP/SHUTDOWN below
#   are ignored when this is enabled.
# Default: 0

RESTORE_DEVICE_STATE_ON_STARTUP="* empty"

# Radio devices to disable on startup: bluetooth, wifi, wwan.
# Separate multiple devices with spaces.
# Default: <none>

#DEVICES_TO_DISABLE_ON_STARTUP="bluetooth wifi wwan"

# Radio devices to enable on startup: bluetooth, wifi, wwan.
# Separate multiple devices with spaces.
# Default: <none>

#DEVICES_TO_ENABLE_ON_STARTUP="wifi"

# Radio devices to disable on shutdown: bluetooth, wifi, wwan.
# Note: use as a workaround for devices that are blocking shutdown.
# Default: <none>

#DEVICES_TO_DISABLE_ON_SHUTDOWN="bluetooth wifi wwan"

# Radio devices to enable on shutdown: bluetooth, wifi, wwan.
# (to prevent other operating systems from missing radios).
# Default: <none>

#DEVICES_TO_ENABLE_ON_SHUTDOWN="wwan"

# Radio devices to enable on AC: bluetooth, wifi, wwan.
# Default: <none>

#DEVICES_TO_ENABLE_ON_AC="bluetooth wifi wwan"

# Radio devices to disable on battery: bluetooth, wifi, wwan.
# Default: <none>

#DEVICES_TO_DISABLE_ON_BAT="bluetooth wifi wwan"

# Radio devices to disable on battery when not in use (not connected):
#   bluetooth, wifi, wwan.
# Default: <none>

#DEVICES_TO_DISABLE_ON_BAT_NOT_IN_USE="bluetooth wifi wwan"

# Battery charge thresholds (ThinkPad only).
# May require external kernel module(s), refer to the output of tlp-stat -b.
# Charging starts when the remaining capacity falls below the
# START_CHARGE_THRESH value and stops when exceeding the STOP_CHARGE_THRESH
# value.

# Main / Internal battery (values in %)
# Default: <none>

#START_CHARGE_THRESH_BAT0=75
#STOP_CHARGE_THRESH_BAT0=80

# Ultrabay / Slice / Replaceable battery (values in %)
# Default: <none>

#START_CHARGE_THRESH_BAT1=75
#STOP_CHARGE_THRESH_BAT1=80

# Restore charge thresholds when AC is unplugged: 0=disable, 1=enable.
# Default: 0

#RESTORE_THRESHOLDS_ON_BAT=1

# Battery feature drivers: 0=disable, 1=enable
# Default: 1 (all)

#NATACPI_ENABLE=1
#TPACPI_ENABLE=1
#TPSMAPI_ENABLE=1

# ------------------------------------------------------------------------------
# tlp-rdw - Parameters for the radio device wizard

# Possible devices: bluetooth, wifi, wwan.
# Separate multiple radio devices with spaces.
# Default: <none> (for all parameters below)

# Radio devices to disable on connect.

#DEVICES_TO_DISABLE_ON_LAN_CONNECT="wifi wwan"
#DEVICES_TO_DISABLE_ON_WIFI_CONNECT="wwan"
#DEVICES_TO_DISABLE_ON_WWAN_CONNECT="wifi"

# Radio devices to enable on disconnect.

#DEVICES_TO_ENABLE_ON_LAN_DISCONNECT="wifi wwan"
#DEVICES_TO_ENABLE_ON_WIFI_DISCONNECT=""
#DEVICES_TO_ENABLE_ON_WWAN_DISCONNECT=""

# Radio devices to enable/disable when docked.

#DEVICES_TO_ENABLE_ON_DOCK=""
#DEVICES_TO_DISABLE_ON_DOCK=""

# Radio devices to enable/disable when undocked.

#DEVICES_TO_ENABLE_ON_UNDOCK="wifi"
#DEVICES_TO_DISABLE_ON_UNDOCK=""

Unfortunately my laptop measures in mA so I’m not sure if 12W is alot.

You could also undervolt the CPU to consume less power

I undervolt it mine to -155 mV,since you are using the exact cpu maybe you can do it too,but do it at your own risk.

intel-undervolt.conf
# Enable or Disable Triggers (elogind)
# Usage: enable [yes/no]

enable no

# CPU Undervolting
# Usage: undervolt ${index} ${display_name} ${undervolt_value}
# Example: undervolt 2 'CPU Cache' -25.84

undervolt 0 'CPU' -155
undervolt 1 'GPU' -155
undervolt 2 'CPU Cache' -155
undervolt 3 'System Agent' 0
undervolt 4 'Analog I/O' 0

# Power Limits Alteration
# Usage: power ${domain} ${short_power_value} ${long_power_value}
# Power value: ${power}[/${time_window}][:enabled][:disabled]
# Domains: package
# Example: power package 45 35
# Example: power package 45/0.002 35/28
# Example: power package 45/0.002:disabled 35/28:enabled

# Critical Temperature Offset Alteration
# Usage: tjoffset ${temperature_offset}
# Example: tjoffset -20

# Energy Versus Performance Preference Switch
# Usage: hwphint ${mode} ${algorithm} ${load_hint} ${normal_hint}
# Hints: see energy_performance_available_preferences
# Modes: switch, force
# Load algorithm: load:${capture}:${threshold}
# Power algorithm: power[:${domain}:[gt/lt]:${value}[:[and/or]]...]
# Capture: single, multi
# Threshold: CPU usage threshold
# Domain: RAPL power domain, check with `intel-undervolt measure`
# Example: hwphint force load:single:0.8 performance balance_performance
# Example: hwphint switch power:core:gt:8 performance balance_performance

# Daemon Update Interval
# Usage: interval ${interval_in_milliseconds}

interval 5000

# Daemon Actions
# Usage: daemon action[:option...]
# Actions: undervolt, power, tjoffset
# Options: once

daemon undervolt:once
daemon power
daemon tjoffset

1 Like

Finally my electromagnetism classes will be used outside of academia, and you can tell how many Watts you’re consuming if you know how much Volts are being supplied.
In SI: Power = Amperage * Voltage, which means that if you’re being supplied with ≈ 120 V, and in a previous post you had a 1 mA Amperage, your power consumption should be around 0.001*120 = 0.12 W = 120 mW which seems like too little.

I am aware of the TLP GUI, but it doesn’t really add much, it’s just a fancy wrapper to edit the config file, and my concerns were in the fields itself.

Anyways I will look at those guides and config files provided, and naturally will take caution considering that this is a sensitive subject.

Thanks again!

1 Like

This topic was automatically closed 15 days after the last reply. New replies are no longer allowed.