Configuración de ZFS Cache para IO de alta velocidad

Configuración de ZFS Cache para IO de alta velocidad
El equipo detrás de ZFS cree que la memoria libre y no utilizada es la memoria desperdiciada. Por lo tanto, han diseñado ZFS para almacenar datos de manera muy agresiva. ZFS intenta almacenar en caché la mayor cantidad de datos posible en la memoria (RAM) para proporcionar un acceso más rápido al sistema de archivos.

Desafortunadamente, la memoria (RAM) es muy costosa. Por lo tanto, ZFS también le permite usar SSD rápidos para los datos de almacenamiento en caché también. El almacenamiento en caché de datos sobre la memoria se denomina caché de nivel 1 o L1 y los datos de almacenamiento en caché en el SSD se denominan caché de nivel 2 o L2.

ZFS hace 2 tipos de caché de lectura

1. ARC (caché de reemplazo adaptativo):

ZFS almacena los archivos de acceso más recientemente y con mayor frecuencia en la RAM. Una vez que un archivo se almacena en caché en la memoria, la próxima vez que acceda al mismo archivo, se servirá desde el caché en lugar de su disco duro lento. El acceso a estos archivos en caché será muchas veces más rápido que si tuviera que acceder a ellos desde discos duros.

2. L2ARC (caché de reemplazo adaptativo de nivel 2):

ARC Cache se almacena en la memoria de su computadora. Cuando la memoria está llena, los datos más antiguos se eliminan del caché de arco y se almacenan en caché los nuevos datos. Si no desea que ZFS tire los datos en caché de forma permanente, puede configurar un SSD rápido como un caché L2ARC para su grupo ZFS.

Una vez que configure un caché L2ARC para su grupo ZFS, ZFS almacenará datos eliminados del caché de ARC en el caché L2ARC. Por lo tanto, se pueden mantener más datos en el caché para un acceso más rápido.

ZFS hace 2 tipos de almacenamiento en caché de escritura

1. ZIL (Log de intención ZFS):

ZFS asigna una pequeña porción de la piscina para almacenar cachés de escritura de forma predeterminada. Se llama Zil o Registro de intención de ZFS. Antes de que los datos se escriban en los discos duros físicos, se almacena en zil. Para minimizar el número de operaciones de escritura y reducir la fragmentación de datos, los datos se agrupan en el ZIL y se enjuican al disco duro físico una vez que se cumple un cierto umbral. Es más como un búfer de escritura que caché. Puedes pensar en ello de esa manera.

2. Slog (registro secundario):

Como ZFS utiliza una pequeña porción de la piscina para almacenar Zil, comparte el ancho de banda de la piscina ZFS. Esto puede tener un impacto negativo en el rendimiento del grupo ZFS.

Para resolver este problema, puede usar un SSD rápido como dispositivo de Slog. Si existe un dispositivo de slog en un grupo ZFS, entonces ZIL se mueve al dispositivo de Slog. ZFS ya no almacenará datos ZIL en la piscina. Entonces, no se desperdicia el ancho de banda de la piscina en zil.

También hay otros beneficios. Si una aplicación escribe en el grupo ZFS a través de la red (i.mi. VMware ESXI, NFS), ZFS puede escribir rápidamente los datos para que sague y envíe un reconocimiento a la aplicación de que los datos están escritos en el disco. Luego, puede escribir los datos en discos duros más lentos como de costumbre. Esto hará que estas aplicaciones sean más receptivas.

Tenga en cuenta que normalmente, ZFS no lee del Slog. ZFS solo lee datos del Slog en caso de pérdida de energía o falla de escritura. Las escrituras reconocidas solo se almacenan allí temporalmente hasta que se enjuagan a los discos duros más lentos. Solo está ahí para garantizar que en caso de pérdida de energía o falla de escritura, las escrituras reconocidas no se pierdan y se enjuagan a los dispositivos de almacenamiento permanente lo más rápido posible.

También tenga en cuenta que en ausencia de un dispositivo de Slog, ZIL se utilizará para el mismo propósito.

Ahora que sabe todo sobre ZFS Leer y escribir cachés, veamos cómo configurarlos en su grupo ZFS.

Tabla de contenido

  1. Configuración del límite de memoria máxima para ARC
  2. Agregar un dispositivo de caché L2ARC
  3. Agregar un dispositivo de slog
  4. Conclusión
  5. Referencias

Configuración del límite de memoria máxima para ARC

En Linux, ZFS utiliza el 50% de la memoria instalada para el almacenamiento en caché de ARC de forma predeterminada. Entonces, si tiene 8 GB de memoria instalada en su computadora, ZFS usará 4 GB de memoria para el almacenamiento en caché de ARC en Max.

Si lo necesita, puede aumentar o disminuir la cantidad máxima de memoria que los ZFS pueden usar para el almacenamiento en caché de ARC. Para establecer la cantidad máxima de memoria que ZFS puede usar para el almacenamiento en caché de ARC, puede usar el zfs_arc_max parámetro del núcleo.

Puede encontrar mucha información de uso de caché de arco con el arc_summary Comando de la siguiente manera:

$ sudo arc_summary -s arco

En el Tamaño de arco (actual) Sección, puede encontrar el tamaño máximo que puede crecer el caché de arco (Tamaño máximo (agua alta)), el tamaño del caché de arco actual (Tamaño objetivo (adaptativo)), y otra información de uso de caché de arco como puede ver en la captura de pantalla a continuación.

Observe que el tamaño de caché de arco máximo en mi computadora es 3.9 GB ya que tengo 8 GB de memoria instalada en mi computadora. Eso es alrededor del 50% de la memoria total disponible como he mencionado anteriormente.

Puede ver cuántos datos golpean el caché de arco y cuántos datos también pierden el caché de arco. Esto puede ayudarlo a determinar cuán efectivamente está funcionando el caché del arco en su escenario.

Para imprimir un resumen de los golpes/fallos de la memoria caché de arco, ejecute el siguiente comando:

$ sudo arc_summary -s arcos

Se debe mostrar un resumen de los golpes y fallas de caché de arco como puede ver en la captura de pantalla a continuación.

Puede monitorear el uso de memoria del caché de arco ZFS con el siguiente comando:

$ sudo arcStat 1 2>/dev/null

Como puede ver, la memoria de caché de arco máximo (C), el tamaño de caché de arco actual (arcsz), datos leídos del caché de arco (leer) y se muestra otra información.

Ahora, veamos cómo establecer un límite de memoria personalizado para el caché de arco ZFS.

Para establecer un límite de memoria máxima personalizado para el caché de arco ZFS, cree un nuevo archivo ZFS.confusión en el /etc/modprobe.d/ Directorio de la siguiente manera:

$ sudo nano /etc /modprobe.D/ZFS.confusión

Escriba la siguiente línea en el ZFS.confusión archivo:

Opciones ZFS ZFS_ARC_MAX =

Reemplazar, Con el límite de memoria máxima deseado para el caché de arco ZFS en bytes.

Digamos que desea usar 5 GB de memoria para el caché de arco ZFS. Para convertir 5 GB a bytes, puede usar el siguiente comando:

$ Echo $ ((5*2 ** 30))

Como se puede ver, 5 GB es igual a 5368709120 bytes.

Puedes hacer lo mismo con el intérprete Python 3 de la siguiente manera:

$ python3 -c "imprime (5*2 ** 30)"

Una vez que haya configurado el límite de memoria de ZFS Cache Max, presione + X seguido por Y y Para salvar el ZFS.confusión archivo.

Ahora, actualice la imagen initramfs de su núcleo actual con el siguiente comando:

$ sudo actualización -initramfs -u

La imagen de initRAMFS debe actualizarse.

Para que los cambios entren en vigencia, reinicie su computadora con el siguiente comando:

$ sudo reinicio

La próxima vez que inicie su computadora, el límite de memoria máxima de su caché de arco ZFS debe configurarse en su tamaño deseado (5 GB en mi caso) como puede ver en la captura de pantalla a continuación.

$ sudo arc_summary -s arco

Agregar un dispositivo de caché L2ARC

Si se agrega un dispositivo de caché L2ARC (un SSD o NVME SSD) a su grupo ZFS, ZFS descargará (mover) los cachores de arco al dispositivo L2ARC cuando la memoria está llena (o alcanzó el límite de arco máximo). Por lo tanto, se pueden mantener más datos en el caché para un acceso más rápido al grupo ZFS.

Para seguir los ejemplos, cree un grupo de prueba ZFS piscina con /dev/sdb y /dev/sdc discos duros en la configuración reflejada de la siguiente manera:

$ sudo zpool Create -f Pool1 Mirror /Dev /SDB /Dev /SDC

Una piscina ZFS piscina debe crearse con el /dev/sdb y /dev/sdc discos duros en modo espejo como puede ver en la captura de pantalla a continuación.

$ sudo zpool Status Pool1

Ahora, digamos, quieres agregar el SSD NVME nvme0n1 Como dispositivo de caché L2ARC para el grupo ZFS piscina.

$ sudo lsblk -e7

Para agregar el SSD NVME nvme0n1 a la piscina ZFS piscina Como dispositivo de caché L2ARC, ejecute el siguiente comando:

$ sudo zpool ADD -F Pool1 Cache /Dev /NVME0N1

El NVME SSD nvme0n1 debe agregarse a la piscina ZFS piscina Como un dispositivo de caché L2ARC como puede ver en la captura de pantalla a continuación.

$ sudo zpool Status Pool1

Una vez que haya agregado un dispositivo de caché L2ARC a su grupo ZFS, puede mostrar las estadísticas de caché L2ARC utilizando el arc_summary Comando de la siguiente manera:

$ sudo arc_summary -s l2arc

Las estadísticas de caché de L2ARC deben mostrarse como puede ver en la captura de pantalla a continuación.

Agregar un dispositivo de slog

Puede agregar uno o más SSDS/NVME SSDS en su grupo ZFS como un dispositivo Slog (registro secundario) para almacenar el registro de intención ZFS (ZIL) de su grupo ZFS allí.

Por lo general, agregar un SSD es suficiente. Pero como se usa Slog para asegurarse de que las escrituras no se pierdan en el caso de una falla de energía y otros problemas de escritura, se recomienda usar 2 SSD en una configuración reflejada. Esto le dará un poco más de protección y se asegurará de que no se pierdan escrituras.

Digamos que quieres agregar los SSD NVME nvme0n2 y nvme0n3 Como dispositivo de slog en su grupo ZFS piscina En una configuración reflejada.

$ sudo lsblk -e7

Para agregar los SSD NVME nvme0n2 y nvme0n3 Como dispositivo de slog en su grupo ZFS piscina En una configuración reflejada, ejecute el siguiente comando:

$ sudo zpool ADD -f Pool1 log Mirror /dev /nvme0n2 /dev /nvme0n3

Si desea agregar un solo SSD NVME nvme0n2 Como dispositivo de slog en su grupo ZFS piscina, Puede ejecutar el siguiente comando en su lugar:

$ sudo zpool ADD -F Pool1 log /dev /nvme0n2

Los SSD NVME nvme0n2 y nvme0n3 debe agregarse a su piscina ZFS piscina Como dispositivo de slog en modo espejo como puede ver en la captura de pantalla a continuación.

$ sudo zpool Status Pool1

Puede encontrar información de transacción ZIL y Slog utilizando el arc_summary Comando de la siguiente manera:

$ sudo arc_summary -s zil

La información de transacción ZIL y Slog debe mostrarse como puede ver en la captura de pantalla a continuación.

Conclusión

En este artículo, he discutido diferentes tipos de características de almacenamiento en caché de lectura y escritura del sistema de archivos ZFS. También le he mostrado cómo configurar el límite de memoria para el caché de arco. Le he mostrado cómo agregar un dispositivo de caché L2ARC y un dispositivo de slog a su grupo ZFS también.

Referencias

[1] ZFS - Wikipedia

[2] ELI5: ZFS Caching (2019) - YouTube

[3] Introducción de ZFS en Linux - Damian Wojstaw

[4] Ubuntu ManPage: ZFS-Module-Parameters-Parámetros del módulo ZFS

[5] Ram - es ZFS en Ubuntu 20.04 usando una tonelada de memoria? - Pregúntale a Ubuntu