Flashcache es un componente de caché de disco para el kernel de Linux , desarrollado inicialmente por Facebook desde abril de 2010 y lanzado como código abierto en 2011. Desde enero de 2013, existe una bifurcación de Flashcache, llamada EnhanceIO y desarrollada por sTec, Inc. [1]
Flashcache funciona mediante el uso de memoria flash , una unidad flash USB , 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 un SSD interno para aumentar el rendimiento.
Descripción general
El uso de memoria flash ( dispositivos de memoria NAND ) para el almacenamiento en caché permite que el kernel de Linux proporcione servicio de E / S de disco aleatorio con un mejor rendimiento que sin caché. Este almacenamiento en caché se aplica a todo el contenido del disco, no solo al archivo de página o los binarios del sistema. Los dispositivos basados en memoria flash suelen ser mucho más rápidos que los discos duros giratorios para E / S aleatorios, pero con menos ventajas o incluso más lentos en lecturas / escrituras secuenciales. De forma predeterminada, flashcache almacena en caché todas las E / S de tamaño de bloque completo, pero se puede configurar para que solo almacene en caché las E / S aleatorias mientras ignora las E / S secuenciales. [2]
Existe una tecnología similar en Microsoft Windows como ReadyBoost desde Windows Vista .
Implementación
Flashcache está construido sobre el mapeador de dispositivos del kernel de Linux . La estructura de datos de la caché es una tabla hash asociativa de conjuntos , en la que la caché se divide en una cantidad de conjuntos de tamaño fijo (cubos), utilizando un sondeo lineal dentro de un conjunto para encontrar bloques. La capa del mapeador de dispositivos divide todas las solicitudes de E / S en bloques de tamaño antes de pasar las solicitudes a la capa de caché. [ cita requerida ]
Cuando ocurre una solicitud de escritura, el bloque de caché correspondiente se marca como sucio; los bloques de caché sucios se escriben de forma perezosa en el disco en segundo plano. Hay unos pocos parámetros para controlar el write-back de la política: dirty-umbral, el ocio y la contigüidad con otros bloques sucios a punto de ser escrita espalda. [ cita requerida ]
Limitaciones
Hay algunas limitaciones impuestas por la implementación de flashcache: [ cita requerida ]
- 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 la 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ó a sí mismo como no almacenable en caché muere, flashcache no tiene forma de limpieza.
- Alineación
- Confiar en el mapeador de dispositivos dio como resultado problemas de rendimiento de almacenamiento en caché y no almacenamiento en caché de escrituras que no son múltiplos de 4 KiB. Principalmente, esto afecta al hipervisor Xen. Por lo tanto, EnhanceIO se ha alejado de la integración del mapeador de dispositivos, lo que produce un mayor rendimiento para casos de uso no óptimos. [ cita requerida ]
- Impacto de la latencia de lectura de escritura alrededor
- en el modo de escritura indirecta, todas las escrituras omiten la caché para lograr una alta coherencia. La implementación actual buscará lecturas a través del dispositivo SSD y luego las entregará al lector real. Esto significa que los bloques previamente no almacenados en caché siempre deberán ir primero al dispositivo SSD, lo que provocará una E / S de escritura constante. No es un problema en SSD empresariales o dispositivos PCIe de gama alta como Facebook usa, pero degrada el rendimiento en SSD de gama baja.
- Fase de preparación de la caché de lectura de escritura alrededor
- en el modo de escritura indirecta, FlashCache no tiene 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 no se rastrean escrituras en este modo. Esto da como resultado un caché vacío después de cada activación de volumen (es decir, reiniciar). El rendimiento se degradará hasta que todas las áreas activas se hayan almacenado en caché.
Ver también
- bcaché
- dm-cache
- Software de aceleración de caché (producto de Intel)