SUGGERIMENTO: compilare tuoi programmi digiunatori con più macchine con processore
Se si dispone di un dual core o una macchina con più processori, allora potete compilare i vostri programmi molto più velocemente su una macchina a singolo processore. Vi mostrerò come è possibile compilare il kernel Linux sulla propria macchina Debian due volte più veloce, impostando il livello di concorrenza.
Per esempio, in un mio precedente post abbiamo visto come misurare la quantità di tempo di un particolare programma necessario per eseguire. In questo esempio, abbiamo visto ci sono voluti circa 10 minuti per compilare un kernel personalizzato 2.6.28 su una Anthlon macchina Dual core AMD64:
# time make-kpkg –append-to-version=-test kernel_image
real 10m58.707s
user 9m38.700s
sys 1m12.013s
Tuttavia, in questo esempio, non ero in modo efficiente utilizzando la potenza di entrambi i processori. Ho semplicemente dato il comando standard "make-kpkg" per compilare il kernel.
Ora vediamo come possiamo sfruttare le nostre macchine dual-core e ci risparmiare tempo prezioso.
# set CONCURRENCY_LEVEL=2
# export CONCURRENCY_LEVEL=2
# time make-kpkg –append-to-version=-test kernel_image
e qui viene il bello - i risultati:
real 5m28.433s
user 4m18.320s
sys 1m13.276s
Come possiamo vedere dai risultati di cui sopra, siamo stati in grado di compilare lo stesso kernel sulla stessa macchina nella metà del tempo - circa 5 minuti.
Come facciamo a scoprire quale numero CONCURRENCY_LEVEL?
Alcuni dicono che si dovrebbe impostare il livello di: Numero di processori nella macchina + 1 e alcuni dicono che si dovrebbe impostare per: numero di processori nel computer. Io personalmente uso il più tardi.
Per scoprire il numero di processori in macchina, dare il seguente comando:
# grep -c ^processor /proc/cpuinfo
2
e quindi è possibile impostare il livello di concorrenza a tutto ciò che è l'output del comando precedente. Nel mio caso è "2".
Ora, cosa succede se si è utilizzato per compilare i vostri programmi / kernel Linux con il classico comando "make" e si desidera utilizzare il livello di concorrenza. In questo caso è possibile utilizzare la semplice flag "-j" come questo:
# make -j2 bzImage
Spero che questo vi aiuterà a risparmiare un po 'di tempo.













8 Maggio 2009 alle 02:23
Per qualche ragione, usando make-kpkg, questo non funziona per me. Il "grep-c ^ processore / proc / cpuinfo" rese 4 processori, e top spettacoli, il 25% utilizzato indipendentemente dal fatto che io ho "export CONCURRENCY_LEVEL = 4". Non so cosa avrei potuto fare in modo diverso ...
Rispondi a questo commento
8 Maggio 2009 alle 06:32
Non importa, ho capito. Ero sudoing e avevo bisogno di sudo-s in modo che l'esportazione era in vigore per l'utente root.
Rispondi a questo commento
24 gennaio 2010 alle 12:23
Grazie per il suggerimento! Questo è grande informazione. Tuttavia, il CONCURRENCY_LEVEL env var non ha funzionato per me. Solo la-j passare a fare la differenza. Stavo correndo sia come utente "root".
Rispondi a questo commento
Admin Rispondi:
16 febbraio 2010 alle 08:00
Il CONCURRENCY_LEVEL = 2 avrebbe dovuto fare la differenza. E 'come l'utilizzo di "-j2". Hai cronometrato la compilation? Quale distribuzione si sta utilizzando? Penso che questo è supportato solo in Debian / Ubuntu. Per non Debian basata su distro è possibile utilizzare flag "j" ...
Rispondi a questo commento
20 Luglio 2010 alle 02:42
Perché sei persone in esecuzione di un compilatore come root? * Sigh *
Rispondi a questo commento
Sodo Rispondi:
21 Luglio, 2010 alle 05:37
Buon punto. Io non sono il programmatore più esperto C e avevo ottenuto un nuovo repository di codice sorgente utilizzando GIT. Questa era la prima volta che ho usato GIT e ho notato i file compilati con successo solo da root. Avrei dovuto notato che i file non erano di proprietà di mio utente non privilegiato. Allora ho cambiato la proprietà dei file e ora la directory di origine compila sotto il mio utente non privilegiato.
Rispondi a questo commento
2 ottobre 2010 alle 18:26
[...] Se si dispone di più computer centrale (come un dual-core), si può quasi raddoppiare la velocità di compilazione del kernel cioè in altre parole ridurre il tempo di compilazione di quasi la metà. [...]
12 Settembre 2011 alle 11:00
Non utilizzare-j per make-kpkg uso CONCURRENCY_LEVEL, o FAIL
Rispondi a questo commento