Underclock/overclock Nvidia GeForce GT 540M en linux gentoo

Imagen de dvastazion

Llevo un tiempo arrastrando en Gentoo (Dell XPS L502x) ciertos "cuelgues" al jugar a juegos de Steam (Borderlands2, Metro...) problemas que no di importancia, porque ni juego mucho ni ocurrían a menudo, pero desde hace unas semanas ya se queda colgado a la mínima,con sistema completamente congelado, sin logs de error, salidas por pantalla de popurrí de colores, vamos fallo de gráfica a todas luces.

Me ha tenido despistado el hecho de que utilizaba la intel integrada, pero el problema está en la GT540M.
En principio lo achaqué a problemas de drivers, de la implementación optimus en linux a través de bumblebee...coño, incluso a problemas de kernel...software en definitiva.
Y sí el problema está en software...pero a más bajo nivel.

Después de mucho tirar de google, cambiar la bios por una con "undervolt" http://forum.notebookreview.com/threads/l502x-modded-bioses-download-gpu-voltages-and-more.635536/ en la GPU, de desmontar el portátil y cambiar las "gomas térmicas" (tiene cojones) por placas de cobre,
limpiando ventilador y cambiando la silicona térmica por una de calidad (mx-4, por cierto el que fijó la silicona de fábrica se cubrió de gloria, media hora he tardado en retirar el pegote)...pues el problema me pusieron sobre la pista que esta tarjeta el clock lo tiene a 672 Mhz por defecto, y no es estable en esa frecuencia www.youtube.com/watch?v=YGnMY1SMrfo (obleas defectuosas o vete a saber)

Bueno pues estaba claro que la solución era hacer "underclock" a la GPU...aquí empieza lo interesante.

En las Fermi en linux el soporte para manipular el clock es muy reciente desde la versión 337.12 del driver en concreto http://www.phoronix.com/scan.php?px=MTY1OTM&page=news_item
colocas
Option "Coolbits" "10"
en el xorg.conf Section "Device" y ya tienes habilitado el manipular los clock de GPU y memoria de GPU. Pues aquí empieza mi odisea para manipular el clock en linux de forma automática.
En windows es sencillo, según he leído (no lo voy a probar), pones el reloj como creas estable (592mhz aconsejan) lo guardas en un profile y lo ejecutas por defecto...fin.
En linux, no tienes esa posibilidad, sí puedes crear profiles, pero no con frecuencias modificadas...bueno pues siguiente paso, nvidia-settings por consola para manipular, script al inicio de las X y a correr...

Sí, así de fácil...como dije, la implementación del overclock es reciente, por lo que está cambiando casi a cada nueva versión de drivers bajo linux, por lo que la mayoría de referencias (TODAS las tres primeras páginas) que tenía en google de cómo hacerlo por consola no funcionaban.

Por aplicación gráfica funcionaba de puta madre, pero en consola...PENE, error unknow, rangos que no respetaba y no modificaba...una odisea, bajando de versión drivers y todo igual...sólo funciona correctamente desde nvidia-seetings en gráfico.

Me leo el man de nvidia por si estoy pasando algo por alto y nada,
en todos lados este es el comando o muy similar que comentan para cambiar frecuencias:

nvidia-settings --assign "[gpu:0]/GPUOverclockingState=1" --assign "[gpu:0]/GPU2DClockFreqs=540,1700" --assign="[gpu:0]/GPU3DClockFreqs=540,1700"

Ya hasta las narices de que a mi, según el driver lo ejecute sin error y no cambie nada, lo ejecute con errores UNKNOW o directamente con los últimos me diga que esas funciones están en "DEPRECATED" (que fue lo que me puso sobre la pista) me voy a la fuente...sí al código fuente de nvidia-settings ftp://download.nvidia.com/XFree86/nvidia-settings/ del último driver disponible (nvidia-settings-346.35.tar.bz2) para mi Gentoo y me leo el /doc/nvidia-settings.1.m4 encontrando la solución a mis problemas en la línea 387:

nvidia-settings --assign [gpu:0]/GPUGraphicsClockOffset[2]=10 donde el [2] es el "performance level" y el '10' es el número de Mhz que incrementamos (positivo overclock) o disminuimos el clock (negativo underclock)

Pues ya está, ese comando con el valor que nos deje estable la tarjeta a un script, script al inicio de la sesión (con las X ya arrancadas o no hace el cambio) y todo es felicidad...hasta que cambien nuevamente los parámetros en nvidia-settings y todo al carajo, claro.

Moraleja...RTFM