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

Post on 03-Jul-2015

556 views 0 download

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

Otimizações em Sistemas de Armazenamento mediadas poranotações em Metadados

Thiago Emmanuel Pereira

Conversa LSDLaboratório de Sistemas Distribuídos

Abril / 2010

ELAP Program

Support the development of human capital and a next generation of LatinAmericans

2 / 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

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 Sistemasde Arquivos sem se afastar (muito) de POSIX ?

6 / 31

Como habilitar a comunicação entre aplicações e osistema de arquivos ?

Listing 1: OurAPI

i n t open ( char ∗path , mode_t mode , i n t r ep_ leve l ) ;

Listing 2: POSIX API

i n t open ( char ∗path , mode_t mode ) ;

7 / 31

Como habilitar a comunicação entre aplicações e osistema de arquivos ?

Listing 3: OurAPI

i n t open ( char ∗path , mode_t mode , i n t r ep_ leve 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 osistema 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 oca t i on_ to_mig ra te ) ;

Listing 6: POSIX API

????????????????????????????????????

8 / 31

Como habilitar a comunicação entre aplicações e osistema 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 oca t i on_ to_mig ra te ) ;

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 ∗value ) ;i n t g e t x a t t r ( char ∗path , char ∗name, void ∗value ) ;

1 s e t x a t t r ( " / tmp / foo " , " r _ l e v e l " , " 3 " ) ;2 g e t x a t t r ( " / tmp / foo " , " l o c a t i o n " , value ) ;

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 ∗value ) ;i n t g e t x a t t r ( char ∗path , char ∗name, void ∗value ) ;

1 s e t x a t t r ( " / tmp / foo " , " r _ l e v e l " , " 3 " ) ;2 g e t x a t t r ( " / tmp / foo " , " l o c a t i o n " , value ) ;

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 ap ( char∗ entry_ID , 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 ) {foreach fname i n s t o r e d _ f i l e s ( nodename ) {

t r ap ( "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

Fa i l t u reHand le r

vo id 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 ,vo id ∗ params ) {

i f ( x a t t r s . conta ins ( " 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 ∗ fa i led_node = ( char ∗ ) params ;update ( fname , r _ l e ve l , a l l_nodes ( ) , fa i led_node ) ;

} e lse {log ( "O arqu ivo <%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 ) {foreach fname i n s t o r e d _ f i l e s ( nodename ) {

t r ap ( "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

void 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 ,vo id ∗ params ) {

i f ( x a t t r s . conta ins ( " 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 ∗ fa i led_node = ( char ∗ ) params ;update ( fname , r _ l e ve l , a l l_nodes ( ) , fa i led_node ) ;

} e lse {log ( "O arqu ivo <%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 bind ( char∗ entry_ID , f u n c t i o n _ p o i n t e r ∗ p t r ) ;

i n t b ind ( " 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 / foo " , " 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 i n i t i a l _ c o n d i t i o n s [ ] = i n i t i a l i z e ( )2 fo recas t [ ] = nul l3 foreach cond i t i on , index in i n i t i a l _ c o n d i t i o n s :4 fo recas t [ index ] = weather_model ( c o nd i t i on )5 u n c e r t a i n t y = analyze ( f o recas 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

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

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

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

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

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.csv28 / 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

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

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