9 de noviembre de 2013

Las novedades de Linux 3.12

Ya se ha anunciado la versión 3.12 de Linux. Esta versión incorpora soporte para desduplicación en Btrfs, cambio automático de GPU en portátiles con GPUs duales, mejora del rendimiento en GPUs AMD Radeon, mejor rendimiento multicore de RAID-5, mejor gestión de las situaciones en las que se acaba la memoria (OOM), mejora de la escalabilidad de la resolución de rutas de archivo en el VFS, mejoras al modo de multitarea sin temporizador, nodos de dispositivo separados para la configuración de modo gráfico y la renderización gráfica, mejora del rendimiento de los bloqueos en huéspedes virtualizados, mejoras en la escalabilidad del acceso recursivo a directorios en XFS, mejoras en la escalabilidad del IPC y mejoras en el bloqueo de la capa tty. También se han incluido drivers nuevos y muchas otras mejoras y pequeños cambios. La lista completa de cambios, en inglés, puede encontrarse aquí, como siempre.

· Soporte de desduplicación offline en Btrfs: El sistema de archivos Btrfs ha incorporado soporte para desduplicación de datos, es decir, encontrar porciones de datos duplicadas y eliminar las copias redundantes para dejar solamente una. En ciertos casos, como máquinas virtuales que contienen copias duplicadas de sistemas operativos enteros, o copias de seguridad que contienen datos redundantes, el ahorro de espacio puede ser considerable.

Este sistema de desduplicación es "offline", es decir, no se desduplican los datos en tiempo real, sino que lo invoca el administrador cuando lo desea para que escanee parte o la totalidad del sistema de archivos en busca de copias. La desduplicación en tiempo real será añadida en futuras versiones.

· Aumento notable de rendimiento en tarjetas gráficas AMD Radeon: La web Phoronix.com notó en unas comparativas que el rendimiento gráfico de las GPUs AMD Radeon había aumentado notoriamente en Linux 3.12. Sin embargo, no ha habido en esta versión ninguna gran mejora en los controladores que pueda justificar esa diferencia. Tras investigar, Phoronix halló que el responsable del aumento de rendimiento no estaba en el controlador de GPUs Radeon, sino en un cambio en el algoritmo del gobernado de cpufreq "ondemand". En apariencia, el gobernador "ondemand" oscilaba entre frecuencias excesivamente, y esta oscilación dañaba el rendimiento de las GPUs Radeon. El nuevo algoritmo elimina ese problema.

· Cambio automático de GPU en equipos con GPUs duales: El hardware de algunos portátiles, como los basados en la plataforma Nvidia Optimus, incluyen dos GPUs, una optimizada para el rendimiento y otra para el bajo consumo. Hasta ahora, había sido necesario utilizar algunos hacks para cambiar entre una GPU y otra. En esta versión, el driver gestiona el cambio automáticamente.

· Separación de los nodos de dispositivo para configuración de modo gráfico y para renderizado: La evolución del hardware (especialmente en ARM) muestra que el renderizado (via GPU) y la configuración de modo gráfico (vía controlador de pantalla) no están necesariamente ligados al mismo dispositivo gráfico. Esta versión incorpora soporta para separar en /dev los nodos de dispositivo para la configuración de modo gráfico y para el renderizado. El uso principal de esta separación es otorgar diferentes modos de acceso a los compositores gráficos (que requieren la API de configuración de modo gráfico) y el renderizado de clientes o GPGPU (que requieren la API de renderizado). Para más información, vea este post.

· Mejora de modo de multitarea sin temporizador: Linux 3.10 añadió soporte para la multitarea sin temporizador, es decir, la habilidad de ejecutar procesos sin necesidad de activar el temporizador que se usaba tradicionalmente para implementar la multitarea. Este soporte, sin embargo, tenía algunos problemas: Se podía desactivar el temporizador en todas las CPUs excepto una, que requería tener el temporizador activado continuamente. En esta versión se ha añadido soporte para que, mientras todas las CPUs del sistema no estén haciendo nada, esta CPU pueda desactivar también el temporizador. Artículo LWN recomendado: Is the whole system idle?

· Multitarea en RAID5: Esta versión añade la capacidad de esparcir el trabajo requerido para gestionar stripes del RAID5 de MD en múltiples CPUs, lo que permite aumentar la cantidad de ES/segundo en hardware veloz (SSD)

· Mejora del rendimiento de los bloqueos en huéspedes virtualizados: El sistema operativo que se ejecuta en cada huésped virtualizado también tiene sus propios bloqueos. Algunos bloqueos, como los "spinlocks", causan problemas cuando hay muchos huéspedes ejecutándose, ya que gastan CPU inútilmente mientras siga "girando" el bloqueo. Esta versión reemplaza los spinlocks paravirtualizados actuales como "ticket spinlocks", que tiene mejores características de rendimiento en huéspedes virtualizados. Informe recomendado: Prevent Guests from Spinning Around.

· Nuevo sistema de bloqueo "lockref", mejoras de bloqueo en el VFS: Se incorpora un nuevo sistema de bloqueo, "lockref". La estructura "lockref" es una combinación de bloqueo y contador de referencias que permite accesos optimizados al conteo de referencias. En concreto, garantiza que el contador de referencias se actualiza como si el spinlock estuviera tomado, pero al utilizar accesos atómicos que cubren tanto el contador de referencia como el spinlock, a menudo puede hacerse la actualización sin tener que tomar el spinlock. Esto permite evitar los peores casos de contención de spinlock en sistemas con muchos procesadores. En esta versión ya se utiliza este bloqueo para mejorar la escalabilidad de la resolución intensa de rutas de archivo en esos sistemas. Artículo de LWN recomendado: Introducing lockrefs

· Mejor gestión del estado OOM: El estado "Out-Of-Memory" es aquel en el que el sistema se queda sin memoria tanto RAM como de intercambio, y Linux intenta matar un proceso para liberar memoria. Esta versión incluye cambios importantes en la gestión de este estado, haciéndolo más fiable y enviando más errores de falta de memoria a los programas que requirieron la memoria, en lugar de recurrir a matar procesos con tanta frecuencia. Artículo de LWN recomendado: Reliable out-of-memory handling

· Mejora de la escalabilidad de recursión de directorios en XFS, soporte de espacios de nombre: XFS ha añadido soporte para un tipo de archivo directorio, con el propósito de que readdir pueda devolver a espacio de usuario el tipo de inodo al que apunta la estructura dirent sin tener que leer el inodo del disco. El rendimiento de la recursión en directorios mejora notablemente. Un benchmark consistente en hacer búsquedas paralelas de 50 millones de entradas de directorio en cientos de directorios mejoró de aproximadamente 500 getdents() por segundo y 250.000 búsquedas de inodo por segundo para determinar el tipo de inodo con aproximadamente 17.000 operaciones de ES por segundo; a 3.500 getdents() por segundo a 16.000 operaciones de ES por segundo, sin búsquedas de inodo.

Esta versión también incorpora soporte para espacios de nombre en XFS, y ha reincorporado el soporte de defragmentación en el nuevo formato de archivos con CRCs.


· Mejora del bloqueo en la capa tty: La capa tty ha sido mejorada y en el proceso gran parte del bloque ha sido convertido a bloqueos para-cada-tty, que mejoran el rendimiento en algunos casos.


· Mejoras en el bloqueo IPC: Esta versión incluye mejoras en la contención que se impone al bloqueo de IPC (kern_ipc_perm.lock). Estos cambios mejoran sobre todo las operaciones de memoria compartida, anteriormente ya se habían mejorado los semáforos en 3.10 y colas de mensajes en 3.11. Con estos cambios, un microbenchmark de memoria compartida que se centra en el uso de shmctl haciendo IPC_STAT con 4 hilos millones de veces, reduce el tiempo de ejecución un 50%. Una prueba similar con IPC_SET reduce el tiempo de ejecución de 3 minutos y 35 segundos a 27 segundos.

Y eso es todo. La lista completa de cambios en inglés, aquí.

5 comentarios:

  1. Hola Diego:

    He de decir, que tuve que compilar a base de la configuración a través de Debian y, decirte que, he encontrado una experiencia 'NULA' sobre lo que hace, no sólo en tarjeta de vídeo, sino también, en la referencia de los entornos. A mí, se me colgó por tercera vez en el kernel 3.12, sobre todo en entorno gráfico (NVIDIA 331.20, tengo ahora NVIDIA 319.72, pero sin el kernel 3.12, sino, kernel 3.11.5 compilado por mí).

    No es un problema que me venga a mí, sino, un problema de 'replicación' de los parámetros del kernel, no me ha fallado, ni me ha puesto en problemas. El único problema que me dio, era sólo 'eso', a través del entorno gráfico.

    En la 3.11.5, no me ha fallado hasta entonces. Cuando apareción la 3.11, no me falló, ni a la de tres, pero en la 3.12, aparecieron problemas, no sólo de lo compilado, sino, otras cosas más (compilando y recompilado el mismo kernel, pero con los mismos problemas)

    Me toca esperar entonces, cuando la gente de Debian pongan el config del mismo para poder hacer la compilación concreta.

    Lo decía, porque he puesto la publicación en mi blog:

    http://www.sjlopezb.es/2013/11/ya-con-kernel-312.html

    Pero aún está verde la cosa (ya como muestro, tengo el config en DropBox).

    Aún tengo que esperar, entonces, porque algunas librerías fallan (en la NVIDIA 331 y siguientes, ya no hay VDPAU, así que, hay que hacerlo en la web de Aplattner para ello o, instalando libvdpau1 que los hay en los repositorios de Debian).

    Ante esto, de momento, no me planteo ponerme la 3.12, hasta que Debian ponga los paquetes correctos para poder hacer frente a la construcción de nuevos paquetes para eso y más.

    Saludos...

    ResponderEliminar
    Respuestas
    1. Si usas los driver oficiales de nvidia vas a tener problemas dado que por unos cambios en el kernel 3.12 estos se hicieron incompatibles. ahora no me acuerdo que función era exactamente pero el problema viene por ese lado. proba el kernel con lo drivers open source y fíjate que sucede

      Eliminar
    2. Hola Germán:

      No me hace falta. Hasta que NVIDIA corrija y ponga nuevos drivers que sean compatibles al Kernel 3.12 (que lo hay, pero choca, porque hace 'crashes'), pues no habrá uno que sea decente a los que hay hoy en día hasta ahora.

      Saludos...

      Eliminar
  2. Anónimo1:49 p. m.

    Muchas gracias por el artículo.

    ResponderEliminar