Maiores gargalos ao construir o Android a partir da fonte

Curioso para saber quais gargalos o projeto AOSP cria? Dan compartilha suas descobertas - o que pode surpreender os leitores sobre o que causa e o que não causa gargalos.

Atualização 19/04 12h CT: os tempos de compilação esclarecidos são tempos de compilação do ccache.Atualização 20/04 9h17 CT: O Build 3 certamente não era o RAID 1. Corrigido esse erro.

Em 2012 comecei a construir kernels – e contei com meu confiável Core 2 Quad Q9550 para construí-lo. Se isso não fosse digno de arrepio, então o fato de eu ter feito isso em uma VM dentro do Windows provavelmente garantirá isso para a maioria das pessoas que criam o Android a partir do código-fonte.

Um ambiente Ubuntu virtualizado não funciona tão bem quanto um ambiente nativo e, ah, como isso ficou aparente quando um kernel levou mais de 2 horas para ser construído. Como eu queria começar a construir o Android a partir do código-fonte no ano seguinte, eu sabia que meu hardware atual não funcionaria. cortá-lo - e assim começou uma longa e contínua jornada para encontrar uma maneira de reduzir essa construção cada vez maior tempo.

Desde então, tive a sorte de testar em vários formatos e plataformas. Isso é importante porque as configurações de compilação não são uma situação única para todos no Android. Um desenvolvedor de aplicativos pode não precisar da mesma configuração que um desenvolvedor de jogos. E alguém que constrói apenas kernels pode não precisar gastar tanto quanto alguém que precisa construir uma ROM Android completa a partir do código-fonte em um período muito curto de tempo. E quanto à seleção do sistema operacional – o que pode (e não pode) ser usado agora? Espero explorar isso mais também, especialmente com Windows e Canonical trabalhando para trazer um Bash completo para o Windows 10.

Para começar bem esta série, temos que descobrir onde estão os maiores gargalos potenciais na construção de projetos AOSP a partir da fonte. Não costumamos comprar um PC ou atualizações sem saber onde investir seu dinheiro. Portanto, com base em 3 anos de pesquisa e resultados quantificáveis, estou pronto para compartilhar o que descobri. Agora, a isenção de responsabilidade esperada: essas descobertas são baseadas em experiências pessoais e não podem levar em consideração todas as combinações. Aqueles de vocês com sua própria configuração de compilação, desliguem-se e contem-nos como estão suas compilações! Os tempos também se referem a compilações com o ccache habilitado e preenchido - geralmente era o dobro quando o ccache ainda não estava preenchido.

E/S de disco: Tenho que dar uma gorjeta ao Tom Marshall do Cyanogen - também um membro da equipe Kang - por me apontar nessa direção no ano passado. Sinceramente, não acreditei nele quando ele me disse que isso seria o gargalo na CPU. Mas nos últimos 6 meses consegui comprovar isso com dados quantificáveis. Em CPUs de última geração (como a maioria dos modelos Intel Core i7 para desktop), esse é o maior gargalo que seu sistema enfrentará.

Vamos pegar 4 configurações de compilação nas quais testei. Vou destacar aqui a CPU,

  • Build 1, meu PC “não atualizado”, era um Intel i7-4790K com 32 GB de RAM DDR3-2400, um Samsung 840 Evo 250 GB para minha unidade principal e um Micron P400E 100 GB mais antigo.
  • Build 2, que foi a versão atualizada do Build 1. Agora ostenta um Intel i7-5960X com overclock para 4,0 GHz, 32 GB de RAM DDR4-3200, um SSD Samsung SM951 512 GB AHCI m.2 junto com os dois SSDs anteriores. As especificações completas de construção para isso estão em PCPartPicker.
  • Build 3, uma versão de usuário recente, apresentava um Intel i7-5820K com overclock para 4,2 GHz, 16GB de DDR4-2400 e 2 Samsung 840 EVO 120GB em configuração RAID0 (striped).
  • Build 4, um servidor recente com Intel Xeon E3-1270 v5 em velocidades normais, 32 GB DDR4-2133, um Samsung 950 Pro 512 GB NVMe m.2 junto com 4 SSDs corporativos SATA Samsung em um array RAID5.

Se você apenas olhasse para eles, qual você acha que alcançou o menor tempo de construção? Que tal o segundo? Para minha surpresa, não foi a segunda configuração que levou o menor tempo de construção - foi a terceira configuração, pelo menos pouco menos de 14 minutos para construir o CyanogenMod 13.0. Então certamente a CPU dominante ficaria em segundo lugar, certo? Errado de novo. A Build 4, que acabei de testar, levou pouco mais de 25 minutos! Somente aqui está minha construção atual, 2 minutos mais lenta que um sistema com metade dos núcleos e threads, mas uma matriz SSD de 3 SSDs, enquanto meus SSDs eram independentes. O SM951 também é conhecido por ter problemas de afogamento se ficar muito quente, algo que pode ser um fator muito real neste caso. A primeira e mais lenta compilação levou cerca de 30 minutos, uma das únicas vezes em que construí o CM 13.0; Ouvi falar de configurações de compilação semelhantes em 27.

SSDs também costumavam ser um item difícil de conseguir, então havia muito pouca discussão sobre o assunto. No entanto, os preços caíram drasticamente tanto nos mercados retalhistas como nos mercados de segunda mão durante o último ano. Com SSDs de 120 GB agora abaixo de US$ 50, não é mais a barreira que antes era adicionar um a um sistema. Os discos rígidos tradicionais também farão o trabalho, mas é mais provável que os usuários alcancem esse gargalo antes de outros se não usarem SSDs.

Suspensão da CPUCPU: Quando mencionei acima que o principal gargalo é a E/S de disco, isso pressupõe que nem sempre é o caso - cada uma das compilações que usei apresentava um Intel Core i7. Mas, como descobri no servidor Xeon, o disco acompanha, mas mantém todos os 8 threads da CPU em alta utilização durante os processos de construção mais pesados. E por mais que tente, sem o array RAID que encontramos acima, não acho que meu Haswell-E esteja nem perto de ser totalmente utilizado durante a maior parte do processo de construção. Portanto, se você está procurando o melhor retorno para seu investimento em construção, considere o Intel i7-5820K.

É verdade que é X99 e portanto a placa-mãe pode ser mais cara que uma placa-mãe Z97; mas ainda estamos no primeiro ano do ciclo X99. Espera-se também que os preços do Broadwell-E permaneçam semelhantes aos do Haswell-E após o lançamento, o que significa que você poderá comprar no segmento de entusiastas por quase o mesmo preço de um i7-4790K ou i7-6700K.

Na Intel não há muitos motivos para ir além de 5820K no momento, pois você pode obter tempos de construção impressionantes com ele. Na maioria das vezes, quanto maior a contagem de núcleos/threads abaixo, junto com as velocidades do processador, você terá um tempo de construção mais rápido. Um i7-4770R em um GIGABYTE Brix no ano passado teve uma média de construção de 42 minutos. Embora não seja o mais rápido, ele atendeu às minhas necessidades e me permitiu ter uma configuração dedicada de baixo consumo de energia. Você encontrará o mesmo com as APUs AMD - embora atualmente elas possam não ter um desempenho tão bom quanto suas contrapartes da Intel, elas farão o trabalho facilmente e geralmente a um preço mais baixo do que comprar Intel. Esta é uma situação que estou de olho porque se os rumores forem verdadeiros, então as APUs baseadas em Zen podem diminuir significativamente essa lacuna.

Há um resultado para aqueles de vocês que optariam por remover esses gargalos, que se aplica mais aos usuários domésticos do que ao escritório. O desempenho geral aumentará em um sistema removendo esses gargalos. Os jogadores, em particular, descobrirão que a atualização para resolver esses gargalos também aumentará, em quase todos os casos, o desempenho do jogo. Embora possa não ter obtido o tempo de compilação mais rápido, a segunda compilação trouxe uma surpresa inesperada: um tempo de carregamento de 30 segundos no Justa Causa 3 quando muitos outros reclamavam do tempo de carregamento em minutos. No final, esses tempos de construção são realmente sofisticados e podem ser um exagero para muitos... mas pelo menos agora o argumento de que mais núcleos significarão compilações mais rápidas foi finalmente posto de lado.

Como este é apenas o começo, esperamos que os leitores participem e compartilhem suas experiências de construção em diversas configurações. Como leitor, você deseja ver mais discussões sobre esses tipos de tópicos? Som desligado nos comentários abaixo!