Archivos de la categoría ‘Kernel’

200px-Linux-x86-under-qemu

En la próxima versión del kernel de Linux se incluirá un cambio que mejorará el rendimiento del desktop en condiciones de poca memoria.  Básicamente lo que se hizo fue cambiar la forma en que se decide qué parte de la memoria se debe mover a disco (swap).

En el esquema tradicional, la memoria usada por el código se considera como equivalente a la usada por los datos a la hora de copiarlas al disco cuando la memoria es insuficiente.  Esto provoca que las aplicaciones detengan temporalmente su ejecución cuando el código que necesitan se encuentra en disco.

Para evitar este problema, el código ejecutable tendrá una marca especial para que el sistema operativo haga lo posible por mantenerlo siempre en memoria, sin llevarlo a disco.  El cambio es bastante pequeño, pero los resultados son interesantes.

En pruebas realizadas se detectó que en un escritorio corriendo OpenOffice, Firefox y el entorno GNOME con 512MB, la necesidad de copiar segmentos de memoria desde el disco a RAM se redujo a la mitad, mientras que la cantidad de segmentos que se trajeron desde el disco se redujo a sólo un tercio.  Esto implica que el tiempo necesario para hacer swap se redujo como mínimo a la mitad.

Bonus Track: Memoria física y memoria lógica

En un sistema operativo existe el concepto de memoria física y memoria lógica.  La memoria física es la que provee el hardware (1GB, 2GB, etc).  La memoria lógica es la que ven las aplicaciones.  La memoria lógica se divide en páginas de tamaño fijo y se va asignando a las aplicaciones a medida que éstas lo requieran, el sistema operativo internamente tiene una tabla en donde dice en qué parte de la memoria física está cada página de la memoria lógica, lo que se conoce como mapa de memoria.

Entre todas las aplicaciones se puede usar más memoria lógica que la que se dispone físicamente. Como no se necesita usar toda la memoria al mismo tiempo, algunas páginas que estaban en la memoria física se guardan en disco mientras no se ocupen, luego si se necesitan se traen de vuelta del disco a la memoria física.  Eso es lo que se conoce como swap o intercambio.

Mientras más memoria tenga el equipo, es menor la necesidad de mover páginas al disco, y por lo tanto menor el tiempo perdido en esperar a que las páginas se copien desde o hacia el disco.  Pero si la memoria es poca, frecuentemente se necesita usar el disco para hacer espacio en memoria física, lo que hace que el sistema se comporte más lento.

Con el cambio aplicado en Linux 2.6.31, se mejora la estrategia para decidir qué páginas deben sacarse de RAM cuando hay poca memoria disponible, de tal forma de dejar en memoria física aquellas que se usen intensivamente, eliminando la necesidad de usar el disco.

Link: Make mapped executable pages the first class citizen (log de cambio en el kernel)

Anuncios

Linux-Libre 2.6.29.1

Publicado: abril 17, 2009 en Kernel

290tres

Ya están disponibles los paquetes de Linux-Libre 2.6.29.1 para Debian “Lenny”, Ubuntu “Hardy” e “Intrepid” y también gNewSense. Linux-Libre es un proyecto iniciativa de la Free Software Foundation Latin America que purga los lanzamientos del Kernel Linux de blobs no-libres. En la imágen de arriba, compilando Linux-Libre 2.6.29.1.

Artículo completo en GLOG.

Unas interesantes estadísticas del Kernel Linux, extraídas de la presentación de Greg Kroah Hartman, el desarrollador a cargo del driver de USB, realizada durante los recientes Google Tech Talks.

  • 9,2 Millones de líneas de código, se incrementa 10% cada año.
  • El Kernel en sí mismo es el 5%, y los drivers son aproximadamente el 55%.
  • 4500 líneas son agregadas, 1800 removidas y 1500 modificadas todos los días.
  • Es un sistema jerárquico pero no depende de las personas individuales.
  • Una nueva versión cada 2 o 3 meses.
  • 2399 desarrolladores, la mitad de ellos contribuye con sólo 1 o 2 parches.
  • Ya no hay un Kernel estable (con mumeración par, como el 2.4) y otro inestable (con numeración impar, como el 2.3); este proceso ha sido discontinuado.
  • Las actualizaciones de seguridad de una versión vienen numeradas como x.x.x. Por ejemplo, las correcciones para el 2.6.19 se numeran como 2.6.19.1, 2.6.19.2, etc.
  • El Kernel es activamente desarrollador las 24 horas del días, los 7 días de la semana, los 365 días del año.

Más información en el susodicho video, en su correspondiente presentación y en este artículo.

Lo que traerá el Kernel 2.6.25

Publicado: abril 7, 2008 en Kernel
Etiquetas:
  • RCU “apropiativo” (preemptible): RCU es un sistema de sincronización que permite a Linux escalar a máquinas con miles de procesadores. Sin embargo, una parte del sistema de RCU no es “apropiativo”, es decir, no puede ser interrumpido mientras se ejecuta. En 2.6.25 se puede elegir entre el RCU clásico y el nuevo, que es apropiativo. Este nuevo sistema ha sido desarrollado a la sombra de los esfuerzos que tratan de hacer que Linux sea un SO de tiempo real.
  • Real Time Group scheduling: En el Kernel 2.6.24 se introdujo un sistema que permitía organizar las prioridades de CPU de manera mucho mas flexible. En el 2.6.25 se ha extendido este sistema para que pueda manejar, además de los procesos “normales”, los procesos SCHED_RT, es decir, de tiempo real, y trate de satisfacer sus necesidades especiales. (Además de esto, se ha mejorado el sistema de balanceo de procesos entre CPUs del gestor de procesos, para gestionar mejor las necesidades de los procesos de tiempo real – como se puede ver, hay mucho movimiento alrededor de este tema)
  • Memory Resource Controller: Basado en la misma infraestructura de configuración que el anterior punto (cgroups), esto permite configurar algunos aspectos de la utilización del recurso de la memoria a grupos de procesos elegidos al azar.
  • Spinlocks FIFO: Los spinlocks son una de las principales herramientas de sincronización en Linux: cuando un proceso adquiere un spinlock, hasta que no lo suelte el resto de CPUs que intente adquirirlo a petición de un proceso entrará en un bucle cerrado. Con los nuevos Spinlocks FIFO (solo x86), las CPUs consiguen permiso para adquirir el spinlock en el mismo orden en el que le solicitaron por primera vez. Esto permite asegurar que ninguna CPU es discriminada por otras y hace que los spinlocks sean un poco más deterministas.
  • Nuevas herramientas de medición de memoria: En el 2.6.25 cada proceso exporta en /proc información sobre las páginas que ese proceso está utilizando. Comparando esa información con la de otros procesos se puede conocer con mayor exactitud el uso de memoria de cada proceso.
  • timerfd(): Tradicionalmente en Unix las notificaciones de eventos del temporizador se hacen mediante señales, lo cual es muy engorroso. Para solucionarlo, los sistemas UNIX modernos han incorporado sistemas, como FreeBSD/OSX con kevent, y Solaris con un sistema similar. En linux se ha optado por una solución más “unixera”: con timerfd() se pueden programar eventos en el temporizador, obtener un descriptor de archivo, y utilizar poll/epoll/read con esos descriptores.
  • Latencytop: Se trata de una pequeña infraestructura que permite visualizar cuales son las fuentes de latencia máxima en el Kernel. El programa para poder verlas se encuentra en latencytop.org.
  • SMACK (Simplified Mandatory Access Control): Se trata de un sistema de seguridad basado en los mismos principios que SELinux, pero menos capaz y más sencillo de configurar. Al igual que Linux tiene varios sistemas de archivos, ahora tambien habrá varios sistemas de seguridad para que la gente elija el que más le convenga, visto que SELinux no complace a todo el mundo.
  • Randomización de ejecutables PIE y del BRK: La ubicación de la memoria manejada por brk() y por ciertas secciones de los ejecutables PIE (Position Independent Executable) se decide de manera aleatoria.
  • Actualización de Ext4: Asignación múltiple de bloques, mayor tamaño máximo de bloque, checksumming en el journal, soporte de sistemas de archivos y archivos de mucho mayor tamaño. Con esta actualización ya esta casi todo de lo que traerá Ext4, de hecho ya están todas las que cambian de algun modo el formato del sistema de archivos en el disco, pero aun faltan algunas como delayed allocation.
  • Arquitectura MN10300/AM33: Soporte para una nueva arquitectura que no la conoce ni el que la inventó.
  • Regulación Termal de ACPI: No se exactamente lo que hace, pero Linux lo soporta. Adicionalmente se añade soporte para WMI, una extensión propietaria de ACPI hecha por Microsoft.
  • Protocolo CAN: Para sorpresa de todos, Volkswagen ha decidido contribuir con una implementación de CAN (Controller Area Network), un protocolo de red muy raro.

El resumen original de este artículo fué publicado en Linux Kernel Newbies.