2.6.2. O índice UDS

A VDO usa um índice de deduplicação de alto desempenho chamado UDS para detectar blocos duplicados de dados à medida que estão sendo armazenados.

O índice UDS fornece a base do produto VDO. Para cada novo dado, ele determina rapidamente se esse dado é idêntico a qualquer dado previamente armazenado. Se o índice encontrar correspondência, o sistema de armazenamento pode então referenciar internamente o item existente para evitar o armazenamento da mesma informação mais de uma vez.

O índice UDS é executado dentro do kernel como o módulo do kernel uds.

O deduplication window é o número de blocos previamente escritos de que o índice se lembra. O tamanho da janela de deduplicação é configurável. Para um determinado tamanho de janela, o índice requer uma quantidade específica de RAM e uma quantidade específica de espaço em disco. O tamanho da janela é normalmente determinado especificando o tamanho da memória do índice usando a opção --indexMem=size. O VDO então determina a quantidade de espaço em disco a ser usada automaticamente.

O índice UDS é composto de duas partes:

  • Uma representação compacta é usada na memória que contém no máximo uma entrada por bloco único.
  • Um componente em disco que registra os nomes dos blocos associados apresentados ao índice à medida que eles ocorrem, em ordem.

A UDS usa uma média de 4 bytes por entrada na memória, incluindo o cache.

O componente em disco mantém um histórico limitado de dados passados à UDS. O UDS fornece conselhos de deduplicação de dados que se enquadram nesta janela de deduplicação, contendo os nomes dos blocos mais recentemente vistos. A janela de desduplicação permite ao UDS indexar dados da forma mais eficiente possível, enquanto limita a quantidade de memória necessária para indexar grandes repositórios de dados. Apesar da natureza limitada da janela de desduplicação, a maioria dos conjuntos de dados que têm altos níveis de desduplicação também exibe um alto grau de localidade temporal - em outras palavras, a maior parte da desduplicação ocorre entre conjuntos de blocos que foram escritos aproximadamente ao mesmo tempo. Além disso, em geral, os dados escritos são mais propensos a duplicar dados que foram escritos recentemente do que dados que foram escritos há muito tempo. Portanto, para uma determinada carga de trabalho em um determinado intervalo de tempo, as taxas de deduplicação muitas vezes serão as mesmas, quer os índices UDS indexem apenas os dados mais recentes ou todos os dados.

Como os dados duplicados tendem a exibir a localidade temporal, raramente é necessário indexar cada bloco no sistema de armazenamento. Se não fosse assim, o custo da memória de índice superaria a economia de custos de armazenamento reduzidos pela deduplicação. Os requisitos de tamanho do índice estão mais estreitamente relacionados com a taxa de ingestão de dados. Por exemplo, considere um sistema de armazenamento com 100 TB de capacidade total, mas com uma taxa de ingestão de 1 TB por semana. Com uma janela de deduplicação de 4 TB, o UDS pode detectar a maioria das redundâncias entre os dados escritos no último mês.