Como devo priorizar especificações para uma estação / sistema de desenvolvimento de kernel do Kernel Linux? [fechadas]

1

Estou trabalhando em um projeto de desenvolvimento Linux Kernel (especificamente OpenEmbedded / Yocto Project) no qual kernel e compilação de software embarcado é a tarefa principal e meu laptop com um Core i7-2620M @ 2.70GHz dual-core não é cortá-lo.

Se eu fosse comprar ou construir um novo sistema, como devo priorizar os componentes e especificações? por exemplo. devo segmentar um mínimo de n-núcleos no processador e gastar o restante do meu orçamento em discos rígidos ou RAM mais rápidos?

    
por Crunchy 27.10.2013 / 23:22

1 resposta

2

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!).

    
por 28.10.2013 / 13:27