Linux: MTRR allocation failed – mejora de performance del Video Intel

MTRR Significa”Memory Type Range Registers” y es la forma como la memoria RAM es segmentada para ser accedida por distintos dispositivos de hardware (sistema, dispositivos, bus AGP y video-RAM).

El error

En algunos sistemas Linux se presenta un error recurrente (no solamente en Intel, también en ATI) :

dmesg | grep drm
[    7.112889] [drm] Initialized drm 1.1.0 20060810
[    7.938443] [drm] MTRR allocation failed.  Graphics performance may suffer.
[    7.938701] [drm] set up 7M of stolen space
[    8.063932] [drm] initialized overlay support
[    8.705706] fb0: inteldrmfb frame buffer device
[    8.713896] [drm] Initialized i915 1.6.0 20080730 for 0000:00:02.0 on minor 0

Fijense que DRM (Direct Rendering Manager) indica que no pudo registrar un segmento de RAM para la tarjeta de video, advirtiendonos que esto incurría en un serio fallo de performance.

Y muy serio, Sin ninguna corrección, glxgears reporta entre 180 y 200 fps.

Ya yo había hablado de este bug antes y había comentado la forma de corregir el fallo acá.

Solo quería confirmar que en la última versión de Squeeze, el último kernel y la última versión de video-intel el error sigue sucediendo.

Los síntomas

Los síntomas son entre otros (no necesariamente ocurren todos, depende del equipo):

  • glxGears reporta entre 180 y 220 FPS (una velocidad muy baja de frames por segundo)
  • Corrupción y/o lentitud en algunos efectos del compiz
  • Imposibilidad de acceder a video pantalla completa (o videos flash-youtube pantalla completa) de manera “suave”.

Cuando revisamos el estado de los rangos de asignación de la memoria RAM, vemos los siguiente:

cat /proc/mtrr 

reg00: base=0x0c0000000 ( 3072MB), size= 1024MB, count=1: uncachable
reg01: base=0x13c000000 ( 5056MB), size=   64MB, count=1: uncachable
reg02: base=0x000000000 (    0MB), size= 4096MB, count=1: write-back
reg03: base=0x100000000 ( 4096MB), size= 1024MB, count=1: write-back
reg04: base=0x0bf700000 ( 3063MB), size=    1MB, count=1: uncachable
reg05: base=0x0bf800000 ( 3064MB), size=    8MB, count=1: uncachable

Vemos que las regiones 04 y 05 (bus AGP y video) están “uncachable”

Fijense que si desactivamos esas regiones y re-activamos (en modo write-back):

echo 'disable=5' >| /proc/mtrr
echo 'disable=4' >| /proc/mtrr
echo 'disable=0' >| /proc/mtrr
echo 'disable=1' >| /proc/mtrr

Ejecutamos:

echo "base=0x0 size=0x80000000 type=write-back" >| /proc/mtrr
echo "base=0x80000000 size=0x10000000 type=write-combining" >| /proc/mtrr

Consultamos:

cat /proc/mtrr

reg00: base=0x400000000 (16384MB), size=16384MB, count=2: write-back
reg01: base=0x200000000 ( 8192MB), size= 8192MB, count=1: write-back
reg02: base=0x000000000 (    0MB), size= 4096MB, count=4: write-back
reg03: base=0x100000000 ( 4096MB), size= 4096MB, count=2: write-back

glxGears mejora un 10%:

glxgears
1494 frames in 5.0 seconds = 298.796 FPS
1582 frames in 5.0 seconds = 316.213 FPS
1616 frames in 5.0 seconds = 323.090 FPS

Pero no vamos a estar ejecutando eso cada vez … así que ejecutaremos la corrección a lo “Debian Squeeze”.

La Solución

Primero, optimizaremos al máximo nuestra tarjeta, para ello crearemos un archivo en:

/usr/share/X11/xorg.conf.d/10-screen.conf

Nota: si es ubuntu-trisquel, la ruta es en /usr/lib/X11/xorg.conf.d/

Al cual agregaremos opciones de “máximo performance” para la tarjeta de video Intel:

Section "Device"
 Identifier      "Configured Video Device"
 Driver          "intel"
 Option          "AllowGLXWithComposite" "true"
 Option          "XAANoOffscreenPixmaps" "true"
 Option          "AddARGBGLXVisuals"     "True"
 Option          "VideoRam"      "262144"
 Option          "AccelMethod"    "UXA"
 Option          "EXAOptimizeMigration"          "true"
 Option          "MigrationHeuristic"            "smart"
 Option          "Tiling"                        "true"
 Option          "NoDDC"
 Option          "BackingStore"  "True"
 Option          "AIGLX"  "true"
 Option          "MTRR" "on"
 Option          "LinearAlloc" "6144"
 Option          "MonitorLayout" "CRT,LFP"
 Option          "DevicePresence" "true"
 Option          "RenderAccel" "true"
 Option          "RandRRotation" "on"
 Option          "XvMC" "true"
 Option          "CacheLines" "1980"
EndSection

Son de vital importancia:

  • VideoRAM: cantidad de RAM que asignaremos al video
  • MTRR: “on” indicarle a la tarjeta de video que hay un rango MTRR para que pueda hacer caché de video
  • AccelMethod: UXA, modo de aceleración 2D/3D nativo de la tarjeta Intel
  • MigrationHeuristic: Descubrí que con “smart” el equilibrio entre 3D y 2D es perfecto, aunque se dedica más a 3D, si queremos favorecer más al 2D, usaremos “always”, si queremos mejorar algunas cosas 3D para compiz usaremos “greedy”.
  • xvMC: Activa la extensión “Video Motion Compensation” de Intel, con lo cual los programas de video (VLC, mplayer, Xine, etc) usarán la GPU Intel (y no software) para procesar el video, mejorando la calidad y el performance.

Posteriormente, editaremos el grub, en la linea de comandos del grub agregaremos:

editamos /etc/default/grub

GRUB_CMDLINE_LINUX="acpi=force vga=0x31B  mtrr_spare_reg_nr=1 enable_mtrr_cleanup"

Las opciones son:

  • enable_mtrr_cleanup: permite al Kernel *eliminar* las regiones y volverlas a crear si ocurre un fallo
  • mtrr_spare_reg_nr: genera una región de *repuesto* adicional en este caso, una sola (región 6) que tomará la tarjeta de video.

Volvemos a generar el menu del grub (grub.cfg)

update-grub2

Y reiniciamos.

Al terminar de reiniciar, podemos ver que DRM inicia correctamente y sin fallos:

dmesg | grep drm
[    5.439814] [drm] Initialized drm 1.1.0 20060810
[    5.729688] [drm] set up 7M of stolen space
[    5.854882] [drm] initialized overlay support
[    6.458946] fb0: inteldrmfb frame buffer device
[    6.462396] [drm] Initialized i915 1.6.0 20080730 for 0000:00:02.0 on minor 0

Que la tarjeta de video logra reservar un espacio “write-combining” en la región 6:

cat /proc/mtrr
reg00: base=0x000000000 (    0MB), size= 2048MB, count=1: write-back
reg01: base=0x080000000 ( 2048MB), size= 1024MB, count=1: write-back
reg02: base=0x0bf700000 ( 3063MB), size=    1MB, count=1: uncachable
reg03: base=0x0bf800000 ( 3064MB), size=    8MB, count=1: uncachable
reg04: base=0x100000000 ( 4096MB), size= 1024MB, count=1: write-back
reg05: base=0x13c000000 ( 5056MB), size=   64MB, count=1: uncachable
reg06: base=0x0e0000000 ( 3584MB), size=  256MB, count=1: write-combining

Y lo que nos interesa para nuestro “performance”, obtenemos unos 450 FPS de promedio (eso es casi 50% de mejora):

glxgears -info
GL_RENDERER   = Software Rasterizer
GL_VERSION    = 2.1 Mesa 7.7.1
GL_VENDOR     = Mesa Project
2277 frames in 5.0 seconds = 455.288 FPS
2314 frames in 5.0 seconds = 462.779 FPS
2251 frames in 5.0 seconds = 450.191 FPS

Conclusiones

Mucha gente monta GNU/Linux Debian o Ubuntu de manera genérica y como *cae* al disco duro, comienzan a usarlo y lo sienten “pesado” sin olvidarse de la necesidad imperiosa de “enchular” la computadora para mejorar el rendimiento y así gozar de una experiencia más placentera al usar nuestro GNU/Linux.

¿Pruebas?

Me dediqué a sacarle “provecho” a la aceleración 3D, con 500 FPS no son los 2000 FPS que logra mi Nvidia 8400 SLI del Desktop pero esta es una portatil!.

Para muestra, podemos ver una pantallazo interesante:

Aca podemos ver a Billard-GL (un juego de Billar 3D que usa SDL y openGL) a pantalla completa.

Pero para mejores pruebas, tenemos esto:

Fijense que tengo cargados tanto Compiz (icono superior, fusion-icon), como Billard-GL y además, a ExtremeTuxRacer (reportando a 40FPS) y el Firefox cargado (para consumir RAM obviamente).

Para probar la aceleración openGL + la extensión xvMC cargames un video y corremos el efecto “cubo” de compiz, el video no debería “ralentizarse” nunca.

Espero que logren disfrutar sus juegos 3D y su compiz a full efectos!.

Acerca de phenobarbital

http://about.me/phenobarbital

Publicado el 23 agosto 2010 en Cultura Libre, Linux, PlanetaLinux, Software Libre y etiquetado en , , , , , , . Guarda el enlace permanente. 18 comentarios.

  1. muy buen articulo modifique mi xorg.conf para debian lenny amd 64 y consegui unos 1011.305 fps que me parecen bastante bien gracias por el dato

  2. Perfecto, estoy por implementarlo junto con el parche de las ~200 lineas. Sin embargo, mi tarjeta de video es Nvidia, y veo que muchas de las opciones son para Intel. Sabes cuales se deben usar en éste tipo de tarjetas (Especificamente una VGA compatible controller: nVidia Corporation G84 [GeForce 8600M GT] (rev a1))

    Gracias!😀

    • La mayoría son de intel, las de nvidia tendré que hacer un artículo!, jajaja (mi desktop es una Nvidia Gforce idéntica a la tuya, una G84 GT)

  3. Hola, buenos dias. Creo q ya estoy fastidiosa, pero ayer instale Canaima Vc5 y esta corriendo a la perfeccion en una toshiba satellite A215, fue tan suave y sin errores la instalacion y reconocio todo el hardware a dudosa diferencia de squeeze que me dejo sin sonido, que decidi meterle mano por primera vez viendo las mejoras que le has hecho a las canaimitas me propuse tener esas mejoras en mi canaimota, segui las instrucciones de debiansick para compilar un kernel y en el paso de la configuracion del mismo me salte a su receta de como activar el cgroup en el kernel 2.6.38, y aunq la mejora es brutal he leido en tus articulos que a tus masquinas les haces una serie de mejoras distintas. Como soy dise;adora grafica y planeo incursionar en blender le puse una velocidad en lo de la latencia de 1000 mghz, aun no he probado como responde el renderizado en cinelerra porq quiero probarlo cuando tenga todo a punto. Mi pregunta es, este archivo de configuracion se puede crear para otras tarjetas de video? a mi no me da los errores que tu dices pero sospecho que podria afinarse mejor el video integrado, estoy en lo correcto? Esto trae es una ATI Radeon Mobility pero siento que me da valores muy bajos
    828 frames in 5.0 seconds = 165.357 FPS
    816 frames in 5.0 seconds = 163.083 FPS
    823 frames in 5.0 seconds = 164.524 FPS
    817 frames in 5.0 seconds = 163.388 FPS
    834 frames in 5.0 seconds = 166.792 FPS
    Donde puedo conseguir los valores correspondientes del archivo 10-screen.conf para mi tarjeta de video?
    Donde puedo conseguir la documentacion de tus ponencias de pimp my canaima? Una pregunta ya q tu estas en el medio, canaima ya trae la mejora de lennart pottering o debo realizarla? GRacias por leerme y disculpa lo largo de mi comentario. Q disfrutes tu semana.

    • El error SOLO ocurre en Intel (de eso se trata el artículo) la configuración de video para ATI Radeon es completamente distinta y no deberías fijarte en los archivos que yo pongo en mi blog …

      No tengo una RADEON para probar y disponer de un Xorg válido para tu equipo …

  4. Creo que hice algo mal, ahorita que reinicie con el kernel viejo me doy cuenta de esto😦

    2320 frames in 5.0 seconds = 463.878 FPS
    2361 frames in 5.0 seconds = 472.074 FPS
    2378 frames in 5.0 seconds = 475.407 FPS
    2379 frames in 5.0 seconds = 475.660 FPS

  5. El problema se mantiene en squeeze (stable) , lo que no entiendo es el uso del parametro vesafb en el kernel . En mi caso no me reconoce la tarjeta al poner info en /etc/X11/xorg.conf u /usr/share/X11/xorg.conf.d/10-screen.conf

  6. Hola que tal ,
    tengo una
    VGA compatible controller: Intel Corporation 2nd Generation Core Processor Family Integrated Graphics Controller (rev 09) , tuve el problema de la asignacion del DRM , le pase los parametros al kernel , y una modificacion al xorg.conf , pero los FPS se redujeron de 70 a 59 , en promedio aproximadamente .

    dmesg | grep drm
    [ 7.697608] [drm] Initialized drm 1.1.0 20060810
    [ 7.993516] fb: conflicting fb hw usage inteldrmfb vs VESA VGA – removing generic driver
    [ 8.051637] fb0: inteldrmfb frame buffer device
    [ 8.051652] drm: registered panic notifier
    [ 8.051803] [drm] Initialized i915 1.6.0 20080730 for 0000:00:02.0 on minor 0

    alguna idea? , uso slackware 13.37 64bits , no creo que ese sea el problema

    • Estás intentando usar fbdev?, necesitas DRI2 y una versión nueva de Xorg … verifica comparar entre los modos XAA, EXA y UXA para comparar el uso …

      • slackware usa fbdev . Para mostrar los pinguinitos segun el numero de nucleos al iniciar ,

        XAA ,EXA y UXA rinden casi mismo pero este no pasa de 60 FPS, puedo activar la aceleracion 3D , pero es muy inestable , busque informacion de mi procesador y parece que es de los hibridos (CPU+GPU) , en la red lei que el soporte estaba pesimo , en fin se me cae el servidor grafico a cada rato , y luego no me deja levantarlo nuevamente , tengo que reiniciar la pc (ya asta windows parece por tanta reiniciada) . Mi nucleo es 2.6.37.6 , no quiero usar un nucleo mas moderno , asi que decidi que pondre una tarjeta de video nvida por ahi , espero que esto lo solucione gracias de antemano.

  7. Hola, fijate que segui todos los pasos que mencionas, tanto en el articulo para corregir el fallo como este, y no se soluciono el problema.

    • phenobarbital

      El detalle es que este fallo era para un kernel 2.6 (ya va a tener 3 años el artículo), ¿qué versión de Linux tienes?, habría que ver por qué se presenta el error …
      saludos!

      • Lo que mencionas aquí en cuanto a la asignación de memoria, lo mismo pasa en mi equipo, anteriormente tenia Ubuntu 12.04, pero ahora que salio Debian 7 me intereso hacer la migración y lo instale, y los problemas que tengo es que se queda pasmado el entorno gráfico, solo el puntero del mouse se mueve, o en veces se bloque por completo todo y no me deja ni cambiarme a otra terminal para reiniciar el equipo

        Saludos.

        P.D. Con Ubuntu este problema no me ha pasado.

  1. Pingback: Linux Video: mejorando la aceleración de video | Phenobarbital con Soda!

  2. Pingback: Articulo Indexado en la Blogosfera de Sysmaya

  3. Pingback: [Linux] El parche milagroso de Mike Galbraith en acción | Phenobarbital con Soda!

Responder

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

A %d blogueros les gusta esto: