2.6.2. El índice UDS

VDO utiliza un índice de deduplicación de alto rendimiento llamado UDS para detectar bloques de datos duplicados mientras se almacenan.

El índice UDS constituye la base del producto VDO. Para cada nuevo dato, determina rápidamente si ese dato es idéntico a cualquier dato almacenado anteriormente. Si el índice encuentra una coincidencia, el sistema de almacenamiento puede entonces referenciar internamente el elemento existente para evitar almacenar la misma información más de una vez.

El índice UDS se ejecuta dentro del núcleo como el módulo del núcleo uds.

El deduplication window es el número de bloques escritos previamente que el índice recuerda. El tamaño de la ventana de deduplicación es configurable. Para un tamaño de ventana determinado, el índice requiere una cantidad específica de memoria RAM y una cantidad específica de espacio en disco. El tamaño de la ventana suele determinarse especificando el tamaño de la memoria del índice mediante la opción --indexMem=size. VDO determina entonces la cantidad de espacio en disco a utilizar automáticamente.

El índice UDS consta de dos partes:

  • En la memoria se utiliza una representación compacta que contiene como máximo una entrada por bloque único.
  • Un componente en el disco que registra los nombres de los bloques asociados presentados al índice a medida que se producen, en orden.

UDS utiliza una media de 4 bytes por entrada en memoria, incluyendo la caché.

El componente on-disk mantiene un historial acotado de los datos pasados a UDS. UDS proporciona consejos de deduplicación para los datos que caen dentro de esta ventana de deduplicación, conteniendo los nombres de los bloques vistos más recientemente. La ventana de deduplicación permite a UDS indexar los datos de la forma más eficiente posible, limitando al mismo tiempo la cantidad de memoria necesaria para indexar grandes depósitos de datos. A pesar de la naturaleza limitada de la ventana de deduplicación, la mayoría de los conjuntos de datos que tienen altos niveles de deduplicación también muestran un alto grado de localidad temporal - en otras palabras, la mayor parte de la deduplicación ocurre entre conjuntos de bloques que fueron escritos aproximadamente al mismo tiempo. Además, en general, es más probable que los datos que se escriben dupliquen los que se escribieron recientemente que los que se escribieron hace mucho tiempo. Por lo tanto, para una carga de trabajo determinada en un intervalo de tiempo determinado, los índices de deduplicación serán a menudo los mismos si UDS indexa sólo los datos más recientes o todos los datos.

Dado que los datos duplicados tienden a mostrar una localización temporal, rara vez es necesario indexar cada bloque en el sistema de almacenamiento. Si no fuera así, el coste de la memoria de los índices superaría el ahorro de los costes de almacenamiento derivados de la deduplicación. Los requisitos de tamaño de los índices están más relacionados con la tasa de ingestión de datos. Por ejemplo, consideremos un sistema de almacenamiento con 100 TB de capacidad total pero con una tasa de ingestión de 1 TB por semana. Con una ventana de deduplicación de 4 TB, UDS puede detectar la mayor parte de la redundancia entre los datos escritos en el último mes.