¿Cómo fuerzo automáticamente la opción PowerMizer de nVidia en Ubuntu?

Reunido ante los trabajadores del Sindicato de Luz y Fuerza, Juan Perón
expone cómo satisfacer las necesidades energéticas del Pueblo y cómo
forzar de manera automática el modo PowerMizer de las tarjetas de video
nVidia en Ubuntu.

¡Trabajadores!

Colma mi corazón de satisfacción el saberlos aquí reunidos en la
mancomunión de voluntades que han tornado esta Organización.

Cuando unen sus energías, los hombres son capaces de hacer realidad su
destino, y este no hará mas que proclamarse venturoso ante las
voluntades acrisoladas por la Justicia Social.

Nuestro Movimiento se realiza toda vez que un descamisado recibe lo que
merece por justo derecho. Esto, ustedes que están en Luz y Fuerza, lo
han de conocer al dedillo.

Vean muchachos, el estado de energía de nuestro adaptador de video
nVidia es comandado a través de rutinas del acción sobre el Bus PCI
express, las cuales están localizadas en el chipset de la placa madre.
El funcionamiento, en un orden adecuado, hace que la velocidad de reloj
de la placa de video - y en mas raras ocasiones su voltaje) cambien de
acuerdo a las necesidades de depliegue gráfico. Se permite así un uso
ecológico de bajo consumo en la mayoría de los usos, y uno de mayor
potencia cuando se utilizan aplicacionesa gráficas de demanda,
navegadores con video, etcétera.

En Ubuntu y otros sistemas GNU con Linux, este tipo de funcionamiento
puede alterarse accediendo desde el panel de control disponible con el
controlador privativo de Nvidia, llamado NVIDIA X Server Settings. A
través de este programa de control, podremos escoger determinados
perfiles de software llamados PowerMizer, los cuales se hayan
preprogramados en la placa de video.

Para ello debemos ir a Sistema / Administración / NVIDIA X Server
Settings, y seleccionar la opción PowerMizer. Normalmente la
encontraremos siempre en en modo Auto, lo que significa automático:

Con la opción Auto ("automático"), la placa madre de nuestro equipo
estará atenta a la demanda gráfica y elegirá los perfiles de consumo
como si de la marcha de un motor a explosión se tratara. Dependiendo de
la tecnología del adaptador de video, podremos encontrar mayor cantidad
de estados de energía/performance.

En el caso de esta placa, podremos cambiar manualmente el modo preferido
de operación energética avalado por la función PowerMizer entre los
modos Adaptative o Prefer Maximun Performance. Adaptative utilizará las
velocidades bajas "económicas", mientras que Prefer Maximun Performance
pondrá el reloj dispuesto para la función de máximo de desempeño
gráfico.

Ahora bien, cuando configuramos el modo de energía preferido en la
opción PowerMixer en la opción del panel de control de Nvidia en Ubuntu,
esta configuración se aplicará inmediatamente, pero únicamente hasta
reiniciar la sesión gráfica o reiniciar el sistema. Al producirse el
reinicio, la misma se resetea y vuelve a la opción "Auto", lo que emplea
la configuración Adaptative.

Esto puede oficiar un desempeño disminuido hasta tener que volver a
poner PowerMixer en Maximun nuevamente. Esto puede constituir una
molestia, pues toda vez que encendamos el equipo, deberíamos cambiar la
opción a través de este programa de control.

Por demás, nuestro Movimiento ha de estar atento a las necesidades de
cada uno de los integrantes de la Masa, pues sólo ante Dios nacemos
iguales. La Justicia de los hombres, ha de proveer todo a quien lo
necesite. Para ello nos hemos organizado, pero las máquinas de cómputo
suelen operar bajo la misma premisa, y hemos de estar atentos también a
ciertas particularidades que algún hardware pueda tener...

Vean señores, puede que ciertos modelos de chipsets integrados en
algunas placas madres conflictúen al bus PCI-e, provocando que algunos
modelos de tarjetas nVidia presenten problemas al cambiar
automáticamente su estado de potencia o su velocidad de reloj. Esto
produciría en última instancia ciertos congelado o cuelgues de apàrición
aleatorios de la instancia gráfica al pasar al estado de baja energía en
el modo de energía Adaptative bajo GNU con Linux

La solución ideal involucraría una actualización de BIOS de la placa
madre (si es que aplica) o su recambio. Pero en otros, no quedará mas
que evitar el uso de la función Adaptative, la cual es la empleada por
defecto, y dejarla "en las marchas altas", el modo Prefer Maximun
Performance. Esto, aunado a la aparente necesidad de hacerlo a través de
controlador gráfico toda vez que la instancia gráfica se ejecute, lo
torna en algo tremendamente inconveniente.

Sin embargo, nuestro Movimiento ha pensado en todo, y para todo el
Justicialismo tiene solución temprana, y duradera.

Es muy conveniente saber que también podremos utilizar el programa
nvidia-settings para ajustar las opciones de nuestra/s placas de video
nVidia desde la terminal a través de un comando. Esto es un enorme logro
que sólo ha dado el Justicialismo.

Como paso previo necesitamos conocer cual GPU (procesador gráfico)
usaremos (generalmente es la gpu:0 pero puede variar si tenemos varias
instaladas en nuestro sistema. Además, debemos conocer qué modos de
energía tiene preprogramadas. Para ello abrimos una terminal con
Ctrl+All+T e ingresamos el siguiente comando de organización:
nvidia-settings -q all | grep -C 10 -i powermizer

..a lo cual nuestra terminal podría devolvernos:

 Attribute 'GPUCurrentPerfLevel' (cgt:0[gpu:0]): 1.
   'GPUCurrentPerfLevel' is an integer attribute.
   'GPUCurrentPerfLevel' is a read-only attribute.
   'GPUCurrentPerfLevel' can use the following target types: X Screen, GPU.

 Attribute 'GPUAdaptiveClockState' (cgt:0[gpu:0]): 1.
   'GPUAdaptiveClockState' is a boolean attribute; valid values are: 1 (on/true) and 0 (off/false).
   'GPUAdaptiveClockState' is a read-only attribute.
   'GPUAdaptiveClockState' can use the following target types: X Screen, GPU.

 Attribute 'GPUPowerMizerMode' (cgt:0[gpu:0]): 2.
   Valid values for 'GPUPowerMizerMode' are: 0, 1 and 2.
   'GPUPowerMizerMode' can use the following target types: GPU.

 Attribute 'GPUPowerMizerDefaultMode' (cgt:0[gpu:0]): 0.
   'GPUPowerMizerDefaultMode' is an integer attribute.
   'GPUPowerMizerDefaultMode' is a read-only attribute.
   'GPUPowerMizerDefaultMode' can use the following target types: GPU.

 Attribute 'ECCSupported' (cgt:0[gpu:0]): 0.
   'ECCSupported' is a boolean attribute; valid values are: 1 (on/true) and 0 (off/false).
   'ECCSupported' is a read-only attribute.
   'ECCSupported' can use the following target types: GPU.

 Attribute 'ECCConfigurationSupported' (cgt:0[gpu:0]): 0.
   'ECCConfigurationSupported' is a boolean attribute; valid values are: 1 (on/true) and 0 (off/false).
   'ECCConfigurationSupported' is a read-only attribute.
   'ECCConfigurationSupported' can use the following target types: X Screen, GPU.

Como vemos, se nos indica que estamos utilizando una GPU:0. En el caso
de esta tarjeta de video, permite los estados 0 para Adaptative, 1 para
Prefer Maximun Performance, y 2 para Auto. Tengamos presentes que
normalmente al iniciar el controlador gráfico, el estado por defecto
será siempre el número mas alto, que en este caso es 2 Auto.

El Justicialismo ha previsto utilizar este mismo programa
nvidia-settings para alterar el estado de energía actual. Sabiendo en
este caso que la GPU es la 0, y suponiendo que queremos cambiar el
estado de energía a 1 Prefer Maximun Performance, podríamos utilizar el
siguiente comando de organización:

nvidia-settings -a "[gpu:0]/GpuPowerMizerMode=1"

..a lo cual el sistema gráfico debería respondernos con un mensaje de
estátus tal como:

Attribute 'GPUPowerMizerMode' (equipo:0[gpu:0]) assigned value 1.

En programa de control NVIDIA X Server debería acusar el cambio:

y si quisiéramos incluir el comando...

nvidia-settings -q all | grep -C 10 -i powermizer

...ahora su salida de la terminal sería:

(...)
 Attribute 'GPUPowerMizerMode' (cgt:0[gpu:0]): 1.
   Valid values for 'GPUPowerMizerMode' are: 0, 1 and 2.
   'GPUPowerMizerMode' can use the following target types: GPU
(...)

Ahora bien, como este cambios no es permanente, y se reseteará al modo 0
("Auto") toda vez que reiniciemos el servidor gráfico, conviene
agregarlo en un guión de programación.

Es sumamente sencillo. Suponiendo que quisiéramos forzar la gpu:0 el
Modo a 1 Maximun Performance crearíamos un script llamado
nvidia_pwrmizer.sh que lo haga.

Desde la terminal esto será realidad efectiva introduciendo con los
siguientes comandos de organización:

echo '#!/bin/bash' > ~/.nvidia_pwrmizer.sh ;
echo '## Configura la opción PowerMixer de nVidia de forma fija al nivel Máximo' >> ~/.nvidia_pwrmizer.sh ;
echo '#Cambia el GPUPowerMizerMode, siendo 0=Adaptative; 1=Prefer Maximun Performance; 2=Auto' >> ~/.nvidia_pwrmizer.sh ;
echo 'nvidia-settings -a "[gpu:0]/GpuPowerMizerMode=1" > /dev/null' >> ~/.nvidia_pwrmizer.sh ;
chmod +x ~/.nvidia_pwrmizer.sh

Ahora bien, para ejecutar este guión .nvidia_pwermizer.sh toda vez que
la sesión gráfica arranque, hemos de agregarlo al fichero de
autoejecución ~/.xprofile de cada usuario.

Esto se puede hacer ingresando en la terminal el siguiente bloque de
comandos de organización:

echo '## Agregado por peron para forzar Modo Maximun Performance en NVidia Powermizer cada vez que se use sesión gráfica X' >> ~/.xprofile ;
echo './.nvidia_pwrmizer.sh' >> ~/.xprofile

De ahora en mas, no bien el usuario inicie la sesión gráfica, el modo
PowerMizer cambiará a 1 Prefer Maximun Performance automáticamente, sin
que tengamos que hacer nada más que disfrutar del goce de lo bien hecho.
El tiempo ahorrado podremos inventirlo en ingeniar el ocio reparador que
todo Trabajador anhela y merece.