Otimizações em Sistemas de Armazenamento mediadas por anotações em Metadados
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