Aproveitando os posts anteriores sobre zram, aqui veremos como ativá-lo no Slackware.
Por: Leandro Nkz
Sobre o zram: http://en.wikipedia.org/wiki/Zram
Instalação no Debian Wheezy: https://edpsblog.wordpress.com/2013/10/19/systemd-zram-no-debian-wheezy/
No Arch Linux: https://edpsblog.wordpress.com/2013/10/20/zram-no-arch-linux/
E no Sabayon:
https://edpsblog.wordpress.com/2014/05/09/usando-zram-em-sabayon/
https://edpsblog.wordpress.com/2014/06/05/testes-iniciais-com-zram-em-sabayon-linux/
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!
Configurando o zram.
Esta parte é mais rápida, há um script desenvolvido por Andrei Gliga disponível aqui que faz todo o trabalho.
Basta criar o arquivo /etc/rc.d/rc.zram com o seguinte conteúdo:
#!/bin/bash # Script to start zRam (Virtual Swap Compressed in RAM) # https://github.com/otzy007/enable-zRam-in-Slackware # # Size of swap space in MB # default 1GB SIZE=1024 start() { modprobe zram echo $SIZE*1024*1024 | bc > /sys/block/zram0/disksize mkswap /dev/zram0 swapon -p 50 /dev/zram0 } stop() { swapoff /dev/zram0 } case "$1" in start) start ;; stop) stop ;; restart) echo 1 > /sys/block/zram0/reset ;; *) echo "Usage: $0 (start|stop|restart)" esac
Dê permissão de execução:
# chmod +x /etc/rc.d/rc.zram
E adicione as linhas no arquivo /etc/rc.d/rc.local para que o script inicie no boot:
#Iniciando zram if [ -x /etc/rc.d/rc.zram ] ; then /etc/rc.d/rc.zram start fi
Observações:
- Por padrão ele irá disponibilizar 1 GB, se quiser mudar, altere a linha “SIZE” como preferir.
- Eu alterei o script, acrescentando o parâmetro “-p 50” na linha que ativa a nova área swap (swapon). Este parâmetro atribui a prioridade 50 à nova área criada, fazendo com que o sistema dê prioridade a ela em detrimento à alguma outra swap que esteja habilitada. Assim, o sistema usará primeiro a área swap do zram, e quando esta estiver esgotada, ele irá buscar a área swap no disco (se houver).
Por fim, execute o comando:
# /etc/rc.d/rc.zram start
E pronto, zram ativado.
Um screenshot do sistema em uso:
- 4 GB de RAM (3.74 GB “usável”);
- zram utilizando 1 GB;
- Swap no disco (/dev/sda3) de 3 GB;
- Nível de swapiness em 70;
- Programas abertos:
- VirtualBox executando: Windows 7 (argh!), Ubuntu 12.04 e o saudoso Conectiva 6.0.
- Firefox com um vídeo do YouTube executando;
- GIMP;
- LibreOffice Writer;
- E outros menores: lxterminal, Genymotion e Thunar.
Notas finais:
- Reparem no consumo de memória RAM (3344 de 3744 MB) e nas partições swap (zram com 671 MB e /dev/sda3 vazia).
- O sistema só passará a utilizar a partição swap do disco (/dev/sda3) quando o dispositivo criado pelo zram estiver cheio devido à maior prioridade atribuída ao zram.
- Manter uma partição swap no disco é útil para quem usa o recurso de hibernação (como o zram utiliza a memória RAM para criar a partição swap, a hibernação não funcionará).
Referências:
- http://oprod.net/compress-ram-with-zram-in-slackware
- http://alien.slackbook.org/dokuwiki/doku.php?id=linux:kernelbuilding
- https://wiki.archlinux.org/index.php/swap
Até a próxima!
Show brother! e na verdade esse how-to além do ZRAM descreve como compilar um kernel mais atual no Slackware, parabéns!
Um abraço.
CurtirCurtir
Thanks!
CurtirCurtir