[Linux - Xorg] Un equilibrio entre 2D y 3D en Intel 915

Desde hace algún tiempo he estado buscando encontrar un equilibrio entre el performance de las funciones 2D de las aplicaciones (que es la mayoría del tiempo) y las aplicaciones 3D (más la aceleración directa del video) en una tarjeta intel; en mi caso:

lspci reporta:
00:02.0 VGA compatible controller: Intel Corporation Mobile GM965/GL960 Integrated Graphics Controller (rev 0c)
00:02.1 Display controller: Intel Corporation Mobile GM965/GL960 Integrated Graphics Controller (rev 0c)

e Identificamos mi equipo:

>lsb_release -a

No LSB modules are available.
Distributor ID:    Debian
Description:    Debian GNU/Linux testing (squeeze)
Release:    testing
Codename:    squeeze

El problema

El problema básicamente consiste en un error que el driver Intel para DRM (DRI) emite cada vez que una operación de aceleración ocurre (playback de video, ejecución de una aplicación 3D, activar el compiz); el error podemos verlo al ejecutar dmesg:

Si revisamos en el dmesg observamos:

[ 5191.646925] [drm:drm_wait_vblank] *ERROR* failed to acquire vblank counter, -22

y si ejecutamos glxgears:

glxgears -info

do_wait: drmWaitVBlank returned -1, IRQs don’t seem to be working correctly.
Try adjusting the vblank_mode configuration parameter.
GL_RENDERER   = Mesa DRI Intel(R) 965GM 4.1.3002 x86/MMX/SSE2
GL_VERSION    = 1.4 Mesa 7.0.4
GL_VENDOR     = Tungsten Graphics, Inc

Y en la velocidad:

5333 frames in 5.0 seconds = 1066.442 FPS

¿Vemos los 2 errores?; estos molestos warnings llenarán el syslog sobre todo cuando hagamos operaciones 3D (como jugar UrbanTerror).

Resolución 1: Mejorar 2D, eliminar el error; quedarse sin 3D

Una de las soluciones consiste en mejorar el rendimiento del 2D notablemente, pero quedandose *casi* sin operaciones de aceleración o 3D (salvo playback de video), esta solución es útil para estaciones de trabajo que no requieran muchas operaciones 3D pero que requieren dibujado de pantalla de manera intensiva (muchas ventanas abiertas, mucho uso de openoffice, etc).

Para ello, si vemos que:

Si vemos que:

cat /sys/module/i915/parameters/modeset

retorna: -1

Entonces creamos un archivo i915.conf en /etc/modprobe.d/ y agregamos:

options i915 modeset=1

y en el GRUB agregamos:

irqfixup splash vga=791 idebus=66 acpi=force apic enable_mtrr_cleanup

Explico las opciones:

* idebus=66 no tiene nada que ver con la solución, es la velocidad del bus IDE

* splash no tiene nada que ver con la solución, se agrega para tener splash screen de arranque (al estilo ubuntu) y vga=791 es el modo de VGA con que deseamos el splash screeen.

* acpi=force y apic obliga a cargar el modo APCI de este equipo (util para que al suspender o hibernar, todas las operaciones APCI funcionen).

* irqfixup corrige cualquier fallo en las operaciones con IRQ

* enable_mtrr_cleanup es lo que debemos agregar para que no ocurra el fallo

Un ejemplo de como quedaría nuestro GRUB (usando Grub 0.97 o sea, menu.lst):

title           Debian GNU/Linux, kernel 2.6.30-1-686
root            (hd0,0)
kernel          /vmlinuz-2.6.30-1-686 root=/dev/sda5 ro quiet irqfixup splash vga=791 idebus=66 acpi=force apic enable_mtrr_cleanup
initrd          /initrd.img-2.6.30-1-686

Reiniciar.

Como notamos; ahora el error no se presenta en el dmesg; sin embargo, ha bajado un poco el performance:

glxgears -info
4140 frames in 5.0 seconds = 825.279 FPS
3960 frames in 5.0 seconds = 790.150 FPS

Aun asi; el performance del 2D (generado y repintado de ventanas, creación, etc) y reproducción de video (flash “youtube”, mplayer o VLC) ocurre sin problemas ni “tiling”.
* El dibujado de ventanas, sobre todo el listado de directorios de nautilus, es excelente y rápido
* Efectos 3D como la extensión “CoolIris” de Firefox tienen un pésimo performance
* Aplicaciones como UrbanTerror no levantan (ausencia de rendering 3D)

Resolución 2: 3D mejorado, 2D con mejor rendimiento, sigue apareciendo el warning

El problema obviamente está en el DRM (Direct Rendering Manager); pero no podemos vivir sin él; asi que tendremos que “calarnos” este error hasta que sea corregido en alguna versión posterior de Xorg; sin embargo, podemos equilibrar el performance de las operaciones 2D y 3D de nuestra Intel de la siguiente manera:

archivo /etc/X11/xorg.conf:

Forzamos la carga de módulos importantes como el GLX y el DRI

Section “Module”
Load    “i2c”
Load    “bitmap”
Load    “ddc”
Load    “dri”
Load    “extmod”
Load    “freetype”
Load    “glx”
Load    “int10″
Load    “vbe”
EndSection

Personalizamos las opciones del DEVICE intel acá:

Section “Device”
Identifier      “Configured Video Device”
Driver          “intel”
Option          “AllowGLXWithComposite” “true”
Option          “XAANoOffscreenPixmaps” “true”
Option          “AddARGBGLXVisuals”     “True”
Option          “DRI”   “True”
Option          “AccelMethod”   “EXA”
Option          “EXAOptimizeMigration”          “true”
Option          “MigrationHeuristic”            “greedy”
Option          “Tiling”                        “true”
Option          “NoDDC”
Option          “BackingStore”  “True”
Option          “MTRR” “on”
Option          “UseFBDev” “false”
Option          “LinearAlloc” “6144″
Option          “MonitorLayout” “CRT,LFP”
Option          “DevicePresence” “true”
Option          “RenderAccel” “true”
Option          “RandRRotation” “on”
EndSection

Note la presencia de opciones como DRI=true, Método de Aceleración EXA (Intel posee los métodos EXA, UXA y XAA; pero EXA es el único que mejora el performance del 3D notablemente); BackinStore = True más agregar en el archivo /etc/enviroment:

INTEL_BATCH=”1″

Mejora hasta en un 30% (confirmado) el rendimiento en el dibujado de ventanas.

Section “Extensions”
Option “Composite” “Enable”
Option “RENDER” “Enable”
Option “DAMAGE” “Enable”
EndSection
Section “ServerFlags”
Option “RandR” “on”
Option  “RENDER” “on”
Option  “AIGLX” “true”
EndSection

Declaramos además las flags de Xorg y las extensiones que deseamos cargar (Composite permite el decorado de ventanas y corrige el fallo de “no bordes” al cargar Compiz-Fusion).

RENDER=on y RenderAccel=true permite que ciertos efectos 2D sean ejecutados por hardware, uno de ellos (y mi favorito) es la transparencia por hardware de las ventanas y barras de gnome (me imagino que KDE4 Plasma funcionará bien; pero no lo he instalado aún).

Entonces creamos un archivo i915.conf en /etc/modprobe.d/ y agregamos:

options i915 modeset=0

Ya que si dejamos el modeset=1 nuestras X no cargarán.

NOTA: existe algún manual acerca de los modeset que acepta el módulo i915?

Entonces tomen nota de lo siguiente:

* Con DRI activado (Load -> “dri” en Modules y Option “DRI” “True” en el xorg.conf) en contraste; 2D tiene un performance menor que con DRI desactivado.
Notas:
* Con “modeset=1″ las X no cargan (tomar en cuenta eso)
* modeset = 0 para tener DRI activo (y sin el error notificado antes)
* en dmesg podemos ver como se ha inicializado correctamente el DRM (Direct Rendering Manager):

[   46.444251] ACPI: Video Device [VID] (multi-head: yes  rom: no  post: no)
[   46.444331] [drm] Initialized i915 1.6.0 20080730 for 0000:00:02.0 on minor 0

Pero, el performance mejora para el 3D (aproximadamente unos 100 FPS más que dejando a xorg gestionar las opciones del driver):

5514 frames in 5.0 seconds = 1102.650 FPS
5538 frames in 5.0 seconds = 1107.459 FPS

Sin embargo, el error sigue apareciendo pero esta vez solamente cuando ejecutamos una operación 3D o un playback de video:

[  320.215141] [drm:drm_wait_vblank] *ERROR* failed to acquire vblank counter, -22

* Sin embargo, el performance de CoolIris es excelente!


* UrbanTerror (un juego en 3D de shooter hijo del de motor Quake 3) tiene un performance excelente y muy suave, con promedio entre los 92 y los 110 fps (para ser una tarjeta intel es más que suficiente y casi tan igual que una Radeon ATI).
* Compiz tambien funciona correctamente y sin errores de performance en sus efectos (aunque con cierta pérdida de velocidad en las actividades 2D)
* El Performance de video cuando se ejecutan efectos como el cubo de compiz es pobre

¿Solución Intermedia?

Hay quienes en varios foros (ubuntu, freedesktop, debian, etc) aseguran que cambiando el modo de aceleración de DRI a UXA (AccelMethod) perdemos calidad y performance pero todas las cosas funcionan y los errores no se presentan; esa opción *a mí* no me ha servido y por ende no la he documentado; sigo sin embargo en búsqueda de una opción intermedia que solvente la baja de performance (aunque no es tan notable) del 2D y los errores de ejecutar operaciones 3D en las tarjetas Intel 9xx.

En Conclusión todo *podría* solucionarse usando:

* Una combinación correcta de AccelMethod en xorg y módulos y extensiones requeridas
* Un correcto “modeset” para el módulo intel 915
* Algun parche que corriga el error en el módulo DRM (Direct Rendering Manager) de Intel
* Alguna opción de GRUB o de módulo que se le pueda pasar adicionalmente a i915 o a DRM o al Xorg.

Mientras; seguiré buscando la solución por mi lado.

About these ads

4 Respuestas a “[Linux - Xorg] Un equilibrio entre 2D y 3D en Intel 915

  1. En general el “bajo” (aunque no tan bajo) rendimiento, y los errores de kernel (más bien advertencias o warnings del módulo) es algo que pasa “imperceptible” al ojo “humano”; es como encontrar un error digamos, en el sistema de composite y transparencias del sistema de video BSD (como un Apple MacOS X), un “usuario final” verá igualmente sus transparencias y el kernel arrojará “warnings” sin siquiera él notarlo; pero uno que siempre está mirando “más abajo” pues se da cuenta del warning y trata de experimentar y resolverlo.
    Si alguien (que no sea nvidia) ha hecho un panel de administración “gráfica” de su módulo y sus opciones, lo desconozco, hasta la presencia del error siquiera sabía de los modos UXA, EXA y XAA, hay poca documentación al respecto.

  2. yo lo tengo con modeset = 1 y anda, lo q si tube q generar denuevo la imagen de inicio,asi q tengo kernel mode seting activado, seria buenos q averigues para complementar, por lo demas esta bien bueno este tutorial

    saludos

  3. Maestro, yo tengo una IBM lenovo thinkpad T60 con intel i945 y luego del ultimo update, desde el glxgears al urban terror o el blender me crasheaban la sesion de gnome (volvia al login), hace un mes que busco.
    Tengo Ubuntu 10.04 con todos los updates a hace 5 dias, y hoy probe la OPCION 2 que describes, y funciona muy bien! aun no pude usarlo mucho, pero todo levanta sin problemas visibles, no se que magia usas, pero te agradesco infinitamente, y dejo asentado que para la i945 esto mejora los crashes (con el tiempo sabre si los elimina)

    Tengo un pequeño altar para honrar a Phenobarbital en el fondo de casa.

    Saludos (no puedo escribir mas, me salen las lagrimas…)

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s