I maggiori colli di bottiglia durante la creazione di Android dal codice sorgente

Sei curioso di sapere quali colli di bottiglia crea il progetto AOSP? Dan condivide le sue scoperte, che potrebbero sorprendere i lettori su cosa causa e cosa non causa un collo di bottiglia.

Aggiornamento 19/4 12:00 CT: i tempi di compilazione chiariti sono tempi di compilazione ccache.Aggiornamento 20/4 9:17 CT: La build 3 non era certamente RAID 1. Corretto l'errore.

Nel 2012 ho iniziato a creare kernel e mi sono affidato al mio fidato Core 2 Quad Q9550 per realizzarlo. Se ciò non fosse degno di rabbrividire, il fatto di averlo fatto in una VM all'interno di Windows probabilmente lo garantirà per la maggior parte delle persone che creano Android dal sorgente.

Un ambiente Ubuntu virtualizzato non funziona così come un ambiente nativo e oh, quanto doloroso è stato reso evidente quando un kernel ha impiegato più di 2 ore per essere creato. Poiché volevo iniziare a creare Android dal codice sorgente l'anno successivo, sapevo che il mio hardware attuale non l'avrebbe fatto tagliarlo - e così è iniziato un viaggio lungo e ancora in corso per trovare un modo per ridurre quella struttura in continua crescita tempo.

Negli anni successivi ho avuto la fortuna di testare su più formati e piattaforme. Questo è importante poiché le configurazioni di build non sono una situazione valida per tutti con Android. Uno sviluppatore di applicazioni potrebbe non aver bisogno della stessa configurazione dello sviluppatore di giochi. E qualcuno che crea solo kernel potrebbe non aver bisogno di spendere tanto quanto qualcuno che ha bisogno di creare una ROM Android completa dal sorgente in un brevissimo lasso di tempo. E per quanto riguarda la selezione del sistema operativo: cosa può (e cosa non può) essere utilizzato in questo momento? Spero di esplorare di più anche questo, soprattutto con Windows e Canonical al lavoro per portare una Bash completa su Windows 10.

Per dare il via a questa serie nel modo giusto, dobbiamo scoprire dove si trovano i maggiori potenziali colli di bottiglia nella costruzione di progetti AOSP dall'origine. Non capita spesso di acquistare un PC o aggiornamenti senza sapere dove investire i propri soldi. Quindi, sulla base di 3 anni di ricerca e di risultati quantificabili, sono pronto a condividere ciò che ho trovato. Ora il disclaimer previsto: questi risultati si basano su esperienze personali e non possono tenere conto di tutte le combinazioni. Quelli di voi che hanno la propria configurazione di build, si sentano e facci sapere come stanno andando le loro build! I tempi si riferiscono anche alle build con ccache abilitato e popolato: di solito era doppio quando ccache non era ancora popolato.

I/O del disco: Devo fare un complimento a Tom Marshall dei Cyanogen - anche lui a membro del Team Kang - per avermi indirizzato in questa direzione l'anno scorso. Onestamente non gli credevo quando mi disse che sarebbe successo IL collo di bottiglia sulla CPU. Ma negli ultimi 6 mesi sono stato in grado di supportarlo con dati quantificabili. Nelle CPU di fascia alta (come la maggior parte dei modelli desktop Intel Core i7) questo è il collo di bottiglia principale che il tuo sistema sperimenterà.

Prendiamo 4 configurazioni di build su cui ho testato questo. Evidenzierò qui la CPU,

  • La build 1, il mio PC "non aggiornato", era un Intel i7-4790K con 32 GB di RAM DDR3-2400, un Samsung 840 Evo da 250 GB per la mia unità principale e un vecchio Micron P400E da 100 GB.
  • Build 2, che era la versione aggiornata della Build 1. Ora sfoggia un Intel i7-5960X overcloccato a 4,0 GHz, 32 GB di RAM DDR4-3200, un SSD Samsung SM951 da 512 GB AHCI m.2 insieme ai due SSD precedenti. Le specifiche di costruzione complete per questo sono su PCPartPicker.
  • La build 3, una build utente recente, prevedeva un Intel i7-5820K overcloccato a 4,2 GHz, 16 GB di DDR4-2400 e 2 Samsung 840 EVO da 120 GB in configurazione RAID0 (con striping).
  • Build 4, una recente build di server con un Intel Xeon E3-1270 v5 a velocità normali, DDR4-2133 da 32 GB, un Samsung 950 Pro 512 GB NVMe m.2 insieme a 4 SSD aziendali Samsung SATA in un array RAID5.

Se li guardassi, quale penseresti che abbia ottenuto il tempo di costruzione più basso? Che ne dici del secondo? Con mio grande stupore non è stata la seconda configurazione a richiedere il tempo di costruzione più basso: è stata la terza configurazione, a poco meno di 14 minuti per costruire CyanogenMod 13.0. Quindi sicuramente la CPU dominante sarebbe al secondo posto, Giusto? Sbagliato di nuovo. La build 4, su cui ho appena finito di testare, ha richiesto poco più di 25 minuti! Solo qui è dove si trova la mia build attuale, 2 minuti più lenta di un sistema con metà dei core e dei thread ma un array SSD di 3 SSD, mentre i miei SSD erano autonomi. È noto anche che l'SM951 presenta problemi di throttling se fa troppo caldo, qualcosa che potrebbe essere un fattore molto reale in questo caso. La prima e più lenta build ha richiesto circa 30 minuti, una delle poche volte in cui ho creato CM 13.0; Ho sentito parlare di configurazioni di build simili che lo fanno in 27.

Anche gli SSD erano un oggetto difficile da ottenere, quindi c'erano pochissime discussioni sull'argomento. Tuttavia, nell’ultimo anno i prezzi sono diminuiti drasticamente sia nei mercati al dettaglio che in quelli dell’usato. Con gli SSD da 120 GB ora sotto i $ 50 non è più la barriera che una volta aggiungerne uno a un sistema. Anche i dischi rigidi tradizionali faranno il lavoro, ma gli utenti hanno maggiori probabilità di raggiungere questo collo di bottiglia prima degli altri se non utilizzano SSD.

Sospensione della CPUPROCESSORE: Quando ho menzionato sopra che il collo di bottiglia principale è l'I/O del disco, presuppone che potrebbe non essere sempre vero: ciascuna delle build che ho utilizzato presentava un Intel Core i7. Ma come ho scoperto con il server Xeon, il disco tiene il passo ma mantiene tutti gli 8 thread della CPU ad alto utilizzo attraverso i processi di creazione più pesanti. E per quanto possa provare, senza l'array RAID che abbiamo trovato sopra non trovo che il mio Haswell-E sia nemmeno vicino al pieno utilizzo per la maggior parte del processo di creazione. Quindi, se stai cercando il miglior rapporto qualità-prezzo per la tua costruzione, considera Intel i7-5820K.

È vero, è X99 e quindi la scheda madre potrebbe essere più costosa di una scheda madre Z97; ma siamo anche ancora nel primo anno del ciclo X99. Si prevede che anche i prezzi per Broadwell-E rimarranno simili a quelli di Haswell-E al momento del rilascio, il che significa che dovresti essere in grado di acquistare nel segmento degli appassionati quasi allo stesso prezzo di un i7-4790K o i7-6700K.

Su Intel non ci sono molti motivi per andare oltre il 5820K al momento dato che puoi ottenere tempi di costruzione impressionanti. Nella maggior parte dei casi, maggiore è il numero di core/thread riportato di seguito, insieme alla velocità del processore, ti garantiranno tempi di costruzione più rapidi. L'anno scorso un i7-4770R in un GIGABYTE Brix mi ha permesso di costruire in media 42 minuti. Sebbene non fosse il più veloce, si adattava alle mie esigenze e mi permetteva di avere una configurazione dedicata a basso consumo. Troverai lo stesso con le APU AMD: anche se attualmente potrebbero non funzionare come la loro controparte Intel, porteranno a termine facilmente il lavoro e di solito a un prezzo inferiore rispetto all'acquisto di Intel. Questa è una situazione che tengo d'occhio perché se le voci sono vere, le APU basate sullo Zen potrebbero colmare questo divario in modo significativo.

C'è un risultato per quelli di voi che sceglierebbero di rimuovere questi colli di bottiglia, che si applica agli utenti domestici più che all'ufficio. Le prestazioni generali aumenteranno su un sistema rimuovendo questi colli di bottiglia. I giocatori in particolare scopriranno che l'aggiornamento per risolvere questi colli di bottiglia in quasi tutti i casi aumenterà anche le prestazioni del gioco. Anche se potrebbe non aver ottenuto il tempo di costruzione più veloce, quella seconda build ha dato una sorpresa inaspettata: un tempo di caricamento di 30 secondi Giusta causa 3 quando molti altri si lamentavano dei tempi di caricamento in pochi minuti. Alla fine questi tempi di costruzione sono davvero elevati e potrebbero essere eccessivi per molti... ma almeno ora la tesi secondo cui più core significherebbe build più veloci è stata finalmente messa a tacere.

Poiché questo è solo l'inizio, speriamo che i lettori intervengano e condividano le loro esperienze di costruzione su varie configurazioni. Come lettore, vuoi vedere più discussioni su questi tipi di argomenti? Suona nei commenti qui sotto!