Nvpmodel.conf for 70W with Jetson Thor

We have downloaded the 70W nvpmodel.conf from the power-estimator on jetson-tools.nvidia.com/powerestimator/

However installing this on the Jetson Thor and enabling the profile (and rebooting) does not seem to give the expected results. Running a network with trtexec gives roughly the same inference time as the MAXN profile and jtop reports approximately 110W power-usage.

The profile seems to correctly want to set:
GPU_POWER_GATING GPU_PG_MASK 15873
GPU_POWER_CONTROL_ENABLE GPU_PWR_CNTL_EN on

after reboot we would expect this to be set here:
GPU_PG_MASK /sys/bus/pci/devices/0000:01:00.0/gpu_pg_mask

but no gpu_pg_mask exists.

Is there something else that needs to be set in order to enable the change of TPCs being used?

Best regards
Lee Lassen.

Hey Lee, I ran into a similar issue before turns out the gpu_pg_mask file isn’t always exposed depending on the Jetson firmware or driver version. You might need to update your JetPack or reapply the nvpmodel.conf under root permissions. Also, double-check that your custom 70W profile is properly registered in /etc/nvpmodel.conf and re-select it using Nebroo sudo nvpmodel -m. Sometimes a full cold reboot (not just restart) helps the new power settings take effect.

Hi leel1,

Are you using the devkit or custom board for Thor?

Could you share the results of the following commands on your board?

$ cat /etc/nv_tegra_release
$ sudo nvpmodel -q --verbose

Please also refer to what helensmith8261 mentioned to check if it could help for your case.

cat /etc/nvpmodel.conf shows

GPU_POWER_GATING GPU_PG_MASK 64
GPU_POWER_CONTROL_ENABLE GPU_PWR_CNTL_EN on

in both < POWER_MODEL ID=1 NAME=120W > and < POWER_MODEL ID=0 NAME=MAXN >

nvpmodel -q
NV Power Mode: MAXN
0

That file doesn’t exist at my Thor /sys/bus/pci/devices/0000:01:00.0/


I’ve not tried following, but according to jetson-tools.nvidia.com/powerestimator/userguide

Download nvpmodel configuration file
Configure the target system with the downloaded nvpmodel.conf file.
● Copy the downloaded nvpmodel.conf file to the target platform.
● Set nvpmodel mode to 0:
# nvpmodel -m 0
● Stop the nvpmodel service:
# systemctl stop nvpmodel
● Apply the nvpmodel.conf file
cp /etc/nvpmodel.conf ~/
cp <downloaded_nvpmodel_conf_path>/nvpmodel.conf /etc/nvpmodel.conf

Note: Do not overwrite the nvpmodel.conf file before nvpmodel service is stopped.

Click the Logout button to log out from the current session.
Click the Reset button to reset all power knob settings to the default state for the power mode selected from the dropdown list.

We are using the Thor Devkit.

cat /etc/nv_tegra_release:

# R38 (release), REVISION: 2.0, GCID: 41844464, BOARD: generic, EABI: aarch64, DATE: Fri Aug 22 00:55:42 UTC 2025
# KERNEL_VARIANT: oot
TARGET_USERSPACE_LIB_DIR=nvidia
TARGET_USERSPACE_LIB_DIR_PATH=usr/lib/aarch64-linux-gnu/nvidia
INSTALL_TYPE=openrm

sudo nvpmodel -q --verbose:

NVPM VERB: Config file: /etc/nvpmodel.conf
NVPM VERB: parsing done for /etc/nvpmodel.conf
NVPM VERB: Current mode: NV Power Mode: MODE_50_7_W
0
NVPM VERB: PARAM CPU_ONLINE: ARG CORE_0: PATH /sys/devices/system/cpu/cpu0/online: REAL_VAL: 1 CONF_VAL: 1
NVPM VERB: PARAM CPU_ONLINE: ARG CORE_1: PATH /sys/devices/system/cpu/cpu1/online: REAL_VAL: 1 CONF_VAL: 1
NVPM VERB: PARAM CPU_ONLINE: ARG CORE_2: PATH /sys/devices/system/cpu/cpu2/online: REAL_VAL: 1 CONF_VAL: 1
NVPM VERB: PARAM CPU_ONLINE: ARG CORE_3: PATH /sys/devices/system/cpu/cpu3/online: REAL_VAL: 1 CONF_VAL: 1
NVPM VERB: PARAM CPU_ONLINE: ARG CORE_4: PATH /sys/devices/system/cpu/cpu4/online: REAL_VAL: 1 CONF_VAL: 1
NVPM VERB: PARAM CPU_ONLINE: ARG CORE_5: PATH /sys/devices/system/cpu/cpu5/online: REAL_VAL: 1 CONF_VAL: 1
NVPM VERB: PARAM CPU_ONLINE: ARG CORE_6: PATH /sys/devices/system/cpu/cpu6/online: REAL_VAL: 1 CONF_VAL: 1
NVPM VERB: PARAM CPU_ONLINE: ARG CORE_7: PATH /sys/devices/system/cpu/cpu7/online: REAL_VAL: 1 CONF_VAL: 1
NVPM VERB: PARAM CPU_ONLINE: ARG CORE_8: PATH /sys/devices/system/cpu/cpu8/online: REAL_VAL: 1 CONF_VAL: 1
NVPM VERB: PARAM CPU_ONLINE: ARG CORE_9: PATH /sys/devices/system/cpu/cpu9/online: REAL_VAL: 1 CONF_VAL: 1
NVPM VERB: PARAM CPU_ONLINE: ARG CORE_10: PATH /sys/devices/system/cpu/cpu10/online: REAL_VAL: 1 CONF_VAL: 1
NVPM VERB: PARAM CPU_ONLINE: ARG CORE_11: PATH /sys/devices/system/cpu/cpu11/online: REAL_VAL: 1 CONF_VAL: 1
NVPM VERB: PARAM CPU_ONLINE: ARG CORE_12: PATH /sys/devices/system/cpu/cpu12/online: REAL_VAL: 0 CONF_VAL: 0
NVPM VERB: PARAM CPU_ONLINE: ARG CORE_13: PATH /sys/devices/system/cpu/cpu13/online: REAL_VAL: 0 CONF_VAL: 0
NVPM VERB: PARAM GPU_POWER_CONTROL_ENABLE: ARG GPU_PWR_CNTL_EN: PATH /sys/devices/platform/bus@0/d0b0000000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/power/control: REAL_VAL: on CONF_VAL: on
NVPM VERB: Don't refer to GPU_POWER_GATING sysfs when using nvidia.ko
NVPM VERB: PARAM GPU_POWER_GATING: ARG GPU_PG_MASK: PATH /dev/null: REAL_VAL: on CONF_VAL: 15873
NVPM VERB: PARAM CPU_AE_0: ARG MIN_FREQ: PATH /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq: REAL_VAL: 972000 CONF_VAL: 972000
NVPM VERB: PARAM CPU_AE_0: ARG MAX_FREQ: PATH /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq: REAL_VAL: 1998000 CONF_VAL: 1998000
NVPM VERB: PARAM CPU_AE_1: ARG MIN_FREQ: PATH /sys/devices/system/cpu/cpu1/cpufreq/scaling_min_freq: REAL_VAL: 972000 CONF_VAL: 972000
NVPM VERB: PARAM CPU_AE_1: ARG MAX_FREQ: PATH /sys/devices/system/cpu/cpu1/cpufreq/scaling_max_freq: REAL_VAL: 1998000 CONF_VAL: 1998000
NVPM VERB: PARAM CPU_AE_2: ARG MIN_FREQ: PATH /sys/devices/system/cpu/cpu2/cpufreq/scaling_min_freq: REAL_VAL: 972000 CONF_VAL: 972000
NVPM VERB: PARAM CPU_AE_2: ARG MAX_FREQ: PATH /sys/devices/system/cpu/cpu2/cpufreq/scaling_max_freq: REAL_VAL: 1998000 CONF_VAL: 1998000
NVPM VERB: PARAM CPU_AE_3: ARG MIN_FREQ: PATH /sys/devices/system/cpu/cpu3/cpufreq/scaling_min_freq: REAL_VAL: 972000 CONF_VAL: 972000
NVPM VERB: PARAM CPU_AE_3: ARG MAX_FREQ: PATH /sys/devices/system/cpu/cpu3/cpufreq/scaling_max_freq: REAL_VAL: 1998000 CONF_VAL: 1998000
NVPM VERB: PARAM CPU_AE_4: ARG MIN_FREQ: PATH /sys/devices/system/cpu/cpu4/cpufreq/scaling_min_freq: REAL_VAL: 972000 CONF_VAL: 972000
NVPM VERB: PARAM CPU_AE_4: ARG MAX_FREQ: PATH /sys/devices/system/cpu/cpu4/cpufreq/scaling_max_freq: REAL_VAL: 1998000 CONF_VAL: 1998000
NVPM VERB: PARAM CPU_AE_5: ARG MIN_FREQ: PATH /sys/devices/system/cpu/cpu5/cpufreq/scaling_min_freq: REAL_VAL: 972000 CONF_VAL: 972000
NVPM VERB: PARAM CPU_AE_5: ARG MAX_FREQ: PATH /sys/devices/system/cpu/cpu5/cpufreq/scaling_max_freq: REAL_VAL: 1998000 CONF_VAL: 1998000
NVPM VERB: PARAM CPU_AE_6: ARG MIN_FREQ: PATH /sys/devices/system/cpu/cpu6/cpufreq/scaling_min_freq: REAL_VAL: 972000 CONF_VAL: 972000
NVPM VERB: PARAM CPU_AE_6: ARG MAX_FREQ: PATH /sys/devices/system/cpu/cpu6/cpufreq/scaling_max_freq: REAL_VAL: 1998000 CONF_VAL: 1998000
NVPM VERB: PARAM CPU_AE_7: ARG MIN_FREQ: PATH /sys/devices/system/cpu/cpu7/cpufreq/scaling_min_freq: REAL_VAL: 972000 CONF_VAL: 972000
NVPM VERB: PARAM CPU_AE_7: ARG MAX_FREQ: PATH /sys/devices/system/cpu/cpu7/cpufreq/scaling_max_freq: REAL_VAL: 1998000 CONF_VAL: 1998000
NVPM VERB: PARAM CPU_AE_8: ARG MIN_FREQ: PATH /sys/devices/system/cpu/cpu8/cpufreq/scaling_min_freq: REAL_VAL: 972000 CONF_VAL: 972000
NVPM VERB: PARAM CPU_AE_8: ARG MAX_FREQ: PATH /sys/devices/system/cpu/cpu8/cpufreq/scaling_max_freq: REAL_VAL: 1998000 CONF_VAL: 1998000
NVPM VERB: PARAM CPU_AE_9: ARG MIN_FREQ: PATH /sys/devices/system/cpu/cpu9/cpufreq/scaling_min_freq: REAL_VAL: 972000 CONF_VAL: 972000
NVPM VERB: PARAM CPU_AE_9: ARG MAX_FREQ: PATH /sys/devices/system/cpu/cpu9/cpufreq/scaling_max_freq: REAL_VAL: 1998000 CONF_VAL: 1998000
NVPM VERB: PARAM CPU_AE_10: ARG MIN_FREQ: PATH /sys/devices/system/cpu/cpu10/cpufreq/scaling_min_freq: REAL_VAL: 972000 CONF_VAL: 972000
NVPM VERB: PARAM CPU_AE_10: ARG MAX_FREQ: PATH /sys/devices/system/cpu/cpu10/cpufreq/scaling_max_freq: REAL_VAL: 1998000 CONF_VAL: 1998000
NVPM VERB: PARAM CPU_AE_11: ARG MIN_FREQ: PATH /sys/devices/system/cpu/cpu11/cpufreq/scaling_min_freq: REAL_VAL: 972000 CONF_VAL: 972000
NVPM VERB: PARAM CPU_AE_11: ARG MAX_FREQ: PATH /sys/devices/system/cpu/cpu11/cpufreq/scaling_max_freq: REAL_VAL: 1998000 CONF_VAL: 1998000
NVPM VERB: PARAM GPU: ARG MIN_FREQ: PATH /sys/class/devfreq/gpu-gpc-0/min_freq: REAL_VAL: 314000000 CONF_VAL: 315000000
NVPM VERB: PARAM GPU: ARG MAX_FREQ: PATH /sys/class/devfreq/gpu-gpc-0/max_freq: REAL_VAL: 1530000000 CONF_VAL: 1530000000
NVPM VERB: PARAM VIDEO: ARG MIN_FREQ: PATH /sys/class/devfreq/gpu-nvd-0/min_freq: REAL_VAL: 314000000 CONF_VAL: 315000000
NVPM VERB: PARAM VIDEO: ARG MAX_FREQ: PATH /sys/class/devfreq/gpu-nvd-0/max_freq: REAL_VAL: 1557000000 CONF_VAL: 1557000000
NVPM VERB: PARAM EMC: ARG MAX_FREQ: PATH /sys/kernel/nvpmodel_clk_cap/emc: REAL_VAL: 4266000000 CONF_VAL: 4266000000
NVPM VERB: PARAM PVA0_VPS: ARG MAX_FREQ: PATH /sys/devices/platform/bus@0/8181200000.host1x/818c000000.pva0/clk_cap/pva0_vps: REAL_VAL: 1215000000 CONF_VAL: 1215000000
NVPM VERB: PARAM PVA0_AXI: ARG MAX_FREQ: PATH /sys/devices/platform/bus@0/8181200000.host1x/818c000000.pva0/clk_cap/pva0_cpu_axi: REAL_VAL: 909000000 CONF_VAL: 909000000

We have tried several cold-boots and reboots. Changing the nvpmodel with sudo and copying the nvpmodel.conf while stopping the service. All changes in the config regarding number of active cpu cores and cpu+gpu clock frequencies are adjusted correctly when changing them, it is only the GPU_POWER_GATING that does not seem to work.

I guess the error is related to this: NVPM VERB: PARAM GPU_POWER_GATING: ARG GPU_PG_MASK: PATH /dev/null: REAL_VAL: on CONF_VAL: 15873

echo on | sudo tee /sys/devices/platform/bus@0/d0b0000000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/power/control

should turn on GPU_POWER_CONTROL given the CONF_VAL

sudo nvpmodel -q --verbose|grep "GPU_POWER_CONTROL_"

NVPM VERB: PARAM GPU_POWER_CONTROL_ENABLE: ARG GPU_PWR_CNTL_EN: PATH /sys/devices/platform/bus@0/d0b0000000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/power/control: REAL_VAL: on CONF_VAL: on

NVPM VERB: PARAM GPU_POWER_CONTROL_DISABLE: ARG GPU_PWR_CNTL_DIS: PATH /sys/devices/platform/bus@0/d0b0000000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/power/control: REAL_VAL: on CONF_VAL: auto

I don’t know if this is directly relevant to your use case but from the middle paragraph below, that is from source for nvidia.ko

Linux_for_Tegra/source/unifiedgpudisp/kernel-open/nvidia/nv-pci.c

    // When GPU is suspended(railgated), the PM runtime suspend callback should
    // suspend all devfreq devices, and devfreq cycle should not be triggered.
    //
    // However, users are still able to change the devfreq governor from the
    // sysfs interface and indirectly invoke the update_devfreq function, which
    // will further call the target callback function.
    //
    // Early stop the process here before clk_set_rate/clk_get_rate, since these
    // calls served by BPMP will awake the GPU.
echo "nvhost_podgov" |sudo tee /sys/devices/platform/bus@0/d0b0000000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/gpu-gpc-0/devfreq/gpu-gpc-0/governor

echo "performance" |sudo tee /sys/devices/platform/bus@0/d0b0000000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/gpu-gpc-0/devfreq/gpu-gpc-0/governor

Or install jetson_stats / jtop from source to get the recently updated version for Thor; that has functional changeable Railgate and 3d scaling on 2GPU page.


edit: Just saw this gpu-power-management

Hi leel1,

Please try running the following command to check if it could help for your case.

echo on > /sys/bus/pci/devices/0000\:01\:00.0/power/control

Hi KevinFFF and whitesscott

I have tried setting the governor and also tried changing the power control from auto to on.
I also tried installing newest jetson-stats from source to enable and disable railgating and 3d scaling.
Unfortunately this does not seem to do anything.
The verbose output from nvpmodel still shows:

NVPM VERB: Don’t refer to GPU_POWER_GATING sysfs when using nvidia.ko
NVPM VERB: PARAM GPU_POWER_GATING: ARG GPU_PG_MASK: PATH /dev/null: REAL_VAL: 0 CONF_VAL: 15873
NVPM VERB: PARAM GPU_POWER_CONTROL_ENABLE: ARG GPU_PWR_CNTL_EN: PATH /sys/devices/platform/bus@0/d0b0000000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/power/control: REAL_VAL: on CONF_VAL: on

which seems to indicate that the REAL_VAL for GPU_PG_MASK is never set and it seems that the system is unable to set it since it is pointing to /dev/null.

All other settings work just fine. If i set the max frequency for the gpu we do see a drop in wattage. We do however want to disable part of the GPU to simulate the T4000 for internal benchmarks.

Could you also verify with r38.2.1 to check if it could help for your case?

I have now tried a clean install of 38.2.1, downloaded and replaced the nvpmodel.conf and it is the exact same result. Same output from nvpmodel -q as before.

Has anyone else succeded in setting the number of TPCs in use?

I’ve checked with internal that this is not an error, it’s expected.
We used to use nvgpu as kernel driver, which exposes The GPU_POWER_GATING sysfs
However, thor platforms with r38.x have been using nvidia.ko as kernel driver, which so far does not expose tpc sysfs.

Alternatively, you can configure them through nvpmodel.conf directly.
e.g.

# For GPU_POWER_GATING, below bit definition is referred in the nvpmodel:
# +---------+--------------------------------+
# | Bits    | Mask                           |
# +---------+--------------------------------+
# | [ 0: 2] | NV_FUSE_CTRL_OPT_FBP[0:2]      |
# | [ 3: 6] | NV_FUSE_CTRL_OPT_TPC_GPC0[0:3] |
# | [ 7:10] | NV_FUSE_CTRL_OPT_TPC_GPC1[0:3] |
# | [11:13] | NV_FUSE_CTRL_OPT_TPC_GPC2[0:2] |
# | [14:31] | Reserved                       |
# +---------+--------------------------------+
#
< PARAM TYPE=FILE NAME=GPU_POWER_GATING >
-GPU_PG_MASK /sys/bus/pci/devices/0000:01:00.0/gpu_pg_mask
+GPU_PG_MASK 15873
-GPU_PG_MASK_KNEXT /sys/bus/pci/devices/0000:01:00.0/gpu_pg_mask
+GPU_PG_MASK_KNEXT 15873

Thank you for the explanation.

Unfortunately setting this parameter directly, we are still able to push the Thor to use upwards 110W and getting the over-current warning. Not really sure how to check why the TPCs are not disabled.

I think we will release the 70W power mode configuration for Thor in the next JP7.1 release.
Please also note that 70W is a reference power mode, estimated for the typical workload, not for heavy stress workload.
So, if stress test is performed, then chances are still there for power exceeding the 70W.