Introduciendo los kernels de Linux 3.3 y 3.4

Revise los kernel Linux más recientes y sus dispositivos para Google Android, Open vSwitch, redes y más

En marzo de 2012, la versión 3.3 del kernel Linux fue lanzada (seguida por la versión 3.4 en mayo). Además de una gran cantidad de pequeños dispositivos y arreglos de errores, varios cambios importantes han llegado con estos releases, incluyendo la fusión del proyecto Google Android; fusión de Open vSwitch; varias mejoras de redes (incluyendo el dispositivo de red en equipos); y una variedad de actualizaciones de virtualización, sistemas de archivos y gestión de memoria. Explore muchos de los cambios importantes en las versiones 3.3 y 3.4 y eche un vistazo a lo que se viene en la versión 3.5.

M. Tim Jones, Consultor, Indepentent

M. Tim JonesM. Tim Jones es un arquitecto de firmware integrado y autor de Artificial Intelligence: A Systems Approach, GNU/Linux Application Programming (ahora en su segunda edición), AI Application Programming (en su segunda edición) y BSD Sockets Programming from a Multilanguage Perspective. Su historial en ingeniería va desde el desarrollo de kernels para aeronaves espaciales geosincrónicas hasta arquitectura de sistemas intercalados y desarrollo de protocolos de redes. Tim es un arquitecto de plataforma con Intel y autor en Longmont, Colorado.



08-10-2012

Conéctese con Tim

Tim es uno de nuestros autores más populares y prolíficos. Explore todos los artículos de Tim en developerWorks. Vea el perfil de Tim y conéctese con él, con otros autores y con colegas desarrolladores en la comunidad developerWorks.

Los releases 3.3 y 3.4 del kernel de Linux® incluyen un impresionante conjunto de dispositivos, pero también son una especie de hito siniestro. El release 3.3 es el primer release de Linux que excede los 15 millones de líneas de código (utilizando una medida honestamente imprecisa). Si sustrae las porciones de variante del kernel Linux (como controladores, código dependiente de la arquitectura y diversas herramientas), el número cae por debajo de los 4 millones—un gigante en su propio derecho.

Lo que es potencialmente siniestro sobre este hito es la velocidad a la que está creciendo el kernel Linux (50% de crecimiento desde 2008) y si este crecimiento puede comenzar a afectar negativamente la eficiencia (tanto en alimentación como en rendimiento) del kernel de Linux. La alimentación y el rendimiento no tienden a ser medidos parche por parche, así que un error puede fácilmente arrastrarse hacia un kernel lanzado y persistir durante algún tiempo (por ejemplo, el problema de alimentación de PCI Express [PCIe] Active State Power Management que fue corregido en la versión 3.3 pero existió en el kernel durante un año).

Mantenimiento de versiones del kernel Linux

Los kernels son versionados utilizando un esquema de números de tres segmentos que consisten en una versión de kernel seguida por una revisión principal y una revisión secundaria (por ejemplo, 3.3.4). Los kernels candidatos para release incluyen un sufijo rc#" que incluye un número que representa el candidato particular (por ejemplo, el actual es 3.5rc1).

En menos de 21 años, Linux ha crecido de sólo unas 10.000 líneas de código a más de 15 millones. Aunque la mayoría de este código reside en el subárbol de controladores, la complejidad del kernel se está incrementando con su tamaño. Uno de estos días, esta extensión podría resultar en cambios al kernel para eliminar la complejidad e incrementar su capacidad de mantenimiento.

Como se muestra en la Figura 1, el kernel Linux ha crecido rápidamente desde el release 2.4 en 2001 (de 3.377.902 líneas a 14.998.651 líneas en 2012). Cada año, durante ese periodo, alrededor de un millón de líneas de nuevo código fue añadido al kernel. Esa es una cantidad asombrosa y debería atemorizar a cualquier desarrollador de software.

Figura 1. Tamaños del kernel del release 2.2 (2001) al release 3.3 (2012)
Graph showing kernel sizes from release 2.2 in 2001 to release 3.3 in 2012

Torvalds mismo ha manifestado su preocupación sobre el mantenimiento futuro a medida que el kernel está creciendo. Con alrededor de 4 millones de líneas en las propiedades del kernel, el enfoque actual de gestión del kernel tal vez necesite mejorar.

Integración de Android

La noticia más importante del kernel 3.3 es la introducción de Google Android para la línea principal del kernel. Esta integración continuará en Linux 3.4, pero buena parte de la bifurcación de Android se encuentra en la línea principal para soportar el arranque del espacio de usuario de Android (vea la Figura 2). El kernel de Android es una bifurcación del kernel Linux, con varios dispositivos adicionales necesarios para una operación eficiente de alimentación y recursos (como se requiere para un dispositivo móvil restringido por la alimentación). Aunque el enfoque está en la arquitectura de ARM, también hay soporte para x86 (como es utilizado en el proyecto de Google TV).

Figura 2. Arranque del espacio de nombre de Android con Android x86 en Oracle VM VirtualBox
Screen capture showing how to boot to the Android user space with Android x86 on Oracle VM VirtualBox

Problemas de colaboración entre los mantenedores de Linux y Google causó que Android fuera desarrollado en forma independiente durante un par de años. El invierno de 2011-2012 vio la creación del Proyecto Android Mainlining, cuya meta fue integrar controladores y dispositivos de Android en la línea principal del kernel Linux. Este trabajo fue introducido en el release 3.3 y tendrá una mayor integración en el release 3.5.

Android creó varias mejoras para Linux que fueron necesarias para ser competitivo en el entorno móvil. Ejemplos incluyen una rápida comunicación entre procesos (IPC), gestión mejorada de memoria de aplicaciones y una solución para el problema de la gran gestión contigua de memoria física.

El controlador llamado Binder es la respuesta de Android para la IPC. Los desarrolladores de Android podrían haber rechazado fácilmente los enfoques existentes, pero Binder incluye dispositivos exclusivos que no estaban disponibles (incluyendo el pase de mensajes de cero copia y el pase de credenciales). En Android, las aplicaciones nunca se cierran, así que continúan en ejecución hasta que el kernel las elimina. El Reductor existe como un mecanismo para mejorar la utilización cuando se vuelve baja. Las aplicaciones registran una función que es llamada para minimizar la memoria y el kernel llama estas funciones cuando la memoria se reduce. Otra adición de Android es Pmem, el cual proporciona la posibilidad de asignar grandes almacenamientos intermedios físicos contiguos cuando sea necesario (como aquellos requeridos para una función de cámara). Pmem exporta un controlador de espacio de usuario para este tipo de asignación de memoria. Otras posibilidades también han sido integradas pero son específicas para el dominio móvil.

Ciertos dispositivos aún no han llegado al kernel, tales como wakelocks—un dispositivo de gestión de alimentación que permite a un componente prevenir que el sistema entre en un estado de alimentación baja (por ejemplo, si está ocurriendo una actualización). La ausencia de wakelocks no evitará que un sistema de Android arranque, pero drenará la batería rápidamente.

El hecho de que Android se fusiona con el kernel Linux, es otra gran ilustración de la flexibilidad del kernel de Linux (desde sistemas intercalados y dispositivos móviles hasta los más grandes sistemas principales y supercomputadoras). Con más de 300 millones de dispositivos de Android en uso en este momento, Linux continúa su evolución como una plataforma universal.


Open vSwitch

Linux continúa siendo la plataforma de preferencia para la virtualización. Además de ser un sistema operativo de clase mundial, Linux se duplica como un hypervisor de clase mundial. La línea principal de Open vSwitch incrementa este estado al proporcionar una experiencia de fábrica para virtualización y para usuarios de Infraestructura como un Servicio (IaaS).

Un conmutador virtual no es más que una versión de software de un conmutador físico. Recuerde que la virtualización de plataforma (como se implementa en la Máquina Virtual de Kernel [KVM] o Xen) le permite ejecutar múltiples instancias del sistema operativo (como VMs) en un hypervisor que crea la plataforma física en diversas plataformas virtuales. La introducción de un conmutador virtual extiende esta abstracción al introducir formas virtuales de infraestructura de redes. Un conmutador virtual proporciona un medio eficiente para que las VMs se comuniquen unas con otras en una red virtual. Open vSwitch extiende esta abstracción a través de hosts virtuales, permitiendo a las VMs en un host físico comunicarse transparentemente con VMs en otro host físico.

Dentro de Open vSwitch encontrará un conjunto enriquecido de dispositivos para redes virtuales, incluyendo calidad de servicio, LANs virtuales, filtrado y aislamiento de tráfico y una variedad de protocolos de supervisión y control (como OpenFlow y NetFlow). Aunque Linux tenía una implementación existente de conmutador virtual(llamado Linux Bridge), Open vSwitch es una solución mucho más enriquecida en dispositivos (incluyendo la gestión de múltiples hosts) y por lo tanto es una adición bien recibida. Vea Recursos para obtener más información.


Cambios en el sistema de archivos

El release de kernel 3.3 tiene varios cambios en el sistema de archivos a través de un número de sistemas de archivos para usuarios y desarrolladores. Para los usuarios, un redimensionamiento online está disponible para el cuarto sistema de archivos extendido (ext4) a través de un control de E/S (donde online significa que el sistema se mantiene en operación). Esto significa que todo el redimensionamiento se realiza en el kernel, lo cual da como resultado un redimensionamiento mucho más rápido.

Para el sistema de archivos de árbol B (Btrfs), la operación de balance (la cual es utilizada para cambiar la estructura subyacente de metadatos, como si fuera añadida una nueva unidad), ha sido regrabada, soportando funciones de pausa y reanudación. Las mejoras de Btrfs continuaron en el release 3.4 con una nueva herramienta de recuperación de datos (btrfs-restore), la cual puede ser utilizada para extraer archivos de un sistema de archivos de btrfs dañado. Además, en el release 3.4, Btrfs tiene muchas mejoras de rendimiento y manejo de errores mejorado (incluyendo la eliminación de pánicos, sustituyéndolos con una agradable gestión de errores). Antes del release 3.4, Btrfs no funcionaba correctamente como un sistema de archivos dentro de una VM debido a sus mecanismos de copiar sobre grabación. Se ha realizado un ajuste para minimizar estas interrupciones.

El array redundante de discos independientes (RAID) del software también ha sido actualizada para soportar la sustitución en caliente, la cual permite que los datos de un volumen (marcados sustituibles con mdadm) sean migrados a otro volumen de forma que los originales puedan ser eliminados. Finalmente, el release 3.4 ha añadido soporte de sólo lectura para el sistema de archivos QNX4.

Para los desarrolladores, ahora es posible inyectar errores en el Sistema de Archivos de Red para probar la capacidad del cliente para recuperarse de ellos (mediante sysfs). Para desarrolladores de Btrfs, se ha añadido una nueva utilidad para verificación de integridad que puede ser utilizada para identificar solicitudes Write inválidas y debe ayudar a solucionar los errores más rápidamente.


Mejoras de redes

Ya que Linux está a la vanguardia de las posibilidades de redes, hay muchas mejoras disponibles en el release 3.3 de kernel.

Para infraestructuras de baja latencia (como la computación de alto rendimiento), se ha integrado un controlador de destino de protocolo SCSI Remote Direct Memory Access (RDMA). Secure Remote Password es un protocolo que le permite utilizar RDMA como el transporte subyacente para dispositivos de almacenamiento en bloque. Esta adición particular permite a Linux exponer un dispositivo de bloque utilizando SRP sabiendo cuáles iniciadores remotos pueden adjuntarse para E/S de bloque. RDMA es soportado por InfiniBand y es muy común en clústeres de alto rendimiento.

El planificador de paquete Random Early Detection (RED) fue modificado utilizando un nuevo algoritmo de Sally Floyd, Ramakrishna Gummadi y Scott Shenker llamado Adaptive RED. RED ha mostrado ser un algoritmo de planificador de paquete eficiente (el cual suelta paquetes que no puede tener en almacenamiento intermedio como una función de tamaño de cola disponible) pero ha resultado ser sensible al nivel de congestión dentro de una red. RED trata el tamaño de cola como una probabilidad para soltar paquetes, de forma que en una cola vacía o casi vacía todos los paquetes son aceptados, pero a medida que la cola se llena todos los paquetes se sueltan. Adaptive RED altera dinámicamente la probabilidad de soltar al medir qué tan agresivamente se ha comportado el algoritmo para soltar paquetes. Es posible leer más sobre este algoritmo en el documento informativo de Adaptive RED, para el cual Recurso proporciona un enlace.

Se ha añadido un nuevo dispositivo de red en equipo que sustituye el controlador de unión de kernel anterior. El dispositivo en equipo permite la creación de interfaces virtuales que agregan el ancho de banda disponible de múltiples dispositivos físicos de Ethernet (como se define en la agregación de enlace y en 802.1AX). Este dispositivo puede ser usado para rendimiento de red (agregando múltiples dispositivos físicos) o para proporcionar redundancia (migración tras error transparente). Actualmente se soportan dos modos, permitiendo que el tráfico simplemente sea asignado por turnos a través de los puertos físicos, o un puerto puede ser definido como una copia de seguridad activa para enrutar todo el tráfico en caso de que se pierda la conexión de la red primaria.

Entre el gran número de mejoras de redes, otro cambio interesante es la adición de límites de almacenamiento intermedio de TCP para grupos de control (o cgroups). Los Cgroups son utilizados en varias formas, como para aislar recursos para una VM. Este cambio permite que a la memoria de espacio de usuario y a la memoria de kernel (como es usada para almacenamientos intermedios de TCP) se les haga un seguimiento dentro de un cgroup para tener una mejor gestión de los recursos del sistema.


Otros cambios interesantes

Linux 3.3 también presenta cambios que no son específicos para los sistemas de archivos o las redes. En términos de nuevas arquitecturas, el procesador de Texas Instruments C6x es ahora soportado directamente (en lugar de un proyecto separado). El C6x es un procesador de señal digital de uno y varios núcleos que está basado en la arquitectura Very Long Instruction Word pero carece de dispositivos modernos como multiprocesamiento simétrico y coherencia de memoria caché; también carece de una unidad de gestión de memoria (MMU). A pesar de estas omisiones de arquitectura, la serie C6x es muy capaz, con un conjunto enriquecido de periféricos y aceleradores en el chip (seguridad, transformación Fourier rápida, etc.). El release 3.4 soporta los más recientes procesadores de GPU como el Kepler de Nvidia y los últimos releases de Radeon y Trinity de AMD.

El subárbol de la arquitectura ARM utiliza la extensión grande de dirección física así como la introducción de soporte para el servicio Nvidia Tegra 3 en un chip, el cual es ideal, ya que ARM reta a Intel en el espacio de servidor de baja alimentación. También hay varias mejoras disponibles en el release 3.3 para la implementación AMD E/S MMU, la cual mejora la gestión de tamaños de página cambiantes así como una seguridad incrementada para los dispositivos (agrupamiento o aislamiento de dispositivos). Más aún, la E/S de Función Virtual mejora la capacidad de KVM de correlacionar dispositivos con invitados de KVM. Finalmente, la arquitectura S390 fue actualizada para soportar acceso de hasta 64TB de RAM (más allá del límite anterior de sólo 4TB).

La Unidad de Supervisión de Rendimiento (PMU) está ahora virtualizada para KVM, así que los invitados ahora pueden acceder a la PMU para su plataforma virtual. Esto expone varios eventos útiles de rendimiento para cada invitado, incluyendo instrucciones retiradas, referencias y pérdidas de caché e instrucciones de ramificación ejecutadas y perdidas. Otro dispositivo útil de virtualización para Xen es el soporte para descarte seguro. Descarte seguro significa que el sector en cuestión será permanentemente eliminado en lugar de ser simplemente marcado como libre. Finalmente, los diversos controladores virtuales de E/S (blk, net, globo y consola) ahora soportan el estado de suspensión de Interfaz Avanzada de Configuración y Energía S4, lo que significa que las VMs invitadas pueden hibernar en Xen.

Para los problemas de corrupción de memoria, los cuales pueden ser tediosos para depurarse, se ha añadido un nuevo elemento de configuración llamado CONFIG_DEBUG_PAGEALLOC . Este cambio verifica los accesos de CPU para páginas no asignadas y puede causar algo de pérdida de rendimiento.


Mirando hacia el futuro

Linux continúa avanzando y, con el release 3.4 disponible, los releases candidatos 3.5 llegarán a un cierre alrededor de agosto de 2012. Linux 3.5 incluye varios dispositivos nuevos e interesantes.

Btrfs continúa siendo mejorado, esta vez con manejo de regrabación en el sistema de archivos. El sistema de archivos de Linux estándar (ext4) también ha sido mejorado con la capacidad de añadir sumas de comprobación a metadatos para ayudar a identificar la manipulación de datos. Linux tal vez pronto soporte destinos de SCSI en FireWire o el Protocolo USB Attached SCSI. Finalmente, se soportarán analizadores de espacio de usuario (para ser utilizados con SystemTap para analizar el comportamiento de programa de espacio de usuario). Se esperan muchos más cambios conforme el release candidato evolucione para el release de agosto.

Recursos

Aprender

  • Vaya a los Archivos del Kernel Linux para encontrar una fuente de los kernels más recientes (y no tan recientes).
  • Linux Kernel Newbies es una gran fuente de información sobre releases de kernel, incluyendo resúmenes de algunos de los dispositivos más importantes en un release de kernel dado. Es posible aprender más en la página de resumen de Linux 3.3 .
  • Google creó el Proyecto Android Open Source para desarrollar y mantener la plataforma Android. El proyecto también mantiene un programa de compatibilidad, el cual es gratuito y asegura que desarrolladores externos no desarrollen implementaciones de Android incompatibles. Es posible aprender más sobre Android en la página de Wikipedia.
  • Es posible emular a Android para un dispositivo móvil utilizando el Emulador de Android así como emular a Android para el Emulador de Google TV (utilizando Linux y KVM). El Emulador de Google TV soporta la emulación de ARM y la menos eficiente de x86.
  • Android introdujo varios componentes nuevos que han hecho su camino hacia el kernel Linux, incluyendo el IPC Binder (IPC rápido), Low Memory Killer y Pmem (similares al componente Ashmem excluido).
  • Linux trabajando con Android es un gran ejemplo de Linux como una plataforma flexible y universal. Descubra más ejemplos en Look at Linux, the operating system and universal platform (M. Tim Jones, developerWorks, marzo de 2012).
  • Open vSwitch es un conmutador virtual de multicapas que es ahora de la línea principal del kernel Linux. Esto significa que Linux como un hypervisor ahora puede utilizar Open vSwitch de fábrica. Esta es una adición bien recibida por los usuarios de alimentación de virtualización de Linux. Para aprender más sobre Open vSwitch, lea esta corta introducción sobre el producto, Why Open vSwitch. También es posible aprender más sobre la solución anterior, llamada Linux Bridge de The Linux Foundation.
  • Lea Anatomía de una nube de fuente abierta (M. Tim Jones, developerWorks, marzo de 2010) para obtener una introducción a la conmutación virtual en el contexto de la computación en nube y la IaaS.
  • Virtual networking in Linux (M. Tim Jones, developerWorks, octubre de 2010) proporciona una introducción a las diversas formas de conmutación virtual en Linux, incluyendo Open vSwitch. También es posible aprender más sobre los diversos tipos de virtualización (todos soportados por Linux) en Virtual Linux (M. Tim Jones, developerWorks, diciembre de 2006) y sobre la transformación de Linux en un hypervisor en La anatomía de un hipervisor Linux (M. Tim Jones, developerWorks, mayo de 2009).
  • Btrfs es un sistema de archivos desarrollado por Oracle para retar a ZFS de Sun. Btrfs puede ser usado para desarrollar sistemas masivos de almacenamiento empresarial, con dispositivos como reparación online y mantenimiento simplificado. Es posible aprender más en la página de wiki de Btrfs.
  • Virtio es una infraestructura de virtualización de E/S para hipervisores de Linux. Virtio proporciona una abstracción eficiente para hipervisores utilizando un conjunto común de controladores de virtualización de E/S. Aprenda más en Virtio: marco de virtualización de entrada/salida para Linux (M. Tim Jones, developerWorks, enero de 2010).
  • Writing RDMA Applications on Linux de Roland Dreier en Cisco proporciona una fantástica introducción a RDMA y al desarrollo de aplicaciones que utilizan RDMA dentro del entorno de Linux.
  • Adaptive RED: An Algorithm for Increasing the Robustness of RED's Active Queue Management proporciona un tratamiento detallado para los cambios algorítmicos para el algoritmo de RED estándar.
  • Los grupos de control están cubiertos por Red Hat en su propia documentación online de RHEL. También es posible aprender más sobre la aplicación de límites de almacenamiento intermedio de TCP para cgroups en la publicación, Per-cgroup TCP buffer limits en Linux Weekly News.
  • En la zona de Linux de developerWorks, encuentre cientos de artículos how-to y tutoriales, así como descargas, foros de discusión y muchos otros recursos para desarrolladores y administradores de Linux.
  • La zona de Código Abierto de developerWorks proporciona mucha información sobre herramientas de código abierto y el uso de tecnologías de código abierto.
  • Manténgase al tanto de los eventos técnicos y webcasts de developerWorks enfocados en una variedad de productos de IBM y temas de la industria de la TI.
  • Asista a una sesión de información gratuita de developerWorks Live! para ponerse al día rápidamente sobre los productos y herramientas de IBM, así como las tendencias de la industria de la TI.
  • Vea demos on demand de developerWorks que van desde la instalación de productos y demos de configuración para principiantes, hasta funcionalidades avanzadas para desarrolladores experimentados.
  • Siga a developerWorks en Twitter o suscríbase a un feed de los tweets de Linux en developerWorks. También es posible seguir a este autor en Twitter en M. Tim Jones.

Obtener los productos y tecnologías

  • Evalúe los productos de IBM como mejor le parezca: descargue una prueba de producto, pruebe un producto online, use un producto en un entorno de nube o invierta unas cuantas horas en el Recinto de Seguridad de la SOA aprendiendo cómo implementar la Arquitectura Orientada a Servicios eficientemente.

Comentar

Comentarios

developerWorks: Ingrese

Los campos obligatorios están marcados con un asterisco (*).


¿Necesita un IBM ID?
¿Olvidó su IBM ID?


¿Olvidó su Password?
Cambie su Password

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


La primera vez que inicie sesión en developerWorks, se creará un perfil para usted. La información en su propio perfil (nombre, país/región y nombre de la empresa) se muestra al público y acompañará a cualquier contenido que publique, a menos que opte por la opción de ocultar el nombre de su empresa. Puede actualizar su cuenta de IBM en cualquier momento.

Toda la información enviada es segura.

Elija su nombre para mostrar



La primera vez que inicia sesión en developerWorks se crea un perfil para usted, teniendo que elegir un nombre para mostrar en el mismo. Este nombre acompañará el contenido que usted publique en developerWorks.

Por favor elija un nombre de 3 - 31 caracteres. Su nombre de usuario debe ser único en la comunidad developerWorks y debe ser distinto a su dirección de email por motivos de privacidad.

Los campos obligatorios están marcados con un asterisco (*).

(Por favor elija un nombre de 3 - 31 caracteres.)

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


Toda la información enviada es segura.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=Linux
ArticleID=839576
ArticleTitle=Introduciendo los kernels de Linux 3.3 y 3.4
publish-date=10082012