domingo, 13 de septiembre de 2009

Leyendo fichero .conf

En el anterior post comentamos el que supuestamente será nuestro fichero de configuración, sinó al menos un esbozo de él. Ahora mismo estoy trabajando en como poder leer tal fichero de configuración, y que solo admita las lineas de configuración que cumplan todos los requisitos estipulados, estamos depurando al máximo este código para que no pueda ocurrir ningún tipo de error, y que tan solo lea las líneas que sean totalmente correctas respecto a nuestros criterios. Una vez resuelto esto, el problema será aislar todos estos datos y conseguir una manera para trabajar con ellos, debido a que el número de políticas podría ser infinito nos encontramos con que el número de variables no es un número fijo, cosa que nos genera un problema que debemos solucionar.

jueves, 10 de septiembre de 2009

Creando el fichero de configuración

Para tener un fichero de configuración editable y entendible por el usuario, y que el error en la edición por parte del usuario no provoque fallos graves en la ejecución, vamos a crear un fichero que luego leeremos con awk.

A continuación explicamos su estructura y ponemos 3 ejemplos.

Los primeros 3 caracteres nos indican el tamanyo a usar por la politica, como ejemplos tenemos el primero 010, que indicara o bien el 10% o 10 MB, KB o GB, Siempre que no se usen las 3 cifras se rellenaran ceros por delante.

El cuarto caracter indicara si es un porcentaje (%), o si son MB (M), GB (G), KB (K), etc.

El quinto caracter indicara si el espacio solicitado en los 4 primeros caracteres se refiere a la cache (C), o al disco (F), indicando si el porcentaje o el tamanyo seran de espacio en la cache o de espacio en el disco.

Tras el primer tabulador, los siguientes caracteres que encontremos nos especificaran el tipo de documento que queremos cachear, documentos de word, jpg, excel, etc, si escribimos none indicara que queremos cachear cualquier tipo de documento en esta politica.

Tras el segundo tabulador los caracteres que encontramos nos indicaran si queremos delimitar en algun tamanyo los archivos que cacheara la politica, si en el primer caracter especificamos (<) indicamos que cachee todos los ficheros de menor tamanyo que..., si especificamos (>) indicamos que cachee los ficheros de mayor tamanyo que ..., tb podremos dar la opcion de no restringir por tamanyo de fichero, es lo que hace la tercera politica.

Por ultimo tras el tercer tabulador indicaremos skip/count/skip/count/bs, skip sera los bloques iniciales que se salte al hacer dd, donde iniciara el cacheo del fichero, count indicara cuantos bloques cacheara desde donde marque el primer skip, el segundo skip marcara indicara cuantos bloques se saltara desde acabar el primer count, y el segundo count indicara cuantos bloques cacheara desde donde marco el segundo skip, por ultimo tendremos bs que marcara el tamanyo de los bloques, cada uno de estos estara definido por dos caracteres poniendo a 0 el primero en caso de ser una cifra menor a 10, en el ultimo caso, bs anayadira al final de estos dos caracteres un tercero para indicar KB (K), MB (M), etc, en caso de querer cachear todo el fichero sin saltos se marcaran skip/count/skip/count/bs de esta forma 00/00/00/00/02K siendo necesarios estos 3 ultimos caracteres
para indicar cada cuanto tamanyo hara los saltos el dd para cachear.

010%F doc <50k 02/04/02/02/02K 055XF none >30M 03/03/02/03/05K
029%F jfkdlsj82jlsa =00M 02/02/02/05/05M

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.