NVIDIA Powermizer es una tecnología que lleva bastante tiempo dentro de las placas gráficas NVIDIA, su objetivo principal es reducir el consumo de energía ajustando de manera dinámica la frecuencia del GPU y VRAM.
Sin embargo y dependiendo de nuestra necesidad, en Linux el acceso a configuraciones avanzadas es bastante limitado, ya que el panel de administración solo permite 3 configuraciones: Máximo desempeño, Adaptativo o Automático (que elije entre los dos anteriores -_-). Siendo así, la única forma de configurar opciones avanzadas a nuestro gusto es editar manualmente las configuraciones del driver, utilizando para esto la opción RegistryDWords que se encuentra bien documentada solo en algunos manuales de desarrollador.
1) ¿Como saber cuales modos de trabajo están soportados por mi tarjeta?:
Un paso previo a configurar RegistryDWords es verificar los niveles predeterminados de desempeño que NVIDIA incluye en la GPU, para esto utilizamos el comando:
1 | nvidia-settings -q 0/GPUPerfModes -t |
La salida sera similar a la siguiente:
perf=0, nvclock=50, nvclockmin=50, nvclockmax=50, memclock=135, memclockmin=135, memclockmax=135, processorclock=101,
processorclockmin=101, processorclockmax=101 ;
perf=1, nvclock=202, nvclockmin=202, nvclockmax=202, memclock=324,
memclockmin=324, memclockmax=324, processorclock=405, processorclockmin=405, processorclockmax=405 ;
perf=2, nvclock=775, nvclockmin=775, nvclockmax=775, memclock=1250, memclockmin=1250, memclockmax=1250, processorclock=1550,
processorclockmin=1550, processorclockmax=1550
Aunque la salida es un poco confusa leyendo detenidamente podemos notar que esta tarjeta soporta tres niveles o «perf modes».
2) ¿Cuales archivos necesito editar para personalizar la configuración?:
Luego que conocemos los niveles de trabajo soportados por nuestra tarjeta, necesitamos verificar cual archivo de configuración utiliza nuestro sistema, lo mas común es editar el archivo xorg.conf ubicado en /etc/X11:
vim /etc/X11/xorg.conf |
Sin embargo y con las funciones de configuración automática de Xorg/X11 puede ocurrir que ni siquiera tengamos este archivo. Si este fuera el caso es necesario verificar varias posibles ubicaciones para los archivos de configuración como se menciona en el manual de Xorg, siendo estas:
/etc/X11/xorg.conf.d/ /usr/etc/X11/xorg.conf.d/ /usr/share/X11/xorg.conf.d/ |
Dentro de estos directorios puede existir más de un archivo con un nombre de tipo <numero>-<nombre>.conf. Si este fuera el caso debemos buscar si alguno de estos archivos ya contiene una sección Device y/o crear un archivo con esta sección, conteniendo la información de nuestro driver y tarjeta grafica, en mi caso:
vim /usr/etc/X11/xorg.conf.d/02-xorg.conf |
La apariencia de esta sección es similar a la siguiente
Section "Device" Identifier "Device0" Driver "nvidia" VendorName "NVIDIA Corporation" Option "CursorShadow" "true" EndSection |
2) ¿Como personalizo las opciones de desempeño?:
Una vez que hemos ubicado/creado la sección device que corresponde a nuestra GPU, debemos agregar una nueva opción denominada RegistryDWords que debe tener la siguiente estructura:
1 | Option "RegistryDwords" "PerfLevelSrc=0x<8888>; PowerMizerDefault=0x<88>; PowerMizerDefaultAC=0x<88>" |
Las opciones para los valores son las siguientes:
PerfLevelSrc, controla la política que se aplicara con las distintas fuentes de energía soportadas por la PC (corriente alterna o batería) un valor 22 significa frecuencias fijas y 33 significa valores adaptativos, siendo así obtenemos las siguientes combinaciones:
PerfLevelSrc=0x2222 #Frecuencia fija para batería y corriente alterna PerfLevelSrc=0x2233 #Frecuencia fija para batería y dinámica para corriente alterna PerfLevelSrc=0x3333 #Frecuencia dinámica para ambos modos de energía (configuración por defecto) |
PowerMizerDefault, define el «perf mode» por defecto, que en configuraciones fijas significa que se utilizara siempre este perf mode. Por ejemplo si quisiéramos máximo desempeño todo el tiempo y nuestra tarjeta soportara 3 perfs, lo correcto seria utilizar:
1 | PowerMizerDefault="0x1" |
PowerMizerDefaultAC, es similar al anterior pero solo tiene efecto sobre las políticas de energía conectado a corriente alterna.
3) Configuraciones comunes:
Algunos ejemplos de configuración bastante comunes son los siguientes:
Máximo desempeño en corriente alterna, máximo ahorro en batería,
"PerfLevelSrc=0x2222; PowerMizerDefault=0x3; PowerMizerDefaultAC=0x1" |
Máximo ahorro en batería, dinámico en corriente alterna
"PerfLevelSrc=0x2233; PowerMizerDefault=0x3" |
Dinámico en batería, máximo desempeño en corriente alterna
"PerfLevelSrc=0x3322; PowerMizerDefaultAC=0x1" |
Adaptativo para cualquier origen de energía (configuración por defecto)
"PerfLevelSrc=0x3333" |
4) Ejemplo de desempeño:
En mi caso suelo optar por una configuración de desempeño dinámico en corriente alterna y desempeño mínimo al utilizar batería, con lo cual mi archivo de configuración contiene los siguientes valores:
Section "Device" Identifier "Device0" Driver "nvidia" VendorName "NVIDIA Corporation" Option "CursorShadow" "true" Option "RegistryDwords" "PerfLevelSrc=0x2233; PowerMizerDefault=0x3" EndSection |
Notese en el siguiente video como esta configuración afecta el rendimiento de la aceleración 3D:
Como comentario final, con esta configuración no es posible ver películas en HD sin embargo mi batería rara vez dura más de las 2 horas necesarias para ver una película completa :-D.