Ativando zRAM no Slackware

Neste artigo, veremos como ativar o zRAM no Slackware.

[ Hits: 11.935 ]

Por: Leandro Nkz em 18/06/2014 | Blog: http://brweatherproject.blogspot.com/


Introdução



Sobre o zRAM:
Instalação no Debian Wheezy:
No Arch Linux:
E no Sabayon:
No Slackware, o módulo zRAM não está habilitado por padrão, pelo menos no Slackware Current 64 bits. Portanto, tive de habilitá-lo diretamente na configuração do kernel.

Antes de começar, cheque se o suporte ao zRAM não está habilitado, com o comando:

# modprobe zram
Ou:
# modinfo zram

Se retornar uma mensagem dizendo:

 Module zram not found

...significa que o suporte não está ativo.
Mas se o módulo já estiver habilitado, sorte sua! Pule para o passo Configurando o zRAM .

Habilitando o módulo

Pois bem, se o seu kernel não oferece suporte ao zRAM, você deve recompilá-lo habilitando o módulo. Para isso, execute os passos:

Instale o pacote kernel-source:

# slackpkg install kernel-source

Obs.: este pacote oferece o source original do kernel Linux, sem alterações. Optei por utilizá-lo para manter a mesma configuração do kernel "oficial" do Slackware. Desse modo, evita-se imprevistos com alterações entre as versões.

OK. Ao instalar este pacote, ele irá instalar os sources do kernel Linux na pasta /usr/src/linux. Vamos até lá:

# cd /usr/src/linux

Comece "limpando" os sources:

# make mrproper

Agora, copie a configuração do kernel atualmente em uso:

Para quem usa o kernel huge:

# cp /boot/config-huge-3.14.5 .config

Para quem usa o kernel generic:

# cp /boot/config-generic-3.14.5 .config

Obs.: modifique o número 3.14.5 para a versão do seu kernel.

Atualize a configuração:

# make oldconfig

Se aparecerem perguntas, você pode optar por aceitar a opção padrão, teclando Enter em todas elas.

Agora, execute o assistente de configuração para habilitarmos o módulo:

# make menuconfig

A primeira tela será:
Nela, selecione a opção Processor type and features e tecle Enter.

Na próxima tela, habilite o campo Memory allocator for compressed pages, teclando Y:
Volte à tela principal, teclando Esc duas vezes. Agora, escolha a opção Device Drivers:
Depois, entre na seção Block devices:
E habilite a opção Compressed RAM block device support, teclando M:
Estas configurações irão habilitar o zRAM como um módulo no kernel.

Agora, uma configuração extra que recomendo: alterar o nome da release do seu kernel. Como estamos compilando um kernel da mesma versão que o kernel em uso e não queremos substituí-lo, devemos alterar o nome para que não ocorram conflitos entre os diretórios dos módulos.

Por exemplo, o kernel que utilizo (3.14.5), possui os módulos em /lib/modules/3.14.5. Se eu compilar um novo kernel desta mesma versão, ele irá sobrescrever o diretório /lib/modules/3.14.5 com os novos módulos. Ou seja, o kernel antigo pode não funcionar, se você precisar dele mais tarde.

Para minimizar isso, vamos acrescentar algum nome à release do kernel que estamos compilando. Na tela inicial do assistente de configuração, selecione a opção General setup:
E depois: Local version - append to kernel release:
Escolha algum nome para acrescentar ao seu kernel e tecle Enter:
Como escolhi acrescentar o -zram, a release deste kernel ficará nomeada assim: 3.14.5-zram.

Para finalizar a configuração, selecione a opção Save e saia do assistente, selecionando Exit.

Por fim, compile o novo kernel:

# make -j5 bzImage modules

Obs.: a opção -j, determina o número de processos em paralelo que a compilação do kernel será dividida. É útil para tornar a compilação mais rápida em processadores com mais de um núcleo. Eu recomendo defini-la com o valor de: quantidade de núcleos + 1.

Para saber a quantidade de núcleos do seu processador, execute o comando:

lscpu

Na linha "CPU(s)", está especificada a quantidade de núcleos do seu processador. Um exemplo em um processador Core i5 M450 (que possui dois núcleos físicos mais dois "simulados"):

lscpu
 Architecture:          x86_64
 CPU op-mode(s):        32-bit, 64-bit
 Byte Order:            Little Endian
 CPU(s):                4
 On-line CPU(s) list:   0-3
 Thread(s) per core:    2
 Core(s) per socket:    2
 Socket(s):             1
 Vendor ID:             GenuineIntel
 CPU family:            6
 Model:                 37
 Stepping:              5
 CPU MHz:               2400.000
 BogoMIPS:              4787.53
 Virtualization:        VT-x
 L1d cache:             32K
 L1i cache:             32K
 L2 cache:              256K
 L3 cache:              3072K


Após o término da compilação (que pode demorar dependendo do seu processador e da configuração do kernel - huge x generic), instale os módulos, com o comando:

# make modules_install

E copie a imagem gerada para o diretório /boot:

# cp arch/x86/boot/bzImage /boot/vmlinuz-3.14.5-zram
# cp System.map /boot/System.map-3.14.5-zram
# cp .config /boot/config-3.14.5-zram


Obs.: certifique-se de que a release está correta. Você pode conferir com o comando:

# make kernelrelease

Se você utilizou a configuração do kernel generic, não se esqueça de gerar o initrd.gz deste kernel. Utilize o script mkinitrd_command_generator.sh:

# /usr/share/mkinitrd/mkinitrd_command_generator.sh -k 3.14.5-zram  # Não se esqueça de especificar a release correta

Ele irá retornar o comando adequado para a geração do initrd. Exemplo:

# /usr/share/mkinitrd/mkinitrd_command_generator.sh -k 3.14.5-zram
 #
 # mkinitrd_command_generator.sh revision 1.45
 #
 # This script will now make a recommendation about the command to use
 # in case you require an initrd image to boot a kernel that does not
 # have support for your storage or root filesystem built in
 # (such as the Slackware 'generic' kernels').
 # A suitable 'mkinitrd' command will be:
 
 mkinitrd -c -k 3.14.5-zram -f ext4 -r /dev/sda2 -m mbcache:jbd2:ext4 -u -o /boot/initrd.gz


Agora, basta copiá-lo e executá-lo:

# mkinitrd -c -k 3.14.5-zram -f ext4 -r /dev/sda2 -m mbcache:jbd2:ext4 -u -o /boot/initrd.gz-3.14.5-zram

Obs.: altere o nome do initrd.gz para que ele não sobrescreva o initrd do kernel generic.

Para finalizar, insira as entradas no arquivo /etc/lilo.conf:

Para o kernel huge:

image = /boot/vmlinuz-3.14.5-zram
  root = /dev/sda2  # Altere de acordo com a partição de instalação
  label = Slackware-zram
  read-only

Para o kernel generic:

image = /boot/vmlinuz-3.14.5-zram
initrd = /boot/initrd.gz-3.14.5-zram  # Acrescenta-se o initrd
  root = /dev/sda2  # Altere de acordo com a partição de instalação
  label = Slackware-zram
  read-only

Atualize o LILO e reinicie:

# lilo
# reboot


Após dar boot pelo novo kernel, verifique se o módulo foi habilitado corretamente:

# modprobe zram
Ou:
# modinfo zram

Se não aparecerem mensagens de erro, sucesso!

    Próxima página

Páginas do artigo
   1. Introdução
   2. Configurando o zRAM
Outros artigos deste autor

Saiba porque o Linux pode (ainda) estar diminuindo a vida útil do HD do seu notebook

Instalação e configuração básica de um Debian 6 Squeeze para Desktops

Trazendo toda a usabilidade do GNOME 2 para o GNOME 3 do Ubuntu 11.10

Oracle XE 11.2 no Slackware 14.0 64 bits - Instalação e configuração

Uma alternativa ao ConkyForecast: O BrWeather

Leitura recomendada

UZIX - O Linux do MSX (Z80)

Placas NVIDIA com kernel 2.6.8

Recompilando o kernel com suporte a placas de rede Encore rtl8139D (Silan)

Compilação comentada do kernel

Tornando o kernel do OpenBSD enxuto

  
Comentários
[1] Comentário enviado por tiekookeit em 18/06/2014 - 10:10h

Obrigado por trazer a tona a config, já habilitei no meu debian aqui, desconhecia a opção...

[2] Comentário enviado por wellington_r em 18/06/2014 - 10:13h

Muito bom, obrigado pelo tutorial.

Agora, pode me tirar uma dúvida?
Por que exatamente o zram melhora o desempenho? Pelo que entendi ele cria um dispositivo de bloco na memória RAM, que é como se estivesse criando uma memória virtual dentro da própria memória RAM, mas a memória virtual serve justamente para ser utilizada quando não há espaço disponível na memória RAM, o que torna tudo muito esquisito, pois você cria dentro da memória RAM uma memória virtual que geralmente é usada em um HD para ser usada como reserva da memória RAM.
Então, qual é a vantagem de criar dispositivos de blocos dentro da memória RAM ao invés de se utilizar a memória RAM pura e simplesmente como um todo?

Veja bem, eu entendo que uma memória virtual na memória RAM seja mais rápida que a memória virtual no HD, o que não entendo é por que o fato de criar uma memória virtual na memória faz o desempenho ficar melhor do que quando não se tem essa memória virtual.

Pergunto isso pois aqui na empresa onde faço estágio temos alguns dinossauros vivos rodando Linux e qualquer melhora no desempenho seria bem-vinda, porém preciso saber se o zram de fato irá melhorar alguma coisa.

Agradeço desde já.

[3] Comentário enviado por izaias em 18/06/2014 - 11:23h

Instalei no Ubuntu 14.04.
Percebi sim, sensível rendimento.

Uma coisa interessante aconteceu, o PopCorn Time deu erro.
Mas bastou remover e reinstalar pra funcionar. E até esse aplicativo abre mais rápido.

Estava receioso em instalar esse zRAM, mas vendo o desempenho no Phoronix e citado no Mundo GNU, resolvi arriscar.

-> http://www.phoronix.com/scan.php?page=news_item&px=MTM1NjQ


VLW Leandro!

[4] Comentário enviado por leandro em 18/06/2014 - 15:30h

wellington_r:

Obrigado.
Sobre a dúvida, é exatamente isso: é criada uma memória virtual na RAM ao invés do HD. No entanto, a grande vantagem é que ela é compactada.

Um exemplo:

Sem zram:
- Quando a memória RAM estiver se esgotando, o sistema (kernel) vai alocando e utilizando espaço da memória swap, no HD. Como o HD é muito mais lento do que a RAM, durante este processo podem ocorrer vários travamentos e lentidões.

Com zram:
- Neste caso, quando a memória RAM estiver se esgotando, o sistema irá compactar os dados presentes nela e ir armazenando na memória virtual até o limite estipulado, o que libera mais espaço. Ou seja, pode-se armazenar mais dados na RAM, sem que se precise utilizar a swap do disco.

Notas:
- O zram utiliza o algoritmo de compactação LZO, que fornece pouca taxa de compactação, mas o processo de descompressão dos dados é bem rápido.
Nas novas versões do kernel, dá pra habilitar o algoritmo LZ4 (aparece a opção quando se habilita o módulo do zram na configuração do kernel) que parece ser melhor ainda do que o LZO.

- Lembrando que o zram só será realmente útil em sistemas com pouca memória RAM, pois ele evita o uso da swap no disco. Vejam que tive que forçar o sistema para poder esgotar o uso da memória RAM, e em condições normais, isso seria bem raro de acontecer.

Curiosidade: o próprio Android já utiliza o zram: https://source.android.com/devices/low-ram.html


tiekookeit e Izaias, Obrigado! =)


[5] Comentário enviado por wellington_r em 18/06/2014 - 16:29h

leandro:

Muito boa a sua resposta, bem esclarecedora. Agora sim a minha dúvida foi sanada. Muito obrigado! :)

Então acho que vou testar o zram nos computadores aqui da empresa, que choram para abrir uma planilha grande no LibreOffice (1GB de memória).

[6] Comentário enviado por albfneto em 18/06/2014 - 20:32h

Legal, favoritado.
ví que você citou meus artigos.

[7] Comentário enviado por px em 18/06/2014 - 21:22h

Bacana, mas ainda acho q seria perfeito se melhora-se o alocamento de memória Ram no linux, pq nada adianta tu ter uns sl... 2G de memória se o Chromium chupa metade! kkkkk

Ou pelo menos nesses aplicativos chupa-cabra ser implementado uma Zram própria deles... ai sim seria uma [*****] vantagem! (desculpe o linguajar).

Isso visando aquelas máquinas fraquinhas de escritórios q objetivam uma economia de energia e manutenção claro... mas como um avanço a mais nunca é D+ seria implementado em diversos computadores mais "fortinhos" tbm.

Resumindo sinto falta de um gerenciamento melhor no sistema na parte da Ram... ñ sei se sou só eu ou se mais alguém concorda cmg... bom fica a dica ai.

[8] Comentário enviado por leandro em 19/06/2014 - 16:23h

wellington_r: OK, depois conte-nos se melhorou o desempenho. =)

albfneto, Obrigado. Tomei interesse pelo zram a partir dos seus artigos lá do Mundo GNU.

px, concordo. Se certos programas parassem de consumir tanta memória já seria uma grande evolução, rs. Principalmente os navegadores.

[9] Comentário enviado por cytron em 21/06/2014 - 11:08h

Realmente zRAM é um recurso excelente!

Interessante esta questão sobre memória, relembrem os tempos antigos... tínhamos 128 MB de RAM, usávamos o office e várias outras coisas, incluindo navegadores e o próprio sistema operacional. Hoje temos 2 GB de RAM e mal dá pra usar o navegador! ISSO É ABSURDO!!!

Entendo que os sistemas evoluíram, aumentaram o código resultando em uma ocupação maior da memória, mas se dividirmos 2048 por 128 dá 16, ou seja, os softwares aumentaram 16 vezes o consumo (sei que tem a questão de gráficos e tudo mais), mas mesmo assim, observem o XP rodando em uma máquina Celeron 2.13 com 2 GB de RAM, "hoje", ..., é incrível como ele roda mais lento que o mesmo XP em um Pentium 3 com 512 de RAM antigamente. Além de existir esse "poder místico" no mundo da informática, onde as coisas vão ficando mais lentas e ocupando cada vez mais espaço, ainda "acredito" que existe um "desleixo" dos programadores (empresas) que simplesmente não se preocupam mais com a questão de espaço e desempenho. Parece que os desenvolvedores estão deixando o desempenho como responsabilidade dos fabricantes de hardware. Ou seja, fazem de qualquer maneira e falam: "o hardware está cada vez mais potente e com mais memória, então não precisamos nos preocupar em fazer programas enxutos e rápidos".

Antigamente tinha como uma das principais preocupações o sistema/programa ocupar pouco espaço e rodar rápido. Inclusive é a principal proposta da programação procedural e OOP, evitar repetição do código e aumentar o desempenho.

Antigamente, todo mundo conhecia o arj, e winzip, viviam compactando as coisas para não lotar o HD. Agora com esses terabytes, a maioria nem sabe compactar mais. É claro que não precisamos. Mas desempenho é CRUCIAL! Fazemos upgrade exatamente por causa do desempenho.

As pessoas compram máquinas novas por causa do desempenho. Se os desenvolvedores dessem uma paradinha para enxugar os códigos e aprenderem a programar pensando "também" no desempenho "por parte do código", não precisaríamos de 16 GB de RAM. Nessa memória toda cabe o Win7 completo sem precisar ler 1 byte se quer no HD. Mesmo assim, basta abrir um navegador para ver 1 GB desaparecer. Isso é quase surreal! kkkkkk

Se precisamos de 1 GB só para navegar em apenas um site, então a 15 anos atrás era totalmente impossível navegar na internet! kkkkkkk

Sei que a microsoft por exemplo, vive fazendo a propaganda de DESEMPENHO e tal... como se estivesse desenvolvendo com esse pensamento, mas então porque o sistema não voa como antigamente??? Eu conseguia abrir o Win95 em menos de 10 segundos em um 586 com 64 MB de RAM.... Hoje não consigo abrir um XP SP3 em um Dualcore com 2 GB nesse tempo! Comparando as diferenças entre essas máquinas, era de se esperar que o XP abrisse tão rápido que os ícones cairiam no teclado kkkkk

[10] Comentário enviado por bruno_cavalcanti em 21/06/2014 - 23:33h

Muito bom vlww conheci o zram agora rsrsrs

[11] Comentário enviado por leandro em 22/06/2014 - 18:08h

@cytron, concordo com tudo o que disse!
E mais, do jeito que estamos indo, daqui a 20 anos usaremos computadores com desempenho que deixam o tianhe-2 no chinelo mas ainda estaremos reclamando da lentidão dos softwares, rsrs.

@bruno_cavalcanti, obrigado!

[12] Comentário enviado por px em 24/06/2014 - 11:09h

@ cytron

Exato! isso que gostaria de ter discutido melhor, tipo antigamente (uns 2-3 anos) rodava-se um game no full com uma mísera plaquinha... ta até ai tudo bem... ai passa um tempo e "precisamos" comprar um troço de 500 contos (só um exemplo!) para usar o pc para a mesma função kkkk

Capitalismo selvagem não se preocupa com desempenho e sim com lucros!

Exemplo eu que tive de trocar o meu processador (claro tava bem antigo já...), vou sair de um Athlon 270 para um fx 6300... imagina a diferença! isso pq os programas agora ñ usam clock (lembra do exemplo do cytron com os processadores?!) os programas tendem a usar múltiplos núcleos e novas "instruções" nos processadores, claro aproveitar-se de barramentos mais rápidos e/ou usar a memória de placas gráficas para "empurrar" algumas contas e algorítimos etc... vejam o caso de alguns super-computadores da Nvidia todos baseados em placas gráficas... e rodando Linux! rsrs

[13] Comentário enviado por darkstarfire em 27/06/2014 - 11:45h

Amigo, não sei o que estár errado no meu sistema, compilei um kernel para o Slackware 14.1 com zram habilitado.
Configurei o zram para usar 2GB da ram como swap, mesmo assim ele enche praticamente toda ram só então passa a usar a swap, mesmo eu dando prioridade 100 para a swap, também desabilitei a partição swap para forçar ele usar o bloco do zram na memoria e nada. Alguma dica?

[14] Comentário enviado por leandro em 28/06/2014 - 11:03h


[13] Comentário enviado por darkstarfire em 27/06/2014 - 11:45h:

Amigo, não sei o que estár errado no meu sistema, compilei um kernel para o Slackware 14.1 com zram habilitado.
Configurei o zram para usar 2GB da ram como swap, mesmo assim ele enche praticamente toda ram só então passa a usar a swap, mesmo eu dando prioridade 100 para a swap, também desabilitei a partição swap para forçar ele usar o bloco do zram na memoria e nada. Alguma dica?


Experimente verificar o nível de "swappiness" do sistema com o comando:

# sysctl -a | grep "vm.swappiness"

Quanto maior for o nível (que fica entre 0 e 100) mais ele tenderá a usar a swap. Por outro lado, se o valor estiver baixo, o sistema tentará usar toda a RAM disponível para só então utilizar a swap.

Tente colocar um valor alto, do tipo 70~90 com o comando:

# sysctl -e vm.swappiness=90

Se funcionar, acrescente o parâmetro (vm.swappiness=90) no arquivo /etc/sysctl.conf (se não existir, crie) para que seja lido na inicialização do sistema.

Abraço.

[15] Comentário enviado por elvisvinicius em 04/07/2014 - 08:24h

zRAM é realmente uma maravilha. Uso no openSUSE há mais de 1 ano.


Para quem ainda tem alguma dúvida sobre como funciona e porque deveria usá-lo também, aqui vai uma explicação bem simples:

Sabe quando comprimimos um arquivo em ZIP? Pra reduzir o tamanho dele e ocupar menos espaço em nosso HD, CD ou PenDrive? Então, zRAM faz praticamente a mesma coisa.

Os dados que são gravados na memória RAM são "comprimidos" e consequentemente passam a ocupar menos espaço. Se os dados ocupam menos espaço, quer dizer que sobra mais RAM. Logo, "virtualmente", aumenta-se a memória RAM disponível, já que tudo que é gravado nela ocupa menos espaço. ;)

Quanto ao swapiness, é bom usar algo no máximo até 90. Isso faz com que o sistema passe a priorizar mais a gravação no SWAP, e já que o SWAP agora está na memória RAM, faz sentido fazer o sistema adotar esse comportamento. Não é recomentado usar 100 no swapiness, porque certos dados de alta prioridade podem causar problemas se ficar no swap. É bom deixar um "respiro" para esse tipo de dado.



---



Atualmente uso junto de outro recurso que estreou no openSUSE 13.1, o zSWAP.


É muito fácil ativar no openSUSE, o kernel dele já vem pronto pra isso.

### Para ativar o ZRAM ###

Primeiro tem que instalar os scripts de inicialização:
http://software.opensuse.org/package/systemd-zram-service
Instalem a segunda opção ( de home:malcolmlewis:TESTING )

Para habilitar e ativar:

# systemctl enable zramswap
# systemctl start zramswap

Pra configurar o swapiness persistente, é preciso criar o arquivo:
/etc/sysctl.d/99-swappiness.conf

... com o conteúdo:
vm.swappiness=90


### Para ativar o ZSWAP ###
No Yast, abrir o módulo de configuração do gerenciador de boot e "acrescentar" na linha de opções do GRUB:
zswap.enabled=1








Depois que reiniciar, tudo estará OK.

Devo dizer que a responsabilidade do sistema é outra, Muito melhor.


;)

[16] Comentário enviado por leandro em 04/07/2014 - 11:15h

Valeu elvisvinicius!

Quanto ao nível de swappness, é exatamente isso. E ao se utilizar o zram, há o acréscimo de um pequeno custo: o processo de compactar/descompactar dados na RAM consome recursos do processador. Assim, ao se armazenar dados prioritários na swap o desempenho do sistema decai um pouco em virtude disso.

Abraço.


Contribuir com comentário