Sep022017

Sácale partido a tu RAM usándola para ficheros temporales como la caché

La mayor parte de los ordenadores actuales disponen de grandes cantidades de memoria RAM. Por ejemplo, en mi portátil dispongo de 12 Gb, de los cuales es muy raro que esté usando mas de 3 ó 4.

Para sacarle mas partido a la memoria RAM, Linux la usa para almacenar copias de los ficheros más usados, reduciendo considerablemente el número de accesos a disco, ampliando la vida de este último y acelerando el rendimiento de nuestro sistema, pues esta memoria es la más rápida que se puede encontrar en nuestro ordenador. El caso es que el usuario no tiene control sobre que ficheros son cacheados en RAM y cuales no, por lo que todo queda en manos del sistema operativo.

Seria interesante poder definir de algún modo que determinados ficheros o carpetas se almacenen en memoria RAM. Por ejemplo, los ficheros temporales de nuestro sistema, como su propio nombre indica, son archivos que solo son de utilidad durante un pequeño periodo de tiempo, por lo que directamente no tendría sentido almacenarlos en nuestro disco duro para luego borrarlos. Si, por el contrario, los almacenáramos en RAM, estos desaparecerían en cuanto apaguemos nuestro equipo, por lo que no habría que estar pendiente borrarlos y, al no llegar nunca a estar en el disco duro se puede traducir en incrementar la vida útil de este último, cosa especialmente importante si se trata de una unidad SSD, puesto que tienen un límite relativamente bajo de escrituras y lecturas que se pueden realizar a lo largo de su vida.

Linux nos permite crear un tipo de unidades de disco llamadas tmpfs, estas unidades pueden ser montadas como cualquier partición. Pero no son particiones del disco duro, sino que son zonas de la memoria RAM que serán usadas como tales. Además, no es necesario que reservemos una cantidad fija de RAM para estas unidades, sino que podemos dejar que crezcan según sea necesario, incluso podemos especificar hasta que tamaño pueden crecer. Así garantizaremos que no se va a saturar la RAM con los ficheros temporales que guardemos en ella.

Para probar esta idea, hay un directorio perfecto en nuestro sistema. Se trata de /tmp, en este directorio muchos programas almacenan sus ficheros temporales y luego los borran o los abandonan para que sea el sistema operativo el que los borre por ellos al apagarse. Para hacer que esta carpeta se monte en RAM, tan solo hay que añadir la siguiente línea a nuestro /etc/fstab:

tmpfs    /tmp    tmpfs    defaults,noatime,mode=1777    0    0

A partir de este momento, todos los ficheros que se guarden en /tmp serán almacenados en RAM y no en nuestro disco duro, por lo que ganaremos en velocidad de escritura, lectura y le daremos un descanso al HDD.

Tal cual está definido el punto de montaje arriba, no hay límite de espacio establecido, por lo que se podría dar el caso de que algún programa empiece a escribir de forma intensiva en /tmp y acabemos con la memoria RAM llena. Si no quisiéramos correr este riesgo, se puede establecer un límite para evitar que suceda. Por ejemplo, si queremos que nunca se asignen mas de 2Gb a /tmp nuestra línea definiendo el punto de montaje quedaría así:

tmpfs    /tmp    tmpfs    defaults,noatime,mode=1777,size=2G    0    0

Hay otro directorio donde se guardan bastantes ficheros temporales que puede interesar no tener en el disco duro, sino en RAM, se trata de la carpeta .cache de nuestro home. En esta carpeta, programas como Google Chrome almacenan la caché de navegación, un montón de ficheros que quedarán ahí por mucho tiempo, usando espacio de nuestro disco duro, quitándole vida y, en ocasiones, evitando que podamos ver correctamente los cambios que ha sufrido una web.

Para que el contenido de esta carpeta se almacene en RAM podríamos definir otro punto de montaje como hicimos con /tmp, o podríamos crear una carpeta en /tmp y hacer que .cache sea una enlace simbólico a dicha carpeta. Personalmente he optado por hacer esto último y lo he hecho del siguiente modo:

Creamos un directorio en /tmp para almacenar el contenido de .cache

$ mkdir -p /tmp/usuario_cache

Borramos el directorio .cache

$ rm -rf ~/.cache

Creamos un enlace simbólico desde ese directorio a .cache

$ ln -s /tmp/usuario_cache ~/.cache

Nos aseguramos de que el directorio se creará cada vez que se inicie el sistema añadiendo la siguiente línea a /etc/rc.local o a ~/.bashrc

mkdir -p /tmp/usuario_cache 2> /dev/null
chmod -R 777 /tmp/usuario_cache

De forma análoga a como lo hemos hecho para .cache, se puede hacer para cualquier directorio.

Actualización (20/11/2013):

Karlinux comenta que “si por ejemplo utilizas shotwell […], se te borraran todas las previsualizaciones de las imágenes […] y tendrás que cargarlas cada vez que uses el programa”. Para “solucionar” este inconveniente, lo que se puede hacer es ir un poco mas allá y, en vez de crear un enlace simbólico a la carpeta .cache completa, hacerlo solo a la subcarpeta del nevegador, por ejemplo, para Chromium quedaría así:

Creamos un directorio en /tmp para almacenar el contenido de .cache/chromium

$ mkdir -p /tmp/usuario_cache/chromium

Borramos el directorio .cache/chromium

$ rm -rf ~/.cache/chromium

Creamos un enlace simbólico desde ese directorio a .cache/chromium

$ ln -s /tmp/usuario_cache/chromium ~/.cache/chromium

Nos aseguramos de que el directorio se creará cada vez que se inicie el sistema añadiendo la siguiente línea a /etc/rc.local o a ~/.bashrc

mkdir -p /tmp/usuario_cache/chromium  2> /dev/null
chmod -R 777 /tmp/usuario_cache/chromium

Política de comentarios

Dada la importancia de los comentarios como espacio de participación, te pedimos por favor que leas detenidamente y cumplas con las siguientes normas de participación.

25 respuestas para “Sácale partido a tu RAM usándola para ficheros temporales como la caché

Gibran Barrera

Me encantan los post que desarrollas, pero veo un poco abandonado el blog no cree que requiere ayuda. No es por criticar, sino por que en realidad me gusta el blog, pero paso días esperando algún post, ve el ejemplo de desde linux y su función con usemos linux. o simple busca colaboradores!!!!!

saludos que siga el exito


José Miguel

Agradezco tu sinceridad. Tienes razón en cuanto a que el nivel de actualización del blog podría mejorar, lo de “abandonado” es una expresión que no me gusta, pero la entiendo.

¿Qué sucede?

Mis dos colaboradores son estudiantes de ingeniería informática finalizando sus carreras, con poco tiempo para cualquier cosa que no sea sus estudios; espero que en un futuro eso pueda mejorar.

En lo que a mi se refiere, hago lo que puedo. No me gusta repetir lo que todos publican cada vez que sale la mínima actualización de un programa. Intento que el blog no sea uno más, prefiero la ayuda y el aprendizaje, y de vez en cuando, el debate.

Por otro lado, la comparación que haces es un tanto injusta. Este blog ni es, ni pretende ser (en cuanto a lo positivo se refiere) “Desde Linux”, y cuando hablas de la fusión con “Usemos Linux”, no olvides que te refieres a lo mejor que teníamos.

En cuanto a aumentar el número de colaboradores, siempre es una posibilidad, pero no es tan sencillo como parece; algunas aventuras acaban muy mal…

Saludos.


Gibran Barrera

Ok, gracias por responderme, eso si e de reconocer estas al tanto de las entradas y eres muy diplomático en ello, Hechale ganas me gusta el blog y creo que tiene potencial, una cosa mas soy diseñador y creo que el diseño requiere unos ajustes, si si ya se que lo cambiaste hace poquito, pero creo que te iría un diseño sobrio y nominalista.


José Miguel

Bueno “amigo”, como dicen en mi tierra, “no dejas títere con cabeza”; muy observador, no se te escapa nada. ja ja ja…

Tienes razón, “el diseño requiere unos ajustes”. Por otro lado, es único y exclusivo, programado desde cero por “Elias” (colaborador). En cuanto a su diseño, es lo que me gusta…

Lo que ves (Responsive, HTML5, CSS3), es producto de unas cuantas horas durante unos cinco días, ni siquiera tiene un formulario de búsqueda. Espero que en Navidad podamos darle algún toque, todo depende de “Elias”.


karlinux

Me encantó el artículo, muy bueno de verdad, no obstante veo un problema en la cache, y es que si por ejemplo utilizas shotwell por poner un ejemplo, se te borraran todas las previsualizaciones de las imágenes y si tienes una biblioteca grande cuando abras shotwell no veras ninguna previsualizacion y tendrás que cargarlas cada vez que uses el programa.


Elías R.M.

Muchas gracias Karlinux,

Tienes mucha razón con lo que comentas, en mi caso, gwenview guarda las previsualizaciones en ~/.thumbnails, por lo que no me afecta. Pero si shotwell las guarda en ~/.cache es una lata que tenga que cargarlas de nuevo cada vez que enciendas el PC.

Se me ocurre que puedes restringir el enlace simbólico a la subcarpeta concreta en la que el navegador guarda su caché, por ejemplo en mi caso seria a ~/.cache/chromium. De este modo solo la caché del navegador se va para /tmp y no afecta al resto de programas.

A la vista de que esta cuestión es muy interesante, ampliaré el post.

Saludos.


karlinux

Ok y muchas gracias por la info


Yoyo

¿12 GB de RAM en tu portátil? :O

Dime donde las regalan que me voy a pillar 32 GB 😛

Excelente aporte 😉

PD: Muy útil lo de poder editar tu comentario unos minutos después de publicarlo, me ha venido de perlas para corregir unas faltillas que se me habían escapado, creo que es el único blog que tiene de esto, o al menos yo no vi ninguno más 😛


José Miguel

Hola Yoyo.

Aunque no soy el autor del post (evidente), soy el “culpable” de que puedas editar el comentario.

Esas son las cosas que llevan tiempo y pasan desapercibidas.

Saludos.


Elías R.M.

Muchas gracias Yoyo,

Si, tengo 12Gb, lo pedí a medida. Teniendo en cuenta que es mi único equipo de trabajo, no quise escatimar en gastos, jeje…

Saludos


EE

Primera vez que me paso por tu blog, y me surgen dos cuestiones.
“none” al principio de la línea ¿qúe es?. Cuando lo escribo en la consola me devuelve: “No command ‘none’ found, did you mean:”
¿Lo que hay que editar es la carpeta o el archivo dentro de la carpeta? En cualquier caso no tengo ningun archivo dentro “/etc/fstab.d” que calculo que es la mismo porque es lo unico que tengo.


José Miguel

Espero que no se trate de lo siguiente:

-Añadir una linea, no es copiarla, pegarla en la consola y ejecutarla-

Ademas (es bueno saberlo), el archivo fstab no es la carpeta fstab.d

Esto requiere cuidado y cierto nivel de conocimiento, si no es así y para evitar males mayores, mejor no hacer nada.

De todas formas, esperemos la respuesta del autor.

Saludos.


EE

José Miguel. Gracias por responder


José Miguel

Observé en tu comentario cierta confusión, y me pareció oportuno cierta advertencia.

Saludos.


Elías R.M.

Hola EE,

El none al principio indica que este punto de montaje no se refiere a una unidad de disco o similar.

none, no es un comando, es un parámetro que escribiremos en un fichero de configuración.

Lo que hay que editar es un archivo llamado fstab que se encuentra en /etc


Elías R.M.

Hola de nuevo EE,

Mirando otras fuentes, me he dado cuenta de que se puede poner tmpfs en lugar de none, es un modo mas explícito de decirle al sistema que se trata de una unidad de RAM. Sea como sea, parece que no hay diferencias en el funcionamiento con none y con tmpfs.


EE

Elías. Tu devolución fue muy edificante. Ahora me dispongo a hacer las modificaciones para ver que sucede.
Paralelamente a esto, ¿conoces algún otro tutorial o guía referida al mismo tema?


Elías R.M.

Gracias EE,

Con respecto a tu pregunta, te puedo referir a la wiki de ArchLinux, donde explican muy bien todo lo referido al fstab. Espero que te sea de utilidad.

Saludos


EE

Elías. Muchas gracias. Eres mi heroe


Supersafra

He seguido los pasos que has marcado en el tutorial y he movido la .cache personal a /tmp/usuario_cache y después de reiniciar no me aparece plank. Al llamarlo desde una consola me tira lo siguiente:
supersafra@crunchbang:~$ plank
[INFO 10:19:18.474602] [AbstractMain:173] Plank version: 0.3.0.864
[INFO 10:19:18.474994] [AbstractMain:174] Kernel version: 3.2.0-4-486
[INFO 10:19:18.475477] [AbstractMain:175] GLib version: 2.32.4
[INFO 10:19:18.475798] [AbstractMain:176] GTK+ version: 3.4.2
[INFO 10:19:18.476072] [AbstractMain:177] Wnck version: 3.4.5
[INFO 10:19:18.476362] [AbstractMain:178] Cairo version: 1.12.2
[INFO 10:19:18.476648] [AbstractMain:179] Pango version: 1.30.0
[WARN 10:19:18.522238] [Paths:147] Could not access or create the directory ‘/home/supersafra/.cache/plank’. (Error al crear el directorio: Permiso denegado)
`trap’ para punto de parada/seguimiento

Entiendo que plank no puede crear una carpeta en .cache porque no existe. ¿alguna sugerencia?
Estoy en Crunchbang 11


Elías R.M.

Hola Supersafra,

Recuerda que debes asegurarte de haber creado el enlace simbólico desde /tmp/usuario_cache a /home/supersafra/.cache:

ln -s /tmp/usuario_cache /home/supersafra/.cache

Por otro lado tienes que asegurarte de que la carpeta /tmp/usuario_cache es creada cada vez que se inicia el sistema, para ello edita el fichero /etc/rc.local y escribe encima de la línea que pone exit 0 las siguientes líneas:

mkdir -p /tmp/usuario_cache
chmod 777 -R /tmp/usuario_cache

Es posible que la clave esté en la segunda línea, porque si la carpeta se crea desde /etc/rc.local, la creará root y eso puede dar problemas de permisos, no me había dado cuenta, modificaré el post.

Muchas gracias.

Saludos


Supersafra

Efectivamente, al darle todos los permisos a la carpeta todo ha ido perfectamente.
Voy a hacerle un seguimiento porque, aunque tengo un equipo antiguo (pentium IV a 2.6 GHz) dispongo de 4 Gb de RAM, y creo que esto me puede venir muy bien ya que según mi conky el consumo de RAM del equipo es muy baja y creo que la estoy desaprobechando.

Gracias por todo y un saludo.


Caros

¿Y de verdad se nota una mejora de rendimiento haciendo esto….??

La verdad lo dudo. Si usas un SSD seguro que no se percibe ninguna mejora y si usas un disco mecánico tampoco. Además cuando cierras el ordenador se borra todo lo que hay en la memoria.

Por lo tanto yo pienso que trae más inconvenientes que ventajas


José Miguel

Dices: “Además cuando cierras el ordenador se borra todo lo que hay en la memoria”…

¿No te extraña que algo tan básico nadie lo comente? …

Saludos.


Elías R.M.

Hola Caros,

Muchas gracias por tu comentario. Desde mi experiencia, si se nota la diferencia, incluso si tienes un SSD.

Por otro lado, te recomiendo que leas acerca de como funcionan las unidades SSD, descubrirás lo propensas que son a deteriorarse rápidamente si se abusa de ellas escribiendo continuamente. La caché es precisamente muy agresiva con el disco, por lo que si la puedes mover a la RAM, no solo ganas velocidad, sino que ganas durabilidad de tu hardware.

Y por último, acerca de la “desventaja” de que se borra todo al apagar el sistema, yo no lo veo así. La caché, por naturaleza, tiene una vida muy corta, lo mas probable es que para cuando reinicies tu sistema haya caducado, por lo que sera regenerada, quemando un poco más nuestro preciado SSD. Usando RAM para esta tarea, la limpieza ocurre por naturaleza…

Por lo que no veo muchas desventajas en este sistema, la única puede ser que si no tienes suficiente RAM puedes estar empeorándolo todo al usarla para caché, pero eso ya es una cuestión de sentido común.

Saludos


Deja un comentario

Tu dirección de correo electrónico no será publicada.