Ativando zRAM no Slackware

Neste artigo, veremos como ativar o zRAM no Slackware.

[ Hits: 10.272 ]

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

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

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

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

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

Uma alternativa ao ConkyForecast: O BrWeather

Leitura recomendada

Compilando o kernel no Slackware com pacotes pré-compilados

kernel Linux otimizado - Compilação e teste

IPCMSG: Comunicação inter-processos sem magia negra

Kernel-BALA

Kernel 2.6.9 em 20 passos

  
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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts