Systemd + ZRAM no Debian Wheezy


Aproveitando uma pergunta aqui no blog, lá vou eu instalar novamente o systemd em meu Wheezy para implementar o uso do ZRAM com o systemd.

systemd

E tudo começa com a instalação do systemd:

# apt-get update
# apt-get install systemd-sysv libpam-systemd systemd-gui
# echo "systemd-sysv hold"|dpkg --set-selections

Os passos acima remove o sysvinit e o substitue pelo systemd, para maiores detalhes sugiro que leiam o artigo original:

Instalação do systemd no Debian Wheezy

zram

Fazendo uso de um PKGBUILD do Arch Linux, comecemos a implementar seu uso no Debian:

$ wget https://aur.archlinux.org/packages/zr/zramswap/zramswap.tar.gz
$ tar -zxvf zramswap.tar.gz
$ chmod +x zramswap/zramctrl 
$ sudo mkdir /usr/lib/systemd/{scripts,system}
$ sudo cp zramswap/zramctrl /usr/lib/systemd/scripts/zramctrl
$ sudo cp zramswap/zramswap.service /usr/lib/systemd/system/zramswap.service
$ sudo systemctl enable zramswap.service
$ sudo systemctl start zramswap.service
$ sudo swapon -a
$ sudo swapon -s

zram-install

E pronto!

Systemd + ZRAM no Debian Wheezy

28 comentários sobre “Systemd + ZRAM no Debian Wheezy

  1. hiltongil disse:

    Então algumas considerações sobre o que noitei.

    Primeiro: Tive que desabilitar a linha que tinha no fstab:

    #tmpfs /var/run tmpfs nodev,nosuid,size=512M,noatime,mode=1777 0 0

    Só com ela comentada o systemd funciona bacana. A segunda coisa que note é que pelo método utilizando o sysinit (que tem aqui no blog) o sistema reconhece como swap o tamanho de toda a RAM + SWAP. Ou seja no meu sistema seria 2.2gb de RAM + 512 de swap.

    Já com esse método do systemd o novo valor informado para o swap é de 967mb. Não sei qual a explicação. Mas utilizando o zram no ElementaryOS através da instalação do zram-config o valor informado também era o da Memória RAM + swap.

    Vou fazer os testes aqui se tem alguma implicação do desempenho/estabilidade do sistema em ambos os métodos e se chegar a alguma conclusão relevante posto aqui. De qualquer forma. Reitero os agradecimentos.

    Curtir

    1. edps disse:

      Duas considerações:

      não alterei a entrada do tmpfs em meu fstab, a minha está assim:

      tmpfs /tmp tmpfs nodev,nosuid,noexec,size=1024M,mode=1777 0 0

      E como não vinha utilizando o ZRAM em meu Wheezy, apenas instalei o mesmo, adicionei o pacote na tag hold para não ser removido e substituído pelo systemd e não fiz nenhuma alteração em /etc/default/grub.

      Curtir

    1. edps disse:

      Não só o sistema em si, como o boot que é excessivamente mais rápido que o normal e dessa vez não utilizei nenhum artifício em /etc/default/grub.

      A única desvantagem que vejo no systemd é no manejo dos serviços, pois no sysvinit me parece que existe mais controle.

      Curtir

  2. hiltongil disse:

    Hoje estava dando uma lida entre as diferenças do zram, zcache, zswap. Acabei observando que o zswap já se encontra no mainline do kernel desde a versão 3.11 para ativá-lo basta inserir na linha de boot do grub a opção zswap.enabled=1
    Para conferir se foi ativado, após carregar o sistema rode o comando dmesg | grep zswap.

    Em síntese e a grosso modo a diferença entre o zram e o zswap é que o zram cria uma “swap” compactada na memória ram enquanto o zswap compacta os dados que seriam enviados para swap (em disco) para após gravá-los na swap. Tendo este último como vantagem a redução de I/O disk ao custo de um pouco de processamento.

    Estou avaliando os dois para ver se algum apresenta alguma vantagem sobre outro.

    Curtir

    1. edps disse:

      O melçhor para esse propósito é usar ZRAM:

      http://gnutwoall.wordpress.com/2013/10/19/systemd-zram-no-debian-wheezy/

      E jogar os diretório temporários na RAM (isto é, adicionando as linhas abaixo em /etc/fstab):

      tmpfs /tmp tmpfs nodev,nosuid,noexec,size=1024M,mode=1777 0 0
      tmpfs /var/spool tmpfs defaults,noatime,mode=1777 0 0
      tmpfs /var/log tmpfs defaults,noatime,mode=0755 0 0

      * na 1ª linha, 1024M, indica a metade da RAM de meu sistema.

      ** dependendo do sistema, podem ocorrer erros com o uso das linhas 2 e 3 (por causa do squid entre outros que façam uso do diretório citado).

      Curtir

      1. hiltongil disse:

        Aqui utilizo dessa forma:
        # Move /tmp to RAM
        tmpfs /tmp tmpfs nodev,nosuid,size=1G,noatime,mode=1777 0 0
        tmpfs /var/lock tmpfs nodev,nosuid,size=100M,noatime,mode=1777 0 0
        # Não habilitar o /var/run se usar o systemd
        #tmpfs /var/run tmpfs nodev,nosuid,size=512M,noatime,mode=1777 0 0

        Curtir

  3. Estou nesse momento rodando um Debian Wheezy com ZRAM pelo Sysvinit e a Swap virou algo verdadeiramente inútil pra mim!
    Apenas criei uma partição de 256mb para ela. Estou com MATE Desktop 1.4 e 2GB de RAM. Simplesmente não tenho do que reclamar!
    Estou brincando com outras otimizações que valeriam a pena serem comentadas. O e4rat que acelerou consideravelmente meu tempo de boot. Mesmo sendo antiga, continua valendo a pena!

    Curtir

    1. edps disse:

      Quando eu faço essas estripulias geralmente é apenas para teste, costumo deixar o meu sistema rodando o mínimo de serviços possível, atualmente nem SWAP venho usando, e olha que tenho apenas 2GBs de RAM.

      Curtir

  4. hiltongil disse:

    Por um acaso alguém sabe qual o metodo de compressão usado nesse arquivo do arch? (v.g. gzip, lzo, lz4)? Ou sabe como verifico isso?
    O motivo é o seguinte: Conforme verifiquei sobre o assunto o método que utiliza o lz4 é relatado como uns dos melhores por ser mais rápido e não requerer tanto do processador. Contudo a taxa de compressão fica menor do que as dos demais. Comparando entre tempo e processamento exigido e compressão final acho que o lz4 é um opção mais interessante pra máquinas com processadores mais fracos ou monocores. Isto, porque, aqui no meu note velinho com um Turion monocore de 2.2ghz as vezes quando o sistema comprime a RAM ele apresenta um “lag” de alguns segundos até a finalização. Acho que isso pode ser amenizado/solucionado com a troca do método de compressão. Alguém tem alguma ideia de onde partir?

    Curtir

      1. hiltongil disse:

        Dai uma procurada rápida mas não achei nada também. Só achei as opções para o uso no zswap. Acabando a monografia volto a pesquisar se encontrar compartilho por aqui.

        Curtir

  5. Então depois de mais algumas pesquisas vi que o modulo do zram a partir do kernel 3.14 deveria possibilitar a escolha entre os métodos de compressão lzo e lz4.

    Contudo na distro que uso (aptosid) no kernel padrão aparece apenas o lzo para lista o método de compressão basta o comando: cat /sys/block/zram0/comp_algorith

    Utilizando o kernel do liquorix com o mesmo comando verifiquei que há os dois métodos (lzo e lz4). Todavia, seguindo o comando para setar o lz4: echo lz4 > /sys/block/zram0/comp_algorith recebo a mensagem que “o dispositivo está em uso ou ocupado”

    Alguém tem alguma ideia do que posso estar fazendo errado?

    Curtir

  6. Fiquei pensando em uma coisa. Pelo que vi o script que roda na inicialização para ativar o zram é que seta os valores e opções. Então será que a escolha do método de compressão não seria feita nesse script? A questão é como seria… não manjo nada de edição de script.

    Curtir

    1. Leandro Nkz disse:

      Creio eu que a escolha entre o método de compressão deve ser feita imediatamente após o comando “modprobe zram” no script de inicialização:

      system(“modprobe zram “ZRAM_PARM”=” cpucount)
      system(“echo lz4 > /sys/block/zram0/comp_algorith”)

      Lembrando que o algoritmo lz4 só está disponível a partir da série 3.15 do kernel -> http://en.wikipedia.org/wiki/Zram

      Tente parar o serviço:

      $ sudo systemctl start zramswap.service

      Editar o script “/usr/lib/systemd/scripts/zramctrl” e startar o serviço novamente.

      Curtir

      1. Pois é. Acho que as configurações são feitas logo depois de subir o módulo. Ao menos foi isso que vi nos artigos que falavam sobre o zram. Vou tentar parar o script e fazer tudo manualmente para ver se funciona. Depois, dá pra pensar como implementar isso no script.

        Curtir

Deixe um comentário