El Sistema de Archivos Virtuales Paralelos ( PVFS ) es un sistema de archivos paralelo de código abierto . Un sistema de archivos paralelo es un tipo de sistema de archivos distribuido que distribuye datos de archivos entre múltiples servidores y permite el acceso concurrente de múltiples tareas de una aplicación paralela. PVFS fue diseñado para su uso en computación en clúster a gran escala . PVFS se centra en el acceso de alto rendimiento a grandes conjuntos de datos. Consta de un proceso de servidor y una biblioteca cliente, ambos escritos completamente en código de nivel de usuario. Un módulo del kernel de Linux y el proceso pvfs-client permiten montar el sistema de archivos y utilizarlo con utilidades estándar. La biblioteca cliente proporciona acceso de alto rendimiento a través de la interfaz de paso de mensajes (MPI). PVFS se está desarrollando conjuntamente entre el Laboratorio de Investigación de Arquitectura Paralela de la Universidad de Clemson , la División de Matemáticas y Ciencias de la Computación del Laboratorio Nacional Argonne y el Centro de Supercomputación de Ohio . El desarrollo de PVFS ha sido financiado por el Centro de Vuelos Espaciales Goddard de la NASA, el programa de Investigación de Computación Científica Avanzada de la Oficina de Ciencia del Departamento de Energía de EE. UU. , los programas PACI y HECURA de la NSF y otras agencias gubernamentales y privadas. PVFS ahora se conoce como OrangeFS en su rama de desarrollo más reciente.
Historia
PVFS fue desarrollado por primera vez en 1993 por Walt Ligon y Eric Blumer como un sistema de archivos paralelo para Parallel Virtual Machine (PVM) [ 1 ] como parte de una subvención de la NASA para estudiar los patrones de E/S de los programas paralelos. La versión 0 de PVFS se basó en Vesta, un sistema de archivos paralelo desarrollado en el Centro de Investigación IBM TJ Watson . [ 2 ] A partir de 1994, Rob Ross reescribió PVFS para usar TCP/IP y se apartó de muchos de los puntos de diseño originales de Vesta. La versión 1 de PVFS estaba dirigida a un clúster de estaciones de trabajo DEC Alpha en red usando FDDI conmutado . Al igual que Vesta, PVFS distribuía los datos entre varios servidores y permitía solicitudes de E/S basadas en una vista de archivo que describía un patrón de acceso escalonado. A diferencia de Vesta, la distribución y la vista no dependían de un tamaño de registro común. La investigación de Ross se centró en la planificación de la E/S de disco cuando varios clientes accedían al mismo archivo. [ 3 ] Resultados anteriores habían demostrado que la planificación según el mejor patrón de acceso al disco posible era preferible. Ross demostró que esto dependía de varios factores, incluyendo la velocidad relativa de la red y los detalles de la vista del archivo. En algunos casos, una planificación basada en el tráfico de red era preferible, por lo que una planificación dinámicamente adaptable proporcionaba el mejor rendimiento general. [ 4 ]
A finales de 1994, Ligon se reunió con Thomas Sterling y John Dorband en el Centro de Vuelo Espacial Goddard (GSFC) y discutieron sus planes para construir la primera computadora Beowulf . [ 5 ] Se acordó que PVFS se portaría a Linux y se incluiría en la nueva máquina. Durante los años siguientes, Ligon y Ross trabajaron con el grupo del GSFC, que incluía a Donald Becker, Dan Ridge y Eric Hendricks. En 1997, en una reunión del clúster en Pasadena, California, Sterling solicitó que PVFS se publicara como un paquete de código abierto. [ 6 ]
PVFS2
En 1999, Ligon propuso el desarrollo de una nueva versión de PVFS, inicialmente denominada PVFS2000 y posteriormente PVFS2. El diseño fue desarrollado inicialmente por Ligon, Ross y Phil Carns. Ross completó su doctorado en 2000 y se trasladó al Laboratorio Nacional Argonne , donde Ligon, Carns, Dale Witchurch y Harish Ramachandran en la Universidad de Clemson , Ross, Neil Miller y Rob Latham en el Laboratorio Nacional Argonne , y Pete Wyckoff en el Centro de Supercomputación de Ohio. [ 7 ] El nuevo sistema de archivos se lanzó en 2003. El nuevo diseño presentaba servidores de objetos, metadatos distribuidos, vistas basadas en MPI, soporte para múltiples tipos de red y una arquitectura de software para una fácil experimentación y extensibilidad.
La versión 1 de PVFS se retiró en 2005. La versión 2 de PVFS todavía cuenta con el soporte de Clemson y Argonne. Carns completó su doctorado en 2006 y se unió a Axicom, Inc., donde PVFS se implementó en varios miles de nodos para minería de datos. En 2008, Carns se trasladó a Argonne y continúa trabajando en PVFS junto con Ross, Latham y Sam Lang. Brad Settlemyer desarrolló un subsistema de replicación en Clemson y, posteriormente, una simulación detallada de PVFS utilizada para investigar nuevos desarrollos. Settlemyer ahora está en el Laboratorio Nacional de Oak Ridge . En 2007, Argonne comenzó a portar PVFS para su uso en un IBM Blue Gene /P. [ 8 ] En 2008, Clemson comenzó a desarrollar extensiones para admitir grandes directorios de archivos pequeños, mejoras de seguridad y capacidades de redundancia. Dado que muchos de estos objetivos entraban en conflicto con el desarrollo de Blue Gene, se creó una segunda rama del árbol de código fuente de CVS, denominada "Orange", mientras que la rama original pasó a llamarse "Blue". PVFS y OrangeFS se complementan estrechamente, pero representan dos grupos diferentes de requisitos de usuario. La mayoría de los parches y actualizaciones se aplican a ambas ramas. Desde 2011, OrangeFS es la principal línea de desarrollo.
Características
En un clúster que utiliza PVFS, los nodos se designan como uno o más de los siguientes tipos: cliente, servidor de datos y servidor de metadatos. Los servidores de datos almacenan los datos de los archivos. Los servidores de metadatos almacenan metadatos que incluyen información estadística, atributos, identificadores de archivos de datos y entradas de directorio. Los clientes ejecutan aplicaciones que utilizan el sistema de archivos enviando solicitudes a los servidores a través de la red.
Diseño basado en objetos
PVFS tiene un diseño basado en objetos, lo que significa que todas las solicitudes al servidor PVFS involucran objetos llamados espacios de datos. Un espacio de datos puede usarse para almacenar datos de archivos, metadatos de archivos, metadatos de directorios, entradas de directorios o enlaces simbólicos. Cada espacio de datos en un sistema de archivos tiene un identificador único. Cualquier cliente o servidor puede consultar qué servidor contiene el espacio de datos basándose en el identificador. Un espacio de datos tiene dos componentes: un flujo de bytes y un conjunto de pares clave/valor. El flujo de bytes es una secuencia ordenada de bytes, que normalmente se usa para almacenar datos de archivos, y los pares clave/valor se usan normalmente para almacenar metadatos. El diseño basado en objetos se ha convertido en algo típico de muchos sistemas de archivos distribuidos, incluidos Lustre , Panasas y pNFS .
Separación de datos y metadatos
PVFS está diseñado para que un cliente pueda acceder a un servidor de metadatos una sola vez y, posteriormente, acceder a los servidores de datos sin necesidad de interactuar nuevamente con los servidores de metadatos. Esto elimina un cuello de botella crítico del sistema y permite un rendimiento mucho mayor.
Solicitudes basadas en MPI
Cuando un programa cliente solicita datos a PVFS, puede proporcionar una descripción de los datos basada en MPI_Datatypes. Esta funcionalidad permite que el sistema de archivos implemente directamente las vistas de archivos MPI. MPI_Datatypes puede describir patrones de datos complejos y no contiguos. El servidor PVFS y el código de datos implementan flujos de datos que transfieren datos de manera eficiente entre múltiples servidores y clientes.
Soporte para múltiples redes
PVFS utiliza una capa de red llamada BMI que proporciona una interfaz de mensajes sin bloqueo diseñada específicamente para sistemas de archivos. BMI tiene múltiples módulos de implementación para varias redes diferentes utilizadas en computación de alto rendimiento, incluidas TCP/IP, Myrinet , Infiniband y Portals . [ 9 ]
Servidores sin estado (sin bloqueo)
Los servidores PVFS están diseñados para no compartir ningún estado entre sí ni con los clientes. Si un servidor falla, otro puede reiniciarse fácilmente en su lugar. Las actualizaciones se realizan sin utilizar bloqueos.
Implementación a nivel de usuario
Los clientes y servidores PVFS se ejecutan a nivel de usuario. No se requieren modificaciones en el kernel. Existe un módulo de kernel opcional que permite montar un sistema de archivos PVFS como cualquier otro, o bien, los programas pueden conectarse directamente a una interfaz de usuario como MPI-IO o una interfaz tipo Posix . Esta característica facilita la instalación de PVFS y reduce la probabilidad de fallos del sistema.
Interfaz a nivel de sistema
La interfaz PVFS está diseñada para integrarse a nivel de sistema. Presenta similitudes con el VFS de Linux , lo que facilita su implementación como sistema de archivos montable, pero también es igualmente adaptable a interfaces de nivel de usuario como MPI-IO o interfaces tipo Posix . Expone muchas de las características del sistema de archivos subyacente para que las interfaces puedan aprovecharlas si se desea. [ 10 ] [ 11 ]
Arquitectura
PVFS consta de cuatro componentes principales y varios programas de utilidad. Los componentes son el servidor PVFS2, la biblioteca pvfslib, el núcleo del cliente PVFS y el módulo del kernel de PVFS. Las utilidades incluyen la herramienta de gestión Karma y otras utilidades (como pvfs-ping, pvfs-ls, pvfs-cp, etc.) que operan directamente sobre el sistema de archivos sin utilizar el módulo del kernel (principalmente para mantenimiento y pruebas). Otro aspecto clave del diseño es el protocolo PVFS, que describe los mensajes que se intercambian entre el cliente y el servidor, aunque este no es estrictamente un componente.
Servidor PVFS2
El servidor PVFS se ejecuta como un proceso en un nodo designado como nodo de E/S. Los nodos de E/S suelen ser nodos dedicados, pero también pueden ser nodos regulares que ejecutan tareas de aplicación. El servidor PVFS normalmente se ejecuta como root, pero puede ejecutarse como usuario si se prefiere. Cada servidor puede administrar varios sistemas de archivos distintos y está designado para ejecutarse como servidor de metadatos, servidor de datos o ambos. Toda la configuración se controla mediante un archivo de configuración especificado en la línea de comandos, y todos los servidores que administran un sistema de archivos determinado utilizan el mismo archivo de configuración. El servidor recibe solicitudes a través de la red, las ejecuta (lo que puede implicar E/S de disco) y responde al solicitante original. Las solicitudes normalmente provienen de nodos cliente que ejecutan tareas de aplicación, pero también pueden provenir de otros servidores. El servidor se compone del procesador de solicitudes, la capa de trabajos, Trove, BMI y las capas de flujo.
Procesador de solicitudes
El procesador de solicitudes consta del bucle principal del proceso del servidor y varias máquinas de estado. Estas máquinas se basan en un lenguaje sencillo desarrollado para PVFS que gestiona la concurrencia entre el servidor y el cliente. Cada máquina de estado consta de varios estados, cada uno de los cuales ejecuta una función de acción de estado en C o llama a una máquina de estado anidada (subrutina). En ambos casos, los códigos de retorno seleccionan el siguiente estado. Las funciones de acción de estado suelen enviar una tarea a través de la capa de tareas, que realiza algún tipo de E/S mediante Trove o BMI. Las tareas no son bloqueantes, por lo que una vez que se emite una tarea, la ejecución de la máquina de estado se pospone para que otra máquina de estado pueda atender otra solicitud. Cuando las tareas finalizan, el bucle principal reinicia la máquina de estado asociada. El procesador de solicitudes dispone de máquinas de estado para cada uno de los distintos tipos de solicitud definidos en el protocolo de solicitud de PVFS, además de varias máquinas de estado anidadas de uso interno. La arquitectura de las máquinas de estado facilita la incorporación de nuevas solicitudes al servidor para añadir funcionalidades u optimizar su rendimiento en situaciones específicas.
Capa de trabajo
La capa de trabajos proporciona una interfaz común para enviar trabajos de Trove, BMI y flujos, e informar sobre su finalización. También implementa el planificador de solicitudes como un trabajo no bloqueante que registra qué tipo de solicitudes están en curso sobre qué objetos y evita errores de coherencia debidos a operaciones simultáneas sobre los mismos datos de archivo.
Tesoro
Trove gestiona las operaciones de entrada/salida (E/S) de los objetos almacenados en el servidor local. Trove opera con colecciones de espacios de datos. Cada colección tiene su propio espacio de identificadores independiente y se utiliza para implementar sistemas de archivos PVFS distintos. Un espacio de datos es un objeto PVFS, tiene su propio identificador único (dentro de la colección) y se almacena en un servidor. Los identificadores se asignan a los servidores mediante una tabla en el archivo de configuración. Un espacio de datos consta de dos partes: un flujo de bytes y un conjunto de pares clave/valor. Un flujo de bytes es una secuencia de bytes de longitud indeterminada y se utiliza para almacenar datos de archivos, normalmente en un archivo del sistema de archivos local. Los pares clave/valor se utilizan para almacenar metadatos, atributos y entradas de directorio. Trove tiene una interfaz bien definida y puede implementarse de diversas maneras. Hasta la fecha, la única implementación ha sido Trove-dbfs, que almacena flujos de bytes en archivos y pares clave/valor en una base de datos Berkeley DB . [ 12 ] Las operaciones de Trove no son bloqueantes, la API proporciona funciones posteriores para leer o escribir los diversos componentes y funciones para verificar o esperar a que se completen.
IMC
Flujos
pvfslib
Núcleo del cliente PVFS
Módulo del kernel PVFS
Véase también
Referencias
- ↑ A. Blumer y WB Ligon, "El sistema de archivos virtuales paralelos", Reunión del grupo de usuarios de PVM de 1994, 1994.
- ↑ Peter F. Corbett, Dror G. Feitelson, El sistema de archivos paralelos Vesta, ACM Transactions on Computer Systems (TOCS), vol. 14, n.º 3, págs. 225-264, agosto de 1996.
- ↑ WB Ligon, III y RB Ross, "Implementación y rendimiento de un sistema de archivos paralelo para aplicaciones distribuidas de alto rendimiento", 5º Simposio IEEE sobre computación distribuida de alto rendimiento, agosto de 1996.
- ↑ WB Ligon, III y RB Ross, "Programación del lado del servidor en sistemas de E/S paralelas en clúster", E/S paralelas para computación en clúster, editores Christophe Cèrin y Hai Jin, páginas 157-177, Kogan Page Science, septiembre de 2003.
- ↑ WB Ligon III, RB Ross, D. Becker, P. Merkey, "Beowulf: Supercomputación de bajo costo usando Linux", revista IEEE Software, número especial sobre Linux, volumen 16, número 1, página 79, enero de 1999.
- ↑ Walt Ligon y Rob Ross, "Parallel I/O and the Parallel Virtual File System", Beowulf Cluster Computing with Linux, 2.ª edición, William Gropp, Ewing Lusk y Thomas Sterling, editores, páginas 489-530, MIT Press, noviembre de 2003.
- ↑ PH Carns, WB Ligon III, RB Ross y R. Thakur, "PVFS: Un sistema de archivos paralelo para clústeres Linux", Extreme Linux Workshop, Atlanta, octubre de 2000. Premio al mejor artículo de la conferencia.
- ↑ Samuel Lang, Philip Carns, Robert Latham, Robert Ross, Kevin Harms, William Allcock, "Desafíos de rendimiento de E/S a escala de liderazgo", Actas de Supercomputing, 2009
- ↑ Philip H. Carns, Walter B. III, Robert Ross, Pete Wyckoff, "BMI: una capa de abstracción de red para E/S paralela", Actas de IPDPS '05, 2005
- ↑ M. Vilayannur, S. Lang, R. Ross, R. Klundt, L. Ward, "Extending the POSIX I/O Interface: A Parallel File System Perspective," Technical Memorandum ANL/MCS-TM-302, 2008.
- ↑ Swapnil A. Patil, Garth A. Gibson, Gregory R. Ganger, Julio Lopez, Milo Polte, Wittawat Tantisiroj, Lin Xiao, "En busca de una API para sistemas de archivos escalables: ¿Debajo de la mesa o encima de ella?", USENIX HotCloud Workshop 2009.
- ↑ RCE 35: PVFS Sistema de archivos virtuales paralelos
Enlaces externos
- Sitio web oficial
- Sistema de archivos Orange : una rama del sistema de archivos virtuales paralelos.
- Arquitectura de un sistema de archivos paralelo de próxima generación
- Archivo de vídeo archivado el 28/03/2016 en Wayback Machine .
- Sistemas de archivos distribuidos
- Sistemas de archivos distribuidos compatibles con el kernel de Linux
- Sistemas de archivos de red