Você está na página 1de 78

Dedupeer: um Algoritmo para Deduplicação de

Arquivos Através de Processamento Particionado

Paulo Fernando Almeida Soares

Orientador: Silvio Meir
Co-orientador: Vinicius Garc

Agenda
• Introdução
– Motivação
– Definição do problema
– Escopo negativo
– Contribuições

• Deduplicação
– Tipos de deduplicação
– Benefícios

• Desenvolvimento
• Dedupeer File Storage

• Componente de
software para
deduplicação
• Os algoritmos
– Fundamentos
– Detalhando os
algoritmos

• Algoritmo em
execução
• Análise de
desempenho
• Análise de compressão
2
• Conclusão

Introdução
• Aumento da demanda
• Técnicas de compressão de dados
– Intra-file vs inter-file

3

Motivação
• Escassez de componentes de softwares
para deduplicação
• Contribuir com a green storage
• Proporcionar benefícios para os sistemas
de armazenamento como:
– Redução no espaço necessário para
armazenamento
– Redução do tráfego de dados
– Diminuição da quantidade de chunks

4

Definição do problema
• Algoritmos detalhados para deduplicação
utilizando processamento de forma
particionada são escassos. Existe também
uma falta de componentes de softwares
interoperáveis para deduplicação que
possam ser integrados aos sistemas de
armazenamento de dados existentes.

5

O que é deduplicação
• A deduplicação é uma técnica que reduz a
quantidade de espaço necessário para
armazenamento de dados através da eliminação
de blocos e/ou arquivos redundantes.
• Na deduplicação, todos os blocos de dados ou
arquivos que estão duplicados em um sistema
de armazenamento são reduzidos à uma única
cópia, e os dados que foram desalocados são
convertidos para uma referência ao conteúdo
mantido no sistema
6

Escopo negativo
• Chunks menor que 8KB e maiores que
128KB.
• Teste do DeFS de forma distribuída
• Teste do algoritmo de maneira postprocessing
• Utilização de outros algoritmos de hashing
diferentes do SHA-1 e MD5

7

Contribuições
• O algoritmo para deduplicação de dados com
processamento particionado encapsulado em um
componente de software interoperável
• O sistema de armazenamento de dados distribuído com
gerenciamento de armazenamento delegado para um
banco de dados não-relacional construído em uma
arquitetura peer-to-peer com topologia de anel.
• A otimização da descoberta de redundância de dados
através da carga extra de dados no processamento
particionado, possibilitando a diminuição da perda de
identificação por causa da quebra do arquivo.

8

Tipo de deduplicação Localização
• A deduplicação distribuída pode ser feita tanto
na entidade que envia os dados quanto na que
os recebe, as quais podem ser respectivamente
denominadas cliente e servidor.
• Cliente: é a deduplicação feita antes dos dados
serem enviados.
• Servidor: A deduplicação é feita na entidade
que recebe os dados.
9

Tipo de deduplicação Momento
• A deduplicação pode ser de dois momentos: Inline
deduplication ou Post-process deduplication.
• Inline deduplication: os dados são examinados no
momento em que chegam, antes da escrita no
sistema de armazenamento
• Post-process deduplication: a deduplicação é feita
depois que os dados são armazenados, em
intervalos de tempo regulares ou quando um
certo limite definido é alcançado
10

Tipo de deduplicação Algoritmo
• Os algortimos para fazer a deduplicação são
categorizados em três tipo, segundo Mandagere et al.:
Whole File Hashing, Sub File Hashing e Delta Encoding.
• Whole File Hashing: são analisados apenas os arquivos
por completo
• Sub File Hashing: a análise é feita em partes do arquivo
• Delta Encoding: é gerado um arquivo conhecido como
patch que é um arquivo que tem informações das
diferenças entre dois arquivos
11

Exemplo de benefício

12

Desenvolvimento

13

Desenvolvimento

14

Dedupeer File Storage
• O que é?
• Para que foi criado?

15

Dedupeer File Storage
• Modelo de dados

16

17

Dedupeer File Storage
• Visão de componentes e conectores

18

Dedupeer File Storage
• Decisões de projeto:
– Tamanho de chunk
• Pequeno vs grande
• Padrão dos sistemas de armazenamento

– Gerenciamento do armazenamento




Tolerância à falhas
Recuperação de falhas
Consistência
Disponibilidade
Empacotamento de requisições
19

Componente de software para
deduplicação
• Interoperabilidade
– Thrift vs Protocols Buffer

• Comparação por hash
– Probabilidade de colisão

20

Componente de software para
deduplicação
• Interface de comunicação
• map<position,Chunk>
deduplicate( 1:hashesToCompare chunksInfo,
2:string pathOfFile, 3:int chunkSizeInBytes, 4:int
bytesToLoadByTime, 5:HashingAlgorithm
hashingAlgorithm)
• typedef map<weakHash ,map<strongHash,
ChunkIDs>> hashesToCompare

21

Os algoritmos
•  O rsync
– Funcionamento

• Rolling checksum
– checksum do bloco de bytes já for
conhecido, obter o do bloco é mais
rápido.

22

• Algoritmo para deduplicação com carga completa
do arquivo na memória

23

Algoritmo em execução
• A seguir será demonstrado o
algoritmo com deduplicação através
do processamento particionado em
execução.
• O passo a passo foi capturado do
sistema executando no modo debug
com tamanho de chunk = 4 bytes e
carga de bytes = 8 bytes.
24

Tamanho do chunk: 4 bytes | Bytes para carregar por vez: 8 bytes

Chunks armazenados no sistema
4c 6f 72 65

64 6f 6c 6f

6d 20 69 70

72 20 73 69

64 6f 6c 6f

65 74 2e
74 20 61 6d

Lorem ipsum dolor sit amet.

Arquivo para ser deduplicado

65 6d 20 69 70 73 75 6d 20 64 6f 6c 6f 72 20 41 51 55 49 20 73 69 74 20 61 6d
Lorem ipsum dolor AQUI sit amet.

25

Hash32: 63308178
730949e23ca46f310466fbf205ffb165aef1fd7b
4c 6f 72 SHA-1:
65
ID: 0
Hash32: 55968102
da89a0ebe3dfb3a4c4cb2a758caf6515bc46c33d
6d 20 69SHA-1:
70
ID: 1
Hash32: 69534069
aac8d75fb58b069e4c0ab23393ac474d53146d53
64 6f 6cSHA-1:
6f
ID: 2
Hash32: 69468590
64 6f 6cSHA-1:
6f
13f12aec0dad9421e0fdc3d8788343ba23e8fb47
ID: 3
Hash32: 58130798
9256c5d2d36c9f9c4947b98a1556de7437d6b790
72 20 73SHA-1:
69
ID: 4
Hash32: 56557922
a1140808c69e1a3c1871996563fcebb8800b0ad3
74 20 61SHA-1:
6d
ID: 5
Hash32: 38076679
65 74 2eSHA-1: 7d03542f8187a51a05a64a5f4670b6432e7c75f9
ID: 6

26

hashmap<Hash32, hashmap<SHA-1, id>
Hash32

hashmap<SHA-1, id>

63308178

<730949e23ca46f310466fbf205ffb165aef1fd7b, 0>

55968102

<da89a0ebe3dfb3a4c4cb2a758caf6515bc46c33d, 1>

69534069

<Aac8d75fb58b069e4c0ab23393ac474d53146d5, 2>

69468590

<13f12aec0dad9421e0fdc3d8788343ba23e8fb47, 3>

58130798

<9256c5d2d36c9f9c4947b98a1556de7437d6b790, 4>

56557922

<a1140808c69e1a3c1871996563fcebb8800b0ad3, 5>

38076679

<7d03542f8187a51a05a64a5f4670b6432e7c75f9, 6>

A estrutura dos hashes dos chunks, montada pelo sistema,
é enviada para o computador que vai processar o novo arquivo.
OBS: O hashmap não está ordenado nas posições reais

27

Memória principal
Disco rígido

Hash32

hashmap<SHA-1, id>

63308178

<730949e23ca46f310466fbf205ffb165aef1f
d7b, 0>

55968102

<da89a0ebe3dfb3a4c4cb2a758caf6515bc4
6c33d, 1>

69534069

<Aac8d75fb58b069e4c0ab23393ac474d53
146d5, 2>

69468590

<13f12aec0dad9421e0fdc3d8788343ba23e
8fb47, 3>

58130798

<9256c5d2d36c9f9c4947b98a1556de7437
d6b790, 4>

56557922

<a1140808c69e1a3c1871996563fcebb880
0b0ad3, 5>

38076679

<7d03542f8187a51a05a64a5f4670b6432e
7c75f9, 6>

tes ia
y
a b mór
g
rre me
a
C aa
r
pa

f 72 65 6d 20 69 70 73 75 6d 20 64 6f 6c 6f 72 20 41 51 55 49 20 73 69 74 202861 6d

Memória principal

Hash32

hashmap<SHA-1, id>

63308178

<730949e23ca46f310466fbf205ffb165aef1f
d7b, 0>

55968102

<da89a0ebe3dfb3a4c4cb2a758caf6515bc4
6c33d, 1>

69534069

<Aac8d75fb58b069e4c0ab23393ac474d53
146d5, 2>

69468590

<13f12aec0dad9421e0fdc3d8788343ba23e
8fb47, 3>

58130798

<9256c5d2d36c9f9c4947b98a1556de7437
d6b790, 4>

56557922

<a1140808c69e1a3c1871996563fcebb880
0b0ad3, 5>

38076679

<7d03542f8187a51a05a64a5f4670b6432e
7c75f9, 6>
possui a chave?

Hash32: 63308178

Disco rígido

4c 6f 72 65 6d 20 69 70

f 72 65 6d 20 69 70 73 75 6d 20 64 6f 6c 6f 72 20 41 51 55 49 20 73 69 74 202961 6d

Memória principal

Hash32

hashmap<SHA-1, id>

63308178

<730949e23ca46f310466fbf205ffb165aef1f
d7b, 0>

55968102

<da89a0ebe3dfb3a4c4cb2a758caf6515bc4
6c33d, 1>

69534069

<Aac8d75fb58b069e4c0ab23393ac474d53ado
c
146d5, 2>
pli

du

69468590

<13f12aec0dad9421e0fdc3d8788343ba23e
nk
u
8fb47, 3>
Ch

58130798

<9256c5d2d36c9f9c4947b98a1556de7437
d6b790, 4>

56557922

<a1140808c69e1a3c1871996563fcebb880
0b0ad3, 5>

38076679

<7d03542f8187a51a05a64a5f4670b6432e
possui a chave?
7c75f9, 6>

SHA-1: 730949e23ca46f310466fbf205ffb165aef1fd7b

Disco rígido

4c 6f 72 65 6d 20 69 70

f 72 65 6d 20 69 70 73 75 6d 20 64 6f 6c 6f 72 20 41 51 55 49 20 73 69 74 203061 6d

Memória principal

Hash32

hashmap<SHA-1, id>

63308178

<730949e23ca46f310466fbf205ffb165aef1f
d7b, 0>

55968102

<da89a0ebe3dfb3a4c4cb2a758caf6515bc4
6c33d, 1>

69534069

<Aac8d75fb58b069e4c0ab23393ac474d53
146d5, 2>

69468590

<13f12aec0dad9421e0fdc3d8788343ba23e
8fb47, 3>

58130798

<9256c5d2d36c9f9c4947b98a1556de7437
d6b790, 4>

56557922

<a1140808c69e1a3c1871996563fcebb880
0b0ad3, 5>

38076679

<7d03542f8187a51a05a64a5f4670b6432e
7c75f9, 6>

Chunk-1

ref:0

Disco rígido

4c 6f 72 65 6d 20 69 70

f 72 65 6d 20 69 70 73 75 6d 20 64 6f 6c 6f 72 20 41 51 55 49 20 73 69 74 203161 6d

Memória principal

Hash32

hashmap<SHA-1, id>

63308178

<730949e23ca46f310466fbf205ffb165aef1f
d7b, 0>

55968102

<da89a0ebe3dfb3a4c4cb2a758caf6515bc4
6c33d, 1>

69534069

<Aac8d75fb58b069e4c0ab23393ac474d53
146d5, 2>

69468590

<13f12aec0dad9421e0fdc3d8788343ba23e
8fb47, 3>

58130798

<9256c5d2d36c9f9c4947b98a1556de7437
d6b790, 4>

56557922

<a1140808c69e1a3c1871996563fcebb880
0b0ad3, 5>

38076679

<7d03542f8187a51a05a64a5f4670b6432e
possui a chave?
7c75f9, 6>

Chunk-1

ref:0

Hash32: 55968102

Disco rígido

4c 6f 72 65 6d 20 69 70

f 72 65 6d 20 69 70 73 75 6d 20 64 6f 6c 6f 72 20 41 51 55 49 20 73 69 74 203261 6d

Memória principal

Hash32

hashmap<SHA-1, id>

63308178

<730949e23ca46f310466fbf205ffb165aef1f
d7b, 0>

55968102

<da89a0ebe3dfb3a4c4cb2a758caf6515bc4
6c33d, 1>

69534069

<Aac8d75fb58b069e4c0ab23393ac474d53
146d5, 2>

69468590

<13f12aec0dad9421e0fdc3d8788343ba23e n
u
8fb47, 3>
Ch

58130798

<9256c5d2d36c9f9c4947b98a1556de7437
d6b790, 4>

56557922

<a1140808c69e1a3c1871996563fcebb880
0b0ad3, 5>

38076679

<7d03542f8187a51a05a64a5f4670b6432e
possui a chave?
7c75f9, 6>

Chunk-1

ref:0

do
a
lic
p
u
kd

SHA-1: da89a0ebe3dfb3a4c4cb2a758caf6515bc46c33d

Disco rígido

4c 6f 72 65 6d 20 69 70

f 72 65 6d 20 69 70 73 75 6d 20 64 6f 6c 6f 72 20 41 51 55 49 20 73 69 74 203361 6d

Memória principal

Hash32

hashmap<SHA-1, id>

63308178

<730949e23ca46f310466fbf205ffb165aef1f
d7b, 0>

55968102

<da89a0ebe3dfb3a4c4cb2a758caf6515bc4
6c33d, 1>

69534069

<Aac8d75fb58b069e4c0ab23393ac474d53
146d5, 2>

69468590

<13f12aec0dad9421e0fdc3d8788343ba23e
8fb47, 3>

58130798

<9256c5d2d36c9f9c4947b98a1556de7437
d6b790, 4>

56557922

<a1140808c69e1a3c1871996563fcebb880
0b0ad3, 5>

38076679

<7d03542f8187a51a05a64a5f4670b6432e
7c75f9, 6>

Chunk-1

ref:0

Chunk-2

ref:1

Disco rígido

4c 6f 72 65 6d 20 69 70

f 72 65 6d 20 69 70 73 75 6d 20 64 6f 6c 6f 72 20 41 51 55 49 20 73 69 74 203461 6d

Memória principal
Disco rígido

Hash32

hashmap<SHA-1, id>

63308178

<730949e23ca46f310466fbf205ffb165aef1f
d7b, 0>

55968102

<da89a0ebe3dfb3a4c4cb2a758caf6515bc4
6c33d, 1>

69534069

<Aac8d75fb58b069e4c0ab23393ac474d53
146d5, 2>

69468590

<13f12aec0dad9421e0fdc3d8788343ba23e
8fb47, 3>

58130798

<9256c5d2d36c9f9c4947b98a1556de7437
d6b790, 4>

56557922

<a1140808c69e1a3c1871996563fcebb880
0b0ad3, 5>

38076679

<7d03542f8187a51a05a64a5f4670b6432e
7c75f9, 6>

Chunk-1

ref:0

Chunk-2

ref:1

tes ia
y
a b mór
g
rre me
a
C aa
r
pa

f 72 65 6d 20 69 70 73 75 6d 20 64 6f 6c 6f 72 20 41 51 55 49 20 73 69 74 203561 6d

Memória principal

Hash32

hashmap<SHA-1, id>

63308178

<730949e23ca46f310466fbf205ffb165aef1f
d7b, 0>

55968102

<da89a0ebe3dfb3a4c4cb2a758caf6515bc4
6c33d, 1>

69534069

<Aac8d75fb58b069e4c0ab23393ac474d53
146d5, 2>

69468590

<13f12aec0dad9421e0fdc3d8788343ba23e
8fb47, 3>

58130798

<9256c5d2d36c9f9c4947b98a1556de7437
..]
.
[
d6b790, 4>

56557922

<a1140808c69e1a3c1871996563fcebb880
0b0ad3, 5>

38076679

<7d03542f8187a51a05a64a5f4670b6432e
7c75f9, 6>

Chunk-1

ref:0

Chunk-2

ref:1

Disco rígido

73 75 6d 20 64 6f 6c 6f

f 72 65 6d 20 69 70 73 75 6d 20 64 6f 6c 6f 72 20 41 51 55 49 20 73 69 74 203661 6d

Memória principal
Disco rígido

Hash32

hashmap<SHA-1, id>

63308178

<730949e23ca46f310466fbf205ffb165aef1f
d7b, 0>

55968102

<da89a0ebe3dfb3a4c4cb2a758caf6515bc4
6c33d, 1>

69534069

<Aac8d75fb58b069e4c0ab23393ac474d53
146d5, 2>

69468590

<13f12aec0dad9421e0fdc3d8788343ba23e
8fb47, 3>

58130798

<9256c5d2d36c9f9c4947b98a1556de7437
d6b790, 4>

56557922

<a1140808c69e1a3c1871996563fcebb880
0b0ad3, 5>

38076679

<7d03542f8187a51a05a64a5f4670b6432e
7c75f9, 6>

Chunk-1

ref:0

Chunk-2

ref:1

Chunk-3

ref:2

Chunk-4

ref:3

f 72 65 6d 20 69 70 73 75 6d 20 64 6f 6c 6f 72 20 41 51 55 49 20 73 69 74 203761 6d

Memória principal

Hash32

hashmap<SHA-1, id>

63308178

<730949e23ca46f310466fbf205ffb165aef1f
d7b, 0>

55968102

<da89a0ebe3dfb3a4c4cb2a758caf6515bc4
6c33d, 1>

a
i
u
69534069 ss
<Aac8d75fb58b069e4c0ab23393ac474d53
o
p ve 146d5, 2>
o
Nã cha
69468590
<13f12aec0dad9421e0fdc3d8788343ba23e

Chunk-1

ref:0

Chunk-2

ref:1

Chunk-3

ref:2

Chunk-4

ref:3

8fb47, 3>

58130798

<9256c5d2d36c9f9c4947b98a1556de7437
d6b790, 4>

56557922

<a1140808c69e1a3c1871996563fcebb880
0b0ad3, 5>

38076679

<7d03542f8187a51a05a64a5f4670b6432e
possui a chave?
7c75f9, 6>

Hash32: 50004260

Disco rígido

72 20 41 51 55 49 20 73

f 72 65 6d 20 69 70 73 75 6d 20 64 6f 6c 6f 72 20 41 51 55 49 20 73 69 74 203861 6d

Memória principal

Hash32

hashmap<SHA-1, id>

63308178

<730949e23ca46f310466fbf205ffb165aef1f
d7b, 0>

55968102

<da89a0ebe3dfb3a4c4cb2a758caf6515bc4
6c33d, 1>

a
i
u
69534069 ss
<Aac8d75fb58b069e4c0ab23393ac474d53
o
p ve 146d5, 2>
o
Nã cha
69468590
<13f12aec0dad9421e0fdc3d8788343ba23e

Chunk-1

ref:0

Chunk-2

ref:1

Chunk-3

ref:2

Chunk-4

ref:3

8fb47, 3>

58130798

<9256c5d2d36c9f9c4947b98a1556de7437
d6b790, 4>

56557922

<a1140808c69e1a3c1871996563fcebb880
0b0ad3, 5>

38076679

<7d03542f8187a51a05a64a5f4670b6432e
possui a chave?
7c75f9, 6>

buffer

Hash32: 37355783

Disco rígido

72 20 41 51 55 49 20 73

72

f 72 65 6d 20 69 70 73 75 6d 20 64 6f 6c 6f 72 20 41 51 55 49 20 73 69 74 203961 6d

Memória principal

Hash32

hashmap<SHA-1, id>

63308178

<730949e23ca46f310466fbf205ffb165aef1f
d7b, 0>

55968102

<da89a0ebe3dfb3a4c4cb2a758caf6515bc4
6c33d, 1>

a
i
u
69534069 ss
<Aac8d75fb58b069e4c0ab23393ac474d53
o
p ve 146d5, 2>
o
Nã cha
69468590
<13f12aec0dad9421e0fdc3d8788343ba23e

Chunk-1

ref:0

Chunk-2

ref:1

Chunk-3

ref:2

Chunk-4

ref:3

8fb47, 3>

58130798

<9256c5d2d36c9f9c4947b98a1556de7437
d6b790, 4>

56557922

<a1140808c69e1a3c1871996563fcebb880
0b0ad3, 5>

38076679

<7d03542f8187a51a05a64a5f4670b6432e
possui a chave?
7c75f9, 6>

buffer

Hash32: 37355783

Disco rígido

72 20 41 51 55 49 20 73

72
72 20

f 72 65 6d 20 69 70 73 75 6d 20 64 6f 6c 6f 72 20 41 51 55 49 20 73 69 74 204061 6d

Memória principal

Hash32

hashmap<SHA-1, id>

63308178

<730949e23ca46f310466fbf205ffb165aef1f
d7b, 0>

55968102

<da89a0ebe3dfb3a4c4cb2a758caf6515bc4
6c33d, 1>

a
i
u
69534069 ss
<Aac8d75fb58b069e4c0ab23393ac474d53
o
p ve 146d5, 2>
o
Nã cha
69468590
<13f12aec0dad9421e0fdc3d8788343ba23e

Chunk-1

ref:0

Chunk-2

ref:1

Chunk-3

ref:2

Chunk-4

ref:3

8fb47, 3>

58130798

<9256c5d2d36c9f9c4947b98a1556de7437
d6b790, 4>

56557922

<a1140808c69e1a3c1871996563fcebb880
0b0ad3, 5>

38076679

<7d03542f8187a51a05a64a5f4670b6432e
possui a chave?
7c75f9, 6>

buffer

Hash32: 48890160

Disco rígido

72 20 41 51 55 49 20 73

72 20
20 41
72

f 72 65 6d 20 69 70 73 75 6d 20 64 6f 6c 6f 72 20 41 51 55 49 20 73 69 74 204161 6d

Memória principal

Hash32

hashmap<SHA-1, id>

63308178

<730949e23ca46f310466fbf205ffb165aef1f
d7b, 0>

55968102

<da89a0ebe3dfb3a4c4cb2a758caf6515bc4
6c33d, 1>

a
i
u
69534069 ss
<Aac8d75fb58b069e4c0ab23393ac474d53
o
p ve 146d5, 2>
o
Nã cha
69468590
<13f12aec0dad9421e0fdc3d8788343ba23e

Chunk-1

ref:0

Chunk-2

ref:1

Chunk-3

ref:2

Chunk-4

ref:3

8fb47, 3>

58130798

<9256c5d2d36c9f9c4947b98a1556de7437
d6b790, 4>

56557922

<a1140808c69e1a3c1871996563fcebb880
0b0ad3, 5>

38076679

<7d03542f8187a51a05a64a5f4670b6432e
possui a chave?
7c75f9, 6>

buffer

Hash32: 49611023

Disco rígido

72 20 41 51 55 49 20 73

7220
2041
72
72
20
41 51

f 72 65 6d 20 69 70 73 75 6d 20 64 6f 6c 6f 72 20 41 51 55 49 20 73 69 74 204261 6d

Memória principal

Hash32

hashmap<SHA-1, id>

63308178

<730949e23ca46f310466fbf205ffb165aef1f
d7b, 0>

55968102

<da89a0ebe3dfb3a4c4cb2a758caf6515bc4
6c33d, 1>

69534069

<Aac8d75fb58b069e4c0ab23393ac474d53
146d5, 2>

69468590

<13f12aec0dad9421e0fdc3d8788343ba23e
8fb47, 3>

58130798

<9256c5d2d36c9f9c4947b98a1556de7437
d6b790, 4>

56557922

<a1140808c69e1a3c1871996563fcebb880
0b0ad3, 5>

38076679

ref:0

Chunk-2

ref:1

Chunk-3

ref:2

Chunk-4

ref:3

Chunk-5

72 20 41 51

=
o
i
he nk
c
<7d03542f8187a51a05a64a5f4670b6432e er
hu
c
ff
buffer
7c75f9, 6>
Bu ovo
n

72 20 41 51 55 49 20 73
Disco rígido

Chunk-1

7220
2041
72
72
20
41 51

f 72 65 6d 20 69 70 73 75 6d 20 64 6f 6c 6f 72 20 41 51 55 49 20 73 69 74 204361 6d

Memória principal

Hash32

hashmap<SHA-1, id>

63308178

<730949e23ca46f310466fbf205ffb165aef1f
d7b, 0>

<da89a0ebe3dfb3a4c4cb2a758caf6515bc4
ve
a
1>
ch 6c33d,
o
a
u
ui ingi<Aac8d75fb58b069e4c0ab23393ac474d53
69534069
s
os at 146d5, 2>
p
o ela ite
ã
N69468590
an lim <13f12aec0dad9421e0fdc3d8788343ba23e
j
E
8fb47, 3>
55968102

58130798

<9256c5d2d36c9f9c4947b98a1556de7437
d6b790, 4>

56557922

<a1140808c69e1a3c1871996563fcebb880
0b0ad3, 5>

38076679

<7d03542f8187a51a05a64a5f4670b6432e
possui a chave?
7c75f9, 6>

Chunk-1

ref:0

Chunk-2

ref:1

Chunk-3

ref:2

Chunk-4

ref:3

Chunk-5

72 20 41 51

Hash32: 48365873

Disco rígido

72 20 41 51 55 49 20 73

f 72 65 6d 20 69 70 73 75 6d 20 64 6f 6c 6f 72 20 41 51 55 49 20 73 69 74 204461 6d

Memória principal

Hash32

hashmap<SHA-1, id>

63308178

<730949e23ca46f310466fbf205ffb165aef1f
d7b, 0>

55968102

<da89a0ebe3dfb3a4c4cb2a758caf6515bc4
6c33d, 1>

69534069

<Aac8d75fb58b069e4c0ab23393ac474d53
146d5, 2>

69468590

<13f12aec0dad9421e0fdc3d8788343ba23e
8fb47, 3>

58130798

<9256c5d2d36c9f9c4947b98a1556de7437
d6b790, 4>

56557922

<a1140808c69e1a3c1871996563fcebb880
0b0ad3, 5>

38076679

<7d03542f8187a51a05a64a5f4670b6432e
7c75f9, 6>

Chunk-1

ref:0

Chunk-2

ref:1

Chunk-3

ref:2

Chunk-4

ref:3

Chunk-5

72 20 41 51

Chunk-6

55 49 20 73

oc
v
No

n
hu

k

Disco rígido

72 20 41 51 55 49 20 73

f 72 65 6d 20 69 70 73 75 6d 20 64 6f 6c 6f 72 20 41 51 55 49 20 73 69 74 204561 6d

Memória principal
Disco rígido

Hash32

hashmap<SHA-1, id>

63308178

<730949e23ca46f310466fbf205ffb165aef1f
d7b, 0>

55968102

<da89a0ebe3dfb3a4c4cb2a758caf6515bc4
6c33d, 1>

69534069

<Aac8d75fb58b069e4c0ab23393ac474d53
146d5, 2>

69468590

<13f12aec0dad9421e0fdc3d8788343ba23e
8fb47, 3>

58130798

<9256c5d2d36c9f9c4947b98a1556de7437
d6b790, 4>

56557922

<a1140808c69e1a3c1871996563fcebb880
0b0ad3, 5>

38076679

<7d03542f8187a51a05a64a5f4670b6432e
7c75f9, 6>

Chunk-1

ref:0

Chunk-2

ref:1

Chunk-3

ref:2

Chunk-4

ref:3

Chunk-5

72 20 41 51

Chunk-6

55 49 20 73

tes ia
y
a b mór
g
rre me
a
C aa
r
pa

f 72 65 6d 20 69 70 73 75 6d 20 64 6f 6c 6f 72 20 41 51 55 49 20 73 69 74 204661 6d

Memória principal

Hash32

hashmap<SHA-1, id>

63308178

<730949e23ca46f310466fbf205ffb165aef1f
d7b, 0>

55968102

<da89a0ebe3dfb3a4c4cb2a758caf6515bc4
6c33d, 1>

a
i
u
69534069 ss
<Aac8d75fb58b069e4c0ab23393ac474d53
o
p ve 146d5, 2>
o
Nã cha
69468590
<13f12aec0dad9421e0fdc3d8788343ba23e
8fb47, 3>

58130798

<9256c5d2d36c9f9c4947b98a1556de7437
d6b790, 4>

56557922

<a1140808c69e1a3c1871996563fcebb880
0b0ad3, 5>

38076679

<7d03542f8187a51a05a64a5f4670b6432e
possui a chave?
7c75f9, 6>

Chunk-1

ref:0

Chunk-2

ref:1

Chunk-3

ref:2

Chunk-4

ref:3

Chunk-5

72 20 41 51

Chunk-6

55 49 20 73

Hash32: 60883294

Disco rígido

69 74 20 61 6d 65 74 2e

f 72 65 6d 20 69 70 73 75 6d 20 64 6f 6c 6f 72 20 41 51 55 49 20 73 69 74 204761 6d

Memória principal

Hash32

hashmap<SHA-1, id>

63308178

<730949e23ca46f310466fbf205ffb165aef1f
d7b, 0>

55968102

<da89a0ebe3dfb3a4c4cb2a758caf6515bc4
6c33d, 1>

69534069

<Aac8d75fb58b069e4c0ab23393ac474d53
146d5, 2>

69468590

<13f12aec0dad9421e0fdc3d8788343ba23e
8fb47, 3>

58130798

<9256c5d2d36c9f9c4947b98a1556de7437
d6b790, 4>

56557922

<a1140808c69e1a3c1871996563fcebb880
0b0ad3, 5>

38076679

<7d03542f8187a51a05a64a5f4670b6432e
possui a chave?
7c75f9, 6>

Chunk-1

ref:0

Chunk-2

ref:1

Chunk-3

ref:2

Chunk-4

ref:3

Chunk-5

72 20 41 51

Chunk-6

55 49 20 73

buffer

Hash32: 56557922

Disco rígido

69 74 20 61 6d 65 74 2e

69

f 72 65 6d 20 69 70 73 75 6d 20 64 6f 6c 6f 72 20 41 51 55 49 20 73 69 74 204861 6d

Memória principal

Hash32

hashmap<SHA-1, id>

63308178

<730949e23ca46f310466fbf205ffb165aef1f
d7b, 0>

55968102

<da89a0ebe3dfb3a4c4cb2a758caf6515bc4
6c33d, 1>

69534069

<Aac8d75fb58b069e4c0ab23393ac474d53
146d5, 2>

69468590

<13f12aec0dad9421e0fdc3d8788343ba23e
8fb47, 3>

58130798

<9256c5d2d36c9f9c4947b98a1556de7437
d6b790, 4>

56557922

<a1140808c69e1a3c1871996563fcebb880
0b0ad3, 5>

ref:0

Chunk-2

ref:1

Chunk-3

ref:2

Chunk-4

ref:3

Chunk-5

72 20 41 51

Chunk-6

55 49 20 73

oc
v
No
SHA-1: a1140808c69e1a3c1871996563fcebb8800b0ad3
38076679

<7d03542f8187a51a05a64a5f4670b6432e
possui a chave?
7c75f9, 6>

69 74 20 61 6d 65 74 2e
Disco rígido

Chunk-1

n
hu

k

buffer
69

f 72 65 6d 20 69 70 73 75 6d 20 64 6f 6c 6f 72 20 41 51 55 49 20 73 69 74 204961 6d

Memória principal

Hash32

hashmap<SHA-1, id>

63308178

<730949e23ca46f310466fbf205ffb165aef1f
d7b, 0>

55968102

<da89a0ebe3dfb3a4c4cb2a758caf6515bc4
6c33d, 1>

69534069

<Aac8d75fb58b069e4c0ab23393ac474d53
146d5, 2>

69468590

<13f12aec0dad9421e0fdc3d8788343ba23e
8fb47, 3>

58130798

<9256c5d2d36c9f9c4947b98a1556de7437
d6b790, 4>

56557922

<a1140808c69e1a3c1871996563fcebb880
0b0ad3, 5>

38076679

<7d03542f8187a51a05a64a5f4670b6432e
possui a chave?
7c75f9, 6>

Chunk-1

ref:0

Chunk-2

ref:1

Chunk-3

ref:2

Chunk-4

ref:3

Chunk-5

72 20 41 51

Chunk-6

55 49 20 73

Chunk-7

69

buffer

SHA-1: a1140808c69e1a3c1871996563fcebb8800b0ad3

Disco rígido

69 74 20 61 6d 65 74 2e

69

f 72 65 6d 20 69 70 73 75 6d 20 64 6f 6c 6f 72 20 41 51 55 49 20 73 69 74 205061 6d

Memória principal

Hash32

hashmap<SHA-1, id>

63308178

<730949e23ca46f310466fbf205ffb165aef1f
d7b, 0>

55968102

<da89a0ebe3dfb3a4c4cb2a758caf6515bc4
6c33d, 1>

69534069

<Aac8d75fb58b069e4c0ab23393ac474d53
146d5, 2>

69468590

<13f12aec0dad9421e0fdc3d8788343ba23e n
u
8fb47, 3>
Ch

58130798

<9256c5d2d36c9f9c4947b98a1556de7437
d6b790, 4>

56557922

<a1140808c69e1a3c1871996563fcebb880
0b0ad3, 5>

38076679

<7d03542f8187a51a05a64a5f4670b6432e
possui a chave?
7c75f9, 6>

Chunk-1

ref:0

Chunk-2

ref:1

Chunk-3

ref:2

Chunk-4do

ref:3

ca
i
l
Chunk-5
up
d
k

72 20 41 51

Chunk-6

55 49 20 73

Chunk-7

69

SHA-1: a1140808c69e1a3c1871996563fcebb8800b0ad3

Disco rígido

69 74 20 61 6d 65 74 2e

f 72 65 6d 20 69 70 73 75 6d 20 64 6f 6c 6f 72 20 41 51 55 49 20 73 69 74 205161 6d

Memória principal

Hash32

hashmap<SHA-1, id>

63308178

<730949e23ca46f310466fbf205ffb165aef1f
d7b, 0>

55968102

<da89a0ebe3dfb3a4c4cb2a758caf6515bc4
6c33d, 1>

69534069

<Aac8d75fb58b069e4c0ab23393ac474d53
146d5, 2>

69468590
58130798
56557922
38076679

<13f12aec0dad9421e0fdc3d8788343ba23e
8fb47, 3>

Chunk-1

ref:0

Chunk-2

ref:1

Chunk-3

ref:2

Chunk-4

ref:3

Chunk-5

72 20 41 51

Chunk-6

55 49 20 73

or
n
eChunk-7
k
m
e hun
t
n
<a1140808c69e1a3c1871996563fcebb880
ta m c
s
0b0ad3, 5>
Re e u
qu
<9256c5d2d36c9f9c4947b98a1556de7437
d6b790, 4>

69

<7d03542f8187a51a05a64a5f4670b6432e
7c75f9, 6>

Disco rígido

69 74 20 61 6d 65 74 2e

f 72 65 6d 20 69 70 73 75 6d 20 64 6f 6c 6f 72 20 41 51 55 49 20 73 69 74 205261 6d

Memória principal

Hash32

hashmap<SHA-1, id>

63308178

<730949e23ca46f310466fbf205ffb165aef1f
d7b, 0>

55968102

<da89a0ebe3dfb3a4c4cb2a758caf6515bc4
6c33d, 1>

69534069

<Aac8d75fb58b069e4c0ab23393ac474d53
146d5, 2>

69468590

<13f12aec0dad9421e0fdc3d8788343ba23e
8fb47, 3>

58130798

<9256c5d2d36c9f9c4947b98a1556de7437
d6b790, 4>

56557922

<a1140808c69e1a3c1871996563fcebb880
0b0ad3, 5>

38076679

<7d03542f8187a51a05a64a5f4670b6432e
possui a chave?
7c75f9, 6>

Chunk-1

ref:0

Chunk-2

ref:1

Chunk-3

ref:2

Chunk-4

ref:3

Chunk-5

72 20 41 51

Chunk-6

55 49 20 73

Chunk-7

69

Hash32: 38076679

Disco rígido

69 74 20 61 6d 65 74 2e

f 72 65 6d 20 69 70 73 75 6d 20 64 6f 6c 6f 72 20 41 51 55 49 20 73 69 74 205361 6d

Memória principal

Hash32

hashmap<SHA-1, id>

63308178

<730949e23ca46f310466fbf205ffb165aef1f
d7b, 0>

55968102

<da89a0ebe3dfb3a4c4cb2a758caf6515bc4
6c33d, 1>

69534069

<Aac8d75fb58b069e4c0ab23393ac474d53
146d5, 2>

69468590

<13f12aec0dad9421e0fdc3d8788343ba23e n
u
8fb47, 3>
Ch

58130798

<9256c5d2d36c9f9c4947b98a1556de7437
d6b790, 4>

56557922

<a1140808c69e1a3c1871996563fcebb880
0b0ad3, 5>

38076679

<7d03542f8187a51a05a64a5f4670b6432e
possui a chave?
7c75f9, 6>

Chunk-1

ref:0

Chunk-2

ref:1

Chunk-3

ref:2

Chunk-4do

ref:3

ca
i
l
Chunk-5
up
d
k

72 20 41 51

Chunk-6

55 49 20 73

Chunk-7

69

SHA-1: 7d03542f8187a51a05a64a5f4670b6432e7c75f9

Disco rígido

69 74 20 61 6d 65 74 2e

f 72 65 6d 20 69 70 73 75 6d 20 64 6f 6c 6f 72 20 41 51 55 49 20 73 69 74 205461 6d

Memória principal

Hash32

hashmap<SHA-1, id>

63308178

<730949e23ca46f310466fbf205ffb165aef1f
d7b, 0>

55968102

<da89a0ebe3dfb3a4c4cb2a758caf6515bc4
6c33d, 1>

69534069

<Aac8d75fb58b069e4c0ab23393ac474d53
146d5, 2>

69468590

<13f12aec0dad9421e0fdc3d8788343ba23e
8fb47, 3>

Chunk-1

ref:0

Chunk-2

ref:1

Chunk-3

ref:2

Chunk-4

ref:3

Chunk-5

72 20 41 51

Chunk-6

55 49 20 73

58130798

<9256c5d2d36c9f9c4947b98a1556de7437
d6b790, 4>

Chunk-7

56557922

<a1140808c69e1a3c1871996563fcebb880
0b0ad3, 5>

Chunk-8

38076679

<7d03542f8187a51a05a64a5f4670b6432e
7c75f9, 6>

69

ref:6

Disco rígido

69 74 20 61 6d 65 74 2e

f 72 65 6d 20 69 70 73 75 6d 20 64 6f 6c 6f 72 20 41 51 55 49 20 73 69 74 205561 6d

Memória principal

Hash32

hashmap<SHA-1, id>

63308178

<730949e23ca46f310466fbf205ffb165aef1f
d7b, 0>

55968102

<da89a0ebe3dfb3a4c4cb2a758caf6515bc4
6c33d, 1>

69534069

<Aac8d75fb58b069e4c0ab23393ac474d53
146d5, 2>

69468590

<13f12aec0dad9421e0fdc3d8788343ba23e
8fb47, 3>

Chunk-1

ref:0

Chunk-2

ref:1

Chunk-3

ref:2

Chunk-4

ref:3

Chunk-5

72 20 41 51

Chunk-6

55 49 20 73

58130798

<9256c5d2d36c9f9c4947b98a1556de7437
d6b790, 4>

Chunk-7

56557922

<a1140808c69e1a3c1871996563fcebb880
0b0ad3, 5>

Chunk-8

ref:6

38076679

<7d03542f8187a51a05a64a5f4670b6432e
7c75f9, 6>

Chunk-9

ref:5

69

Disco rígido

69 74 20 61 6d 65 74 2e

f 72 65 6d 20 69 70 73 75 6d 20 64 6f 6c 6f 72 20 41 51 55 49 20 73 69 74 205661 6d

Algoritmo em execução
• Depois desse processamento, o
arquivo que possuía 32 bytes foi
armazenado ocupando apenas 9
bytes, já que o restante do conteúdo
pôde ser aproveitado de um outro
arquivo já armazenado no sistema.

57

Os algoritmos
• Carga extra de dados
– Problema resolvido

58

Algoritmo usado no Usto.re
• O que é o Usto.re?
• O Usto.re utiliza o Dedupeer para
fazer a deduplicação dos arquivos.

59

Análise de desempenho de
compressão
• Datasets
– Mesmos dados para comparar sistemas

• 33 Artigos analisados por [1]
– Entre 2000 e 2011
– 29 usavam datasets privados
– 4 usavam datasets criados que não
davam pra ser reproduzidos por falta de
detalhes
60

Análise de desempenho e
compressão
• Dois datasets usados
– Código-fonte do Linux (.tar)
• stable: 3.9.8 datado de 27 de junho de 2013
(Latest Stable Kernel)
• mainline: 3.10-rc7 datado de 22 de junho de
2013

– Máquina virtual Linux (.vdi)
• Virtual Disk Image, um com o Ubuntu versão
12.10 sem qualquer alteração e o segundo com o
mesmo sistema operacional, só que com todas as
atualizações até o dia 02 de junho de 2013.
61

Análise de desempenho e
compressão
• Windows 7 Profissional com Service Pack 1
de 32 bits, processador Intel Core 2 Quad
Q6600 2.40GHz e 3,24GB de memória RAM
DDR2.
• Operações no teste do código-fonte:
– Armazenamento
– Deduplicação
– Deduplicação + Armazenamento
– Reidratação
62

Análise de desempenho
• Todas as quatro operações feitas para
chunks de 128KB, 64KB, 32KB, 16KB e 8KB
• Armazenamento:

63

Análise de desempenho
(armazenamento)

64

Análise de desempenho
(armazenamento)
•• tempo médio com MD5
 
• tempo médio com SHA-1

• Aplicando o T-Test emparelhado, resultou em um pvalue 0,695936.
• Como o p-value é maior do que 0,05, não devemos
rejeitar a hipótese nula, logo, não podemos afirmar que
a média de tempo com MD5 é maior do que com SHA-1.
65

Análise de desempenho
(deduplicação)

66

Análise de desempenho
(deduplicação)
••  tempo médio com MD5
• tempo médio com SHA-1

• Aplicando o T-Test emparelhado, resultou em um pvalue .
• Como o p-value é menor do que 0,05, devemos
rejeitar a hipótese nula e aceitar a alternativa.
67

Análise de desempenho (deduplicação +
armazenamento)

68

Análise de desempenho (deduplicação
+ armazenamento)
• tempo médio com MD5
•  
• tempo médio com SHA-1

• Dados não normais
• Aplicando o Wilcoxon signed-rank test, resultou em um pvalue 0,00109705.
• Com isso a hipóteses nula deve ser rejeitada e concluímos
que o tempo médio dos algoritmos são diferentes.
69

Análise de desempenho (reidratação)

70

Análise de desempenho
(reidratação)
••  tempo médio com MD5
• tempo médio com SHA-1

• Aplicando o T-Test emparelhado, resultou em um pvalue .
• Como o p-value é menor do que 0,05, devemos
rejeitar a hipótese nula e aceitar a alternativa.
71

Análise de compressão
• Mapa de chunks para a deduplicação
do código-fonte





128KB -> 3%
64KB -> 6,5%
32KB -> 11%
16KB -> 25%
8KB -> 41%

72

Análise de compressão (máquinas
virtuais)
• Mapa de chunks para a deduplicação
das máquinas virtuais

73

Análise de compressão (máquinas
virtuais)

79,397% para 128KB, 85,488% para 64KB, 90,740% para 32KB, 95,731% para
16KB e 98,997% para 8KB
74

Conclusão
• Com a utilização do algoritmo de deduplicação
com processamento particionado foi possível
fazer o processamento de arquivos com
tamanhos maiores do que a memória RAM do
computador utilizado.
• A eficiência do algoritmo também foi
comprovada através da compressão alcançada
entre máquinas virtuais, chegando até a uma
economia equivalente à 98,997% de dados em
relação ao tamanho total do arquivo
armazenado no sistema.
75

Trabalhos futuros
• Buffer em disco.
• Deduplicação particionada vs
Deduplicação de carga completa.
• Avaliar desempenho do DeFS de forma
distribuída.
• Modificar o DeFS para distribuição de
tarefas de deduplicação entre nós.
• Adaptar o Dedupeer para compressão
de dados como zip e rar.
76

Referência

[1] TARASOV, V., M UDRANKIT, A., B UIK, W., S HILANE, P., K
UENNING, G., AND ZADOK, E. Generating realistic datasets
for deduplication analysis. In Proceedings of the 2012
USENIX conference on Annual Technical Conference
(Berkeley, CA, USA, 2012), USENIX ATC’12, USENIX
Association, pp. 24–24.

77

Obrigado!
pfas@cin.ufpe.br
www.dedupeer.com

78