How-To :: Otimizando o tempo de compilação no Slackware


Extrair o melhor desempenho possível em nossa máquina é o que desejamos correto? então, veremos aqui alguns passos que se destinam a melhorar o desempenho no Slackware como um todo, seja utilizando a memória zRAM, partições ou pastas montadas em tmps ou utilizando o ccache, sigam-me os bons! 🙂

zRAM.

No Blog existe um artigo antigo do amigo @leandronkz que trata da ativação da ZRAM no Slackware:

ATIVANDO ZRAM NO SLACKWARE

Convém dizer que parte dos passos lá descritos não serão mais necessários (desde que você esteja utilizando o kernel padrão do Slack), para os demais casos tudo igual!, abaixo segue detalhes do módulo zram para o kernel corrente:

Então, sabendo que o velho Slack já disponibiliza o módulo zRAM, resta-nos apenas criar o script de inicialização do mesmo em /etc/rc.d, o qual será carinhosamente chamado de rc.zram (e é o mesmo script citado no artigo acima):

/etc/rc.d/rc.zram

#!/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

Tendo savo o arquivo rc.zram, dê-lhe permissão de execução e mova-o para o diretório /etc/rc.d:

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

E para finalizar essa parte, trate de adicioná-lo na inicialização do sistema, inserindo as entradas abaixo no script /etc/rc.d/rc.local:

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

Feito isto e SE já quiser iniciá-lo, bastará um simples:

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

Maiores detalhes sobre o zRAM podem ser vistos no artigo: ATIVANDO ZRAM NO SLACKWARE

Para verificar:

$ free -m
$ sudo swapon -s
$ sudo swapon --show

Tmpfs.

O TMPFS é um sistema de arquivos temporário, pois o mesmo é montado na memória RAM ou SWAP, assim sendo, a cada reboot os dados la presentes serão perdidos.

Ele é indicado para agilizar o acesso aos arquivos, pois o acesso à memória sempre é mais rápido que aos HDs por exemplo.

Abaixo veremos as duas entradas que utilizo no arquivo /etc/fstab para habilitar o TMPFS:

/etc/fstab

tmpfs      /dev/shm         tmpfs   defaults         0   0
SBo        /tmp/SBo         tmpfs   nodev,nosuid,size=20G  0   0

Ambas montam os diretórios /dev/shm e /tmp/SBo na RAM, sendo este último o local onde são compilados os SlackBuilds.

Tendo inserido as entradas acima em seu arquivo /etc/fstab, basta executar o comando abaixo para por o TMPFS em execução:

# mount -av

Observações.

Em caso da utilização do CCache (que veremos logo a seguir), não fará diferença montar o diretório /tmp/SBo utilizando o TMPFS, porque este diretório não será utilizado, em vez disso será utilizada a pasta /var/cache/tmp pelo ccache e a pasta /tmp.

Nesse caso experimente montar a partição /tmp com o TMPFS (lembrando que desta forma, tudo o que estiver no diretório /tmp será perdido ao reiniciar!), para tanto as entradas para configuração no arquivo /etc/fstab serão essas:

tmpfs      /dev/shm         tmpfs   defaults         0   0
tmpfs      /tmp             tmpfs   rw,nodev,nosuid,size=2G          0  0

Abaixo vejam uma imagem com o sistema recém-iniciado, a listagem dos pontos de montagens e do diretório /tmp praticamente vazio (contendo apenas um arquivo relacionado ao pulseaudio e 2 capas do player de música. Na outra imagem já se vê criado o diretório SBo após a compilação do Leafpad:

Este slideshow necessita de JavaScript.

Ccache.

E como otimizar é sempre bom, seguimos agora com o CCache, que é um programa que mantém em cache tudo o que compilamos, com isso, vamos acelerar a compilação de programas, uma vez que se o código para compilar for idêntico a um que CCache já possui, ele será substituído e apenas compilará um novo.

Configurando o CCache

De imediato, tratemos de criar um grupo chamado ccache, que terá as permissões para usar o cache, e nele podemos adicionar os usuários que precisamos:

# groupadd ccache 

Então, adicionamos o usuário ao grupo ccache:

# gpasswd -a edps ccache 

Uma vez criado o grupo e adicionado o usuário ao mesmo, devemos criar a pasta de compartilhamento do ccache e o arquivo de log:

# mkdir /var/cache/ccache
# touch /var/log/ccache.log

E em seguida setamos as permissões do grupo ccache para a pasta e arquivo recém-criados:

# chgrp ccache /var/cache/ccache
# chgrp ccache /var/log/ccache.log
# chmod g+wrs /var/cache/ccache
# chmod g+wr /var/log/ccache.log

A seguir, passemos a criação do script /etc/profile.d/ccache.sh, contendo o seguinte:

/etc/profile.d/ccache.sh

#!/bin/sh

if [ "$CCACHE_DIR" = ""  ]; then
	CCACHE_DIR="/var/cache/ccache"
fi

if [ "$CCACHE_LOGFILE" = ""  ]; then
	CCACHE_LOGFILE="/var/log/ccache.log"
fi

if [ "$CCACHE_NOLINK" = "" ]; then 
	CCACHE_NOLINK=1
fi

if [ "$CCACHE_UMASK" = "" ]; then
	CCACHE_UMASK="002"
fi

export CCACHE_DIR
export CCACHE_LOGFILE
export CCACHE_NOLINK
export CCACHE_UMASK

Salve e feche o arquivo e dê-lhe permissão de execução:

# chmod a+x /etc/profile.d/ccache.sh

E bem próximo do fim desse artigo, façamos uma copia do utilitário ccache para o diretório /usr/local/bin:

# cp /usr/bin/ccache /usr/local/bin/ccache

Concluindo, passemos à criação de links simbólicos para os compiladores:

# cd /usr/local/bin
# ln -s ccache gcc
# ln -s ccache g++
# ln -s ccache cc
# ln -s ccache c++

Para verificar se tudo está OK, use:

# which gcc
# which g++
# which cc
# which c++

O último passo antes de reiniciar a sessão é a criação do arquivo ccache.conf, que você poderá tratar globalmente criando-o em /etc/ccache.conf ou em sua pasta pessoal ~/.ccache/ccache.conf ou /root/.cacche/cache.conf, contendo o seguinte:

cache_dir = /var/cache/ccache
max_size = 20.0G

* valor padrão de cache é 5.0G, pus 20.0G apenas pra exagerar! rsrs:

Ao reiniciar a sessão, o ccache já estará disponível para uso, vejam o caso do empacotamento de alguns SlackBuilds e a estatística do CCache:

Este slideshow necessita de JavaScript.

$PATH

Caso seja necessário adicionar o diretório /usr/local/bin em seu $PATH, acrescente a linha abaixo em seu ~/.bashrc ou ~/.zshrc:

# PATH.
export PATH=$HOME/bin:/bin:/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/usr/share/texmf/bin:$PATH

Conclusão.

Embora não tenha como medir esse desempenho prometido, me parece que de fato tanto é acelerada a compilação de programas, como o sistema flui melhor.

Face o exposto, ficará a cargo de cada um que vir a testá-los tirar suas próprias conclusões, lembro que aqui meu PC é um velho Athlon64 3000+ single-core com 3GBs de RAM, onde rodo quase que exclusivamente sistemas de compilação (2 instalações do Slackware e 1 do Gentoo).

E além do que foi exposto neste artigo, sigo ainda algumas dicas presentes no artigo abaixo:

HOW-TO :: TUNANDO A INICIALIZAÇÃO DO SLACKWARE

* basicamente utilizando o script /etc/rc.d/rc.M mais enxuto, o que reduz e muito o tempo de boot!

Referências.

ccache en Slackware

tmpfs @ Arch Wiki

ccache @ Arch Wiki

zram @ Mundo GNU

IntÉ!

Anúncios
How-To :: Otimizando o tempo de compilação no Slackware

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 )

Foto do Google+

Você está comentando utilizando sua conta Google+. 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 )

w

Conectando a %s