El swap es un tipo de memoria especial en disco que se utiliza para mover datos de la ram que no se están utilizando en ese momento, cuando nos hace falta más memoria ram de la que realmente tenemos disponible. Su problema, es que el disco es infinitamente más lento que la ram, lo que hace que leer o escribir los datos del swap sea lento y apreciemos ralentización en el equipo.
Una buena forma de mejorar esto es crear esta memoria especial swap en la propia memoria ram, utilizando zram.
Seguramente estarás pensando que estoy loco. Crear una memoria en la ram cuyo fin es meter datos que no caben en la ram, así contado, no tiene sentido. Pero es que lo que nos falta por decir es que zram comprime los datos al meterlos en su área de memoria swap, por lo que realmente tenemos más capacidad de memoria sin el ralentizamiento de escribir en disco.
Esto es útil en equipos con pocos recursos, pero también en equipos con discos SSD, puesto que alarga su vida al realizar menos operaciones de lectura y escritura en ellos.
Para activarla, lo primero que vamos ha hacer es abrir una terminal como root, o si la abrirnos como usuario normal, convertirnos en root con el comando su. Este es uno de los pocos casos que he visto en los que sudo no nos dará los permisos suficientes para hacer lo que deseamos.
Primero comprobaremos si nuestro kernel soporta el modulo de zram. En mi caso, con Wheezy no hay problema alguno.
- grep -i zram /boot/config-`uname -r`
El resultado será algo como esto
CONFIG_ZRAM=m
# CONFIG_ZRAM_DEBUG is not set
Esa “m” nos indica que zram es soportada como un modulo externo al kernel, así que vamos a cargarlo.
- modprobe zram
Ahora vamos a crear el dispositivo zram, vamos a asignarle 100 megas, pero tu puedes asignar más o menos memoria según tu gusto cambiándolo por el 100 que yo pongo en el comando
- echo $((100*1048576)) > /sys/block/zram0/disksize
Montamos el dispositivo
- mkswap /dev/zram0
Y le asignamos prioridad, que debe ser mayor que la de la swap en disco, para que se use preferentemente nuestra zram. Con una prioridad 10 bastará
- swapon -p 10 /dev/zram0
Y ya lo tenemos funcionando. Pero claro, lo que nos interesa es que funcione siempre cuando iniciamos el ordenador, sin tener que dar todos estos pasos cada vez. Para ello vamos a editar el fichero /etc/rc.local con nuestro editor favorito. Yo utilizaré pluma, pero puede ser cualquier otro, por ejemplo, gedit o nano
- pluma /etc/rc.local
Y pegamos estas lineas antes de donde pone exit 0
modprobe zram &&
echo $((100*1048576)) > /sys/block/zram0/disksize
mkswap /dev/zram0 &&
swapon -p 10 /dev/zram0 &&
Guardamos los cambios y listo, ya tenemos zram funcionando y nuestro equipo más contento.
«Seguramente estarás pensando que estoy loco. Crear una memoria en la ram cuyo fin es meter datos que no caben en la ram, así contado, no tiene sentido. Pero es que lo que nos falta por decir es que zram comprime los datos al meterlos en su área de memoria swap, por lo que realmente tenemos más capacidad de memoria sin el ralentizamiento de escribir en disco.»
ResponderEliminarAhora lo entiendo.
«Esto es útil en equipos con pocos recursos, pero también en equipos con discos SSD, puesto que alarga su vida al realizar menos operaciones de lectura y escritura en ellos.»
Ahora le veo la utilidad: tengo un par de ultraportátiles com unidades SSD muy reducidas (4 GB uno; 16 GB el otro). Lo que pasa es que tampoco van sobrados de RAM (512 MB y 2 GB respectivamente). De cualquier forma, es muy interesante, tengo que estudiarlo.
¿Afectaría de alguna manera a la suspensión a RAM? En principio, como quedaria menos RAM disponible, podría quedase demasiado corta... ¿Y a la hibernación? La hibernación se hace sobre la swap, ¿no? ¿Se puede seguir hibernando? ("Se acerca el inverno..." ;-) )
La suspensión no debería afectar, la hibernacion no se si realmente se hace a la swap o no.
EliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarNi idea, mis conocimientos no alcanzan para tocar el kernel
EliminarPues vamos a ello que ultimamente como que ando medio tieso de ram.
ResponderEliminarCuentanos tus progresos
Eliminar¿Recomendarías algún porcentaje de la ram para asignarle? Hablas de 100 o al gusto, pero supongo que habrá unos valores más razonables que otros. La swap que ya tengo...¿ya no hace falta? ¿Puedo eliminarla o reducirla? Gracias por el excelente artículo.
ResponderEliminarLa swap en disco sigue siendo necesaria, por si te quedas sin memoria.
Eliminar¿La cantidad de swap en ram ideal? Pues, sinceramente no lo se.
Me aparece este error al acabar de hacer todo:
ResponderEliminarErro do MateConf: Failed to contact configuration server; some possible causes are that you need to enable TCP/IP networking for MateCORBA, or you have stale NFS locks due to a system crash. See http://wiki.mate-desktop.org/docs:mate-conf for information. (Details - 1: Se produjo un fallo al obtener la conexión con la sesión: La conexión está cerrada)
ola ke ase vruto! tu blog me encanta, es muy útil.
ResponderEliminarAun así hay algo que no me cuadra: tras haber hecho esto, (aún no he hecho reinicio) el sistema me sigue detectando mis 3 gigas de ram pero me detecta mas swap. Me salió el siguiente fallo en el momento de montar:
root@GabrielPC:/home/gabriel# modprobe zram
root@GabrielPC:/home/gabriel# echo $((2867*1048576)) > /sys/block/zram0/disksize
root@GabrielPC:/home/gabriel# mkswap /dev/zram0
Setting up swapspace version 1, size = 2935804 KiB
no label, UUID=a99ebdf6-1960-40d9-8986-f7e9152cbbc2
root@GabrielPC:/home/gabriel# mkswap /dev/zram0
Setting up swapspace version 1, size = 2935804 KiB
no label, UUID=cd77f090-540b-4179-96a1-6897e1368301
root@GabrielPC:/home/gabriel# swapon -p 10 /dev/zram0
root@GabrielPC:/home/gabriel#
Este post es copiado. Pon la fuente en la que te has basado para escribirlo.
ResponderEliminarNo esta copiado, he leído unos cuantos artículos para conocer el tema y luego he hecho este contando como lo he hecho en mi equipo.
EliminarPor favor, si consideras que es copiado, dime de donde.
Por favor intenta recordar las fuentes que elegiste y ponlas al final del post. Las fuentes que usaste estarán agradecidas
EliminarEl primer sitio donde lo vi fue aquí
Eliminarhttp://www.meneame.net/story/zram-como-usarlo-cualquier-sistema-operativo-gnu-linux
Así que me fui al enlace original
http://geekland.hol.es/optimizar-el-rendimiento-con-zram/
Trate de comprender un poco mas como funciona mirando la wikipedia
Luego encontré referencias para Ubuntu, pero no me atreví a meter PPAs
http://www.webupd8.org/2011/10/increased-performance-in-linux-with.html
Y revise algún otro resultado de Google, como este
http://www.alcancelibre.org/article.php/aldos-zram
Ok gracias. El tema me ha parecido interesante y la verdad es que me gusta leer las fuentes originales. Un saludo
ResponderEliminarA mi al final me ha decepcionado un poco. Supongo que a mi ordenador ya no se le puede sacar mas.
EliminarHola ,
ResponderEliminarpuedes ahorrarte una linea en el script haciendo lo siguente en la linea de swapon:
modprobe zram &&
echo $((100*1048576)) > /sys/block/zram0/disksize
swapon -f -p 10 /dev/zram0 &&
Como todo el mundo pregunta que tamaño de zram es mejor: Entre el 33% y el 66% de la memoria instalada, con 50% estaría bien.
Gracias por el aporte
Eliminar