Download 2. Multikernel
Document related concepts
Transcript
Multikernel Arquitectura de Sistema Operativo para sistemas con múltiples núcleos Microprocesadores para Comunicaciones Jesús A. Díaz Sánchez Curso 2010/2011 Índice 1. Introducción 2. Multikernel 3. Implementación: Barrelfish 3.1. Controladores de CPU (CPU Drivers) 3.2. Monitores 4. Conclusiones 5. Referencias 1 2 3 5 6 6 7 8 1. Introducción Los nuevos sistemas informáticos contienen cada vez más núcleos en los procesadores, los cuales presentan ventajas y desventajas, al ser las arquitecturas cada vez más diversas, incluyendo jerarquías de memoria, interconexiones, conjunto de instrucciones y las configuraciones de E/S. El uso compartido de memoria y la interconexión entre núcleos, obliga actualmente a desarrollar cachés exclusivos, cachés compartidos con protocolos de coherencia y drivers que intentan traducir las instrucciones entre el software y los componentes del sistema. Esta mezcla no tiene una buena escalabilidad, y se hace más ineficiente, cuantos más componentes se añaden al sistema. En este contexto, un CPU adicional, no aporta rendimiento e incluso, puede perjudicar la eficiencia de los restantes. En este trabajo, se va a realizar una introducción al Multikernel, una nueva arquitectura de sistema operativo que permite utilizar los conceptos de los sistemas distribuidos. La investigación de esta nueva estructura se basa en el concepto de pensar en la máquina como una red de núcleos independientes, sin asumir ninguna distribución entre núcleos en el nivel más bajo. Esto produce una modificación en la funcionalidad de los sistemas operativos tradicionales hacia los sistemas distribuidos de procesos, que mantienen una comunicación por medio del paso de mensajes. Se ha implementado un sistema operativo Multikernel, para demostrar que el enfoque dado es prometedor, y se describe cómo los problemas tradicionales de escalabilidad de los sistemas operativos (como la gestión de memoria), se pueden corregir mediante el uso de mensajes y utilizando los conceptos de los sistemas distribuidos y en red. La evaluación de este prototipo, en sistemas múltiples núcleos, muestra que incluso en las máquinas actuales, el rendimiento del Multikernel es comparable con un sistema operativo convencional, y permite mayor escalabilidad para soportar el hardware futuro. 2 2. Multikernel El hardware informático está cambiando y se diversifica mucho más rápido que el software de los sistemas. Una mezcla diversa de núcleos, cachés, enlaces de interconexión, dispositivos aceleradores y de E/S, en combinación con el incremento de los núcleos, lleva a una sustancial escalabilidad y al desafío a los diseñadores para los cambios correctos en los sistemas operativos. Este hardware, que en algunos aspectos es similar al de los sistemas paralelos, está cambiando el dominio de computación de propósito general. Cada vez se encuentran más sistemas de múltiples núcleos en una variedad de ambientes que pueden ir desde computadoras personales a los centros de control de datos más dispares, con cargas de trabajo que son menos predecibles y sistemas operativos más exhaustivos, que las aplicaciones tradicionales de computación de alto rendimiento. Ya no es aceptable o útil, implementar un diseño de sistema operativo de propósito general para un modelo particular de hardware, ya que éste varía enormemente, y las optimizaciones quedan obsoletas tras unos años, por la llegada de nuevo hardware. Por otra parte, estas optimizaciones involucran compensaciones especificas para los parámetros hardware como pueden ser la jerarquía de caché, el modelo de la consistencia de la memoria, y los costes relativos al acceso a la caché local y remota, por lo que no son portables entre los distintos tipos de hardware. A menudo, ni siquiera son aplicables a las siguientes generaciones de la misma arquitectura. Por lo general, debido a estas dificultades, un problema de escalabilidad debe afectar a un grupo sustancial de usuarios antes de que reciban la atención de los desarrolladores del software. Se atribuyen estas dificultades de ingeniería a la estructura básica de un núcleo de memoria compartida, con estructuras de datos protegidos por cerraduras (locks). Los desarrolladores del Multikernel, argumentan un nuevo planteamiento de estructura de sistema operativo, configurándolo como un sistema distribuido de unidades funcionales con comunicación a través de mensajes explícitos. Se identifican tres principios de diseño: 1. Hacer toda la comunicación explicita entre núcleos. 2. Hacer una estructura de sistema operativo neutral al hardware. 3. Ver el estado como replicado en lugar de compartido. 3 La arquitectura del Multikernel se muestra en la siguiente figura: No sólo saca mejores prestaciones al hardware subyacente, que está en red, es heterogéneo y dinámico. Si no que también permite aplicar los conocimientos de sistemas distribuidos a los problemas de adaptabilidad, diversidad y escalabilidad en los sistemas operativos para el hardware futuro. Incluso en los sistemas actuales con eficiencia en la memoria compartida por la coherencia de las cachés, la creación de un sistema operativo basado en el paso de mensajes, en lugar de compartir los datos de comunicación tiene beneficios perceptibles: en lugar de manipular secuencialmente las estructuras de datos compartidas, limitadas por la latencia del acceso a los datos remotos, la capacidad de operaciones de pipeline y la codificación de mensajes por lotes en los entornos remotos, permite que a un solo núcleo lograr un mayor rendimiento y reduce la utilización y el tiempo de interconexión. Además, este concepto tiene naturalmente capacidad para ser utilizado con hardware heterogéneo. 4 3. Implementación: Barrelfish Barrelfish es sólo una manera de implementar un Multikernel, no la única forma. Este proyecto, lo están llevando a cabo investigadores de la ETH Zürich y miembros de Microsoft Research, en Cambridge, en conjunto con el ENS Cachan Bretagne. Barrelfish está escrito en C, aunque también contiene algo de ensamblador, Prolog, Haskell y DSLs. Actualmente se ejecuta en multiprocesadores basados en los modelos x86 de 64bits, aunque un puerto para el ARM está actualmente implementándose. Se ha testeado en los siguientes sistemas: 2X4-core Intel system 2X2-core AMD system 4X4-core AMD system 8X4-core AMD system El modelo Multikernel, se ha llamado así por las múltiples instancias de sistemas operativos independientes con comunicación por medio de mensajes explícitos. En Barrelfish, se introduce la instancia del sistema operativo en cada núcleo dentro de un controlador de CPU (CPU Driver) en modo privilegiado y se hace la distinción de un proceso modo usuario llamado monitor, como se muestra en la siguiente figura: Los controladores de CPU, son locales a cada núcleo y toda la coordinación entre los núcleos está realizada por los monitores. El sistema distribuido de los monitores asociado con los controladores de CPU encapsulan la funcionalidad típica de un monolítico microkernel: la programación, la comunicación y la asignación de los recursos a bajo nivel. 5 El resto del modelo Barrelfish, consiste en controladores de dispositivos y de servicios de sistemas, como pueden ser las pilas de red, los asignadores de memoria, etc. Los cuales se ejecutan en los procesos a nivel de usuario como en un microkernel. Las interrupciones de los dispositivos son enviadas en hardware al núcleo apropiado, demultiplexados por el controlador de CPU para ese núcleo específico, y entregado al proceso controlador por medio de un mensaje. 3.1. Controladores de CPU (CPU drivers) Cada controlador de CPU refuerza la protección, se encarga de la autorización, de los intervalos de tiempo para cada proceso, y es el mediador en el acceso al núcleo y su hardware asociado (MMU, APIC, etc.). Ya que no comparte su estado con otros núcleos, puede ser totalmente controlado por eventos, por un solo hilo de ejecución (sigle-threaded) y no priorizable. La serialización de los eventos de los procesos en forma de traps para cada proceso de usuario o interrupciones de los dispositivos o de otros núcleos. Esto significa que es más fácil escribir y depurar que un kernel convencional, y al ser pequeño, permite que su texto y sus datos se encuentren en la memoria local del núcleo. El controlador de CPU realiza el envío de la mensajería local de manera rápida entre los procesos del núcleo. También ofrece interrupciones hardware a los drivers del espacio de usuario, y localmente controla los tiempos de los procesos. Se invoca a través de las instrucciones estándar de llamadas al sistema con un coste comparable al de Linux en el mismo hardware. 3.2 . Monitores Los monitores coordinan el estado de todo el sistema y encapsulan la mayor parte de los mecanismos y políticas que se encuentran en el núcleo de un sistema operativo tradicional. Los monitores pertenecen a un solo núcleo, los procesos de espacio de usuario y por lo tanto, es planificable. De esta forma, se adaptan a la división de fase, la comunicación entre núcleos orientado al paso de mensajes del modelo Multikernel, en particular a la manipulación de colas de mensajes y las operaciones remotas de alta duración. En cada núcleo, se replican las estructuras de datos, como pueden ser las tablas de asignación de memoria y el mapeado del espacio de direcciones, que se mantiene globalmente consistente por medio de un protocolo de conformidad dirigido por los monitores. Las peticiones de las aplicaciones que mantienen el estado global, son manipuladas por los monitores, que coordinan el acceso a las copias remotas del estado. 6 4 Conclusiones Este nuevo modelo, no está destinado a reemplazar la línea de los sistemas operativos actuales, sino que es un proyecto paralelo, de carácter gratuito y de código abierto, algo que se explica porque toma y reutiliza varios componentes BSD. En el planteamiento de Barrelfish, los núcleos no son necesariamente núcleos de CPU, sino que el GPU también es un núcleo, al igual que los componentes ARM de una controladora, por poner algunos ejemplos. Aunque da la impresión de que en plataformas sencillas, este modelo no puede competir contra el enfoque actual, donde toda la comunicación se maneja por medio del hardware y punto a punto. Pero parece que a medida que añadimos más componentes y núcleos a nuestro sistema, el enfoque dado el Multikernel si podría ser una ventaja. Por ejemplo, hoy se podría construir un servidor con 8 sockets, cada uno con un procesador quad-core, más dos tarjetas graficas dual GPU, sólo en este modelo tendríamos ya 36 procesadores para manejar. Aunque por otro lado, en la práctica no hay ningún sistema operativo basado en el paso de mensajes que haya llegado a ser razonablemente eficiente y extendido su uso. Aparte del Barrelfish, Microsoft también está implementando otro sistema operativo basado en Windows, denominado Singularity Operating System, basado totalmente en aplicaciones .Net y pensado para una plataforma de Multikernel. 7 5 Referencias • • • • • • • • • • • Andrew Baumann, Paul Barham, Pierre-Evariste Dagand, y otros. The Multikernel: A new OS architecture for scalable multicore systems. Systems Groups, ETH Zurich, Microsoft Research, Cambridge, ENS Cachan Bretagne. Octubre 2009 www.barrelfish.org http://research.microsoft.com/en-us/projects/Barrelfish/ www.eetimes.eu http://en.wikipedia.org http://www.chw.net/2009/09/microsoft-barrelfish-os-multikernel-open-source/ http://www.osnews.com/story/22241/Microsoft_Releases_Code_for_Multikernel_Res earch_OS_Barrelfish_ http://www.linux-magazine.com/Online/News/Barrelfish-Multikernel-OperatingSystem-out-of-Zurich http://www.muywindows.com/2009/09/25/barrelfish-microsoft-inventa-otro-sistemaoperativo http://www.dosideas.com/noticias/actualidad/487-los-lenguajes-especificos-dedominio.html http://www.thalskarth.com.ar/2010/08/25/10-diferencias-entre-bsd-y-gnulinux/ 8