How-To :: Zram no Slackware e Gentoo


Hoje, como o módulo zram já vem ativo por padrão no Slackware, aproveito para informar que a antiga dica ATIVANDO ZRAM NO SLACKWAREdo colaborador Leandro Nkz é em parte obsoleta (em parte porque ainda funciona, mas desnecessária conforme o módulo já vem ativo por padrão).
E aproveitando, demonstrarei aqui um novo método para utilização da zram, desta vez calculando o quanto de memória será alocada a partir do nº de cores de seu processador e da quantidade total de memória física.

Slackware Current + ZRAM

Como dito na introdução o script abaixo calcula o quanto de memória deverá ser adicionada tomando como base o n° de cores do processador (aqui: 6 cores) e a quantidade de memória física (aqui 8GB).

Este script baseou-se no script utilizado num antigo artigo que fiz para o VOL:

ZRAM (Compressed RAM) no Debian

Vamos então ao que interessa…

Slackware.

No Slackware bastará que você adicione o script abaixo em /etc/rc.d/rc.zram, logo:

# nano /etc/rc.d/rc.zram

Cole o conteúdo abaixo, salve e saia com Ctrl+o e Ctrl+x:

#!/bin/sh

### BEGIN INIT INFO
# Provides: zram
# Required-Start:
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Increased Performance In Linux With zRam (Virtual Swap Compressed in RAM)
# Description: Adapted from systemd scripts at https://github.com/mystilleef/FedoraZram
# Adapted for Slackware and Gentoo OpenRC by @edps <https://edpsblog.wordpress.com>
### END INIT INFO

start() {
# get the number of CPUs
num_cpus=$(grep -c processor /proc/cpuinfo)
# if something goes wrong, assume we have 1
[ "$num_cpus" != 0 ] || num_cpus=1

# set decremented number of CPUs
decr_num_cpus=$((num_cpus - 1))

# get the amount of memory in the machine
mem_total_kb=$(grep MemTotal /proc/meminfo | grep -E --only-matching '[[:digit:]]+')
mem_total=$((mem_total_kb * 1024))

# load dependency modules
modprobe zram num_devices=$num_cpus

# initialize the devices
for i in $(seq 0 $decr_num_cpus); do
echo $((mem_total / num_cpus)) > /sys/block/zram$i/disksize
done

# Creating swap filesystems
for i in $(seq 0 $decr_num_cpus); do
mkswap /dev/zram$i
done

# Switch the swaps on
for i in $(seq 0 $decr_num_cpus); do
swapon -p 80 /dev/zram$i
done
}

stop() {
# get the number of CPUs
num_cpus=$(grep -c processor /proc/cpuinfo)

# set decremented number of CPUs
decr_num_cpus=$((num_cpus - 1))

# Switching off swap
for i in $(seq 0 $decr_num_cpus); do
if [ "$(grep /dev/zram$i /proc/swaps)" != "" ]; then
swapoff /dev/zram$i
sleep 1
fi
done

sleep 1
rmmod zram
}

case "$1" in
start)
start
swapon -p 80 /dev/zram$i
;;
stop)
stop
;;
restart)
stop
sleep 3
start
;;
*)
echo "Usage: $0 {start|stop|restart}"
RETVAL=1
esac
exit $RETVAL

Swap Priority on Arch Wiki

Após salvar o script, atribua sua permissão de execução:

# chmod a+x /etc/rc.d/rc.zram

E para concluir, adicione o script à inicialização do sistema pondo-o uma chamada de execução no script /etc/rc.d/rc.local:

# Start rc.zram.
if [ -x /etc/rc.d/rc.zram ]
then
/etc/rc.d/rc.zram start
fi

Se desejar testar sem reiniciar, basta executar:

# /etc/rc.d/rc.local restart

A seguir vemos a ativação do zram por meio de um alias para o comando acima e detalhes do módulo com o modinfo:

Vemos na imagem abaixo a quantidade de memória disponível quando o script está sendo executado e quando parado:

A seguir vemos a listagem dos dispositivos ativos e do meu /etc/fstab onde atribuo baixa prioridade a swap física /dev/sdc5:

Caso também queira definir baixa prioridade à sua swap física, tome como exemplo a entrada abaixo e edite o seu arquivo /etc/fstab:

UUID=e6ed6536-3156-48f9-8e25-640aa272234f   swap   swap   nofail,pri=10   0  0

Gentoo.

No Gentoo tradicional (systemd-free), você utilizará o mesmo script acima, porém, em vez de salvá-lo em /etc/rc.d/, o fará em /etc/init.d, como em:

# nano /etc/init.d/zram

Cole o mesmo conteúdo demonstrado no passo acima, salve e saia com Ctrl+o e Ctrl+x:

Após salvá-lo, atribua a permissão de execução:

# chmod a+x /etc/init.d/zram

E para concluir, adicione o script à inicialização do sistema:

# rc-update add zram default

Se desejar testar sem reiniciar, basta executar:

# /etc/init.d/zram start

Nas imagens abaixo vemos a cópia do script da instalação do Slackware ( /etc/rc.d/rc.zram ) para a do Gentoo ( /etc/init.d/zram ), sua adição à inicialização deste sistema e sua execução:

E tendo dito… intÉ!

How-To :: Zram no Slackware e Gentoo

2 comentários sobre “How-To :: Zram no Slackware e Gentoo

  1. zezaocapoeira disse:

    Salve mano.

    Valeu por esse esquema de zram que compartilhou.

    Estou testando esse esquema de zram aqui e deu um gás a mais no sitema quando é necessário o uso da swap.

    Por via das dúvidas também instalei https://slackbuilds.org/repository/14.2/system/lz4/

    Também estou testando algumas singelas modificações na config do kernel, pois estava analizando algumas configs do liquorix e notei que em:

    # CONFIG_HZ_100 is not set
    CONFIG_HZ_250=y
    # CONFIG_HZ_300 is not set
    # CONFIG_HZ_1000 is not set
    CONFIG_HZ=250

    Aqui antes tava usando setado em 1000, agora estou usando em 250.

    E também notei que a config do liquorix usa lz4 para criar a bzimage.

    E aqui no Slackware foi necessário instalar o https://slackbuilds.org/repository/14.2/system/lz4/ para gerar o bzImage quando tiver setado para lz4.

    Descobri isso depois de 1 hora e 28 minutos de compilação usando essa config

    https://github.com/damentz/liquorix-package/blob/master/linux-liquorix/debian/config/kernelarch-x86/config-arch-64

    O patch patch (lqx) https://github.com/zen-kernel/zen-kernel/releases , mas aparentemente é a mesma coisa do zen , só muda realmente algo no arquivo config custom que mencionei anteriormente.

    Também notei que a compilação e setada com a flag -O3

    CONFIG_CC_OPTIMIZE_HARDER=y

    https://imgur.com/a/eRRcYC5

    E talvez seja necessário gerar algum initrd.gz.

    # /usr/share/mkinitrd/mkinitrd_command_generator.sh -k 5.3.11-zen1
    ( por exemplo aqui foi gerado assim )

    mkinitrd -c -k 5.3.11-zen1 -f xfs -r /dev/sda5 -m xfs -u -o /boot/initrd.gz

    vai gerar o comando para criar o initrd.gz.

    aqui adicionei o microcode da intel dessa forma para ficar embutido no initrd.gz

    # mkinitrd -c -k 5.3.11-zen1 -f xfs -r /dev/sda5 -m xfs -u -o /boot/initrd.gz -P /boot/intel-ucode.cpio

    OBS:

    Depois que apliquei essas modificações que citei minha máquina deu uma melhorada.

    Também apliquei o noatime no fstab.

    Obrigado pela atenção, salve!!!

    Curtir

    1. Fala amigo,

      atualmente estou usando o -CK onde não me ative a essa opção, aqui está:

      CONFIG_HZ=100

      Quanto a compactação eu já sabia que o -CK sugere o uso do lz4, mas não modifiquei, o meu está:

      CONFIG_KERNEL_LZMA=y

      E não uso initrd, all-built-in (mas usando make localmodconfig)

      For your eyes only! kkk :

      $ wget -nv https://github.com/ckolivas/linux/archive/5.5-ck1.tar.gz
      $ sudo tar xf 5.5-ck1.tar.gz -C /usr/src/
      $ cd /usr/src
      $ su

      # rm -rf linux
      # ln -s linux-5.5-ck1 linux
      # cd linux
      # make localmodconfig
      # make -j $(getconf _NPROCESSORS_ONLN) bzImage modules
      # make modules_install
      # cp -v System.map /boot/System.map-5.5.0-ck1
      # cp -v .config /boot/config-5.5.0-ck1
      # cp -v arch/x86/boot/bzImage /boot/vmlinuz-5.5.0-ck1
      # cd /boot
      # rm -fv config System.map vmlinuz
      # ln -s vmlinuz-5.5.0-ck1 vmlinuz
      # ln -s System.map-5.5.0-ck1 System.map
      # ln -s config-5.5.0-ck1 config
      # grub-mkconfig -o /boot/grub/grub.cfg

      Curtir

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s