Para acelerar a compilação, você deve criar arquivos objeto em tmpfs em vez de um disco rígido rotacional. Como os arquivos de origem também são armazenados em cache na memória, é seguro assumir que você está limitado à CPU (supondo que você tenha RAM suficiente). Se você tiver outros laptops / desktops, recomendo adicioná-los a um compilador para melhorar os tempos de compilação. A compilação pode frequentemente ser paralelizada.
Quanto ao hardware:
- Escolha um SSD para armazenar o sistema operacional e os arquivos de origem, isso deve reduzir os tempos de inicialização (o tempo necessário para ler as fontes no cache do sistema de arquivos).
- Escolha pelo menos 8 GB de RAM, recomenda-se 16 GB ou mais. Consegui concluir uma compilação de buildroot com todos os arquivos de origem e objeto em um tmpfs de 16 GB.
- Concentre-se na CPU, quanto mais núcleos / segmentos, melhor.
Benchmarks (tempo em segundos, três tentativas sem outros processos significativos em execução, desvio padrão entre parênteses, -jN
indica o número de unidades paralelas):
CPU C/T RAM -j4 -j8 -j12 -j16 i5-460M 2/4 8 GB 337 (1.28) 344 (1.04) i5-2320 4/4 24 GB 163 (2.35) 158 (0.20) 159 (0.50) 159 (0.33) i7-3770 4/8 24 GB 133 (0.31) 110 (0.15) 108 (0.06) 109 (0.26) distcc (100 Mbit LAN, node -- router -- node) -j20 (priority: remote i7-3770 16, local i5-460M 4): 186 (7.36) -j20 (priority: local i5-460M 4, remote i7-3770 16): 184 (1.40) -j20 (priority: local i7-3770 16, remote i5-460M 4): 104 (2.26) -j24 (priority: local i7-3770 16, remote i5-460M 8): 101 (1.24)
C / T = Cores / Threads, -j12, -j16 foram pulados para i5-460M, já que seria muito lento de qualquer maneira.
O tempo para copiar as fontes para tmpfs (do SSD) não foi incorporado, os números mostram o desempenho bruto para make bzImage modules
( link para o script de benchmark ). Nenhum arquivo de troca foi usado.
Os processos distcc parecem estar ligados a E / S quando uso meu laptop como local, enquanto assisto vnstat, descobri que o TX + RX ficou em torno de 80 Mbit / s. Também é importante definir o host distcc local para localhost (e não o endereço do nó), pois isso causaria um dreno de desempenho (para o local i7-3770, o i5-460M remoto, -j20 resultava em 144 (sdev 0,65) , isso é um sucesso de 40 segundos no desempenho!).