Configuración de la caché ZFS para IO de alta velocidad

Configuración de la caché ZFS para IO de alta velocidad

Configuración de caché en su grupo ZFS

Si ha pasado por nuestras publicaciones anteriores sobre los conceptos básicos de ZFS, ya sabe que este es un sistema de archivos robusto. Realiza suma de verificación en cada bloque de datos que se escriben en el disco y los metadatos importantes, como las sumas de verificación, se escriben en múltiples lugares diferentes. ZFS puede perder sus datos, pero se garantiza que nunca le devuelva los datos incorrectos, como si fuera el correcto.

La mayor parte de la redundancia de una piscina ZFS proviene de los VDEV subyacentes. Lo mismo es cierto para el rendimiento del grupo de almacenamiento. Tanto el rendimiento de lectura como la escritura pueden mejorar enormemente mediante la adición de SSD de alta velocidad o dispositivos NVME. Si ha usado discos híbridos donde un SSD y un disco giratorio están agrupados como una sola pieza de hardware, entonces sabe cuán malos son los mecanismos de almacenamiento de caché de hardware. ZFS no es nada como esto, debido a varios factores, que exploraremos aquí.

Hay dos cachés diferentes que una piscina puede hacer uso:

  1. El registro de intención de ZFS, o ZIL, a las operaciones de escritura de buffer.
  2. ARC y L2ARC que están destinados a operaciones de lectura.

Sincrónicos vs escrituras asíncronas

ZFS, como la mayoría de los otros sistemas de archivos, intenta mantener un búfer de operaciones de escritura en la memoria y luego escribirlo en los discos en lugar de escribirlo directamente en los discos. Esto se conoce como asincrónico Escribir y ofrece ganancias de rendimiento decentes para aplicaciones que son tolerantes a las fallas o donde la pérdida de datos no hace mucho daño. El sistema operativo simplemente almacena los datos en la memoria y le dice a la aplicación, que solicitó la escritura, que la escritura se completa. Este es el comportamiento predeterminado de muchos sistemas operativos, incluso cuando se ejecuta ZFS.

Sin embargo, el hecho es que en el caso de la falla del sistema o la pérdida de energía, se pierden todas las escrituras amortiguadas en la memoria principal. Entonces, las aplicaciones que desean consistencia sobre el rendimiento pueden abrir archivos en sincrónico modo y luego los datos solo se considera que se escriben una vez que realmente está en el disco. La mayoría de las bases de datos y aplicaciones como NFS dependen de las escrituras sincrónicas todo el tiempo.

Puedes configurar la bandera: sincronización = siempre Para hacer que Synchronous escriba el comportamiento predeterminado para cualquier conjunto de datos determinado.

$ zfs set sync = siempre mypool/dataSet1

Por supuesto, es posible que desee tener un buen rendimiento independientemente de si los archivos están o no en modo sincrónico. Ahí es donde Zil entra en la imagen.


Log de intención ZFS (ZIL) y dispositivos Slog

El registro de intención de ZFS se refiere a una parte de su grupo de almacenamiento que ZFS utiliza para almacenar datos nuevos o modificados primero, antes de extenderlo por todo el grupo de almacenamiento principal, despojando todos los VDEV.

Por defecto, una pequeña cantidad de almacenamiento siempre se topa de la piscina para actuar como zil, incluso cuando está utilizando solo un montón de discos giratorios para su almacenamiento. Sin embargo, puede hacerlo mejor si tiene un pequeño NVME o cualquier otro tipo de SSD a su disposición.

El almacenamiento pequeño y rápido se puede usar como un registro de intención separado (o Slog), que es donde los datos recién llegados se almacenarían temporalmente antes de ser enjuagados al almacenamiento principal más grande de la piscina. Para agregar un dispositivo de slog, ejecute el comando:

$ zpool agregue el registro de tanque Ada3

Dónde tanque es el nombre de tu piscina, registro ¿La palabra clave le dice a ZFS que trate el dispositivo? ADA3 Como dispositivo de slog. Es posible que el nodo del dispositivo de su SSD no sea necesariamente ADA3, Use el nombre del nodo correcto.

Ahora puede consultar los dispositivos en su piscina como se muestra a continuación:

Aún puede preocuparse de que los datos en una memoria no volátil fallaran, si el SSD falla. En ese caso, puede usar múltiples SSD reflejándose entre sí o en cualquier configuración de Raidz.

$ zpool Agregar espejo de registro de tanque Ada3 ADA4

Para la mayoría de los casos de uso, los pequeños 16 GB a 64 GB de almacenamiento flash realmente rápido y duradero son los candidatos más adecuados para un dispositivo de slog.


Caché de reemplazo adaptativo (ARC) y L2ARC

Al intentar almacenar en caché las operaciones de lectura, nuestro objetivo cambia. En lugar de asegurarnos de obtener un buen rendimiento, así como transacciones confiables, ahora el motivo de ZFS cambia a predecir el futuro. Esto significa que almacenando en caché la información que una aplicación requeriría en el futuro cercano, al tiempo que descarta las que serán necesarias más adelante en el tiempo.

Para hacer esto, se utiliza una parte de la memoria principal para el almacenamiento en caché de datos que se usaron recientemente o se accede a los datos con mayor frecuencia. De ahí proviene el término caché de reemplazo adaptativo (arco). Además del almacenamiento en caché de lectura tradicional, donde solo se almacenan en caché los objetos utilizados más recientemente, el arco también presta atención a la frecuencia con la que se ha accedido los datos.

L2ARC, o el arco de nivel 2, es una extensión del arco. Si tiene un dispositivo de almacenamiento dedicado para actuar como su L2ARC, almacenará todos los datos que no son demasiado importantes para permanecer en el arco, pero al mismo tiempo que los datos son lo suficientemente útiles como para merecer un lugar en la memoria más lenta que la memoria Dispositivo NVME.

Para agregar un dispositivo como L2ARC a su grupo ZFS, ejecute el comando:

$ ZPOOL ADD TANK CACHE ADA3

Dónde tanque es el nombre de tu piscina y ADA3 es el nombre del nodo del dispositivo para su almacenamiento L2ARC.


Resumen

Para acortar una historia larga, un sistema operativo a menudo amortigua las operaciones de escritura en la memoria principal, si los archivos se abren en modo asíncrono. Esto no debe confundirse con el caché de escritura real de ZFS, zil.

ZIL, por defecto, es parte del almacenamiento no volátil del grupo donde los datos van para el almacenamiento temporal antes de que se extienda correctamente en todos los VDEV. Si usa un SSD como un dispositivo ZIL dedicado, se conoce como Slog. Al igual que cualquier VDEV, Slog puede estar en la configuración de Mirror o Raidz.

Leer caché, almacenado en la memoria principal, se conoce como el arco. Sin embargo, debido al tamaño limitado de RAM, siempre puede agregar un SSD como un L2ARC, donde las cosas que no pueden caber en la RAM están en caché.