Optimizar el rendimiento con Zram 16

Optimizar el rendimiento del sistema con Zram

En el siguiente post comentamos como optimizar el rendimiento del sistema con Zram. Cabe destacar que esta publicación forma parte de una serie posts para optimizar el rendimiento de nuestra memoria RAM y de nuestro sistema.

El conjunto de post que hablan sobre nuestra memoria RAM son los siguientes:

  1. Liberar memoria cache de nuestra RAM.
  2. Limitar el uso de nuestra memoria Swap y limpiarla en el caso que se active.
  3. Usar la RAM más eficientemente con ZRAM.
  4. Acelerar el inicio de nuestras aplicaciones con Preload.
  5. Acelerar el inicio de nuestras aplicaciones con Prelink.

¿Qué es Zram?

Zram o compcache es un módulo experimental del Kernel de linux que nos evita utilizar la paginación en disco para de esta forma poder optimizar el rendimiento de nuestro sistema. Esta característica es principalmente importante en equipos de gama baja. En equipos de gama alta la influencia es nula ya que prácticamente no se  necesita la paginación en disco.

Se han escuchado rumores que Ubuntu 13.04 podría incorporar de serie esta característica. La verdad es que me preocupa poco si lo hace. Ubuntu es una distro que cada día que pasa me interesa menos. Por otra parte también se dice que en la versión del Kernel 3.8 Zram sera excluido. En fin… Veremos que acaba pasando tanto con Ubuntu como con Zram.

Funcionamiento de Zram

Para ver el funcionamiento de Zram supongamos que disponemos de nuestra memoria RAM. La podemos representar del siguiente modo:

Zram: Representación de la memoria RAM

Lo que hace Zram es crear uno o más bloques dentro de nuestra memoria RAM. Por lo tanto lo que hará ZRAM dentro de nuestra memoria RAM lo podemos representar del siguiente modo:

Zram: Bloque de Zram creado

El bloque que acabamos de representar gráficamente será una porción física de nuestra RAM y funcionará como si fuera una memoria de intercambio Swap, pero en vez de estar ubicada en nuestro disco duro estará ubicada dentro de nuestra memoria RAM.

Ahora imaginemos que empezamos a trabajar y a ejecutar aplicaciones con nuestro ordenador. A medida que se va llenando nuestra memoria RAM, se dará la situación que representamos en la siguiente representación:

Zram Memoria apunto de saturarse

Como podemos ver la imagen la memoria RAM está casi llena. Una vez pase esto se activará la memoria swap pero en vez de paginar el contenido de nuestra RAM en el disco duro lo hará en el bloque que hemos creado dentro de nuestra ram. Por lo tanto la situación que se dará una vez se active ZRam se puede representar de la siguiente forma:

Zram: Zram después de haber actuado

Si observamos el gráfico vemos que se ha liberado gran cantidad de contenido en nuestra memoria RAM, mientras que en nuestra partición Zram ha aparecido una pequeña porción de color Negro. Esta pequeña porción de color negro posee la totalidad de información que había dentro del gran bloque de color verde que representaba las imágenes de procesos almacenados en nuestra RAM. ¿Como esta pequeña parte puede almacenar la totalidad de contenido que había en la parte verde?

Simplemente porqué antes de almacenarse la información en el bloque que hemos creado, esta se comprime. Una vez comprimida se almacena en el bloque de memoria creado por Zram. En el momento que se necesite recuperar la información que tenemos paginada, esta  se descomprimirá y se trasladará de nuevo a nuestra memoria RAM.

Por lo tanto, como podéis ver, estamos paginando la información que paginaríamos en el disco duro en nuestra memoria RAM. Como la velocidad de respuesta de la memoria RAM es mucho más elevada que la de un disco duro aumentaremos el rendimiento de nuestro sistema. Además en el caso de disponer de un disco SSD estaremos alargando la vida útil de este dispositivo.

Por lo tanto con ZRAM tendremos un bloque adicional de memoria en nuestra RAM que será usada para paginar. En el caso de que se agote nuestro bloque de memoria entonces actuará la paginación en el disco tradicional.

Instalar Zram en cualquier distribución basada en Debian

Como podremos ver mas adelante es muy fácil instalar Zram en Ubuntu pero muchos usuarios desconocen como realizarlo en otras distribuciones. El método descrito funciona en la totalidad de distribuciones basadas en Debian e imagino que también funcionará en otro tipo de distribuciones.

Como hemos explicado en el inicio Zram es un módulo del kernel que seguramente la totalidad de usuarios tienen disponible en estos momentos. Por lo tanto para habilitar Zram no tenemos que instalar ningún paquete. Solamente tenemos que activar este módulo. Para hacerlo procedemos de la siguiente forma:

Abrimos una terminal y nos loguearemos como root:

su
Nota: Si el comando su no funciona en vuestra distro probad sudo su. La totalidad de pasos para habilitar Zram se tienen que realizar siendo root.

Seguidamente ejecutaremos el comando:

swapon -s

Esta comando servirá para comprobar el estado actual de nuestra memoria swap.

Como se puede ver en la captura de pantalla en estos momentos dispongo de una partición de intercambio de aproximadamente 1 Gb.

Seguidamente comprobaremos que el kernel que tenemos instalado en nuestro ordenador contiene el módulo Zram. Para ellos tecleamos el siguiente código en la terminal:

 grep -i zram /boot/config-`uname -r`

Si la respuesta que devuelve la terminal es parecida a la siguiente:

 CONFIG_ZRAM=m # CONFIG_ZRAM_DEBUG is not set

Quiere decir que disponemos del módulo pero no está activado.

Para activar el módulo de Zram tenemos que teclear el siguiente comando en la terminal:

modprobe zram
Nota: En el caso de querer crear más de un bloque en nuestra memoria RAM tenemos que sustituir el comando anterior por modprobe zram num_devices=4. Este comando a modo de ejemplo creará cuadro bloques. Los bloques se denominaran /dev/zram0, /dev/zram1, /dev/zram2 y  /dev/zram3.

Seguidamente tenemos que crear el dispositivo de Zram. Lo crearemos de 100Mb. Para ello en la terminal tecleamos el siguiente comando:

echo $((100*1024*1024)) > /sys/block/zram0/disksize
Nota: 100x1024x1024 indica el tamaño de nuestro dispositivo. 100 * 1024 * 1024 = 104857600 bytes que es igual a 100MB. Si quisiéramos crear un bloque de 200 Mb solo tendríamos que cambiar el 100 por un 200.
Nota: En el caso de crear 4 bloques deberíamos aplicar el comando que acabamos de ver 3 veces mas. Con zram1, zram2 y zram3

Una vez creado el dipositivo ahora lo vamos a montar. Por lo tanto para montarlo tecleamos:

 mkswap /dev/zram0
Nota: En el caso de crear 4 bloques deberíamos aplicar el comando que acabamos de ver 3 veces mas. Con zram1, zram2 y zram3

Al dispositivo que acabamos de montar le tenemos que dar una prioridad de actuación. Se la tenemos que dar ya que si no se la damos en el momento que nuestra memoria RAM este llena puede que la paginación se haga en nuestro disco duro en vez de en el bloque Zram que acabamos de crear. Para darle la prioridad tecleamos el siguiente comando en la terminal:

 swapon -p 50 /dev/zram0
Nota: Como podéis ver en el comando estamos dando una prioridad de 50 a nuestro bloque de memoria. En principio esta prioridad es más que suficiente. Si os fijáis en la captura de pantalla anterior veréis que la prioridad de paginación en disco es -1. Por lo tanto la prioridad 50 siempre se impondrá  sobre una prioridad -1.
Nota: En el caso de crear 4 bloques deberíamos aplicar el comando que acabamos de ver 3 veces mas. Con zram1, zram2 y zram3

En estos momentos Zram esta plenamente activo. Para comprobar que funciona adecuadamente simplemente tenéis que teclear el siguiente comando:

swapon -s

Al teclear el comando obtendréis un resultado parecido al siguiente:

Estado de la swap después de aplicar Zram

En la captura podemos ver que seguimos teniendo la partición Swap de 1Gb. Pero además adicionalmente aparece el dispositivo de 100 Mb que acabamos con una prioridad 50. Por lo tanto tarea concluida.

Ahora solo nos falta testear si nuestro sistema funciona adecuadamente y mejor que antes de crear el módulo. Una vez realizadas los comprobaciones y estar satisfechos con el rendimiento podemos hacer que la partición Zram se monte automáticamente cada vez que arrancamos nuestro sistema. En el caso de querer hacerlo abrimos la terminal y tecleamos:

sudo gedit /etc/rc.local

Una vez se habrá el editor de texto copiamos el siguiente contenido:

modprobe zram &&
echo $((100*1024*1024)) > /sys/block/zram0/disksize &&
mkswap /dev/zram0 &&
swapon -p 50 /dev/zram0 &&
exit 0
Nota: En el caso de observar problemas los pasos realizados son fácilmente reversibles.

Instalar Zram en versiones de Ubuntu iguales o superiores a la 12.04

Si queremos instalar Zram en Ubuntu 12.04 o una versión posterior todo es un poco más fácil, pero también tendremos menos flexibilidad ya que no podremos controlar el número de bloques de Swap, ni el tamaño ni la prioridad de actuación.

Para instalar Zram primero tenemos que abrir una terminal y teclear el siguiente comando:

sudo apt-get install zram-config

Una vez instalado comprobaremos que zram se ha instalado correctamente y está en funcionamiento. Para ello en la misma terminal teclearemos el siguiente comando:

 cat /proc/swaps

En el caso de que Zram esté funcionando de forma adecuada el comando os mostrará un resultado parecido al siguiente:

 Filename     Type         Size       Used     Priority
/dev/sda5     partition    1298428    0        -1
/dev/zram0    partition    804520     0        5

En principio Zram ya esta funcionando. En mi caso la paritción /dev/sda5  es la partición Swap de mi ordenador. La partición /dev/zram0 será la partición que habrá creado Zram.

Instalar Zram en Ubuntu para versiones inferiores a la 12.04

Si queremos instalar Zram en este caso el proceso también se pude decir que es fácil.

Para instalar Zram primero tenemos que abrir una terminal y teclear el siguiente contenido para agregar el repositorio que necesitamos:

sudo add-apt-repository ppa:shnatsel/zram && sudo apt-get update

Después actualizamos los repositorios tecleando el siguiente comando:

 sudo apt-get update

Finalmente ya podemos instalar Zram mediante el siguiente comando:

 sudo apt-get install zramswap-enabler

En principio Zram ya esta funcionando. Si nos queremos asegurar podemos reiniciar el ordenador o teclear el siguiente comando:

 sudo start zramswap

Si queremos ver el estado de nuestras particiones swap podemos teclear el siguiente comando:

 sudo swapon -s

En el caso que no estemos satisfechos con el rendimiento de Zram podemos desinstalarlo con el siguiente comando:

sudo apt-get remove --purge zramswap-enabler

Y esto es todo. Espero haber contribuido a que algunos de vosotros puedan obtener un mejor rendimiento en vuestro PC.

Fuentes:

http://forums.debian.net/viewtopic.php?t=77627

Nota: Este post va dedicado a Alberto Aru por liar un pollo monumental al instalar el paquete deb de Zram de Ubuntu en Debian. Estuvimos cerca de una hora para poder desinstalar Zram. Un saludo Alberto :)

Post Relacionados

  • Optimizar el uso de la memoria Swap6 abril, 2013 -- Optimizar el uso de la memoria Swap (15)
    Optimizar el uso de la memoria swap forma parte de una serie de post para optimizar el uso de memoria RAM en nuestro sistema operativo y de esta forma poder obtener el máximo rendimiento a nuestr...
  • Liberar memoria cache de la RAM30 marzo, 2013 -- Liberar memoria cache de la RAM (16)
    Liberar memoria cache de nuestra RAM es el primer post de una serie para optimizar el uso de la RAM en nuestros ordenadores y de esta forma poder sacar siempre el máximo rendimiento a nuestro ord...
  • Consejos para comprar un ordenador25 diciembre, 2012 -- Consejos para comprar un ordenador (10)
    La mayoría de gente que quiere comprar un ordenador acostumbra comparar distintos tipos de parámetros entre las diferentes opciones que tiene disponible y siempre acaban eligiendo el que presenta...

16 Comentarios en “Optimizar el rendimiento con Zram

  1. Responder Urbano abr 13,2013 23:03

    Muy bueno el informe, lo único que no me agrada es que desde dentro mismo de la comunidad linux se critique tanto a Ubuntu, creo que criticando tanto a la distro mas popular le hacen mal a linux. Es solo mi opinion, yo aunque hace desde Ubuntu 8.04 recien ahora estoy usandolo mas amenudo y la verdad siendo un usuario experto en Windows pero totalmente nobato en linux me siento muy a gusto con Ubuntu y no pienso cambiar.

    • Responder Joan Carles abr 14,2013 10:28

      Hola Buenas. Gracias por escribir. Creo que decir que Ubuntu es una distribución que no me interesa no es atacar a Ubuntu ni hace daño a Linux. Cada uno es libre de usar la distro que crea conveniente. Si la gente quiere usar Ubuntu adelante. Yo mismo supongo que tarde o temprano la volveré a instalar para ver como va. Ayer mismo probé la 13.04 y la verdad que hay ciertos aspectos de unity que no me gustan nada. Pero quizás a otros les guste. Paso de entrar en discusiones de porqué no me gusta o porqué sí me gusta. Estás discusiones no sirven para nada. Para valorar algo hay que instalarlo y probarlo durante unos meses. Los gustos son subjetivos.
      Que tengas un buen fin de semana.

  2. Responder jonasgamma jun 26,2013 17:06

    Hola, muy buen articulo, estaba buscando algo asi.

    Tengo una duda, cuando abro el fichero sudo gedit /etc/rc.local (mousepad en mi caso) sale lo siguiente:

    #!/bin/sh -e
    #
    # rc.local
    #
    # This script is executed at the end of each multiuser runlevel.
    # Make sure that the script will “exit 0″ on success or any other
    # value on error.
    #
    # In order to enable or disable this script just change the execution
    # bits.
    #
    # By default this script does nothing.

    exit 0

    Exactamente donde debo copiar los comandos que recomiendas, uso Debian Testing.

    Gracias.

    • Responder jonasgamma jun 26,2013 17:14

      También añado a la duda anterior si al ejecutarse automáticamente zram al inicio el swap ya no se habilita, o hay que deshabilitarlo, o simplemente no se hace nada mas.

      • Responder Joan Carles jun 26,2013 22:23

        Hola Jonas. Si tu equipo es un equipo que tiene recursos suficientes y tienes una cantidad aceptable de RAM es casi mejor que no utilices Zram. Dudo que tengas problemas si lo utilizas pero ten en cuenta que Zram aun esta en experimental.

        Si quieres hacer pruebas. Te copio como lo tengo en uno de mis ordenadores.

        #!/bin/sh -e
        #
        # rc.local
        #
        # This script is executed at the end of each multiuser runlevel.
        # Make sure that the script will “exit 0″ on success or any other
        # value on error.
        #
        # In order to enable or disable this script just change the execution
        # bits.
        #
        # By default this script does nothing.

        modprobe zram &&
        echo $((100*1024*1024)) > /sys/block/zram0/disksize &&
        mkswap /dev/zram0 &&
        swapon -p 50 /dev/zram0 &&
        exit 0

        El hecho de usar Zram no implica que elimines la memoria swap. Las 2 coexisten pero usa primero la compresión Zram ya que cuando has activado Zram le has dado prioridad de actuación respecto la memoria Swap.

        • Responder jonasgamma jun 27,2013 4:07

          Gracias Joan Carles, así lo había dejado y funciono. La verdad no era para mi máquina principal, en esa tengo buenos recursos. Quería probar esto y lo de preload en una pc vieja con apenas 512 de RAM y si se nota mejoría, o eso creo.

          Gracias, seguire mas tu blog y tu pagina de Google+.

          Saludos

          • Responder Joan Carles jun 27,2013 22:39

            Quizás en tu caso lo mejor que podrías hacer es instalar una distro ligera. Lubuntu, Slitaz, Crunchbang, Puppy Linux, etc. Un saludo

  3. Responder Martín nov 2,2013 4:17

    Hola! La verdad era un poco escéptico sobre el resultado real de zram, pero debo decir que se nota mucho la diferencia, y te lo digo desde la máquina que reciclé: un celeron p4 2,80 ghz con 512 ram y geforce 4 mx 440 (los drivers de NVidia son otro cantar).

    ¡Te agradezco mucho el post tan detallado y útil!

    • Responder Joan Carles nov 2,2013 9:51

      gracias por tu comentario. Con este tipo de post es importante que los usuarios den feedback para poder ver si los resultados son buenos.

  4. Responder mama21mama dic 3,2013 3:36

    Activado en Zeuza Server Con 1gb de ram y un procesador e2160 de Intel.

    Espero que haga milagros :)

    Gracias y saludos.

  5. Responder mama21mama dic 3,2013 19:55

    lo que noto en log /var/log/syslog

    Dec 3 14:41:47 zeuza kernel: [1080798.614990] Write-error on swap-device (253:0:204792)

    Dec 3 14:48:43 zeuza kernel: [1081215.412726] Write-error on swap-device (253:0:204792)

    Dec 3 14:49:10 zeuza kernel: [1081241.764793] Write-error on swap-device (253:0:204792)

    Todavía no encuentro respuestas a esto.

    Alguien con alguna pista?

    • Responder Joan Carles dic 3,2013 22:41

      No tengo tan claro que el problema sea de zram. Puedes probar sin zram para ver que pasa.

      Si falla zram por lo que visto por aquí pone frases del tipo:
      kernel: zram: Error allocating memory for compressed page: 320529, size=4126
      kernel: Write-error on swap-device (254:1:2564232)

      Mira si encuentras más información en el log del kernel:
      /var/log/kern.log

      Por cierto en google hay información respecto el error que te da. Si esperas milagros pienso que zram no te los proporcionará. Pero por probar nada pierdes.

  6. Responder enae abr 9,2014 19:52

    Hola, solo un comentario:

    Actualmente zram esta en los repositorios de ubuntu,

    sudo apt-get install zram-config

    modificalo por favor. ahorrará problemas a los ubunteros.

    Saludos

    • Responder Joan Carles abr 9,2014 22:27

      Este fin de semana será actualizado.

      Me sabrías decir a partir de que versión se añade el paquete de zram en la paqueteria de serie?

      Lo pregunto porqué añadir los respositorios seguirá siendo necesario en algunas ramas de ubuntu, xubuntu como por ejemplo la 12.04

      Saludos y gracias por avisar.

  7. Responder enae abr 10,2014 14:39

    Hola, en la 12.04, linux mint 13 maya y derivados de ubuntu 12.04, ya está. Supongo que en anteriores serán necesarios los repositorios

    saludos

Deja un Comentario

  

  

  


*