Flashcache es un componente de caché de disco para el kernel de Linux , desarrollado inicialmente por Facebook en abril de 2010 y publicado como código abierto en 2011. Desde enero de 2013, existe una bifurcación de Flashcache, llamada EnhanceIO y desarrollada por sTec, Inc. [ 1 ] Desde 2015, esa bifurcación dejó de recibir mantenimiento y fue bifurcada nuevamente y mantenida por particulares. [ 2 ]
Flashcache funciona utilizando memoria flash , una unidad flash USB , una tarjeta SD , CompactFlash o cualquier tipo de sistema de almacenamiento masivo flash portátil como caché persistente de escritura diferida. También se puede utilizar una unidad SSD interna para aumentar el rendimiento. [ 3 ]
Descripción general
El uso de memoria flash ( dispositivos de memoria NAND ) para el almacenamiento en caché permite que el kernel de Linux gestione las operaciones de E/S aleatorias del disco con un rendimiento superior al que se obtendría sin la caché. Este almacenamiento en caché se aplica a todo el contenido del disco, no solo al archivo de paginación o a los binarios del sistema. Los dispositivos basados en memoria flash suelen ser mucho más rápidos que los discos duros tradicionales para las operaciones de E/S aleatorias, pero con menor ventaja o incluso más lentos en las lecturas/escrituras secuenciales. Por defecto, flashcache almacena en caché todas las operaciones de E/S de tamaño de bloque completo, pero puede configurarse para almacenar en caché solo las operaciones de E/S aleatorias, ignorando las secuenciales. [ 4 ]
Una tecnología similar , llamada ReadyBoost, existe en Microsoft Windows desde Windows Vista .
Implementación
Flashcache se basa en el mapeador de dispositivos del kernel de Linux . La estructura de datos de la caché es una tabla hash asociativa por conjuntos , en la que la caché se divide en varios conjuntos de tamaño fijo (cubetas), utilizando sondeos lineales dentro de cada conjunto para encontrar bloques. La capa del mapeador de dispositivos divide todas las solicitudes de E/S en fragmentos del tamaño de un bloque antes de pasarlas a la capa de caché.
Cuando se produce una solicitud de escritura, el bloque de caché correspondiente se marca como modificado; estos bloques se escriben de forma diferida en segundo plano. Existen algunos parámetros para controlar la política de escritura diferida : umbral de modificación, inactividad y contigüidad con otros bloques modificados que están a punto de escribirse.
Limitaciones
Existen algunas limitaciones impuestas por la implementación de flashcache:
- Atomicidad
- Actualmente, las escrituras de bloques de caché no son atómicas.
- Soporte TRIM
- El comando ATA TRIM para optimizar la memoria flash aún no es compatible.
- Protección contra la contaminación de caché
- Un proceso puede marcarse como no almacenable en caché para evitar que flashcache almacene en caché sus solicitudes; sin embargo, si un proceso que se marcó como no almacenable en caché termina, flashcache no tiene forma de limpiarlo.
- Alineación
- El uso del mapeador de dispositivos generó problemas de rendimiento en el almacenamiento en caché y la imposibilidad de almacenar en caché las escrituras que no fueran múltiplos de 4 KiB. Esto afecta principalmente al hipervisor Xen. Por lo tanto, EnhanceIO ha dejado de integrar el mapeador de dispositivos, lo que se traduce en un mayor rendimiento para casos de uso no óptimos.
- Impacto de la latencia de lectura de la escritura indirecta
- En el modo de escritura directa, todas las escrituras omiten la caché para lograr una alta consistencia. La implementación actual obtiene las lecturas a través del dispositivo SSD y luego las entrega al lector. Esto significa que los bloques que no se almacenaron en caché previamente siempre deberán ir primero al dispositivo SSD, lo que genera una E/S de escritura constante. Esto no representa un problema en SSD empresariales o dispositivos PCIe de gama alta como los que usa Facebook, pero degrada el rendimiento en SSD de gama baja.
- Fase de calentamiento de la caché de lectura de escritura directa
- En el modo de escritura directa, FlashCache no dispone de información para comparar la antigüedad de las páginas almacenadas en caché con las del disco. (1) Porque el dispositivo podría haberse montado fuera de FlashCache. (2) Porque en este modo no se realiza ningún seguimiento de las escrituras. Esto provoca que la caché quede vacía tras cada activación del volumen (es decir, al reiniciar el sistema). El rendimiento se verá afectado hasta que se hayan almacenado en caché todas las áreas de acceso frecuente.
Véase también
- bcache
- caché dm
- Software de aceleración de caché (producto de Intel)
Referencias
Enlaces externos
- Comparación de rendimiento entre EnhanceIO, bcache y dm-cache ( LKML )
- Pruebas de rendimiento de EnhanceIO, Bcache y DM-Cache
- Flashcache en Facebook: De 2010 a 2013 y más allá
- Facebook lanza Flashcache 3.0. Archivado el 20 de diciembre de 2013 en Wayback Machine.
- Almacenamiento en caché de estado sólido
- Software relacionado con el núcleo de Linux