Monthly Archivejunho 2007
Artigos 27 jun 2007 09:35 pm
Optimizando a compilação com ccache e distcc
Se sua rede tem 1 ou mais estação(ões)/servidore(s) Gentoo, está mais do que na hora de acelerar a compilação dos softwares. Duas opções estão disponíveis para rapida instalação, são elas: distcc e ccache.
ccache
O ccache, como o próprio nome já diz, tem por objetivo fazer cache de código C compilado durante uma instalação de software, para que numa próxima compilação ele possa ser reutilizado, economizando assim tempo e processamento. Seu funcionamento é análogo aos servidores proxys mais fomosos como o squid por exemplo.
Instalação
A instalação do ccache é bem simples e exige apenas 3 passos que são respectivamente, instalar o ccache, definir o tamanho máximo do diretório de cache e editar o arquivo make.conf adicionando a palavra ccache no parâmetro FEATURES.
# emerge ccache # ccache -m 2G (define o tamanho máximo de 2 Gigabytes para o diretório do ccache) # vim /etc/make.conf FEATURES="ccache"
Uso
Uma vez instalado, basta começar a instalar novos programas para se beneficiar do uso do ccache. Vale observar que a primeira compilação após instalação do ccache pode demorar um pouco mais do que o normal já que o cache está sendo iniciado, no entanto as compilações seguintes deverão ser graduativamente aceleradas conforme o conteúdo do cache for sendo gerado.
Para certificar-se de que o ccache está sendo utilizado, basta executar o comando ccache -s e verificar se o mesmo está sendo utilizado.
# CCACHE_DIR=/var/tmp/ccache ccache -s (o diretório do cache do portage deve ser especificado)
distcc
A distcc distribui a compilação do código C entre hosts participantes da rede, acelerando assim o processo de compilação. A distcc faz uso do recurso de compilação pararela distribuindo cada “trabalho” entre os diversos hosts de compilação disponíveis. Sendo assim, programas que não podem ser compilados pararelamente não podem fazer uso da distcc, ao menos não sem nenhum trabalho adicional.
Instalação
A instalação da distcc é simples e exige basicamente a instalação do pacote distcc. Esse pacote deve ser instalado em todas as máquinas, sejam elas clientes ou servidores do serviço.
As maquinas que forem atuar como compiladores da rede devem ter o daemon da distcc rodando em background.
# emerge distcc
# rc-update add distccd default
As maquinas clientes precisam de um pacote a mais para gerenciar o uso da distcc, além de configuração adicional no arquivo make.conf
# emerge distcc # emerge distcc-config # vim /etc/make.conf MAKEOPTS="-jN" (onde N é o número de CPUs compiladoras + 1, é comum usar esse número X 2) FEATURES="distcc" # distcc-config --set-hosts "localhost maquina1 maquina2" (define as maquinas participantes da compilação, inclusive a maquina local se desejado)
É altamente recomendado que as maquinas participantes utilizem a mesma versão da GCC. Não há problemas em misturar versões como 4.1.x e 4.1.y, no entanto misturar versões como 4.x.y e 4.z.w, 3.x.y e 4.z.w ou outras combinações pode gerar diversos problemas ou até mesmo impossibilitar a compilação do software.
Uso
Assim como o ccache, a distcc é usada transparemente pelo portage e uma vez que estiver instalada basta começar a compilar software para se beneficiar de seu uso. O status atual da distribuição da compilação pode ser verificado com o comando distccmon-text na maquina cliente.
# DISTCC_DIR="/var/tmp/portage/.distcc/" distccmon-text N (onde N é o número de segundos de atualização da tela)
Se a distcc for usada junto com o ccache é necessário especificar o ccache antes da distcc no parâmetro FEATURES
Compilação cruzada
Na configuração padrão da distcc não é possível compilar para arquiteturas diferentes da utilizada pela máquina onde está instalada distcc, se você quiser compilar código para amd64 é necessário que todas as máquinas participantes da compilação utilizem arquitetura amd64 por exemplo. Uma forma de contornar essa limitação é a compilação cruzada, ou seja, compilar para uma arquitetura diferente da arquitetura do compilador utilizado. Dessa forma é possível utilizar uma estação x86 para compilar programas para uma estação ppc ou sparc.
Instalação
Instalar um ambiente de compilação cruzada é fácil no entanto um pouco demorado. O pacote crossdev cuida do recado e basta indicar a arquitetura desejada para que ele gere todos os programas necessários para a compilação (binutils, gcc, glibc, etc).
No caso abaixo, uma estação i686 é configurada para compilar software para arquitetura amd64.
# emerge crossdev # crossdev -t x86_64 (onde x86_64 é a arquitetura em que os programas devem ser gerados)
Desative o ccache e a distcc para compilar os compiladores
A instalação da distcc cria um diretório com links dos compiladores para o binário da distcc que cuida de distribuir os processos, no entanto como muitos programas chamam os compiladores diretamente por c++, gcc, etc ao invés de x86_64-pc-linux-gnu-gcc é necessário acertar os links de modo a apontar para o compilador da arquitetura correta. Um simples script e alguns links resolvem o problema.
Crie um novo script com o nome equivalente a variavel CHOST da arquitetura desejada, por exemplo x86_64-pc-linux-gnu-wrapper pra amd64 ou sparc-unknown-linux-gnu-wrapper para arquitetura sparc, e insira as linhas abaixo lembrando-se de alterar os valores para a arquitetura correta:
# cd /usr/lib/distcc/bin
# rm c++ g++ gcc cc
# vim x86_64-pc-linux-gnu-wrapper
#!/bin/bash
exec /usr/lib/distcc/bin/x86_64-pc-linux-gnu-g${0:$[-2]} "$@"
Em seguida, dê permissão de execução no script e refaça os links.
# chmod a+x x86_64-pc-linux-gnu-wrapper
# ln -s x86_64-pc-linux-gnu-wrapper c++
# ln -s x86_64-pc-linux-gnu-wrapper cc
# ln -s x86_64-pc-linux-gnu-wrapper g++
# ln -s x86_64-pc-linux-gnu-wrapper gcc
Pronto, agora é só adicionar o host na lista de hosts da distcc das demais máquinas e começar a compilação.
Caso necessário compilar para outra arquitetura basta instalar os novos compiladores e refazer os links para a nova arquitetura.
Referências
Sem categoria 01 jun 2007 12:05 am
Breve análise do Kubuntu 7
Recentemente tive em minhas mãos um novíssimo laptop Acer 9423WSMi e como não poderia deixar de ser, o linux seria o sistema operacional padrão da máquina que veio de fábrica com Windows Vista (que além de acabar com os recursos da máquina, já sai do forno todo cheio de problemas).
Apesar de ser usuário assíduo do Gentoo Linux, já há muito tempo tenho acompanhado o crescimento e amadurecimento do Ubuntu (e suas variações com Kde e XFCE) e como eu não estava com muito tempo para gastar na instalação e tinha um CD do Kubuntu à mão, resolvi dar uma chance a ele.
Em pouco menos de meia hora e poucos cliques no estilo Next, Next, Finish, eu já tinha um sistema instalado com os softwares básicos para escritório como OpenOffice e navegador Web. A configuração do X subiu certinho em 1400×900 e até mesmo o hardware WiFi já estava detectado, apesar de ainda não ter por padrão um configurador amigável para criptografia WPA na versão 6.06, o que me levou a ter que usar a conexão via cabo inicialmente.
Instalar programas ficou fácil com o Adept principalmente na versão Installer onde os softwares são listados por categorias e contém breve descrição da funcionalidade. Com apenas alguns cliques é possível instalar o Mplayer, Amarok, plugin de flash, PHP, Mysql e centenas de outros softwares.
Outro recurso que facilita muito a vida é a detecção e montagem automática de mídias removíveis como cd, dvd, pen drive, hd externo (usb), e até câmera fotográfica.
Na versão mais nova, 7.04 as coisas ficaram ainda mais integradas, mais amigáveis e mais práticas, como por exemplo o KNetworkManager que já vem instalado por padrão e tem suporte a WPA.
Com pouco esforço também é possível instalar os drivers da nVidia e com mais alguns cliques pode-se instalar o window manager Beryl e deixar as coisas no Desktop mais divertidas com um bom toque de animações e efeitos 3D.
E depois de tudo isso ainda fui surpreendido com o fato de que as teclas multimedia estavam todas funcionando integradas ao Amarok e Kmixer, realmente não era algo esperado.
Com mais alguns cliques e alguns poucos comandos a WebCam rapidamente já estava funcionando e com o AMSN mais novo ficou fácil ver e exibir webcam com os contatos do Windows Messenger.Em alguns casos é preciso adicionar novos repositórios para instalar softwares como o Skype por exemplo mas com o Adept essa tarefa não tem mistério algum, basta uma rápida consulta ao google e em poucos minutos o software desejado estará instalado.
O único ponto frustrante é não poder usar a versão para 64 bits pois o suporte ainda não é dos melhores e tarefas como instalar codecs proprietários são muito mais complicadas que no Gentoo onde por exemplo é muito mais simples manter uma arquitetura 64 bits com instalações compátiveis de softwares 32 bits como plugin de flash, java e codecs.
Realmente, as coisas ficam muito práticas com o Kubuntu 7.04 e em muitos casos mais práticas que no próprio Windows só que com a grande vantagem da segurança e flexibilidade que só o Linux tem. E apesar de continuar preferindo o Gentoo para servidores e máquinas de desenvolvimento, com certeza o Kubuntu conquistou o primeiro lugar em se tratando de Desktop.