24 de febrero de 2010

Lo que trae Linux 2.6.33

¿Es un meme? ¿Es un manifiesto contra la SGAE? ¿Es un nuevo producto de Apple? ¡No! ¡Es una lista de las nuevas cosas que incorpora la version 2.6.33 del kernel Linux! Que acaba de ser anunciada. Resumen: Nouveau (driver para tarjetas gráficas Nvidia) y otras mejoras del subsistema gráfico, soporte de Nintendo Wii y Gamecube, DRDB (dispositivo de bloque virtual distribuido en red), mejoras en perf, llamada al sistema rcvmmsg(), una extensión de seguridad a TCP apodada "Cookie Transactions", compcache (compresión de parte del cache mediante swap), drivers para hardware virtual VMWare y otras mejoras. La lista completa en inglés aquí.

Y, para que vean que me modernizo, esto post ha sido escrito con Blogilo, la aplicación de KDE 4.4 (una auténtica maravilla de versión, por cierto) para escribir blogs.

· Nouveau: Que es un driver para tarjetas gráficas Nvidia, las únicas que quedaban sin drivers libres en Linux. Nvidia no ha contribuido a este driver, sino que ha sido desarrollado mediante ingeniería inversa (y, según se rumorea, documentos supuestamente confidenciales encontrados en oscuros rincons de servidores rusos). Tiene 26.000 líneas de código y ha sido desarrollado desde el 2006. Las tarjetas gráficas son uno de los componentes de hardware más complejos que se pueden encontrar hoy en día, y es muy dificil escribir drivers para ellas incluso teniendo toda la documentación necesaria, con lo que este driver representa, en verdad, un esfuerzo hercúleo que debe ser aplaudido.

¿Por qué usar Nouveau en vez de los drivers oficiales de Nvidia? La nueva y potente tarjeta que has comprado hoy dejará de ser soportada en unos pocos años. Esto no ocurre con los drivers libres. Nouveau (y el driver libre de ATI) soporta más dispositivos que los drivers oficiales. Nouveau no solo soporta chips modernos, tambien soporta otros como Riva TNT y Geforce 2/4MX/4Ti/FX. Las características soportadas, sin embargo, no son comparables, pero Nouveau ya tiene un buen montón de soporte de cosas básicas: modesetting (KMS), suspensión/resumen, Dual Head, y operaciones 2D (EXA, Xrender, vídeo Xv). El 3D está en desarrollo pero está progresando poco a poco. Es de notar que el problema de los famosos "ctxprogs" ha sido resulta, ya que pueden ser autogenerados.

· DRDB: DRDB ("Distributed Replicated Block Device") es un dispositivo de bloques replicado en varios clusters desarrollado por [http://www.linbit.com/ LINBIT]. Su propósito es servir de base para crear clusters de alta disponibilidad (HA). DRDB puede ser entendido como un RAID-1 sobre la red. Para la gestión del cluster se necesita un gestor de cluster (por ejemplo, heartbeat). Ver http://www.drbd.org/, http://www.linux-ha.org

· Mejoras de perf: perf probe, perf kmem, perf bench, perf diff, scrips perl para perf y filtros: Esta versión añade muchas mejoras a la infraestructura de traceado y a la herramienta perf (tools/perf)

perf probe: perf probe es un subcomando que permite crear probes (sondas) de kprobes. Kprobes es un systema que permite insertar puntos de depuración en cualquier parte del kernel para recolectar información, dinámicamente y sin afectar al funcionamiento del sistema. Es el sistema utilizado por Systemtap. Perf probe permite definir sondas utilizando expresiones en C (números de línea, nombres de función, variables). Por ejemplo

Paso 1: Añadir una nueva sonda en una línea de código C: "perf probe -P 'p:misonda @fs/read_write.c:285 file buf count'" (crea una nueva sonda, llamado "misonda", que inspeccionará las variables file, buf y count ). De manera alternativa, puedes tambien usar comandos más simples, como "perf probe sys_open", que añade una sonda al símbolo sys_open symbol (la llamada al sistema open())

Paso 2: Añade una sonda kretprobe en el retorno de una función "perf probe -P 'r:myretprobe vfs_read $rv'"

Paso 3: Si ejecutas "perf list", verás una sección nombrada "kprobes" que lista las sondas que acabas de crear.

Paso 4: Inicia una captura de eventos: "perf record -f -e kprobes:myprobe:record -F 1 -a ls" y tracéalo con "perf trace"

perf bench: perf bench es una pequeña suite de microbenchmarks. En esta versión, solamente hay tres benchmarks: perf bench sched messaging (para medir el gestor de procesos y el IPC), perf bench sched pipe (mide el rendimiento de pipe()) y perf bench mem memcpy (mide el ancho de banda de la memoria). El comando perf bench all ejecutará todos los benchmarks.

perf kmem: Esta herramienta es en gran medida una versión de perf de la herramienta kmemtrace-user. Muestra información varia sobre SLAB.

perf diff: perf diff muestra diferencias de rendimiento entre varias capturas.

scripts perl de perf: Se trata de un motor de scripting para programar scripts de perf trace. Ver perf trace -g/--gen-script y perf trace -s/--script.

filtros perf: Esta característica añade soporte de filtros a la infraestructura de tracepoints, para ser utilizado con la opción "--filter expresión". Por ejemplo, para tracear solo las interrupciones del temporizador: "perf record -e irq:irq_handler_entry --filter='irq==0' -R -f -a sleep 10". O para capturar solamente la IRA 19 cuando se alcanza 'achi': "perf record -e irq:irq_handler_entry --filter='irq==19 && name==ahci' -R -f -a sleep 10"

· recvmmsg(): Se trata de una llamada al sistema que permite llamar de una sola vez varias llamadas de recvmsg(). Para aplicaciones de mucho ancho de banda y paquetes pequeños, el rendimiento y la latencia mejoran enormemente.

· TCP Cookie Transactions: Esta extensión a TCP, llamada [http://en.wikipedia.org/wiki/TCP_Cookie_Transactions Cookie Transactions] (TCPCT), tiene como intención proteger contra ataques DoS como floods SYN y terminación maliciosa de conexiones. A diferencia de las antiguas protecciones SYN, TCPTC no causa conflictos con otras extensiones TCP, pero requiere soporte de TCPCT en las pilas TCP del cliente y el servidor. La razón más inmediata para el uso de TCPCT es el desarrollo del protocolo DNSSEC.

· Controlador del E/S de dispositivos de bloques: Los grupos de control son contenedores virtuales que son creados como directorios dentro de un sistema de archivos especial (generalmente, con la ayuda de herramientas especiales),y se pueden añadir conjuntos de procesos arbitrarios a ese grupo, que puede ser configurado para que tenga un conjunto determinado de propiedades de gestor de CPUs o límites de memoria.

Esta versión añade el controlador del E/S de los dispositivos de bloque. A día de hoy, el gestor de IO CFQ lo usa para reconocer grupos de tareas y controlar el ancho de banda de disco concedido a esos grupos (algo del estilo de las prioridades de CFQ, pero implementado de otra forma).

· Compcache: compresión de swap en memoria: Compcache es un proyecto (en desarrollo, solamente disponible en Staging) que crea dispositivos de bloques en la memoria RAM (/dev/ramzswapX) que son usados como discos swap. Las páginas de swap que se escriben a este dispositivo son comprimidas. Parte de tu RAM se usa como siempre, la otra parte (el tamaño es configurable) se usa para guardar páginas comprimidas, esto incrementa la cantidad de RAM que puedes usar en la práctica.

Esta característica puede ser útil en muchos casos: Netbooks, smartphones y otros dispositivos embebidos, instaladores de distribuciones, clientes tontos sin disco, virtualización, o viejas máquinas sin suficiente RAM para ejecutar software moderno. Las mediciones han demostrado que esta es característica efectiva.

· Mejoras gráficas: Además de la inclusión de Nouveau, está la ronda de mejoras habituales al subsistema gráfico que se han vuelto tan comunes tras la inclusión de GEM y KMS

"Page flipping": Esta característica es necesaria para implementar un escritorio "tearing free" (defecto gráfico por el cual dos frames pueden mostrarse mezclados al mismo tiempo). Se ha añadido una ioctl para el soporte en la API KMS.

Soporte de HDMI para la Radeon R600.

Soporte de overlay de vídeo en el driver i915.

· Soporte de Wii y Gamecube: El proyecto gc-linux.sourceforge.net ha estado trabajando en el soporte de Linux de las consolas de Nintendo, basadas en PPC: Nintendo Wii y Nintendo Gamecube.

· Drivers VMWare: VMware ha contribuido con dos drivers para la GPU virtual y la tarjeta de red virtual vmxnet3 de sus hypervisors. Gracias a udev, esto significa que los invitados Linux ejecutándose en un huésped VMware tendrá un rendimiento gráfico y de red óptimo.

· DesBKLificación de reiserfs: Una de las principales desventajas de reiserfs (y una de las razones por las que la mayoría de las distros usa Ext en su lugar) es que su código gestiona la concurrencia de procesos utilizando un gran bloqueo, el llamado BKL (Big Kernel Lock). Esto sifgnifica que su escalabilidad SPM es muy pobre. Esta versión no soluciona ese problema, pero reemplaza el BKL con un bloqueo específico de reiserfs. En esta versión, ya no hay más trazas del BKL en su código. Ha sido convertido en un mutex recursivo. Esto puede sonar "sucio", pero usar un bloqueo tradicional en reiserfs requeriría una reescritura más profunda ya que la arquitectura existente depende íntimamente en las reglas del BKL. Debido a las semánticas sutiles de los cambios relacionados con bloqueos, algunas cargas podrían tener algunas regresiones y otras pequeñas ganancias.

· Android, fuera del kernel: Los drivers de Android han sido eliminados del directorio Staging. Desgraciadamente, desde el día de su inclusión en ese lugar Google no ha mostrado absolutamente ningún interés en mejorarles para tener unas mínimas condiciones de calidad y poder ser incluidos en la rama principal. Ante las peticiones de mejora, Google ha contestado que si no lo quieren aceptar tal y como está, que mejor cada uno por su lado. Por supuesto, eso es totalmente legal, pero es triste que un proyecto que ha hecho tanto por llevar el software libre a las masas se haya convertido en un ejemplo de libro de como no interactuar con una comunidad de software libre.

11 comentarios:

  1. Hola Diego:

    En cuanto termine un montón de cosas que hacer por aquí, me pongo a ello, a compilar el nuevo kernel 2.6.33, ;-)

    Entretanto, veo que trae muchas novedades que me gustarían hacerlas pero ya, por ahora prefiero hacer otras cosas, lecturas, y lecturas.

    En cuanto al Android, bueno, he de decir, que ya al Google Nexus One le puedes meter ya Debian... :-)

    Slds...y nos veremos...

    ResponderEliminar
  2. Lo de la Nouveau, ba a ser una gran noticia para muchos , la pena es lo de android

    ResponderEliminar
  3. Lo de Compcache es algo que realmente esperaba para las virtuales. Fantástico.

    ResponderEliminar
  4. "Page flipping": Esta característica es necesaria para implementar un escritorio "tearing free" (defecto gráfico por el cual dos frames pueden mostrarse mezclados al mismo tiempo). Se ha añadido una ioctl para el soporte en la API KMS"

    Sólo comentar que esto hará mas fáci probrar Wayland [1], un nuevo servidor gráfico en desarrollo

    [1] http://en.wikipedia.org/wiki/Wayland_(display_server)

    ResponderEliminar
  5. Como siempre gracias. Es agradable gracias a tu labor divulgativa para que podamos entender facilmente (y en español ;) ) los cambios en el kernel, animo.

    Pero una pregunta sobre el tema "android", no se como esta organizado el desarrollo del kernel, ¿Existe alguna zona/directorio de el para drivers problematicos, en plan "lo que esta aquí puede fallar muy mucho"?

    ResponderEliminar
  6. Don't be evil...
    I'm God, I can sed you to the Hell.

    ResponderEliminar
  7. Anónimo7:10 p. m.

    Diego, he leído varias veces en tu bitácora afirmar que las graficas ati tienen driver libre. Soy usuario de Trisquel, pero no tengo tarjeta ATI, y en dicha distribución no es posible incluir el driver "libre" de ATI.

    Rubén, director de la distribución Trisquel, ha tenido contacto con ATI y hoy en día no tenemos driver libre para ATI; ni en un futuro tampoco. ¿Qué opinas? Gracias.

    ResponderEliminar
  8. MD: El directorio drivers/staging es para esos drivers. Ahí es donde estaban los drivers de Android, pero como no los han seguido mejorando, han tenido que sacarlos

    solognu: está el driver radeonhd para tarjetas más nuevas (r5xx/r6xx/r7xx/r8xx) y el ATI de toda la vida para las más viejas. El radeonhd está en desarrollo y el ati de toda la vida está siendo modificado drásticamente. Entre uno y otro, a largo plazo debería cubrir todos los dispositivos. Personalmente, procuraría usar Ubuntu directamente en vez de clones.

    ResponderEliminar
  9. Gracias, te iba a preguntar cuanto tiempo sin actividad sin actividad los eliminan de allí, pero no importa, eso ya es profundizar mucho y es solo una curiosidad.

    ResponderEliminar
  10. Anónimo4:32 p. m.

    Buenas Diego.

    El tema de los drivers de Radeon es raro. Para empezar, creo que hay dos ramas y más o menos trabajan por su lado. Según tengo entendido, te has equivocado en lo de que uno es para las viejas ya que ambas intentan soportar las modernas.

    Lo que pasa es que ambas ramas son casi para tirarlas a la basura ahora con Gallium3D (también conocido como "el milagro", adiós a las guarradas de MESA y hace más fácil programar drivers gráficos), por lo que supongo que dejarán las peleas estúpidas de diseño y seguirán todos en la nueva rama.

    No lo tengo muy claro, es un culebrón. Puedes mirar por Phoronix y demás a ver si te enteras mejor y lo explicas. Sería de muy agradecer que explicaras el tema de los drivers para Radeon, las dos ramas del driver Xorg y MESA (el driver para el kernel es el mismo).

    Sinceramente, creo que el mundo de los drivers libres para tarjetas gráficas va a apestar y mucho hasta que se adopte Gallium3D en "mainstream".

    KMS la verdad es que también es muy interesante, hay que limpiar la infraestructura gráfica de Linux y otros sistemas libres (espero que sistemas libres no *NIX los adopten, Haiku y otros tantos).

    Creo recordarte de algo de AmigaOS o MorphOS, quizás me haya equivocado y otro use un pseudónimo similar al tuyo.

    Saludos.

    ResponderEliminar
  11. Con respecto a Android, hay otros problemas de fondo.

    El staging como bien dices es un directorio donde se colocan los drivers que no cumplen con un minimo de calidad requerido, pero de esta manera se le da la pocibilidad de estar en el kernel oficial, cuando antes no eran aceptados directamente o controladores que siempre estuvieron en el kernel pero causaban muchos problemas y esta es una forma de separarlos.

    Bueno.. Desgraciadamente android no solo es un conjunto de controladores (Donde tiene gracia el staging) y aplicaciones lindas que funcionan sobre el kernel linux, sino que para que funcione se requieren cambios (algunos importantes) sobre este, como una nueva arquitectura de framebuffer desarrollada por ellos. Todo esto de una dudosa calidad, al punto de que uno de los desarrolladores del kernel llega a hablar de un "Modelo de seguridad bizarro" cuando comenta sobre este tema en su web.

    Vean..: http://www.kroah.com/log/linux/android-kernel-problems.html

    ResponderEliminar