Sistema de arquivos virtual paralelo - Parallel Virtual File System

Sistema de Arquivo Virtual Paralelo
Autor (es) original (is) Clemson University , Argonne National Laboratory , Ohio Supercomputer Center
Desenvolvedor (s) Walt Ligon, Rob Ross, Phil Carns, Pete Wyckoff, Neil Miller, Rob Latham, Sam Lang, Brad Settlemyer
lançamento inicial 2003
Versão estável
2.8.2 / 1 ° de janeiro de 2010 ; 11 anos atrás  ( 01-01-2010 )
Escrito em C
Sistema operacional Kernel Linux
Licença LGPL
Local na rede Internet web .archive .org / web / 20160701052501 / http: // www .pvfs .org /

O Parallel Virtual File System ( PVFS ) é um sistema de arquivos paralelo de código-fonte aberto . Um sistema de arquivo paralelo é um tipo de sistema de arquivo distribuído que distribui dados de arquivo em vários servidores e fornece acesso simultâneo por várias tarefas de um aplicativo paralelo. PVFS foi projetado para uso em computação de cluster em grande escala . O PVFS se concentra no acesso de alto desempenho a grandes conjuntos de dados. Ele consiste em um processo de servidor e uma biblioteca de cliente, ambos escritos inteiramente em código de nível de usuário. Um módulo de kernel Linux e um processo pvfs-client permitem que o sistema de arquivos seja montado e usado com utilitários padrão. A biblioteca cliente fornece acesso de alto desempenho por meio da interface de passagem de mensagens (MPI). O PVFS está sendo desenvolvido em conjunto entre o Laboratório de Pesquisa de Arquitetura Paralela da Universidade Clemson e a Divisão de Matemática e Ciência da Computação do Laboratório Nacional de Argonne e o Centro de Supercomputadores de Ohio . O desenvolvimento do PVFS foi financiado pelo NASA Goddard Space Flight Center , o programa DOE Office of Science Advanced Computing Research , os programas NSF PACI e HECURA e outras agências governamentais e privadas. PVFS agora é conhecido como OrangeFS em seu mais novo ramo de desenvolvimento.

História

O PVFS foi desenvolvido pela primeira vez em 1993 por Walt Ligon e Eric Blumer como um sistema de arquivos paralelo para Máquina Virtual Paralela (PVM) como parte de uma bolsa da NASA para estudar os padrões de E / S de programas paralelos. O PVFS versão 0 foi baseado no Vesta, um sistema de arquivos paralelo desenvolvido no IBM TJ Watson Research Center . A partir de 1994, Rob Ross reescreveu o PVFS para usar TCP / IP e se afastou de muitos dos pontos do projeto Vesta original. O PVFS versão 1 foi direcionado a um cluster de estações de trabalho DEC Alpha em rede usando FDDI comutado . Como o Vesta, o PVFS distribui dados em vários servidores e permite solicitações de E / S com base em uma visualização de arquivo que descreve um padrão de acesso estendido. Ao contrário de Vesta, o striping e a visualização não dependiam de um tamanho de registro comum. A pesquisa de Ross se concentrou no agendamento de E / S de disco quando vários clientes acessavam o mesmo arquivo. Os resultados anteriores mostraram que o agendamento de acordo com o melhor padrão de acesso ao disco possível era preferível. Ross mostrou que isso depende de vários fatores, incluindo a velocidade relativa da rede e os detalhes da visualização do arquivo. Em alguns casos, uma programação baseada no tráfego de rede era preferível, portanto, uma programação adaptável dinamicamente forneceu o melhor desempenho geral.

No final de 1994, Ligon se encontrou com Thomas Sterling e John Dorband no Goddard Space Flight Center (GSFC) e discutiu seus planos para construir o primeiro computador Beowulf . Foi acordado que o PVFS seria portado para o Linux e apresentado na nova máquina. Nos anos seguintes, Ligon e Ross trabalharam com o grupo GSFC, incluindo Donald Becker, Dan Ridge e Eric Hendricks. Em 1997, em uma reunião do cluster em Pasadena, a CA Sterling solicitou que o PVFS fosse lançado como um pacote de código aberto.

PVFS2

Em 1999, Ligon propôs o desenvolvimento de uma nova versão do PVFS inicialmente apelidada de PVFS2000 e posteriormente PVFS2. O design foi inicialmente desenvolvido por Ligon, Ross e Phil Carns. Ross completou seu PhD em 2000 e mudou-se para o Argonne National Laboratory e o projeto e implementação foram realizados por Ligon, Carns, Dale Witchurch e Harish Ramachandran na Clemson University , Ross, Neil Miller e Rob Latham no Argonne National Laboratory e Pete Wyckoff no Ohio Supercomputer Center. O novo sistema de arquivos foi lançado em 2003. O novo design apresentava servidores de objetos, metadados distribuídos, visualizações baseadas em MPI, suporte para vários tipos de rede e uma arquitetura de software para fácil experimentação e extensibilidade.

O PVFS versão 1 foi retirado em 2005. O PVFS versão 2 ainda é suportado por Clemson e Argonne. Carns completou seu PhD em 2006 e ingressou na Axicom, Inc., onde o PVFS foi implantado em vários milhares de nós para mineração de dados. Em 2008, Carns mudou-se para Argonne e continua a trabalhar no PVFS junto com Ross, Latham e Sam Lang. Brad Settlemyer desenvolveu um subsistema de espelhamento em Clemson e, posteriormente, uma simulação detalhada de PVFS usada para pesquisar novos desenvolvimentos. Settlemyer está agora no Laboratório Nacional de Oak Ridge . em 2007, a Argonne começou a portar o PVFS para uso em um IBM Blue Gene / P. Em 2008, a Clemson começou a desenvolver extensões para oferecer suporte a grandes diretórios de pequenos arquivos, aprimoramentos de segurança e recursos de redundância. Como muitos desses objetivos conflitavam com o desenvolvimento do Blue Gene, um segundo branch da árvore de origem do CVS foi criado e apelidado de "Orange" e o branch original foi apelidado de "Blue". PVFS e OrangeFS rastreiam um ao outro de perto, mas representam dois grupos diferentes de requisitos do usuário. A maioria dos patches e atualizações são aplicados a ambos os ramos. Em 2011, o OrangeFS é a principal linha de desenvolvimento.

Características

Em um cluster que usa PVFS, os nós são designados como um ou mais de: cliente, servidor de dados, servidor de metadados. Os servidores de dados armazenam os dados do arquivo. Os servidores de metadados contêm metadados, incluindo informações de estatísticas, atributos e identificadores de arquivos de dados, bem como entradas de diretório. Os clientes executam aplicativos que utilizam o sistema de arquivos, enviando solicitações aos servidores pela rede.

Design baseado em objeto

O PVFS tem um design baseado em objetos, o que significa que todas as solicitações do servidor PVFS envolveram objetos chamados de espaços de dados. Um espaço de dados pode ser usado para conter dados de arquivo, metadados de arquivo, metadados de diretório, entradas de diretório ou links simbólicos. Cada espaço de dados em um sistema de arquivos possui um identificador exclusivo. Qualquer cliente ou servidor pode verificar qual servidor contém o espaço de dados com base no identificador. Um espaço de dados tem dois componentes: um bytestream e um conjunto de pares de chave / valor. O bytestream é uma sequência ordenada de bytes, normalmente usada para armazenar dados do arquivo, e os pares de chave / valor são normalmente usados ​​para armazenar metadados. O design baseado em objeto tornou-se típico de muitos sistemas de arquivos distribuídos, incluindo Luster , Panasas e pNFS .

Separação de dados e metadados

O PVFS é projetado para que um cliente possa acessar um servidor para metadados uma vez e, em seguida, pode acessar os servidores de dados sem interação adicional com os servidores de metadados. Isso remove um gargalo crítico do sistema e permite um desempenho muito maior.

Solicitações baseadas em MPI

Quando um programa cliente solicita dados do PVFS, ele pode fornecer uma descrição dos dados baseada em MPI_Datatypes. Este recurso permite que as visualizações de arquivos MPI sejam implementadas diretamente pelo sistema de arquivos. MPI_Datatypes pode descrever padrões complexos de dados não contíguos. O servidor PVFS e os códigos de dados implementam fluxos de dados que transferem dados de maneira eficiente entre vários servidores e clientes.

Suporte a várias redes

O PVFS usa uma camada de rede chamada BMI que fornece uma interface de mensagem sem bloqueio projetada especificamente para sistemas de arquivos. A BMI tem vários módulos de implementação para várias redes diferentes usadas em computação de alto desempenho, incluindo TCP / IP, Myrinet , Infiniband e Portals .

Servidores sem estado (sem bloqueio)

Os servidores PVFS são projetados de forma que não compartilhem nenhum estado entre si ou com clientes. Se um servidor travar, outro pode ser facilmente reiniciado em seu lugar. As atualizações são realizadas sem o uso de bloqueios.

Implementação em nível de usuário

Clientes e servidores PVFS são executados no nível do usuário. As modificações do kernel não são necessárias. Há um módulo de kernel opcional que permite que um sistema de arquivos PVFS seja montado como qualquer outro sistema de arquivos, ou os programas podem ser vinculados diretamente a uma interface de usuário como MPI-IO ou uma interface semelhante a Posix . Esses recursos tornam o PVFS fácil de instalar e menos propenso a causar travamentos do sistema.

Interface de nível de sistema

A interface PVFS foi projetada para ser integrada no nível do sistema. Ele tem semelhanças com o Linux VFS , o que o torna fácil de implementar como um sistema de arquivos montável, mas é igualmente adaptável a interfaces de nível de usuário, como MPI-IO ou interfaces do tipo Posix . Ele expõe muitos dos recursos do sistema de arquivos subjacente para que as interfaces possam tirar proveito deles, se desejado.

Arquitetura

O PVFS consiste em 4 componentes principais e vários programas utilitários. Os componentes são o PVFS2-server, o pvfslib, o PVFS-client-core e o módulo de kernel PVFS. Os utilitários incluem a ferramenta de gerenciamento de karma, utilitários (por exemplo, pvfs-ping, pvfs-ls, pvfs-cp, etc.) que operam diretamente no sistema de arquivos sem usar o módulo do kernel (principalmente para manutenção e teste). Outro ponto chave do projeto é o protocolo PVFS, que descreve as mensagens passadas entre o cliente e o servidor, embora este não seja estritamente um componente.

PVFS2-server

O servidor PVFS é executado como um processo em um nó designado como um nó de E / S. Os nós de E / S são geralmente nós dedicados, mas podem ser nós regulares que também executam tarefas de aplicativos. O servidor PVFS geralmente é executado como root, mas pode ser executado como um usuário, se preferir. Cada servidor pode gerenciar vários sistemas de arquivos distintos e é designado para ser executado como um servidor de metadados, servidor de dados ou ambos. Toda a configuração é controlada por um arquivo de configuração especificado na linha de comando e todos os servidores que gerenciam um determinado sistema de arquivos usam o mesmo arquivo de configuração. O servidor recebe solicitações pela rede, realiza a solicitação que pode envolver E / S de disco e responde ao solicitante original. As solicitações normalmente vêm de nós clientes que executam tarefas de aplicativo, mas podem vir de outros servidores. O servidor é composto pelo processador de solicitação, a camada de trabalho, Trove, BMI e camadas de fluxo.

Solicitar processador

O processador de solicitação consiste no loop principal do processo do servidor e em várias máquinas de estado. As máquinas de estado são baseadas em uma linguagem simples desenvolvida para PVFS que gerencia a simultaneidade no servidor e no cliente. Uma máquina de estado consiste em vários estados, cada um dos quais executa uma função de ação de estado C ou chama uma máquina de estado aninhada (sub-rotina). Em qualquer um dos casos, os códigos de retorno selecionam para qual estado ir a seguir. As funções de ação de estado normalmente enviam um trabalho por meio da camada de trabalho que realiza algum tipo de E / S via Trove ou BMI. Os trabalhos não são bloqueadores, de modo que, assim que um trabalho é emitido, a execução da máquina de estado é adiada para que outra máquina de estado possa ser executada atendendo a outra solicitação. Quando os trabalhos são concluídos, o loop principal reinicia a máquina de estado associada. O processador de pedido tem máquinas de estado para cada um dos vários tipos de pedido definidos no protocolo de pedido PVFS mais um número de máquinas de estado aninhadas usadas internamente. A arquitetura da máquina de estado torna relativamente fácil adicionar novas solicitações ao servidor para adicionar recursos ou otimizar para situações específicas.

Camada de trabalho

A camada de trabalho fornece uma interface comum para enviar Trove, BMI e trabalhos de fluxo e relatar sua conclusão. Ele também implementa o agendador de solicitações como um trabalho sem bloqueio que registra quais tipos de solicitações estão em andamento em quais objetos e evita erros de consistência devido à operação simultânea nos mesmos dados de arquivo.

Trove

Trove gerencia I / O para os objetos armazenados no servidor local. Trove opera em coleções de espaços de dados. Uma coleção possui seu próprio espaço de identificador independente e é usada para implementar sistemas de arquivos PVFS distintos. Um espaço de dados é um objeto PVFS e tem seu próprio identificador exclusivo (dentro da coleção) e é armazenado em um servidor. Os identificadores são mapeados para servidores por meio de uma tabela no arquivo de configuração. Um espaço de dados consiste em duas partes: um bytestream e um conjunto de pares de chave / valor. Um bytestream é uma sequência de bytes de comprimento indeterminado e é usado para armazenar dados de arquivo, normalmente em um arquivo no sistema de arquivos local. Os pares de chave / valor são usados ​​para armazenar metadados, atributos e entradas de diretório. O Trove tem uma interface bem definida e pode ser implementado de várias maneiras. Até agora, a única implementação foi a implementação Trove-dbfs que armazena bytestreams em arquivos e pares de chave / valor em um banco de dados Berkeley DB . As operações Trove não são bloqueadoras, a API fornece funções de postagem para ler ou gravar os vários componentes e funções para verificar ou aguardar a conclusão.

IMC

Fluxos

pvfslib

PVFS-client-core

Módulo de kernel PVFS

Veja também

Referências

links externos