Haz que tu sistema de ficheros “vuele” montándolo en la RAM

Hoy seré breve, o por lo menos lo intentaré. El caso es que necesitaba acceso masivo al disco duro para un procesamiento en lote de archivos de texto bastante grandes (quien me siga en twitter verá que el otro día lo mencioné :P).

Hormigonera

El ruido del disco duro era semejante al de esta maquina mezclando hormigón

El proble ma no eran los archivos en sí mismos ya que mediante buffers que gestiona el propios sistema operativo se consigue un rendimiento excelente, sino por la base de datos mysql. En mi caso, hacía currar a la base de datos de tal manera (con updates, inserts y selects constantes) que el disco duro parecía una hormigonera. Después de estimar el tiempo total de procesamiento en 6 horas pensé que eso le iba a hacer mucha pupa al disco duro duro (además del evidente cuello de botella) y que había que hacer algo. Entonces me dije: “Quiero almacenar los datos en algo que no haga ruido y si es posible que sea rápido” y eso amigos, es precisamente la memoria RAM. Así que vamos al tema.

Lo bueno de usar este método es que no tienes que tocar nada ni de mysql ni de tu programa, ya que para ellos será un dispositivo de almacenamiento estándar. Ahora prepárate un café porque esto va a ser complicado.

            mount -t tmpfs none /media/ramdisk

Ya está, ahora tienes en el directorio /media/ramdisk montada tu memoria RAM. Por supuesto, se reserva sólo una parte ya que el sistema necesita disponer de memoria para funcionar.
En mi caso, copié /var/lib/mysql a /media/ramdisk y luego un enlace simbólico para que mysql accediera a ello sin configurar nada.
Si quieres saber exactamente cuanto espacio tienes puedes usar el comando:

            df -h

Te mostrará algo como esta línea (junto al resto de sistemas de ficheros montados)

            none                  1,7G  384M  1,3G  24% /media/ramdisk

Dispongo de 1,7GigaBytes de almacenamiento en memoria RAM (384 megas usados). Recueda que es muy importante guadar luego esos archivos en tu disco duro porque la memoria RAM no es persistente y todo lo que haya se volatilizará cuando se demonte. En mi caso el tiempo de ejecución del programa paso de unas 6 horas a poco más de 45 minutos, y eso que mi memoria es lenta (667mhz) además de no hacer ningún ruido. Para casos o situaciones concretas este método puede sernos muy útil, incluso he visto casos de un servidor donde hasta los archivos estáticos (css, js, imagenes…) estaban cargados en memoria. Si tenemos en cuenta que en un ordenador todo pasa por la memoria y que el disco duro es con diferencia el dispositivo más lento (y delicado), se pueden obtener tiempos muy buenos en sistemas críticos (ej. una web con millones de visitas). El problema está cuando trabajamos con datos (que pueden cambiar, algo bastante común) y que nunca estarán a salvo hasta que lo volquemos a un disco duro. Para esos casos ya existen las cachés que en el fondo es copiar en memoria aquellas cosas de sólo lectura mientras mientras que los cambios se guardan al momento y posteriormente se actualiza esa caché.

You may also like...

4 Responses

  1. ivan cebellan dice:

    como siempre muy interesante y útil Maxpowel

  2. DiCrEn dice:

    Esto lo pensé yo alguna vez… jaja Muy interesante! Lo haré en algún momento!

  3. Maxpowel dice:

    Muchas gracias a los dos, este tipo de apaños pueden ser muy útiles en día a día de un informático (o por lo menos para mi lo son)

  4. Ángela dice:

    Hola Maxpowel, de estos temás la verdad no se casi nada, estoy empezando y espero ir aprendiendo poco a poco.
    Te he encontrado en el concurso 20blogs, yo participo con “Conocer Madrid”.

    Te desea suerte en el concurso una zamorana desde Madrid.

    Feliz Año Nuevo, un saludo

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *