miércoles, 15 de abril de 2009

GENERAL FILESYSTEM CACHING

Cache Filesystem está diseñado con el propósito de hacer cache para sistemas de ficheros de red, sin embargo se podría usar para cachear otras cosas como ISO9660 Filesystems.

El módulo FS-Cache media entre estos sistemas de ficheros, de red o no, y los repositorios o backends, como CacheFS o Cachefiles.



Visto de otra forma FS-Cache es un módulo que provee de capacidad para cachear a sistemas de ficheros en red, haciendo esto de manera transparente para el usuario.



Como podemos ver VFS(Virtual File System) comunica el sistema de ficheros de red (en adelante netfs) con el proceso. VFS proporciona una API para acceder a diferentes sistemas de ficheros, proporciona una forma uniforme de visualizar ficheros de varias fuentes. (ver http://commons.apache.org/vfs/).

Como podemos ver en el dibujo, el server se comunica a través de netfs(en este caso NFS), y FS-Cache media entre netfs y los backends, que estan en el disco local, la gestión de los datos en local es controlada por el demonio cachefilesd.

FS-Cache no sigue la idea de cargar completamente cada archivo abierto de un netfs en la cache antes de permitir que este sea accedido y entonces servir las páginas debido a que:

1- Podría ser práctico trabajar sin cache.
2- El tamaño de un fichero accesible no debería estar limitado por el tamaño de la cache.
3- La combinación de todos los tamaños de los ficheros abiertos (incluyendo librerías mapeadas) no debería depender del tamaño de la cache.
4- El usuario no debería estar forzado a descargar completamente un fichero para acceder a una pequeña parte del fichero. En vez de servir la cache fuera en trozos de PAGE_SIZE.


FS-Cache proporciona las siguientes características:

1- Se puede usar más de una cache en el mismo momento. Las caches pueden ser seleccionadas mediante el uso de etiquetas.
2- Se pueden añadir o eliminar caches en cualquier momento.
3- Netfs proporciona una interfaz que permite retirar las características de Cache Filesystem a un fichero.
4- La interfaz de netfs devuelve el mínimo de errores posible, refiriendo que esta
pertenezca ajena a estos.
5- Las cookies son usadas para representar índices, ficheros y otros objetos a netfs. La cookie simple es solo un puntero nulo, indicando que no hay nada cacheado ahí.
6- Netfs tiene permitido proponer -dinámicamente- cualquier jerarquía de índices que desee, aunque debería controlar y ser consciente de que la función de búsqueda de índices es recursiva, el espacio de la pila es limitado, y los índices solo pueden ser hijos de índices.
7- Los datos de entrada y salida están hechos directamente para y por las páginas de netfs. Netfs indica que la página A esta en el índice B y es representada por la cookie C, y este debería ser leído o escrito. El backend o repositorio de cache debería o no debería empezar entradas y salidas en esa página, pero si lo hace una rellamada a netfs será invocada para indicar la finalización. Las entradas y salidas pueden ser síncronas o asíncronas.
8- Las cookies pueden ser "retiradas", quedar liberadas. En este punto FS-Cache marca a estas como obsoletas y la jerarquía de índices que existe en ese momento podrá ser reciclada.
9- Netfs proporciona una función de equivalencia para búsquedas de índices. Nos dirá si coincide o no, esto especificará si la entrada tiene que ser actualizada o borrada.
10- En medida de lo posible esta hecho asíncronamente.