otimizações em sistemas de armazenamento mediadas por anotações em metadados
TRANSCRIPT
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