22 may

Tipos de caches ZFS

Vamos a explicar que tipos de cache tenemos disponible en ZFS y como trabaja cada una de ellas, este post es  un añadido al mejora del rendimiento ZFS,  hechas las presentaciones vamos al lio.

Como sabemos ZFS nos permite hacer miles de cosas que difícilmente las podemos encontrar en los sistemas tradicionales de almacenamiento, e incluso algunas de ellas no están presente entre los grandes como EMC o Hitachi, pero bien estamos viendo que con el paso del tiempo hemos conseguido aumentar el numero de cpu’s, los GB de RAM e incluso los miles de TB de nuestros discos duros, pero aún así seguimos pecando de la velocidad de los discos, así que dada esta situación solo nos queda meter caches intermedias para conseguir darle un poco de brío al tema, en esta situación tenemos lo que popularmente se esta conociendo como Hybrid Storage, que no es más que la unificación de un disco duro + un disco SSD + RAM, la cantidad de cada una de las partes en nuestro sistema dependerá una vez mas de los leuros que tengamos encima de la mesa.

En los tiempos que corren, lo mas normal es que tengamos muchos discos rotativos, poca ram y algún SSD, así que vamos a centrarnos en esta situación para explicar como funcionan y como debemos organizar las caches del sistema ZFS. Dónde tenemos el problema?, pues en el acceso aleatorio a los datos, la búsqueda del sector, más el movimiento de la aguja que nos lleva a tener una latencia importante.

Vamos a ver el esquema de sistemas de cache que tiene ZFS y explicar cada una de ellas.

arcCache ARC -> Muy por encima, ubicado en RAM, es la cache de primer nivel de ZFS, si no le decimos nada ZFS intentara ubicar en ella lo máximo posible, ya que al estar en RAM es la más rápida.(uberblock y punteros  a los arboles de datos, para acceder de la forma mas rápida posible a los mismos).

L2ARC: Cache de segundo nivel de lectura, esto son los discos SSD, zfs ubicará  todos los datos que no pudo ubicar en ARC (debemos recordar que zfs hace un uso intensivo del sistema de prefetch inteligente), esto se puede modificar y decidir que parte queremos enviar al ARC y que parte quedarnos en el L2ARC, esta explicado entre otras variables en el post “Mejorar rendimiento de ZFS“.

ZIL: Más disco SSD, cache de segundo nivel de escritura, ahí meteremos el log, el  zfs intent log que acelerará las escrituras de tipo sincrono.

Disk storage pool: Pues los discos, cuando llegamos aquí ya tenemos que tenerlo todo montadito, que sino empieza a ir todo lento lento….

Entonces como nos quedaría?, pues algo tal que así.

Diagrama1

Cosas a tener en cuenta para entender mejor la arquitectura:

  1. El incremento del rendimiento se notara tras varias horas de funcionamiento con la estructura montada, ya que el sistema L2ARC/ZiL, ira almacenando en cache, los datos que mayor acceso tengan.
  2. El L2ARC, esta pensado para sistemas de write one, read many, o sea mucha lectura poca escritura, y lectura de datos de tipo aleatorio, la lectura de datos secuenciales zfs no hará uso de L2ARC (de cualquier modo el sistema de prefetcht integrado en zfs ya esta suficientemente optimizado para el envío de datos).
  3. ZIL, esto nos ayudara a compensar las escrituras a disco, la verdad es que yo recomiendo activar ambos, ya que obtendremos el mejor rendimiento posible.

Por último, recordad que una vez montado la arquitectura deberías revisar los parámetros, pasaros por el post Mejorar rendimiento de ZFS

Como montar esto?

Fácil

zpool add <pool> cache <disco>

 

zpool add <pool> log <disco>

El primer comando activaremos la cache de L2ARC y con la opción log del segundo comando activaremos la cache ZiL
Ale a disfrutarlo!