De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.

Acelerando a compilação com o distcc

Colaboração: Carlos E. Morimoto

Data de Publicação: 05 de Setembro de 2005

Se você é do tipo que passa muito tempo compilando programas, esta dica lhe será bem útil.

Você pode utilizar outros micros da rede para reduzir o tempo de compilação utilizando o 'distcc". Ele permite que os jobs da compilação (criados usando a opção -j) sejam processados pro diferentes PCs da rede, reduzindo o tempo de compilação quase que proporcional mente. Com 5 micros de configuração similar, a compilação é realizada em aproximadamente 1/4 do tempo. Ele é usado pelos desenvolvedores de muitos projetos para diminuir o tempo perdido com cada compilação e assim acelerar o desenvolvimento, sobretudo nas fases de teste.

Para usar o distcc não é necessário que todos os micros possuam configuração similar, nem que estejam rodando a mesma distribuição. É recomendável apenas que sejam sempre utilizadas versões similares do distcc em todos, para evitar problemas inesperados.

Ele está disponível na maioria das distribuições, procure pelo pacote "distcc". Nas distribuições derivadas do Debian ele pode ser instalado através do apt-get:

  # apt-get install distcc

Naturalmente, você deve instalá-lo em todas as máquinas que serão usadas. Como medida de segurança, mesmo depois de instalado ele fica explicitamente desabilitado no arquivo "/etc/default/distcc". Para ativar, edite o arquivo e mude a opção "STARTDISTCC="false" para:

  STARTDISTCC="true"

A seguir, na opção "ALLOWEDNETS" você deve especificar quais micros poderão usar o servidor, especificando diretamente o IP ou nome de cada um, ou autorizando diretamente toda a faixa de endereços da rede local. Neste caso a opção fica:

  ALLOWEDNETS="192.168.1.0/24"

Concluída a configuração, reinicie o serviço, em todas as máquinas:

  # /etc/init.d/distcc restart

A grosso modo, o distcc trabalha enviando trechos de código para as demais máquinas da rede, juntamente com os parâmetros de compilação necessários e recebe de volta os binários já compilados. Apenas o seu micro precisa ter o código fonte do que está sendo compilado, mas todas as máquinas que forem ser usadas precisam ter os compiladores necessários para compila-lo. Ao instalar o sistema em cada máquina, aproveite para sempre habilitar a categoria de desenvolvimento na seleção dos pacotes. É desejável também que, mesmo que sejam usadas distribuições diferentes, todas as máquinas tenham instaladas versões idênticas ou pelo menos similares do gcc e g++.

Na hora de compilar, comece criando a variável "DISTCC_HOSTS" no shell, que especifica quais máquinas da rede serão utilizadas pelo distcc durante a compilação, como em:

  $ export DISTCC_HOSTS='127.0.0.1 192.168.1.33 192.168.1.100 192.168.1.156'

Se preferir, você pode tornar esta configuração permanente, salvando a lista dentro do arquivo ".distcc/hosts", dentro do diretório home do usuário usado nas compilações. Depois de criar a pasta .distcc, você pode usar o comando:

  $ echo '127.0.0.1 192.168.1.33 192.168.1.100 192.168.1.156' > ~/.distcc/hosts

Depois de criada a lista com os hosts, você pode compilar da forma usual, adicionando os parâmetros "-jX CC=distcc" depois do "make", onde o X é o número de jobs simultâneos que serão criados. Ao usar o distcc, uma regra geral é usar 3 jobs por processador, por máquina. Com 4 máquinas monoprocessadas, -j12 é um bom número. Em algumas situações, usar um número maior de jobs pode reduzir um pouco o tempo de compilação e em outras vai simplesmente retardar o processo.

No caso da compilação do Kernel, os comandos seriam:

  $ make -j12 CC=distcc bzImage 
  $ make -j12 CC=distcc modules 
  # make modules install 

Note que não usei o distcc no "make modules install", pois ele não envolve compilação, apenas a instalação dos módulos gerados no comando anterior. O mais correto é sempre fazer compilações usando um login de usuário e usar o root apenas para rodar os comandos de instalação. Para fazer isso, é necessário que a conta de usuário tenha sempre permissão de acesso completa à pasta com o código fonte. Se você está compilando o Kernel e o fonte está na pasta "/usr/src/linux/2.6.13/" (que originalmente pertence ao root), você pode pode usar o comando:

  # chown -R joao.joao /usr/src/linux/2.6.13/

Para transferir a posse da pasta para o usuário joao, grupo joao, de forma que ele possa fazer a compilação sem enfrentar problemas de permissão.


Gostou da dica? Conheça outros trabalhos do autor.

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


Veja a relação completa dos artigos de Carlos E. Morimoto