viernes, 15 de julio de 2011

Utilizar la memoria RAM como cache en Linux (ramdisk)

La mayoria de las distribuciones de linux cuentan con la capacidad de utilizar la memoria de acceso aleatorio como un sistema de archivos normal, donde se puede crear, leer, escribir y borrar un archivo, asi como crear directorios y borrarlos.

Lo primero que hay que ubicar, es que existan los archivos que inician con el prefijo ram, en el directorio /dev. Al ejecutar el listado de estos archivos, se obtiene una salida similar a esta:

   $ ls -l /dev/ram*
   brw-rw----. 1 root disk 1, 0 Jul 14 22:36 /dev/ram0
   brw-rw----. 1 root disk 1, 1 Jul 14 22:49 /dev/ram1
   brw-rw----. 1 root disk 1, 10 Jul 14 22:36 /dev/ram10
   brw-rw----. 1 root disk 1, 11 Jul 14 22:36 /dev/ram11
   brw-rw----. 1 root disk 1, 12 Jul 14 22:36 /dev/ram12
   brw-rw----. 1 root disk 1, 13 Jul 14 22:36 /dev/ram13
   brw-rw----. 1 root disk 1, 14 Jul 14 22:36 /dev/ram14
   brw-rw----. 1 root disk 1, 15 Jul 14 22:36 /dev/ram15
   brw-rw----. 1 root disk 1, 2 Jul 14 22:36 /dev/ram2
   brw-rw----. 1 root disk 1, 3 Jul 14 22:36 /dev/ram3
   brw-rw----. 1 root disk 1, 4 Jul 14 22:36 /dev/ram4
   brw-rw----. 1 root disk 1, 5 Jul 14 22:36 /dev/ram5
   brw-rw----. 1 root disk 1, 6 Jul 14 22:36 /dev/ram6
   brw-rw----. 1 root disk 1, 7 Jul 14 22:36 /dev/ram7
   brw-rw----. 1 root disk 1, 8 Jul 14 22:36 /dev/ram8
   brw-rw----. 1 root disk 1, 9 Jul 14 22:36 /dev/ram9

Para formatear y utilizar estos archivos, es necesario hacerlo como el usuario root. Esto, debido a que el propietario de los archivos es root.

   $ su -
   Password:
   # mkfs.ext2 -q /dev/ram1
   # mkdir tmp
   # mount /dev/ram1 tmp
   # df -k tmp
   Filesystem 1K-blocks Used Available Use% Mounted on
   /dev/ram1 15863 140 14904 1% /root/tmp

Ahora en el directorio tmp, se tiene un sistema de archivos, que utiliza la memoria de acceso aleatorio, como un directorio normal dentro del sistema. Cabe destacar que este directorio, sera destruido cuando se reinicie el sistema, por lo que cualquier informacion importante, debe ser respaldada previamente antes de reiniciar.


---

jueves, 14 de julio de 2011

Utilizar la memoria RAM como cache automatico en Linux

En los sistemas linux, el uso de memoria RAM como cache, es gestionado por el kernel de manera automatica, sin necesidad de configurar o ejecutar los programas de manera distinta a la usual.

Veamos el siguiente ejemplo, en el cual, se tiene un archivo de 25.85M aproximadamente.

   $ ls -l archivo.bin
   -rwxr-xr-x. 1 cmartine cmartine 27109840 Jul  1 10:52 archivo.bin

Utilizando el comando time, para determinar el tiempo de ejecucion y el comando cat para realizar la lectura del archivo, obtenemos lo siguiente en la primer ejecucion. Nota: se envia la salida al dispositivo /dev/null, para descartarla.

   $ time cat archivo.bin > /dev/null
   real   0m0.466s
   user   0m0.002s
   sys   0m0.123s

El tiempo que se tardo en ejecutar fue de 0.466 segundo. Posteriormente, ejecutando el mismo comando inmediatamente 3 veces seguidas, se obtiene el siguiente resultado:

   $ time cat archivo.bin > /dev/null
   real    0m0.040s
   user    0m0.002s
   sys     0m0.037s

   $ time cat archivo.bin > /dev/null
   real    0m0.026s
   user    0m0.001s
   sys     0m0.025s

   $ time cat archivo.bin > /dev/null
   real    0m0.029s
   user    0m0.000s
   sys     0m0.025s

Como se puede observar, el tiempo real, disminuyo drasticamente a menos de la decima parte del tiempo original. Esto es debido a que el kernel de linux maneja de manera automatica la memoria RAM que no se emplea en crear un cache de los archivos utilizados, sin necesidad de realizar configuracion alguna. La cantidad de memoria que esta siendoutilizada en este cache, se puede consultar utilizando el comando top.

¿Por que linux hace esto? Sencillamente por que si no se emplea la memoria, estaria desocupada (desperdiciandose cuando el sistema no la esta utilizando para realizar algun trabajo). Es importante aclara, que cuando se ejecuta un programa, el cual requiere utilizar mucha memoria, se libera parte de la memoria utilizada para el cache y se asigna al programa, pudiendo llegar a la situacion en que el cache ya no tenga memoria asignada, por que un programa requiere utilizar toda la memoria del sistema