SlideShare uma empresa Scribd logo
1 de 42
Baixar para ler offline
Otimizações em Sistemas de Armazenamento mediadas por
               anotações em Metadados




                               Thiago Emmanuel Pereira

                                         Conversa LSD
                              Laboratório de Sistemas Distribuídos


                                        Abril / 2010
ELAP Program

Support the development of human capital and a next generation of Latin
Americans




 2 / 31
O Zoo de aplicações

Várias aplicações
• Banco de Dados
• HPC
• Aplicações para Desktops
• Data provenance




 3 / 31
O Zoo de aplicações

Várias aplicações
• Banco de Dados
• HPC
• Aplicações para Desktops
• Data provenance

Várias particularidades
• Fault-tolerance (Erasure-coding, replicação)
• Workload (write-once/read-many, big-data/small-data)
• Consistência (...)


 3 / 31
O Zoo de aplicações - Domando as bestas




Um monte de sistemas ...
• GFS, Lustre, Ceph, XFS
• ext3, ext4, Raiser, LFS
• OceanStore
• Beehive, NFS, Coda




 4 / 31
O Zoo de aplicações - Domando as bestas

Mais níveis de indireção
• XAM (eXtensible Access Method) POSIX-like interface + Metadata




 5 / 31
O Zoo de aplicações - Domando as bestas




Como facilitar a implementação de novas funcionalidades em Sistemas
de Arquivos sem se afastar (muito) de POSIX ?




 6 / 31
Como habilitar a comunicação entre aplicações e o
sistema de arquivos ?




                             Listing 1: OurAPI
i n t open ( char ∗ path , mode_t mode , i n t r e p _ l e v e l ) ;




 7 / 31
Como habilitar a comunicação entre aplicações e o
sistema de arquivos ?




                             Listing 3: OurAPI
i n t open ( char ∗ path , mode_t mode , i n t r e p _ l e v e l ) ;


                           Listing 4: POSIX API
i n t open ( char ∗ path , mode_t mode ) ;




 7 / 31
Como habilitar a comunicação entre aplicações e o
sistema de arquivos ?



                                Listing 5: OurAPI
i n t l o c a t i o n ( char ∗ path , char ∗ l o c a t i o n _ d s t ) ;
i n t f o r k ( char ∗ l o c a t i o n _ t o _ m i g r a t e ) ;




 8 / 31
Como habilitar a comunicação entre aplicações e o
sistema de arquivos ?



                                Listing 7: OurAPI
i n t l o c a t i o n ( char ∗ path , char ∗ l o c a t i o n _ d s t ) ;
i n t f o r k ( char ∗ l o c a t i o n _ t o _ m i g r a t e ) ;


                              Listing 8: POSIX API
                  ????????????????????????????????????




 8 / 31
Metadata annotations
FreeBSD, Linux, Mac OS X, OpenBSD
i n t s e t x a t t r ( char ∗ path , char ∗name , void ∗ v a l u e ) ;
i n t g e t x a t t r ( char ∗ path , char ∗name , void ∗ v a l u e ) ;




 9 / 31
Metadata annotations
    FreeBSD, Linux, Mac OS X, OpenBSD
    i n t s e t x a t t r ( char ∗ path , char ∗name , void ∗ v a l u e ) ;
    i n t g e t x a t t r ( char ∗ path , char ∗name , void ∗ v a l u e ) ;




1   s e t x a t t r ( " / tmp / f o o " , " r _ l e v e l " , " 3 " ) ;
2   g e t x a t t r ( " / tmp / f o o " , " l o c a t i o n " , v a l u e ) ;
     9 / 31
Extensibilidade




Como permitir a alteração do comportamento original do sistema ?




 10 / 31
Extensibilidade




Como permitir a alteração o comportamento original do sistema ?
• Pontos de desvio
• Otimizações




 11 / 31
Pontos de desvio - Modelo de Programação




                              Listing 9: Vanilla
void n o t i f y _ f a i l u r e ( char ∗ nodename ) {
  naming . n o t i f y _ f a i l u r e ( nodename ) ;
}




 12 / 31
Pontos de desvio - Modelo de Programação




void t r a p ( char ∗ e n t r y _ I D , char ∗ fname ,
                          x a t t r _ l i s t ∗ x a t t r s , void ∗ params ) ;




 13 / 31
Pontos de desvio - Modelo de Programação

                              Listing 10: Vanilla
void n o t i f y _ f a i l u r e ( char ∗ nodename ) {
  naming . n o t i f y _ f a i l u r e ( nodename ) ;
}


                        Listing 11: Vanilla + Desvio
void n o t i f y _ f a i l u r e ( char ∗ nodename ) {
  f o r e a c h fname i n s t o r e d _ f i l e s ( nodename ) {
       t r a p ( " ACK_FAIL " , fname , l s t x a t t r ( fname ) , nodename ) ;
  }
  naming . n o t i f y _ f a i l u r e ( nodename ) ;
}

 14 / 31
Otimizações - Modelo de Programação

FailtureHandler

  v o i d h a n d l e _ f a i l u r e ( char ∗ fname , x a t t r _ l i s t ∗ x a t t r s ,
         v o i d ∗ params ) {

          i f ( x a t t r s . contains ( " r _ l e v e l " ) {
             i n t r _ l e v e l = x a t t r s . get ( " r _ l e v e l " ) ;
             char ∗ f a i l e d _ n o d e = ( char ∗ ) params ;
             update ( fname , r _ l e v e l , a l l _ n o d e s ( ) , f a i l e d _ n o d e ) ;
          } else {
             l o g ( "O a r q u i v o <%s> não f o i anotado " , fname ) ;
          }
  }

15 / 31
Juntando as peças


Em tempo de compilação
1. Definir um ponto de desvio

void n o t i f y _ f a i l u r e ( char ∗ nodename ) {
  f o r e a c h fname i n s t o r e d _ f i l e s ( nodename ) {
       t r a p ( " ACK_FAIL " , fname , l s t x a t t r ( fname ) , nodename ) ;
  }
  naming . n o t i f y _ f a i l u r e ( nodename ) ;
}




 16 / 31
Juntando as peças
Em tempo de compilação
1. Definir um ponto de desvio
2. Implementar a otimização

v o i d h a n d l e _ f a i l u r e ( char ∗ fname , x a t t r _ l i s t ∗ x a t t r s ,
         v o i d ∗ params ) {

           i f ( x a t t r s . contains ( " r _ l e v e l " ) {
              i n t r _ l e v e l = x a t t r s . get ( " r _ l e v e l " ) ;
              char ∗ f a i l e d _ n o d e = ( char ∗ ) params ;
              update ( fname , r _ l e v e l , a l l _ n o d e s ( ) , f a i l e d _ n o d e ) ;
           } else {
              l o g ( "O a r q u i v o <%s> não f o i anotado " , fname ) ;
           }
 17 / 31
Juntando as peças



Em tempo de compilação
1. Definir um ponto de desvio
2. Implementar a otimização
3. Conectar o desvio com a otimização

i n t b i n d ( char ∗ e n t r y _ I D , f u n c t i o n _ p o i n t e r ∗ p t r ) ;

i n t b i n d ( " ACK_FAIL " ,       &( h a n d l e _ f a i l t u r e ) ) ;




 18 / 31
Juntando as peças




Em tempo de execução
1. Anotar os arquivos

s e t x a t t r ( " / tmp / f o o " , " r _ l e v e l " , " 3 " ) ;




 19 / 31
Protótipo - MOSAStore




 20 / 31
Problemas




• Interferência destrutiva
• Pouca Flexibilidade
• Limitado às funções do naming node




21 / 31
Avaliação




• Desempenho
• Usabilidade




 22 / 31
Estudo de Caso - PetaScale Scientific Workflows




                      Figure: Parallel Scripting for Scientific Workflows



1   initial_conditions [ ] = initialize ( )
2   forecast [ ] = null
3   f o r e a c h c o n d i t i o n , index i n i n i t i a l _ c o n d i t i o n s :
4        f o r e c a s t [ index ] = weather_model ( c o n d i t i o n )
5   u n c e r t a i n t y = analyze ( f o r e c a s t )


     23 / 31
A pilha Swift




                Figure: Swift Stack




 24 / 31
Um ambiente em PetaScala - BlueGene




                  Figure: Swift Stack



25 / 31
Swift Task Dispatching

Falkon: Fast and Light-Weight Task Execution Framework




Velocidade e simplicidade podem custar caro !

 26 / 31
Falkon + Storage Optimizations




• Data co-usage
• Replicação
• Descoberta de recursos




 27 / 31
Data co-usage




1. cp /home/manel/lib/lib.so /mnt/playpen/lib




 28 / 31
Data co-usage




1. cp /home/manel/lib/lib.so /mnt/playpen/lib
2. setfattr "cousage" "bioinfo" /mnt/playpen/lib/lib.so




 28 / 31
Data co-usage




1. cp /home/manel/lib/lib.so /mnt/playpen/lib
2. setfattr "cousage" "bioinfo" /mnt/playpen/lib/lib.so
3. cp /home/manel/genoma1.csv /mnt/playpen/input




 28 / 31
Data co-usage




1. cp /home/manel/lib/lib.so /mnt/playpen/lib
2. setfattr "cousage" "bioinfo" /mnt/playpen/lib/lib.so
3. cp /home/manel/genoma1.csv /mnt/playpen/input
4. setfattr "cousage" "bioinfo" /mnt/playpen/input/genoma1.csv



 28 / 31
Data co-usage




1. cp /home/manel/lib/lib.so /mnt/playpen/lib
2. setfattr "cousage" "bioinfo" /mnt/playpen/lib/lib.so
3. cp /home/manel/genoma1.csv /mnt/playpen/input
4. setfattr "cousage" "bioinfo" /mnt/playpen/input/genoma1.csv
5. cp /home/manel/genoma2.csv /mnt/playpen/input
6. setfattr "cousage" "bioinfo" /mnt/playpen/input/genoma2.csv
 28 / 31
Replicação + Descoberta de Recursos




29 / 31
Replicação + Descoberta de Recursos




1. cp /home/manel/genoma1.csv /mnt/playpen/input
2. setfattr "rlevel" "3" /mnt/playpen/input/genoma1.csv




 30 / 31
Replicação + Descoberta de Recursos




1. cp /home/manel/genoma1.csv /mnt/playpen/input
2. setfattr "rlevel" "3" /mnt/playpen/input/genoma1.csv
3. dataservers=‘getfattr "location" /mnt/playpen/input/genoma1.csv‘



 30 / 31
Replicação + Descoberta de Recursos




1. cp /home/manel/genoma1.csv /mnt/playpen/input
2. setfattr "rlevel" "3" /mnt/playpen/input/genoma1.csv
3. dataservers=‘getfattr "location" /mnt/playpen/input/genoma1.csv‘
4. for ds in dataservers ; do "ssh ds" ; "bash sim.sh /mnt/playpen/input"

 30 / 31
Replicação + Descoberta de Recursos




1. cp /home/manel/genoma1.csv /mnt/playpen/input
2. setfattr "rlevel" "3" /mnt/playpen/input/genoma1.csv
3. dataservers=‘getfattr "location" /mnt/playpen/input/genoma1.csv‘
4. for ds in dataservers ; do "ssh ds" ; "bash sim.sh /mnt/playpen/input"

 30 / 31
Discussão, Trabalho em andamento e Trabalhos futuros



• Análise de desempenho
  ◦ Impacto do mecanismo de desvio (em andamento)
• Implantação e experimento pequena escala ( 20 nós) (em andamento)
• Implantação e experimento em grande escala (futuro)
• Como verificar o grau de usabilidade ? (futuro)
   ◦ OurBackup Enterprise
   ◦ ...
• Bind Dinâmico (futuro)




 31 / 31

Mais conteúdo relacionado

Mais procurados (20)

Pilha
PilhaPilha
Pilha
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Pilha e filas
Pilha e filasPilha e filas
Pilha e filas
 
Estrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listasEstrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listas
 
A Linguagem Lua - Uma abordagem inicial
A Linguagem Lua - Uma abordagem inicialA Linguagem Lua - Uma abordagem inicial
A Linguagem Lua - Uma abordagem inicial
 
Estrutura de Dados - Listas Encadeadas
Estrutura de Dados - Listas EncadeadasEstrutura de Dados - Listas Encadeadas
Estrutura de Dados - Listas Encadeadas
 
Pilhas e Filas
Pilhas e FilasPilhas e Filas
Pilhas e Filas
 
Python Funcional
Python FuncionalPython Funcional
Python Funcional
 
Usando o winplot
Usando o winplotUsando o winplot
Usando o winplot
 
Apresentação Lua
Apresentação LuaApresentação Lua
Apresentação Lua
 
Pilha e Fila Dinamica
Pilha e Fila DinamicaPilha e Fila Dinamica
Pilha e Fila Dinamica
 
Apresentação sobre a linguagem lua
Apresentação sobre a linguagem luaApresentação sobre a linguagem lua
Apresentação sobre a linguagem lua
 
Listas em C
Listas em CListas em C
Listas em C
 
Estrutura de dados - Filas
Estrutura de dados - FilasEstrutura de dados - Filas
Estrutura de dados - Filas
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada
 
Filas encadeadas
Filas encadeadasFilas encadeadas
Filas encadeadas
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - FilasEstrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Linguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo LuaLinguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo Lua
 
Pilhas encadeadas
Pilhas encadeadasPilhas encadeadas
Pilhas encadeadas
 
Slides pilhas e_filas
Slides  pilhas e_filasSlides  pilhas e_filas
Slides pilhas e_filas
 

Destaque

Recursos electrónicos para la visibilidad de las revistas-Alonso Gamboa
Recursos electrónicos para la visibilidad de las revistas-Alonso GamboaRecursos electrónicos para la visibilidad de las revistas-Alonso Gamboa
Recursos electrónicos para la visibilidad de las revistas-Alonso GamboaLatindex
 
060213 reseña histórica colegio 2013
060213 reseña histórica colegio 2013060213 reseña histórica colegio 2013
060213 reseña histórica colegio 2013colegionusefa
 
O caso da madeira
O caso da madeiraO caso da madeira
O caso da madeiraComal Givan
 
South america powerpoint 2
South america powerpoint 2South america powerpoint 2
South america powerpoint 2mdshirle
 
El uso de repositorios para aumentar la visibilidad de los trabajos científic...
El uso de repositorios para aumentar la visibilidad de los trabajos científic...El uso de repositorios para aumentar la visibilidad de los trabajos científic...
El uso de repositorios para aumentar la visibilidad de los trabajos científic...carlosqg
 
Scielo_semana acceso_abierto_oct 2011
Scielo_semana acceso_abierto_oct 2011Scielo_semana acceso_abierto_oct 2011
Scielo_semana acceso_abierto_oct 2011Latindex
 
CiteUlikeGuia
CiteUlikeGuiaCiteUlikeGuia
CiteUlikeGuiaLatindex
 
Ppl semana acceso abierto
Ppl semana acceso abiertoPpl semana acceso abierto
Ppl semana acceso abiertoLatindex
 

Destaque (11)

Recursos electrónicos para la visibilidad de las revistas-Alonso Gamboa
Recursos electrónicos para la visibilidad de las revistas-Alonso GamboaRecursos electrónicos para la visibilidad de las revistas-Alonso Gamboa
Recursos electrónicos para la visibilidad de las revistas-Alonso Gamboa
 
Revista digital
Revista digitalRevista digital
Revista digital
 
060213 reseña histórica colegio 2013
060213 reseña histórica colegio 2013060213 reseña histórica colegio 2013
060213 reseña histórica colegio 2013
 
Session 44 Pia Sundbergh
Session 44 Pia SundberghSession 44 Pia Sundbergh
Session 44 Pia Sundbergh
 
O caso da madeira
O caso da madeiraO caso da madeira
O caso da madeira
 
South america powerpoint 2
South america powerpoint 2South america powerpoint 2
South america powerpoint 2
 
Software en Ecuador por Leslie jarrín
Software en Ecuador por Leslie jarrínSoftware en Ecuador por Leslie jarrín
Software en Ecuador por Leslie jarrín
 
El uso de repositorios para aumentar la visibilidad de los trabajos científic...
El uso de repositorios para aumentar la visibilidad de los trabajos científic...El uso de repositorios para aumentar la visibilidad de los trabajos científic...
El uso de repositorios para aumentar la visibilidad de los trabajos científic...
 
Scielo_semana acceso_abierto_oct 2011
Scielo_semana acceso_abierto_oct 2011Scielo_semana acceso_abierto_oct 2011
Scielo_semana acceso_abierto_oct 2011
 
CiteUlikeGuia
CiteUlikeGuiaCiteUlikeGuia
CiteUlikeGuia
 
Ppl semana acceso abierto
Ppl semana acceso abiertoPpl semana acceso abierto
Ppl semana acceso abierto
 

Semelhante a Otimizações em Sistemas de Armazenamento mediadas por anotações em Metadados

Lp script pug-pe
Lp script pug-peLp script pug-pe
Lp script pug-pehugoesb
 
Revisão de linguagem C para Sistemas Embarcados
Revisão de linguagem C para Sistemas EmbarcadosRevisão de linguagem C para Sistemas Embarcados
Revisão de linguagem C para Sistemas EmbarcadosRodrigo Almeida
 
Utilização do Software Maxima
Utilização do Software MaximaUtilização do Software Maxima
Utilização do Software MaximaKássio Renê
 
Conhecendo ou relembrando C
Conhecendo ou relembrando CConhecendo ou relembrando C
Conhecendo ou relembrando CVinícius Hax
 
Introdução ao SystemTap - João Avelino Bellomo Filho - Tchelinux Caxias 2018
Introdução ao SystemTap - João Avelino Bellomo Filho - Tchelinux Caxias 2018Introdução ao SystemTap - João Avelino Bellomo Filho - Tchelinux Caxias 2018
Introdução ao SystemTap - João Avelino Bellomo Filho - Tchelinux Caxias 2018Tchelinux
 
Conceito de funçao e modularizaçao
Conceito de funçao e modularizaçaoConceito de funçao e modularizaçao
Conceito de funçao e modularizaçaossuserc6132d
 
Escrevendo modulos python com rust
Escrevendo modulos python com rustEscrevendo modulos python com rust
Escrevendo modulos python com rustBruno Rocha
 
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...Leinylson Fontinele
 
Estrutura de Dados - Aula de revisão de c na prática
Estrutura de Dados - Aula de revisão de c na práticaEstrutura de Dados - Aula de revisão de c na prática
Estrutura de Dados - Aula de revisão de c na práticaLeinylson Fontinele
 
Mini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e DistribuídaMini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e DistribuídaDeivid Martins
 
Comandos de Controle de Programa em C
Comandos de Controle de Programa em CComandos de Controle de Programa em C
Comandos de Controle de Programa em CElaine Cecília Gatto
 
Introdução à linguagem c
Introdução à linguagem cIntrodução à linguagem c
Introdução à linguagem cRafael_Lima87
 
Uma abordagem BigData para Encontrar Sub-conjuntos de itens frequentes median...
Uma abordagem BigData para Encontrar Sub-conjuntos de itens frequentes median...Uma abordagem BigData para Encontrar Sub-conjuntos de itens frequentes median...
Uma abordagem BigData para Encontrar Sub-conjuntos de itens frequentes median...UFAM - Universidade Federal do Amazonas
 
Tutorial de econometria espacial utilizando o stata
Tutorial de econometria espacial utilizando o stataTutorial de econometria espacial utilizando o stata
Tutorial de econometria espacial utilizando o stataRicardo Schuch
 
Introdução ao processamento paralelo com o Grand Central Dispatch
Introdução ao processamento paralelo com o Grand Central DispatchIntrodução ao processamento paralelo com o Grand Central Dispatch
Introdução ao processamento paralelo com o Grand Central Dispatchflisolmaringa
 

Semelhante a Otimizações em Sistemas de Armazenamento mediadas por anotações em Metadados (20)

Lp script pug-pe
Lp script pug-peLp script pug-pe
Lp script pug-pe
 
Revisão de linguagem C para Sistemas Embarcados
Revisão de linguagem C para Sistemas EmbarcadosRevisão de linguagem C para Sistemas Embarcados
Revisão de linguagem C para Sistemas Embarcados
 
Utilização do Software Maxima
Utilização do Software MaximaUtilização do Software Maxima
Utilização do Software Maxima
 
Conhecendo ou relembrando C
Conhecendo ou relembrando CConhecendo ou relembrando C
Conhecendo ou relembrando C
 
Dojo de Python
Dojo de PythonDojo de Python
Dojo de Python
 
String e IO
String e IOString e IO
String e IO
 
Introdução ao SystemTap - João Avelino Bellomo Filho - Tchelinux Caxias 2018
Introdução ao SystemTap - João Avelino Bellomo Filho - Tchelinux Caxias 2018Introdução ao SystemTap - João Avelino Bellomo Filho - Tchelinux Caxias 2018
Introdução ao SystemTap - João Avelino Bellomo Filho - Tchelinux Caxias 2018
 
Conceito de funçao e modularizaçao
Conceito de funçao e modularizaçaoConceito de funçao e modularizaçao
Conceito de funçao e modularizaçao
 
Escrevendo modulos python com rust
Escrevendo modulos python com rustEscrevendo modulos python com rust
Escrevendo modulos python com rust
 
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
 
Estrutura de Dados - Aula de revisão de c na prática
Estrutura de Dados - Aula de revisão de c na práticaEstrutura de Dados - Aula de revisão de c na prática
Estrutura de Dados - Aula de revisão de c na prática
 
Aula 1 | Introdução a C++
Aula 1 | Introdução a C++Aula 1 | Introdução a C++
Aula 1 | Introdução a C++
 
Mini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e DistribuídaMini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e Distribuída
 
Comandos de Controle de Programa em C
Comandos de Controle de Programa em CComandos de Controle de Programa em C
Comandos de Controle de Programa em C
 
Introdução à linguagem c
Introdução à linguagem cIntrodução à linguagem c
Introdução à linguagem c
 
Uma abordagem BigData para Encontrar Sub-conjuntos de itens frequentes median...
Uma abordagem BigData para Encontrar Sub-conjuntos de itens frequentes median...Uma abordagem BigData para Encontrar Sub-conjuntos de itens frequentes median...
Uma abordagem BigData para Encontrar Sub-conjuntos de itens frequentes median...
 
Workshop Python
Workshop PythonWorkshop Python
Workshop Python
 
Tutorial de econometria espacial utilizando o stata
Tutorial de econometria espacial utilizando o stataTutorial de econometria espacial utilizando o stata
Tutorial de econometria espacial utilizando o stata
 
Introdução ao processamento paralelo com o Grand Central Dispatch
Introdução ao processamento paralelo com o Grand Central DispatchIntrodução ao processamento paralelo com o Grand Central Dispatch
Introdução ao processamento paralelo com o Grand Central Dispatch
 
Java para iniciantes
Java para iniciantesJava para iniciantes
Java para iniciantes
 

Otimizações em Sistemas de Armazenamento mediadas por anotações em Metadados

  • 1. Otimizações em Sistemas de Armazenamento mediadas por anotações em Metadados Thiago Emmanuel Pereira Conversa LSD Laboratório de Sistemas Distribuídos Abril / 2010
  • 2. ELAP Program Support the development of human capital and a next generation of Latin Americans 2 / 31
  • 3. O Zoo de aplicações Várias aplicações • Banco de Dados • HPC • Aplicações para Desktops • Data provenance 3 / 31
  • 4. O Zoo de aplicações Várias aplicações • Banco de Dados • HPC • Aplicações para Desktops • Data provenance Várias particularidades • Fault-tolerance (Erasure-coding, replicação) • Workload (write-once/read-many, big-data/small-data) • Consistência (...) 3 / 31
  • 5. O Zoo de aplicações - Domando as bestas Um monte de sistemas ... • GFS, Lustre, Ceph, XFS • ext3, ext4, Raiser, LFS • OceanStore • Beehive, NFS, Coda 4 / 31
  • 6. O Zoo de aplicações - Domando as bestas Mais níveis de indireção • XAM (eXtensible Access Method) POSIX-like interface + Metadata 5 / 31
  • 7. O Zoo de aplicações - Domando as bestas Como facilitar a implementação de novas funcionalidades em Sistemas de Arquivos sem se afastar (muito) de POSIX ? 6 / 31
  • 8. Como habilitar a comunicação entre aplicações e o sistema de arquivos ? Listing 1: OurAPI i n t open ( char ∗ path , mode_t mode , i n t r e p _ l e v e l ) ; 7 / 31
  • 9. Como habilitar a comunicação entre aplicações e o sistema de arquivos ? Listing 3: OurAPI i n t open ( char ∗ path , mode_t mode , i n t r e p _ l e v e l ) ; Listing 4: POSIX API i n t open ( char ∗ path , mode_t mode ) ; 7 / 31
  • 10. Como habilitar a comunicação entre aplicações e o sistema de arquivos ? Listing 5: OurAPI i n t l o c a t i o n ( char ∗ path , char ∗ l o c a t i o n _ d s t ) ; i n t f o r k ( char ∗ l o c a t i o n _ t o _ m i g r a t e ) ; 8 / 31
  • 11. Como habilitar a comunicação entre aplicações e o sistema de arquivos ? Listing 7: OurAPI i n t l o c a t i o n ( char ∗ path , char ∗ l o c a t i o n _ d s t ) ; i n t f o r k ( char ∗ l o c a t i o n _ t o _ m i g r a t e ) ; Listing 8: POSIX API ???????????????????????????????????? 8 / 31
  • 12. Metadata annotations FreeBSD, Linux, Mac OS X, OpenBSD i n t s e t x a t t r ( char ∗ path , char ∗name , void ∗ v a l u e ) ; i n t g e t x a t t r ( char ∗ path , char ∗name , void ∗ v a l u e ) ; 9 / 31
  • 13. Metadata annotations FreeBSD, Linux, Mac OS X, OpenBSD i n t s e t x a t t r ( char ∗ path , char ∗name , void ∗ v a l u e ) ; i n t g e t x a t t r ( char ∗ path , char ∗name , void ∗ v a l u e ) ; 1 s e t x a t t r ( " / tmp / f o o " , " r _ l e v e l " , " 3 " ) ; 2 g e t x a t t r ( " / tmp / f o o " , " l o c a t i o n " , v a l u e ) ; 9 / 31
  • 14. Extensibilidade Como permitir a alteração do comportamento original do sistema ? 10 / 31
  • 15. Extensibilidade Como permitir a alteração o comportamento original do sistema ? • Pontos de desvio • Otimizações 11 / 31
  • 16. Pontos de desvio - Modelo de Programação Listing 9: Vanilla void n o t i f y _ f a i l u r e ( char ∗ nodename ) { naming . n o t i f y _ f a i l u r e ( nodename ) ; } 12 / 31
  • 17. Pontos de desvio - Modelo de Programação void t r a p ( char ∗ e n t r y _ I D , char ∗ fname , x a t t r _ l i s t ∗ x a t t r s , void ∗ params ) ; 13 / 31
  • 18. Pontos de desvio - Modelo de Programação Listing 10: Vanilla void n o t i f y _ f a i l u r e ( char ∗ nodename ) { naming . n o t i f y _ f a i l u r e ( nodename ) ; } Listing 11: Vanilla + Desvio void n o t i f y _ f a i l u r e ( char ∗ nodename ) { f o r e a c h fname i n s t o r e d _ f i l e s ( nodename ) { t r a p ( " ACK_FAIL " , fname , l s t x a t t r ( fname ) , nodename ) ; } naming . n o t i f y _ f a i l u r e ( nodename ) ; } 14 / 31
  • 19. Otimizações - Modelo de Programação FailtureHandler v o i d h a n d l e _ f a i l u r e ( char ∗ fname , x a t t r _ l i s t ∗ x a t t r s , v o i d ∗ params ) { i f ( x a t t r s . contains ( " r _ l e v e l " ) { i n t r _ l e v e l = x a t t r s . get ( " r _ l e v e l " ) ; char ∗ f a i l e d _ n o d e = ( char ∗ ) params ; update ( fname , r _ l e v e l , a l l _ n o d e s ( ) , f a i l e d _ n o d e ) ; } else { l o g ( "O a r q u i v o <%s> não f o i anotado " , fname ) ; } } 15 / 31
  • 20. Juntando as peças Em tempo de compilação 1. Definir um ponto de desvio void n o t i f y _ f a i l u r e ( char ∗ nodename ) { f o r e a c h fname i n s t o r e d _ f i l e s ( nodename ) { t r a p ( " ACK_FAIL " , fname , l s t x a t t r ( fname ) , nodename ) ; } naming . n o t i f y _ f a i l u r e ( nodename ) ; } 16 / 31
  • 21. Juntando as peças Em tempo de compilação 1. Definir um ponto de desvio 2. Implementar a otimização v o i d h a n d l e _ f a i l u r e ( char ∗ fname , x a t t r _ l i s t ∗ x a t t r s , v o i d ∗ params ) { i f ( x a t t r s . contains ( " r _ l e v e l " ) { i n t r _ l e v e l = x a t t r s . get ( " r _ l e v e l " ) ; char ∗ f a i l e d _ n o d e = ( char ∗ ) params ; update ( fname , r _ l e v e l , a l l _ n o d e s ( ) , f a i l e d _ n o d e ) ; } else { l o g ( "O a r q u i v o <%s> não f o i anotado " , fname ) ; } 17 / 31
  • 22. Juntando as peças Em tempo de compilação 1. Definir um ponto de desvio 2. Implementar a otimização 3. Conectar o desvio com a otimização i n t b i n d ( char ∗ e n t r y _ I D , f u n c t i o n _ p o i n t e r ∗ p t r ) ; i n t b i n d ( " ACK_FAIL " , &( h a n d l e _ f a i l t u r e ) ) ; 18 / 31
  • 23. Juntando as peças Em tempo de execução 1. Anotar os arquivos s e t x a t t r ( " / tmp / f o o " , " r _ l e v e l " , " 3 " ) ; 19 / 31
  • 25. Problemas • Interferência destrutiva • Pouca Flexibilidade • Limitado às funções do naming node 21 / 31
  • 27. Estudo de Caso - PetaScale Scientific Workflows Figure: Parallel Scripting for Scientific Workflows 1 initial_conditions [ ] = initialize ( ) 2 forecast [ ] = null 3 f o r e a c h c o n d i t i o n , index i n i n i t i a l _ c o n d i t i o n s : 4 f o r e c a s t [ index ] = weather_model ( c o n d i t i o n ) 5 u n c e r t a i n t y = analyze ( f o r e c a s t ) 23 / 31
  • 28. A pilha Swift Figure: Swift Stack 24 / 31
  • 29. Um ambiente em PetaScala - BlueGene Figure: Swift Stack 25 / 31
  • 30. Swift Task Dispatching Falkon: Fast and Light-Weight Task Execution Framework Velocidade e simplicidade podem custar caro ! 26 / 31
  • 31. Falkon + Storage Optimizations • Data co-usage • Replicação • Descoberta de recursos 27 / 31
  • 32. Data co-usage 1. cp /home/manel/lib/lib.so /mnt/playpen/lib 28 / 31
  • 33. Data co-usage 1. cp /home/manel/lib/lib.so /mnt/playpen/lib 2. setfattr "cousage" "bioinfo" /mnt/playpen/lib/lib.so 28 / 31
  • 34. Data co-usage 1. cp /home/manel/lib/lib.so /mnt/playpen/lib 2. setfattr "cousage" "bioinfo" /mnt/playpen/lib/lib.so 3. cp /home/manel/genoma1.csv /mnt/playpen/input 28 / 31
  • 35. Data co-usage 1. cp /home/manel/lib/lib.so /mnt/playpen/lib 2. setfattr "cousage" "bioinfo" /mnt/playpen/lib/lib.so 3. cp /home/manel/genoma1.csv /mnt/playpen/input 4. setfattr "cousage" "bioinfo" /mnt/playpen/input/genoma1.csv 28 / 31
  • 36. Data co-usage 1. cp /home/manel/lib/lib.so /mnt/playpen/lib 2. setfattr "cousage" "bioinfo" /mnt/playpen/lib/lib.so 3. cp /home/manel/genoma1.csv /mnt/playpen/input 4. setfattr "cousage" "bioinfo" /mnt/playpen/input/genoma1.csv 5. cp /home/manel/genoma2.csv /mnt/playpen/input 6. setfattr "cousage" "bioinfo" /mnt/playpen/input/genoma2.csv 28 / 31
  • 37. Replicação + Descoberta de Recursos 29 / 31
  • 38. Replicação + Descoberta de Recursos 1. cp /home/manel/genoma1.csv /mnt/playpen/input 2. setfattr "rlevel" "3" /mnt/playpen/input/genoma1.csv 30 / 31
  • 39. Replicação + Descoberta de Recursos 1. cp /home/manel/genoma1.csv /mnt/playpen/input 2. setfattr "rlevel" "3" /mnt/playpen/input/genoma1.csv 3. dataservers=‘getfattr "location" /mnt/playpen/input/genoma1.csv‘ 30 / 31
  • 40. Replicação + Descoberta de Recursos 1. cp /home/manel/genoma1.csv /mnt/playpen/input 2. setfattr "rlevel" "3" /mnt/playpen/input/genoma1.csv 3. dataservers=‘getfattr "location" /mnt/playpen/input/genoma1.csv‘ 4. for ds in dataservers ; do "ssh ds" ; "bash sim.sh /mnt/playpen/input" 30 / 31
  • 41. Replicação + Descoberta de Recursos 1. cp /home/manel/genoma1.csv /mnt/playpen/input 2. setfattr "rlevel" "3" /mnt/playpen/input/genoma1.csv 3. dataservers=‘getfattr "location" /mnt/playpen/input/genoma1.csv‘ 4. for ds in dataservers ; do "ssh ds" ; "bash sim.sh /mnt/playpen/input" 30 / 31
  • 42. Discussão, Trabalho em andamento e Trabalhos futuros • Análise de desempenho ◦ Impacto do mecanismo de desvio (em andamento) • Implantação e experimento pequena escala ( 20 nós) (em andamento) • Implantação e experimento em grande escala (futuro) • Como verificar o grau de usabilidade ? (futuro) ◦ OurBackup Enterprise ◦ ... • Bind Dinâmico (futuro) 31 / 31