jueves, 10 de septiembre de 2015

Usar un disco SSD como cache de un HDD: LVM Cache

Con la configuración del multiseat estaba buscando alguna forma de acelerar el acceso a los discos HDD para reducir el impacto en el rendimiento cuando se encuentren varios usuarios conectados, así que, como tenía espacio de sobra en el disco SSD me decanté por usarlo como caché de los discos lentos. Así, los datos cacheados serían leídos del disco SSD (con mayor velocidad de acceso) en vez de de los HDD.
El esquema de particiones inicial se podría resumir en el siguiente esquema:
NAME                         MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda                            8:0    0 119,2G  0 disk  
├─sda1                         8:1    0   512M  0 part  /boot
└─sda2                         8:2    0    10G  0 part  
  └─sistema-root             253:2    0    10G  0 lvm   /
sdb                            8:16   0   1,8T  0 disk  
└─sdb1                         8:17   0   1,5T  0 part  
  └─md0                        9:0    0   1,5T  0 raid1 
    └─datos-lvhome2          253:6    0   1,1T  0 lvm   /home
sdc                            8:32   0   1,8T  0 disk  
└─sdc1                         8:33   0   1,5T  0 part  
  └─md0                        9:0    0   1,5T  0 raid1 
    └─datos-lvhome2          253:6    0   1,1T  0 lvm   /home
Dado que ya hace tiempo que uso lvm por su flexibilidad me decanté por usar lvmcache, una herramienta más del set, con lo que voy a detallar su uso.
Lo primero, añadir una partición al SSD (sda) del tipo 8e00 (LVM) con la herramienta adecuada (fdisk, gdisk, gparted...) quedando de la siguiente forma:
NAME                         MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda                            8:0    0 119,2G  0 disk  
├─sda1                         8:1    0   512M  0 part  /boot
├─sda2                         8:2    0    30G  0 part  
│ └─sistema-root             253:2    0    30G  0 lvm   /
└─sda3                         8:3    0  88,8G  0 part
Se añade la nueva partición al mismo grupo que contiene los datos a cachear:
# vgextend datos /dev/sda3
La forma más fácil se realiza en un solo paso:
# lvcreate –type cache -l +100%FREE -n lvhome2_cachepool datos/lvhome2 /dev/sda3
Aunque el método principal para su creación es el siguiente.

Se crear el pool que está formado por un volumen de metadatos y otro en el que se guardan los datos cacheados. Como el volumen de metadatos debe ser de una milésima parte del tamaño de la cache (como mínimo 8MB) entonces de los 88,8GB debería ser de poco más de 90MB que he redondeado a 100MB y para el volumen de caché voy a usar el resto:
# lvcreate -L 100M -n lv_cache_meta datos /dev/sda3
# lvcreate -l +100%FREE -n lv_cache datos /dev/sda3
Convertimos ambos volúmenes en el pool de caché:
# lvconvert --type cache-pool --poolmetadata datos/lv_cache_meta datos/lv_cache
Y lo asociamos al volumen que contiene los datos a cachear:
# lvconvert --type cache --cachepool datos/lv_cache datos/lvhome2
El resultado final es el siguiente:
NAME                         MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda                            8:0    0 119,2G  0 disk  
├─sda1                         8:1    0   512M  0 part  /boot
├─sda2                         8:2    0    30G  0 part  
│ └─sistema-root             253:2    0    30G  0 lvm   /
└─sda3                         8:3    0  88,8G  0 part  
  ├─datos-lv_cache_cdata  253:4    0  88,7G  0 lvm   
  │ └─datos-lvhome2       253:3    0   1,1T  0 lvm   /home
  └─datos-lv_cache_cmeta  253:5    0   100M  0 lvm   
    └─datos-lvhome2       253:3    0   1,1T  0 lvm   /home
sdb                            8:16   0   1,8T  0 disk  
└─sdb1                         8:17   0   1,5T  0 part  
  └─md0                        9:0    0   1,5T  0 raid1 
    └─datos-lvhome2_corig 253:6    0   1,1T  0 lvm   
      └─datos-lvhome2     253:3    0   1,1T  0 lvm   /home
sdc                            8:32   0   1,8T  0 disk  
└─sdc1                         8:33   0   1,5T  0 part  
  └─md0                        9:0    0   1,5T  0 raid1 
    └─datos-lvhome2_corig 253:6    0   1,1T  0 lvm   
      └─datos-lvhome2     253:3    0   1,1T  0 lvm   /home
Nota (15/12/2015): Últimamente estaba notando que al iniciar el ordenador había mucha actividad del disco duro durante un buen rato y respondía más lento. Parece ser que el modo por defecto de la cache "writethrough" escribe los datos al HDD al iniciar la máquina. De momento he reducido el tamaño de la cache a 20 Gb y estudiaré los stats del cache para buscar un resultado óptimo.

No hay comentarios:

Publicar un comentario