[QuickTip] Eliminar glitches (ruido/crackling) en Skype con pulseaudio

Skype

Después de una actualización de rutina a mi sistema, Skype me presentaba un ruido bastante incomodo que solo puedo describir como «crackling» o como «un televisor captando interferencia». Aunque inicialmente maldije a Skype, a Dilma, a Obama y a Microsoft, por su modelo propietario, resulta que el que tiene la culpa del error es Pulseaudio (lo siento Bill no me tengas rencor).

Anteriormente el scheduler utilizado por Pulseaudio era basado en interrupciones, pero en lanzamientos recientes Pulseaudio ofrece la opción de un scheduler basado en timers, el cual infelizmente tiene zilliones de reportes de bugs y al parecer no existe una solución universal ya que el buen funcionamiento de este scheduler depende del hardware y el driver.

Si este fuera el caso, la única solución es deshabilitar el scheduler basado en timers, editando el archivo /etc/pulse/default.pa, con nuestro editor de texto preferido

1
vim /etc/pulse/default.pa

Luego, debemos buscar la linea correspondiente a module-udev-detect y le agregamos el parametro tsched=0, por ejemplo en mi archivo de configuración:

52
53
54
55
 ### Automatically load driver modules depending on the hardware available
 .ifexists module-udev-detect.so
 load-module module-udev-detect tsched=0
 .else

Entendiendo NVIDIA Powermizer en Linux

Nvidia-LinuxNVIDIA 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.

KVM QEMU could not open disk image disk.0: Permission denied en OpenNebula y Debian

Opennebula_logo

Utilizando OpenNebula en Debian Wheezy sobre un shared datastore con NFS obtenía el siguiente error:

[VMM][I]: error: internal error process exited while connecting to monitor: kvm: -drive file=/var/lib/one//datastores/0/52/disk.0,if=none,id=drive-virtio-disk0,format=raw: could not open disk image /var/lib/one//datastores/0/52/disk.0: Permission denied

Seguir leyendo →

Cifrar archivos de Dropbox en Windows, Linux y Android con EncFS

tux_ecbEn las ultimas semanas varias noticias han encendido las alarmas respecto a un hecho que todo informático ya conocía: tus datos jamas estarán seguros si se almacenan o transmiten hacia servidores de EEUU. Dicho esto, mi paranoia por seguridad ha aumentado a niveles alarmantes y a veces tengo pesadillas con Obama dando una ojeada a mis archivos en Dropbox.

Aunque Dropbox asegura que aplica cifrado en los datos, nada me asegura que Obama no utilizara sus técnicas obscuras sobre mis archivos, por lo que he decidido elaborar un pequeño tutorial de como cifrar archivos localmente como paso previo a subirlos a Dropbox utilizando EncFS (algunas alternativas son BoxCryptor o SpiderOak pero el primero es propietario y el segundo tiene limitaciones de espacio). Seguir leyendo →

Configurar ntpd (o ntp-client) con wicd en Gentoo

modern_wall_clockUno de los problemas comunes al actualizar el tiempo del sistema con ntp via wi-fi, es que se produce una condición de carrera entre los demonios encargados de actualizar el tiempo (ntpd o ntp-client) y los demonios encargados de la configuración de la red (network-scripts/network-manager/wicd). Dicho de otra forma si la red no es configurada antes que ntp empiece su configuración, el resultado sera un error. Seguir leyendo →

[QuickTip] Ignorar colisiones de archivos en Portage

Gentoo LogoUna situación no muy frecuente en Gentoo es que un paquete A intente escribir durante su instalación sobre archivos que pertenecen a un paquete B, lo que se conoce como una colisión, ya sea porque proveen características similares o porque un paquete contiene al otro.
Seguir leyendo →

Semana de ofertas Java en O’Reilly

orei¿Interesados en el nuevo hype de Java?

Esta semana O’Reilly tiene de oferta varios libros para aprender Java SE (la piedra angular para entender JavaME, JavaFX, Java EE y Java Embedded) con 50% de descuento, entre los cuales esta incluido uno de mis favoritos.

Basta con usar el código WKJAVA al comprar cualquiera de los libros en este listado.

La oferta termina el día 24-07-2013 así que este podría ser un buen día para aprender Java :).