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