USANDO SWAP NA RAM EM SABAYON – ZRAM – MÉTODO NOVO

INTRODUÇÃO

 

A. INFORMAÇÕES IMPORTANTES E REFERÊNCIAS

Primeiramente, informo que o presente artigo torna obsoletos os procedimentos descritos nas dicas e artigos anteriores:

REF. 1 – Usando ZRAM em Sabayon. Nova atualização

REF. 2 – Experimento: Swap diretamente na memória RAM – Testes para RAM e Swap

Lembro porém que apenas os métodos (descritos nos artigos anteriores) para implementar ZRAM em sistemas com Systemd, é obsoleto. ZRAM não o é, de modo algum e o conteúdo dos artigos ainda é útil, por isso, sugiro que você os leia ou consulte.

Mais uma informação. Se o pacote zram-utils estiver disponível nos repositórios da sua distro, o método deverá poder ser usado também em outras distribuições Linux, que não o Sabayon ou o Gentoo.

Reporto também que somente kerneis novos tem suporte (módulo) para usar ZRAM. Nos kerneis antigos, era necessário habilitar o módulo, ou mesmo recompilar o kernel:

REF. 3 – ZRAM (Compressed RAM) no Debian

REF. 4 – Ativando ZRAM no Slackware

REF.5 – Ativando ZRAM no Slackware-2

REF. 6 – ZRAM no Arch Linux

REF. 7 – Systemd + ZRAM no Debian Wheezy

B. ESTADO DA ARTE

A habilitação, configuração e uso da SWAP em memória RAM, pode ser feita com o pacote cleancache, ou, mais comumente, com ZRAM.

Também pode ser feita via hardware, com um chip chamado SRAM.

O pacote e/ou script ZRAM é mais usado porque é um método mais fácil. Mesmo assim, era bem mais fácil (veja referências 1-3, 5 e 7) no antigo OpenRC do que no moderno Systemd.

Particularmente é difícil em distros baseadas no Gentoo, como o Sabayon. Isso porque o pacote que implementava o ZRAM no Gentoo (zram-init), embora funcione, só funciona bem em OpenRC.

Gentoo não usa Systemd por padrão, mas o Sabayon usa!

Para Sabayon, foi necessário que eu adaptasse (REFs 1, 2) um pacote de ZRAM do Arch Linux (REF. 6), chamado zramswap (no Ubuntu, se chama zramswap-enabler):

O mesmo pode ser feito em Debian (REF. 9).

REF. 9 Systemd & ZRAM no Debian, forma fácil

Tal como o demonstrou nosso grande e competente amigo e colaborador ativo, edps, aqui do VOL (veja REFs 3 e 7).

Implementações especiais de ZRAM para Systemd existem, como Systemd-Swap (veja ainda REF. 8), mas nem sempre de aplicação fácil.

C. ZRAM-UTILS

Você quer usar ZRAM facilmente no Sabayon com Systemd e não quer usar os métodos antigos?

Como no velho programa humorístico de TV, “Organizações Tabajara”… “Seus problemas acabaram!”

O programador polonês Artur Kaleta (licho) criou um pacote chamado “zram-utils” capaz de implementar ZRAM em computadores usando Systemd:

O presente artigo trata dos meus experimentos usando ZRAM em Sabayon, implementado através do zram-utils, que existe para Gentoo:

 

INSTALAÇÃO DO ZRAM-UTILS

 

Procedimento adaptado da dica de Danilo Pianini, instalação para Gentoo:

REF. 10 zram-tools: zRAM made easy for Gentoo and Sabayon Linux

O procedimento que ele sugere para instalar em Sabayon funcionaria, mas é mais complexo do que o que eu uso neste artigo.

O pacote zram-utils não existe nos repositórios (Entropy) do Sabayon e nem no Gentoo corrente, mas existe no Overlay Gentoo-Sabayon não oficial “nirvana”.

D. PREPARATIVOS

Para usar, você precisa compilar o pacote zram-utils com o Portage do Gentoo, para instalá-lo.

MUITO IMPORTANTE: Para usar Portage em Sabayon, precisa primeiro editar certos arquivos de configuração, ou passará a ter downgrade de pacotes.

Edite o arquivo /etc/entropy/client.conf e procure a linha escrito “ignore spmdowngrades”, nessa linha, substitua “disable” por “enable” e salve o arquivo.

Lembre também que nos Portage após 2015, a FLAG “SYNC” do arquivo /etc/portage/make.conf (ou em algumas instalações de sabayons mais antigos, /etc/make.conf) está obsoleta, depreciada.

Adapte o seu make.conf do Sabayon. A priori, basta comentar a linha onde está escrito SYNC, com um sinal #.

Se desejar, modernize todo seu Portage, usando a nova documentação do Gentoo, que é excelente:

Muito recentemente, publiquei um artigo de como se moderniza o Portage:

Apesar que para o Portage funcionar, não será preciso modernizar tudo. Como dito acima, se quiser, apenas comente a FLAG RSYNC no seu make.conf.

Feitos esses procedimentos iniciais, os preparativos, passe ao descrito no item E.

E. INSTALAÇÃO DO OVERLAY E DO PACOTE ZRAM-UTILS

Em Sabayons novos, a versão existente do aplicativo “layman” (para adicionar Overlays) não está compilada com suporte ao sistema de controle de versão “mercurial” (usado pelo Overlay nirvana). É necessário fazer essa compilação. Execute os comandos abaixo:

# equo up
# emerge –sync
# emerge -av –oneshot portage

# emerge -av mercurial
(ou, alternativamente)
# equo i -av mercurial

# LINGUAS=”pt_BR” USE=”mercurial” emerge -av layman

Agora instale o Overlay Nirvana e atualize todos os Overlays:

# layman -a nirvana
# layman -S

A seguir, para instalar o pacote “zram-utils”, execute:

# emerge -av zram-utils

 

USANDO ZRAM-UTILS PARA ATIVAR ZRAM

 

F. ATIVANDO A ZRAM

Agora, por esse novo método, é bem mais simples. o pacote zram-utils faz a mágica funcionar sozinha!

F.1 NO BOOT:

Basta ativar o serviço do ZRAM no boot do Systemd (também adaptado de Danilo Pianini, página 2, REF. 10):

# systemctl enable [email protected]

Isso ativa o serviço no boot. Sempre vai funcionar, o tempo todo, quando você ligar o micro.

Reinicie o computador e faça login no Sabayon.

Se desejar desligar o ZRAM numa sessão, faça um atalho no desktop, chamado “Desligar ZRAM.desktop” e coloque nele estas linhas, ou faça-o graficamente, na tela, não esquecendo de marcar a opção avançada “executar em terminal”:

[Desktop Entry]
Comment[pt_BR]= Desligador de ZRAM
Comment= switch off ZRAM
Exec=sudo systemctl stop [email protected] && sudo swapoff -a && sudo swapon -a && sudo swapon -sv
GenericName[pt_BR]=
GenericName=
Icon=ibus-setup
MimeType=
Name[pt_BR]=Desligar ZRAM
Name=Desligar ZRAM
Path=
StartupNotify=true
Terminal=true
TerminalOptions=
Type=Application
X-DBUS-ServiceName=
X-DBUS-StartupType=none
X-KDE-SubstituteUID=false
X-KDE-Username=

Esse atalho, clicando nele, ele abre um terminal, pede senha de usuário e “desliga” a ZRAM e mostra que está desligada e usando Swap física.

Para religar faça reboot (para saber o motivo, veja F.2).

F.2 MANUALMENTE:

NÃO RECOMENDO ESTE MÉTODO: Testei bastante, e funciona, mas quando você inicia e para o serviço manualmente, começa a bagunçar tudo, alguns núcleos funcionam, outros não etc. Por isso não recomendo este método.

Primeiro desative no boot, para ativar apenas quando quiser. Execute estes comandos:

# systemctl stop [email protected]
# systemctl disable [email protected]

Se você prefere só ativar quando desejar, use os seguintes comandos para ativar:

# systemctl start [email protected]

Ou:

# systemctl restart [email protected]

Ou parar o serviço:

# systemctl stop [email protected]

G. Verificar o funcionamento:

Cheque se o serviço está ativo. Para isto, execute:

# systemctl status [email protected]

Deve aparecer algo assim como no meu micro, Phenon de 8 núcleos com 16 Giga de RAM. Indica que ZRAM está ativo:

[email protected] – zRAM Swap zram0
Loaded: loaded (/usr/lib64/systemd/system/[email protected]; enabled)
Active: active (exited) since Qua 2015-06-03 15:54:31 BRT; 3h 40min ago
Process: 1924 ExecStart=/usr/sbin/zswap.sh start ram7 (code=exited, status=0/SUCCESS)
Process: 1917 ExecStart=/usr/sbin/zswap.sh start ram6 (code=exited, status=0/SUCCESS)
Process: 1910 ExecStart=/usr/sbin/zswap.sh start ram5 (code=exited, status=0/SUCCESS)
Process: 1901 ExecStart=/usr/sbin/zswap.sh start ram4 (code=exited, status=0/SUCCESS)
Process: 1894 ExecStart=/usr/sbin/zswap.sh start ram3 (code=exited, status=0/SUCCESS)
Process: 1886 ExecStart=/usr/sbin/zswap.sh start ram2 (code=exited, status=0/SUCCESS)
Process: 1880 ExecStart=/usr/sbin/zswap.sh start ram1 (code=exited, status=0/SUCCESS)
Process: 1798 ExecStart=/usr/sbin/zswap.sh start ram0 (code=exited, status=0/SUCCESS)
Main PID: 1931 (code=exited, status=0/SUCCESS)
Jun 03 15:54:31 sabayon zswap.sh[1924]: Starting zRAM Swap start
Jun 03 15:54:31 sabayon zswap.sh[1924]: Setting up swapspace version 1, size = 16 MiB (16773120 bytes)
Jun 03 15:54:31 sabayon zswap.sh[1924]: nenhum rótulo, UUID=3df37417-eb43-4506-8967-e3a4264af235
Jun 03 15:54:31 sabayon zswap.sh[1931]: Starting zRAM Swap start
Jun 03 15:54:31 sabayon zswap.sh[1931]: Setting up swapspace version 1, size = 16 MiB (16773120 bytes)
Jun 03 15:54:31 sabayon zswap.sh[1931]: nenhum rótulo, UUID=ec46f278-9445-45df-b931-ccc1b5985a3f
Hint: Some lines were ellipsized, use -l to show in full.

Agora, verifique se a memória RAM está sendo alocada para cada núcleo do processador (swap na RAM), com o comando:

# swapon -sv

Deve ver algo assim, como no meu micro:

Nome do arquivo      Tipo            Tamanho         Usado   Prioridade
/dev/sda7            partition       2047996 0       -1
/dev/ram0            partition       16380   0       32767
/dev/ram1            partition       16380   0       32767
/dev/ram2            partition       16380   0       32767
/dev/ram3            partition       16380   0       32767
/dev/ram4            partition       16380   0       32767
/dev/ram5            partition       16380   0       32767
/dev/ram6            partition       16380   0       32767
/dev/ram7            partition       16380   0       32767

Observe que os valores numéricos são diferentes, nessa versão de ZRAM.

A primeira linha mostra sda7, minha Swap normal, de 2 Gigabytes (2047996 Bytes).

Mas nas linhas seguintes, essa versão de ZRAM mostra para cada núcleo, o TOTAL da memória do micro, ele não “analisa” “não “divide” para cada núcleo separado. Também o uso, alocação, não é em porcentagem, mas em Bytes. Todos os valores estão em Megabytes.

Portanto a memória física, de hardware do micro é 16 Gigabytes (16380 Megabytes) e a memória total “virtualmente disponível”, seriam teóricos 32 Gigabytes (32767 Megabytes). Não sei porque ele usa essa nomenclatura (não consegui localizar na Internet).

O esperado seria algo assim (tirado da Página 1, REF. 1):

Nome do arquivo       Tipo            Tamanho         Usado   Prioridade
/dev/zram0            partition       403952  0       100
/dev/zram1            partition       403952  0       100
/dev/zram2            partition       403952  0       100
/dev/zram3            partition       403952  0       100
/dev/zram4            partition       403952  0       100
/dev/zram5            partition       403952  0       100
/dev/zram6            partition       403952  0       100
/dev/zram7            partition       403952  0       100

O tamanho em bytes (REF. 1) ou em megabytes (página 1, REF. 2) e o usado, em porcentagem.

Em todo o caso, está funcionando.

 

NÃO FUNCIONOU! E AGORA?

 

H. PROBLEMAS

Nos meus experimentos iniciais, vi que não funcionava. Ou o serviço não iniciava, ou iniciava em um só núcleo, ou não funcionava nada.

Especulo que o sistema não conseguiu identificar a multiplicidade, todos os núcleos, devido à alguma variável de ambiente.

Como você sabe que não funcionou? Execute alguns testes:

# swapon -sv

Só verá a Swap normal ou, ela e um só núcleo ativado.

Para verificar mais, execute:

# systemctl status [email protected]

E verá erros de serviço, parado ou descarregado. Agora execute:

# usr/sbin/zswap.sh start ram0

Isso ativa só um núcleo, e indica que seu ZRAM funciona, porém não iniciando no boot.

I. SOLUÇÃO

ResolvÍ com um “procedimento técnico e científico rigoroso”, uma tradicional “gambiarra”! rsrs!

Localize o arquivo /etc/systemd/system/local-fs.target.wants/[email protected] e o copie, para protegê-lo. Isso sempre é uma boa prática em Linux:

# cp /etc/systemd/system/local-fs.target.wants/[email protected] /etc/systemd/system/local-fs.target.wants/[email protected]

Agora, edite o arquivo como root, usando seu editor padrão ou favorito. Eu usei Kwrite, mas você pode usar o que quiser:

$ kdesudo kwrite /etc/systemd/system/local-fs.target.wants/[email protected]

Deixe o arquivo semelhante ao meu, apenas adaptando para o número de núcleos do seu processador:

[Unit]
Description=zRAM Swap %i

[Service]
Type=oneshot
RemainAfterExit=true

# Linhas eram assim, no Arquivo Original, Comentadas para não atuar

# ExecStart=/usr/sbin/zswap.sh start %i
# ExecStop=/usr/sbin/zswap.sh stop %i

# Editado para Iniciar e Parar todos os núcleos, de 0 a 7
# Adapte para o seu número de núcleos, ou só alguns, caso não queira iniciar todos:

ExecStart=/usr/sbin/zswap.sh start ram0
ExecStop=/usr/sbin/zswap.sh stop ram0
ExecStart=/usr/sbin/zswap.sh start ram1
ExecStop=/usr/sbin/zswap.sh stop ram1
ExecStart=/usr/sbin/zswap.sh start ram2
ExecStop=/usr/sbin/zswap.sh stop ram2
ExecStart=/usr/sbin/zswap.sh start ram3
ExecStop=/usr/sbin/zswap.sh stop ram3
ExecStart=/usr/sbin/zswap.sh start ram4
ExecStop=/usr/sbin/zswap.sh stop ram4
ExecStart=/usr/sbin/zswap.sh start ram5
ExecStop=/usr/sbin/zswap.sh stop ram5
ExecStart=/usr/sbin/zswap.sh start ram6
ExecStop=/usr/sbin/zswap.sh stop ram6
ExecStart=/usr/sbin/zswap.sh start ram7
ExecStop=/usr/sbin/zswap.sh stop ram7

[Install]
WantedBy=local-fs.target

Salve o arquivo, sem mudar o nome. Feche a sessão e reinicie o micro. Tudo deve estar funcionando, agora.

Danilo Pianini (página 2, REF. 10) sugere que se isso ocorrer, você crie várias instâncias do serviço, uma para cada núcleo, tipo o exemplo, para dois núcleos:

# systemctl enable [email protected]
# systemctl enable [email protected]

Mas se você tiver vários núcleos, eu acho pouco prático.

 

TESTES E COMPLEMENTOS / CONCLUSÃO

 

J. TESTES

Eu fiz vários testes e experimentos: aceleradores, estressadores de CPU, otimização de serviços e configurações, regular para alta performance etc.

Não os vou repetir aqui, visto que a metodologia já está toda publicada em outros artigos meus.

Se desejar, você pode usar em conjunto com a ZRAM: outros aceleradores, como Preload, Prelink e Verynice. Também pode controlar os serviços iniciados no boot e as configurações dos aplicativos, testar estressar a CPU, fazer medidas de benchmark etc.

Para obter detalhes desses testes todos, consulte as referências da página 1, REF. 1 e REF. 2, e mais os seguintes artigos e dicas:

Pode inclusive, colocar todos os seus diretórios temporários na RAM. Veja página 1, REF. 2 e comentários da REF. 7, e o excelente artigo do colega KYETOY, aqui do VOL:

K. ALGUMAS OBSERVAÇÕES FINAIS E CONCLUSÃO

Verifiquei que o boot fica somente ligeiramente mais rápido, mas a velocidade, a performance geral do micro aumenta substancialmente e o consumo de CPU diminuem drasticamente.

Apenas reportando um dos meus testes, o micro roda estressador de CPU, CPUBurn, praticamente sem consumir a RAM física (cerca de 14 Giga livres), sem usar a Swap de disco (2 Giga) e até sem usar 100 % de CPU (apenas 13 a 15 %).

Vejam na figura, acima, à esquerda, o terminal mostra a Swap na RAM, todos os núcleos; acima, à direita, os processos, pacote htop; Abaixo, à esquerda, memória livre (comando free). Abaixo, à direita, CPUBurn iniciado (comando burnK6). Note também, no monitor Gkrellm, temperatura não muita alta, pouco uso de CPU e muita memória livre…

Linux: Usando Swap na RAM em Sabayon. ZRAM. Método Novo.

Lembro porém também este micro tem Preload e Verynice ativos, o que melhora. Mas em contra partida, há muitos aplicativos abertos (inclusive o Firefox onde estou escrevendo isto), múltiplos ambientes gráficos e ainda é KDE4 pesado e com efeitos 3D de Kwin ativados!

Em resumo, o ZRAM parece fazer um ótimo aproveitamento dos recursos de RAM física, de hardware e também da Swap de disco e em RAM. Parece muito eficiente!

Sem usar ZRAM, o mesmo micro usa muitos mais Recursos. Observações minhas em recente artigo, rodando sistemas de 32 Bits, com CPUBurn, mas sem ZRAM, o micro quase trava, mesmo com 16 Giga de RAM.

Advirto porém que em teoria, se você aplicar Swap na RAM em computadores com pouca memória RAM física (lembrando que meu micro tem 16 Giga), pode piorar, ao invés de melhorar.

Ou seja, em máquinas com pouca RAM, o uso de Swap convencional (e grande), no disco rígido, pode ser melhor alternativa. Sugiro que você você teste em micros com pelo menos 2 núcleos e um mínimo 4 Giga de RAM.

Não testei, mas acredito que se o pacote zram-utils existir nos repositórios de sua distro, o método pode ser aplicado em outras distribuições com Systemd.

Rolar para cima