miércoles, 8 de julio de 2009

Actualizando nfs-utils

Tras recompilar el kernel a la versión 2.6.30-rc1 nos damos cuenta de que nuestro módulo de Cache FS ha dejado de cachear, tras muchas consultas en los foros, y muchos emails de ida y vuelta, descubrimos que posiblemente sea debido a que la versión de nfs-utils no es lo suficientemente actual como para entender el parámetro fsc al montar. Para actualizar nos descargamos la última versión desde http://sourceforge.net/projects/nfs/files/ y descomprimimos el paquete, al hacer un ./configure dentro de las carpetas nos salta un error de dependencias de libevent, nos bajamos la última versión que aparece aquí: http://monkey.org/~provos/libevent/, instalamos sin problemas haciendo ./configure && make y make install, volvemos a ejecutar el paso anterior de ./configure dentro de la carpeta nfs-utils nos salta un error acerca de soporte sobre nfsv4, como realmente no lo necesitamos, miramos la configuración del makefile, y vemos que existe la opción --disable-nfsv4, así que ejecutamos esta vez la orden ./configure --disable-nfsv4, no salta un error parecido pero con gss, y también encontramos la opción de desabilitar cosa que hacemos al volver a ejecutar ./configure --disable-nfsv4 --disable-gss, después de ejecutar este comando nos devuelve un error comentándonos que se necesita libblkid, buscamos los paquetes en los que se encuentra con yum provides libblkid* y tras el resultado ejecutamos yum install e2fsprogs-libs.i386 y yum install e2fsprogs-devel.i386, después de instalar estos, ejecutamos de nuevo ./configure --disable-nfsv4 --disable-gss y esta vez funciona sin problema, seguimos instalando nfs-utils con los comandos make y make install, y finaliza la instalación sin problemas.

Tras haber actualizado nfs-utils probamos a ver si funciona correctamente el caching y efectivamente vuelve a funcionar correctamente.

domingo, 31 de mayo de 2009

Recompilando el Kernel

Mirando la documentación de Cache FS
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob_plain;f=Documentation/filesystems/caching/fscache.txt;hb=0882e8dd3aad33eca41696d463bb896e6c8817eb

Nos encontramos con la posibilidad de añadir estadísticas a Cache-FS, esta opción la podemos habilitar recompilando el kernel y modificando la configuración antes de compilar. Deberíamos habilitar estas dos opciones:

CONFIG_FSCACHE_STATS=y
CONFIG_FSCACHE_HISTOGRAM=y

Vamos a explicar los pasos para recompilar el kernel, en nuestro caso sobre CentOS 5.2, y la versión 2.6.30-rc1. Lo primero que hacemos es descargarla desde www.kernel.org, descargamos el tar.bz2 desde http://www.kernel.org/pub/linux/kernel/v2.6/testing/
Copiamos el archivo descargado /usr/src/ y lo descomprimimos con tar xvfj linux-2.6.30-rc1.tar.bz2.

Antes de seguir debemos saber que es necesario que tengamos instalado gcc, y mkinitrd, en caso de no tenerlas las instalaremos con yum en nuestro caso, en otras distros con apt-get, una vez instalados, haremos las siguientes instrucciones:

>make mrproper --> Borramos archivos de configuraciones antiguas
>make menuconfig --> Iniciamos un entorno gráfico para configurar las opciones que se instalarán con el kernel o como módulos (existen otros modos, para este son necesarias las liberias ncurses, yum install ncurses-devel).

Pasos para configurar el histograma y las estadísticas de Cache-FS







Continuamos con estas instrucciones:

>make clean --> Limpia restos de anteriores compilaciones
>make dep --> Establece las dependencias entre los módulos seleccionados
>make bzImage --> Compila el kernel y crea una imagen en el boo
>make modules --> Compila los módulos
>make modules_install --> Instala los módulos
>make install

Con esto debería estar todo, al reiniciar nos aparecerá nuestra nueva versión del kernel, y al iniciar el servicio de Cache-FS en /proc/fs/ tendremos los archivos stats e histogram.

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.

martes, 3 de febrero de 2009

Instalando y configurando Cache-FS

Después de bajarnos los tar.gz de cachefilesd del repositorio que encontramos, al descomprimir encontramos un archivo howto.txt, nos disponemos a seguirlo para intentar instalar el módulo.

Seguimos las instrucciones, y creamos la carpeta fscache dentro de var, /var/fscache, acto seguido copiamos en /etc el archivo cachefilesd.conf, al abrir este archivo vemos que tiene configurada la carpeta /var/fscache, que hemos creado anteriormente, nos dice que el siguiente paso que tenemos que realizar es iniciar el servicio con el comando: service cachefilesd start, nos devuelve como respuesta que no encuentra el comando. Posteamos en el mailing list y nos responden que ese error sea debido seguramente a que no hemos compilado el código de cachefilesd.

Después de la respuesta hacemos diferentes pruebas, creando una máquina virtual con Fedora Core 10, en la cuál en agregar y quitar programas encontramos un paquete cachefilesd-0.7, por tanto decidimos bajarnos del repositori esa versión de cachefilesd y reintentarlo compilar de nuevo, pero seguimos con el mismo error.

Nos damos cuenta que esa versión es para Fedora Core 7, y por tanto bajamos una imagen de la versión y la instalamos en una nueva máquina virtual, una vez instalada, instalamos todas las actualizaciones como en el resto de máquinas virtuales. Al terminar volvemos a probar, y vemos que sigue dandonos el mismo error.

Vemos que en el repositorio hay algunos rpm, y decidimos bajarnoslos e intentar ejecutarlos para ver si esto soluciona nuestro problema, pero para la única versión que no encontramos los rpm es casualmente para la de cachefilesd-0.7, por tanto nos bajamos otra versión de los tar.gz de cachefilesd, y su correspondiente rpm. Al ejecutar los rpm nos devuelve que no puede instalar los paquetes.

Después de todas estas pruebas, con Ubuntu conseguimos compilar correctamente el código de cachefilesd-0.9 con las siguientes instrucciones:

>make
>sudo make install

el cuál nos devuelve el error ya comentado, descubrimos que es debido a que nos faltan librerias, que instalamos con el comando:
>sudo apt-get install build-essential

Al compilar de nuevo nos funciona y probamos a iniciar el servicio de nuevo con el comando:

>service cachefilesd start

esta vez nos devuelve el mensaje:

el programa <> puede encontrarse en los siguientes paquetes
debian-helper-scripts
sysvconfig

y que podemos instalarlos con la instrucción sudo apt-get install .
Hacemos esto con ambos paquetes, y volvemos a intentar iniciar el servicio. Esta vez nos devuelve que no puede encontrar cachefilesd en /etc/init.d, y movemos nuestra carpeta cachefilesd-0.9 a /etc/init.d/cachefilesd, y al ejecutar el comando para iniciar el servicio, ya lo inicia correctamente.

domingo, 1 de febrero de 2009

Entendiendo el funcionamiento

Cache File System utiliza un medio local de almacenamiento(por ejemplo un disco duro local) para cachear otros medios, generalmente remotos(por ejemplo NFS).

Los motivos para usar una cache son varios.

Algunos medios son lentos, como:
- Servicios de red: AFS, NFS.
- Dispositivos lentos: CDs, DVDs.

Otros medios son rápidos como:
- Discos locales.
- R.A.M.

Podemos usar medios más rápidos como cache para acelerar el acceso a los medios más lentos.
También nos puede servir con medios de red, si perdemos la conexión mantenemos en cache el trabajo que estabamos haciendo y por tanto no lo perdemos.

sábado, 31 de enero de 2009

Creando la Máquina Virtual

Hemos creado una máquina virtual sobre Windows XP, con Virtual Box, en ella hemos instalado Ubuntu 64 bits.
Una vez instalado el S.O. correctamente hemos descargado en ella desde el repositorio anteriormente mencionado el archivo:

cachefilesd-0.9.tar.bz2

Descomprimimos el paquete y vemos en el contenido un fichero howto.txt, el cuál hemos ido
leyendo y siguiendo, hasta que nos ha pedido iniciar el servicio cachefilesd, y esto ha dado un error.

Por otro lado hemos encontrado otras páginas que tienen un howto de como configurar Cache-FS.
http://docs.hp.com/en/B1031-90061/ch04s03.html?btnNext=next%A0%BB
http://docs.sun.com/app/docs/doc/817-5093/fscachefs-80158?l=en&a=view

Las cuales nos dicen de ejecutar el comando:

cfsadmin-c cache_directory

Este comando nos devuelve el mensaje de que no se encuentra la orden, debido a estos fallos, pensamos que tal vez estas guías estén diseñadas para otra distro de Linux, por eso nos ponemos a descargar Fedora.

viernes, 30 de enero de 2009

Comenzando a trabajar

Antes de la creación del blog hemos estado haciendo algo de investigación, buscando websites que hablen sobre Cache-FS, las cuales nos puedan ayudar en nuestro trabajo.

Nos hemos subscrito al mailing list de Cache-FS.
http://www.redhat.com/mailman/listinfo/linux-cachefs

En él hemos posteado para conseguir información y estamos pendientes de respuesta.

En Wikipedia también hemos encontrado mas información, entre las que destacán la dirección de correo de David Howells, que desarrollo la primera implementación de Cache File System sobre Linux, reescribiendo el código de Sun Microsystems, la empresa creadora de Cache File System.

Le hemos enviado un email demandándole ayuda, con ciertas preguntas, también estamos esperando respuesta.
Y también en Wikipedia, encontramos el repositorio de Cache File System de David Howells.
http://people.redhat.com/~dhowells/cachefs/